Checks if the Entry instance includes all the required fields of its
        type. If ``raise_unsupported`` is set to ``True`` it will also check
        for potentially unsupported types.

        If a problem is found, an InvalidStructure exception is raised.

def validate(self, raise_unsupported=False):
        """
        Checks if the Entry instance includes all the required fields of its
        type. If ``raise_unsupported`` is set to ``True`` it will also check
        for potentially unsupported types.

        If a problem is found, an InvalidStructure exception is raised.
        """
        fields = set(self.keys())
        flattened_required_fields = set()
        required_errors = []
        for field in self.required_fields:
            found = False
            if isinstance(field, (list, tuple)):
                # Check all alternatives
                for real_f in field:
                    if real_f in fields:
                        flattened_required_fields.add(real_f)
                        found = True
            else:
                flattened_required_fields.add(field)
                if field in fields:
                    found = True
            if not found:
                required_errors.append(field)
        unsupported_fields = fields - flattened_required_fields \
                - set(self.optional_fields)
        if len(required_errors) or (raise_unsupported
                and len(unsupported_fields)):
            raise exceptions.InvalidStructure("Missing or unsupported fields found",
                    required_fields=required_errors,
                    unsupported_fields=unsupported_fields)