Exemplo n.º 1
0
    def full_lookup(self, path):
        if self.media_id is not None:
            log.debug("Have IMDB ID, no further lookup necessary for {!r}", self)
            return complete(self)

        path = pathlib.Path(path)
        nfo = path.with_suffix('.nfo')

        log.debug("Attempting NFO read {!r}", nfo)
        try:
            e = lxml.etree.fromstring(nfo.open('rb').read())
        except lxml.etree.XMLSyntaxError as e:
            log.warning("Error reading XML for {!r} {}", nfo, e)
            return convoluted_imdb_lookup(self)
        except FileNotFoundError:
            log.debug("No nfo found, doing lookup")
            return convoluted_imdb_lookup(self)
        else:
            def attr(a):
                try:
                    return e.xpath('./{}'.format(a))[0].text
                except IndexError:
                    return None

            title = attr('title')
            year = attr('year')
            media_id = attr('id')
            genres = e.xpath('./genre/text()')

            new = {}
            if title:
                new['title'] = title
            if year:
                new['year'] = int(year)
            if media_id:
                new['media_id'] = media_id
            if genres:
                new['genres'] = genres

            if any([title is None, year is None, media_id is None, not genres]):
                # we'll do the IMDB lookup, but try and fill out with any
                # information we did have
                return convoluted_imdb_lookup(self._replace(**new))

            return complete(self._replace(**new))
Exemplo n.º 2
0
    def from_path(cls, path):
        path = pathlib.Path(path)

        self = cls(media_id=None, title=None, season=None, episode=None, year=None, genres=[]).scan_fs(path)
        lookups = self.guessit(path)
        if not lookups[0].complete:
            n = [l.full_lookup(str(path)) for l in lookups]
        else:
            n = [complete(l) for l in lookups]
        return n