Exemplo n.º 1
0
    def _request(self, method, url, lang=None, **kwargs):
        self.config['headers'].update({'Content-type': 'application/json'})
        self.config['headers']['Authorization'] = 'Bearer {}'.format(
            self.jwt_token)
        self.config['headers'].update(
            {'Accept-Language': lang or self.config['language']})

        # get response from theTVDB
        try:
            resp = WebSession(cache=self.config['cache_enabled']).request(
                method,
                urlparse.urljoin(self.config['api']['base'], url),
                headers=self.config['headers'],
                timeout=sickrage.app.config.indexer_timeout,
                **kwargs)
        except Exception as e:
            raise tvdb_error(str(e))

        # handle requests exceptions
        try:
            if resp.status_code == 401:
                raise tvdb_unauthorized(resp.json()['Error'])
            elif resp.status_code >= 400:
                raise tvdb_error(resp.json()['Error'])
        except JSONDecodeError:
            try:
                resp.raise_for_status()
            except RequestException as e:
                raise tvdb_error(str(e))

        return to_lowercase(resp.json())
Exemplo n.º 2
0
    def _request(self, method, url, lang=None, retries=3, **kwargs):
        self.config['headers'].update({'Content-type': 'application/json'})
        self.config['headers']['Authorization'] = 'Bearer {}'.format(self.jwt_token)
        self.config['headers'].update({'Accept-Language': lang or self.config['language']})
        self.config['headers'].update({'Accept': 'application/vnd.thetvdb.v{}'.format(self.config['api']['version'])})

        for i in range(0, retries):
            try:
                # get response from theTVDB
                resp = WebSession(cache=self.config['cache_enabled']).request(
                    method, urljoin(self.config['api']['base'], url), headers=self.config['headers'],
                    timeout=sickrage.app.config.indexer_timeout, **kwargs
                )
            except requests.exceptions.HTTPError as e:
                status_code = e.response.status_code
                error_message = e.response.text

                if 'application/json' in e.response.headers.get('content-type', ''):
                    error_message = e.response.json().get('Error', error_message)

                if status_code == 401:
                    raise tvdb_unauthorized(error_message)

                if i < retries - 1:
                    continue

                raise tvdb_error(error_message)

            return to_lowercase(resp.json())
Exemplo n.º 3
0
    def get_token(self, username=None, password=None, plex_server_token=None):
        if plex_server_token:
            self.headers['X-Plex-Token'] = plex_server_token

        if 'X-Plex-Token' in self.headers:
            return True

        if not (username and password):
            return True

        sickrage.app.log.debug('PLEX: fetching plex.tv credentials for user: '******'user[login]': username,
            'user[password]': password
        }

        resp = WebSession().post('https://plex.tv/users/sign_in.json', data=params, headers=self.headers)

        try:
            data = resp.json()
        except ValueError:
            sickrage.app.log.debug("PLEX: No data returned from plex.tv when attempting to fetch credentials")
            self.headers.pop('X-Plex-Token', '')
            return False

        if data and 'error' in data:
            sickrage.app.log.debug('PLEX: Error fetching credentials from from plex.tv for user %s: %s' % (username, data['error']))
            self.headers.pop('X-Plex-Token', '')
            return False
        elif data and 'user' in data:
            self.headers['X-Plex-Token'] = data['user']['authentication_token']

        return 'X-Plex-Token' in self.headers
Exemplo n.º 4
0
    def _request(self, method, url, lang=None, **kwargs):
        self.config['headers'].update(
            {'Authorization': 'Bearer {}'.format(self.jwt_token)})
        self.config['headers'].update({'Content-type': 'application/json'})
        self.config['headers'].update(
            {'Accept-Language': lang or self.config['language']})
        self.config['headers'].update({
            'Accept':
            'application/vnd.thetvdb.v{}'.format(self.config['api']['version'])
        })

        if not self.health:
            return None

        resp = WebSession(cache=self.config['cache_enabled']).request(
            method,
            urljoin(self.config['api']['base'], url),
            headers=self.config['headers'],
            timeout=sickrage.app.config.indexer_timeout,
            verify=False,
            **kwargs)

        if resp and resp.content:
            try:
                data = resp.json()
            except ValueError:
                sickrage.app.log.debug("Unable to parse data from TheTVDB")
                return None

            return to_lowercase(data)

        if resp is not None:
            if resp.status_code == 401:
                raise tvdb_unauthorized(resp.text)
            elif resp.status_code == 504:
                sickrage.app.log.debug("Unable to connect to TheTVDB")
                return None

            if 'application/json' in resp.headers.get('content-type', ''):
                err_msg = resp.json().get('Error', resp.text)
                sickrage.app.log.debug(
                    "Unable to get data from TheTVDB, Code: {code} Error: {err_msg!r}"
                    .format(code=resp.status_code, err_msg=err_msg))
                return None
Exemplo n.º 5
0
    def _check_for_new_version(self):
        from distutils.version import StrictVersion
        url = "https://pypi.python.org/pypi/{}/json".format('sickrage')
        resp = WebSession().get(url)
        versions = resp.json()["releases"].keys()
        versions.sort(key=StrictVersion, reverse=True)

        try:
            return versions[0]
        except Exception:
            return self._find_installed_version()
Exemplo n.º 6
0
    def _check_for_new_version(self):
        from distutils.version import LooseVersion
        url = "https://pypi.org/pypi/{}/json".format('sickrage')

        try:
            resp = WebSession().get(url)
            versions = resp.json()["releases"].keys()
            versions = [x for x in versions if 'dev' not in x]
            versions.sort(key=LooseVersion, reverse=True)
            return versions[0]
        except Exception:
            return self._find_installed_version()