Ejemplo n.º 1
0
    def fetch_metadata(self, key):
        assert isinstance(key, int)
        logger = get_logger(self, 'fetch_metadata')

        if not self.enabled:
            raise PlexServerException(
                'Unable to query metadata, media connection disabled')

        if key in self.metadata_cache:
            return self.metadata_cache[key]

        metadata_req = requests.get((
            'http://{host}:{port}/library/metadata/{key}').format(
                host=self.host, port=self.port, key=key))

        if metadata_req.status_code != 200:
            raise PlexServerException((
                'Unable to query metadata for {key}:'
                ' [{status_code}] - {reason}').format(
                    key=key,
                    status_code=metadata_req.status_code,
                    reason=metadata_req.reason))

        self.metadata_cache[key] = metadata_req.text
        return self.metadata_cache[key]
Ejemplo n.º 2
0
    def check_connection(self):
        # Check if medialookup is enabled, and test the connection if so
        logger = get_logger(self, 'check_connection')
        logger.debug("Called check_connection")
        try:
            check_req = requests.get('http://{host}:{port}/servers'.format(
                host=self.host, port=self.port))

            check_soup = BeautifulSoup(check_req.text)

            server_info = check_soup('server')[0]

            self.server_info = {}
            self.server_info['name']    = server_info['name']
            self.server_info['host']    = server_info['host']
            self.server_info['port']    = server_info['port']
            self.server_info['address'] = server_info['address']
            self.server_info['id']      = server_info['machineidentifier']
            self.server_info['version'] = server_info['version']

            self.enabled = True

            logger.info("Media connection enabled!")

        except requests.ConnectionError as err:
            logger.error('Error checking media server: ' + str(err))
            self.enabled = False
            logger.warning("Media connection disabled!")
Ejemplo n.º 3
0
    def parse_file(self, real_file_name):
        logger = get_logger(self, "parse_file")

        logger.debug("Called parse_file with: {0}".format(real_file_name))

        lines = []
        with open(real_file_name, "rU") as file_handle:
            for line_body in self._parse_base(real_file_name, file_handle):
                if not self.line_body_filter(line_body):
                    continue

                lines.append(line_body)

        return lines
Ejemplo n.º 4
0
def plex_media_object_batch(conn, keys, batch_size=20):
    """
    Batch fetch metadata from media server. :)
    Can be used with episodes to get more info by passing the series_key as an
    object to get.
    """
    if not isinstance(keys, (list, tuple)):
        raise TypeError("Required argument 'keys' must be a list or tuple.")

    if conn is None:
        raise TypeError("Argument 'conn' must not be None")

    logger = get_logger('plex_media_object_batch')
    logger.debug("Fetching {0} media objects".format(len(keys)))

    results = {}
    all_keys = keys[:]

    while len(all_keys) > 0:
        working_keys = all_keys[:batch_size]
        all_keys = all_keys[batch_size:]
        req = 'library/metadata/' + ','.join(map(str, working_keys))

        logger.debug("-> {0}".format(', '.join(map(str, working_keys))))

        xml = conn.fetch(req)
        soup = BeautifulSoup(xml)

        for container_tag in soup.find_all(ratingkey=True):
            container_key = container_tag['ratingkey']
            if container_key in results:
                continue

            try:
                ## --TODO--: Extract the soup object, suitable for passing down
                ##   to plex_media_object
                ## FIX: Just send it all, the media objects are smarter...
                results[container_key] = plex_media_object(
                    conn, int(container_key), xml, soup)
            except PlexMediaException:
                pass

    logger.debug("Fetched {0} media objects".format(len(results)))

    return results
Ejemplo n.º 5
0
    def fetch(self, path):
        logger = get_logger(self, 'fetch')

        if not self.enabled:
            raise PlexServerException(
                'Unable to fetch data, media connection disabled')

        if path in self.page_cache:
            return self.page_cache[path]

        page_req = requests.get('http://{host}:{port}/{path}'.format(
            host=self.host, port=self.port, path=path))

        if page_req.status_code != 200:
            raise PlexServerException((
                'Unable to query path {path}:'
                ' [{status_code}] - {reason}').format(
                    path=path, status_code=page_req.status_code,
                    reason=page_req.reason))

        self.page_cache[path] = page_req.text
        return self.page_cache[path]