Exemple #1
0
    def __init__(self, client, source, target, formats=None):
        super(AniDbService, self).__init__(client, source, target, formats)

        # Construct media mappers
        self._movie_mapper = MovieMapper(self)
        self._show_mapper = ShowMapper(self)
Exemple #2
0
class AniDbService(Service):
    __key__ = 'anidb'

    __databases__ = DATABASES
    __packages__ = PACKAGES

    __services__ = SERVICES

    def __init__(self, client, source, target, formats=None):
        super(AniDbService, self).__init__(client, source, target, formats)

        # Construct media mappers
        self._movie_mapper = MovieMapper(self)
        self._show_mapper = ShowMapper(self)

    def get(self, key, default=None):
        # Retrieve item metadata
        metadata = self.get_metadata(key)

        if metadata is None:
            return default

        # Ensure item is available
        if not self.fetch(key, metadata):
            return default

        # Retrieve item from disk
        return metadata.get()

    def get_metadata(self, key, default=None):
        # Ensure service is loaded
        if not self.load():
            return default

        # Retrieve item metadata
        try:
            return self._collection[key]
        except KeyError:
            return default

    def map(self, key, identifier=None, resolve_mappings=True):
        # Retrieve item
        item = self.get(key)

        if item is None:
            return None

        if isinstance(item, Movie):
            match = self._movie_mapper.match(
                item, identifier,
                resolve_mappings=resolve_mappings
            )
        elif isinstance(item, Show):
            match = self._show_mapper.match(
                item, identifier,
                resolve_mappings=resolve_mappings
            )
        else:
            raise ValueError('Unknown item: %r' % item)

        # Validate match
        if not match or not match.valid:
            if identifier:
                log.warn('[%s/%s] Unable to find mapping for %%r' % (self.source_key, key), identifier, extra={
                    'event': {
                        'module': __name__,
                        'name': 'map.missing_mapping',
                        'key': (self.source_key, key, identifier)
                    }
                })
            else:
                log.warn('[%s/%s] Unable to find mapping' % (self.source_key, key), extra={
                    'event': {
                        'module': __name__,
                        'name': 'map.missing_mapping',
                        'key': (self.source_key, key)
                    }
                })

            return None

        return match

    def titles(self, key):
        pass

    def __getitem__(self, key):
        pass