示例#1
0
    def load(self, entity_id):
        """
        Loads the metadata of a Service Provider.

        Args:
            entity_id (str): Entity id of the SP (usually a URL or a URN).

        Returns:
            A ServiceProviderMetadata instance.

        Raises
            MetadataNotFoundError: If there is no metadata associated to
                the entity id.
            DeserializationError: If the metadata associated to the entity id
                is not valid.
        """
        entity_id = entity_id.strip()

        fresh_metadata = None

        metadata = self._metadata.get(entity_id, None)
        if not metadata:
            # Try to reload all sources to see if the unknown entity id was added there
            # somewhere.
            logger.debug(
                "Unknown entityId '{}`, reloading all the sources.".format(
                    entity_id))
            self._index_metadata()
        else:
            # We got an known entity id, try to load its metadata the previously known
            # location.
            try:
                fresh_metadata = metadata.loader.load(metadata.location)
                if fresh_metadata.entity_id != entity_id:
                    raise MetadataLoadError
            except MetadataLoadError as e:
                logger.debug(
                    ("{}\n"
                     "Cannot find entityId '{}` at its previous location '{}`"
                     "reloading all the sources").format(
                         e, entity_id, metadata.location))
                self._index_metadata()

        if not fresh_metadata:
            try:
                metadata = self._metadata[entity_id]
                fresh_metadata = metadata.loader.load(metadata.location)
            except (KeyError, MetadataLoadError):
                raise MetadataNotFoundError(entity_id)

            if metadata.entity_id != entity_id:
                raise MetadataNotFoundError(entity_id)
        try:
            self._validators.validate(fresh_metadata.xml)
        except ValidationError as e:
            raise DeserializationError(fresh_metadata.xml, e.details)

        return fresh_metadata
示例#2
0
    def get(self, entity_id):
        entity_id = entity_id.strip()
        for loader in self._loaders:
            try:
                metadata = loader.get(entity_id)
                try:
                    self._validators.validate(metadata.xml)
                    return metadata
                except ValidationError as e:
                    raise DeserializationError(metadata.xml, e.details)
            except MetadataNotFoundError:
                continue

        raise MetadataNotFoundError(entity_id)
示例#3
0
 def get(self, entity_id):
     try:
         return self._metadata[entity_id]
     except KeyError:
         raise MetadataNotFoundError(entity_id)
示例#4
0
 def get(self, entity_id):
     metadata = self._provider.get(entity_id)
     if metadata is None:
         raise MetadataNotFoundError(entity_id)
     return ServiceProviderMetadata(metadata)