예제 #1
0
    def test_http_code_description(self):
        test_cases = {
            None: None,
            '': None,
            '123': None,
            '12.3': None,
            '-123': None,
            '-12.3': None,
            '300': 'Multiple Choices',
            0: None,
            123: None,
            12.3: None,
            -123: None,
            -12.3: None,
            300: 'Multiple Choices',
            451: '(Redirect, Unavailable For Legal Reasons)',
            497: 'HTTP to HTTPS',
            499: '(Client Closed Request, Token required)',
            600: None,
        }

        unicode_test_cases = {
            u'': None,
            u'123': None,
            u'12.3': None,
            u'-123': None,
            u'-12.3': None,
            u'300': 'Multiple Choices',
        }

        for test in test_cases, unicode_test_cases:
            for (http_code, result) in iteritems(test):
                self.assertEqual(http_code_description(http_code), result)
예제 #2
0
    def _request(self, method='get', params=None, data=None, files=None, cookies=None):

        if time.time() > self.last_time + 1800 or not self.auth:
            self.last_time = time.time()
            self._get_auth()

        text_params = str(params)
        text_data = str(data)
        text_files = str(files)
        log.debug(
            '{name}: Requested a {method} connection to {url} with'
            ' params: {params} Data: {data} Files: {files}', {
                'name': self.name,
                'method': method.upper(),
                'url': self.url,
                'params': text_params[0:99] + '...' if len(text_params) > 102 else text_params,
                'data': text_data[0:99] + '...' if len(text_data) > 102 else text_data,
                'files': text_files[0:99] + '...' if len(text_files) > 102 else text_files,
            }
        )

        if not self.auth:
            log.warning('{name}: Authentication Failed', {'name': self.name})

            return False
        try:
            self.response = self.session.request(method, self.url, params=params, data=data, files=files,
                                                 cookies=cookies, timeout=120, verify=False)
        except (requests.exceptions.MissingSchema, requests.exceptions.InvalidURL) as error:
            log.warning('{name}: Invalid Host: {error}', {'name': self.name, 'error': error})
            return False
        except requests.exceptions.RequestException as error:
            log.warning('{name}: Error occurred during request: {error}',
                        {'name': self.name, 'error': error})
            return False
        except Exception as error:
            log.error('{name}: Unknown exception raised when sending torrent to'
                      ' {name}: {error}', {'name': self.name, 'error': error})
            return False

        if self.response.status_code == 401:
            log.error('{name}: Invalid Username or Password,'
                      ' check your config', {'name': self.name})
            return False

        code_description = http_code_description(self.response.status_code)

        if code_description is not None:
            log.info('{name}: {code}',
                     {'name': self.name, 'code': code_description})
            return False

        log.debug('{name}: Response to {method} request is {response}', {
            'name': self.name,
            'method': method.upper(),
            'response': self.response.text[0:1024] + '...' if len(self.response.text) > 1027 else self.response.text
        })

        return True
예제 #3
0
    def _request(self, method='get', params=None, data=None, files=None, cookies=None):

        if time.time() > self.last_time + 1800 or not self.auth:
            self.last_time = time.time()
            self._get_auth()

        text_params = str(params)
        text_data = str(data)
        text_files = str(files)
        log.debug(
            '{name}: Requested a {method} connection to {url} with'
            ' params: {params} Data: {data} Files: {files}', {
                'name': self.name,
                'method': method.upper(),
                'url': self.url,
                'params': text_params[0:99] + '...' if len(text_params) > 102 else text_params,
                'data': text_data[0:99] + '...' if len(text_data) > 102 else text_data,
                'files': text_files[0:99] + '...' if len(text_files) > 102 else text_files,
            }
        )

        if not self.auth:
            log.warning('{name}: Authentication Failed', {'name': self.name})

            return False
        try:
            self.response = self.session.request(method, self.url, params=params, data=data, files=files,
                                                 cookies=cookies, timeout=120, verify=False)
        except (requests.exceptions.MissingSchema, requests.exceptions.InvalidURL) as error:
            log.warning('{name}: Invalid Host: {error}', {'name': self.name, 'error': error})
            return False
        except requests.exceptions.RequestException as error:
            log.warning('{name}: Error occurred during request: {error}',
                        {'name': self.name, 'error': error})
            return False
        except Exception as error:
            log.error('{name}: Unknown exception raised when sending torrent to'
                      ' {name}: {error}', {'name': self.name, 'error': error})
            return False

        if self.response.status_code == 401:
            log.error('{name}: Invalid Username or Password,'
                      ' check your config', {'name': self.name})
            return False

        code_description = http_code_description(self.response.status_code)

        if code_description is not None:
            log.info('{name}: {code}',
                     {'name': self.name, 'code': code_description})
            return False

        log.debug('{name}: Response to {method} request is {response}', {
            'name': self.name,
            'method': method.upper(),
            'response': self.response.text[0:1024] + '...' if len(self.response.text) > 1027 else self.response.text
        })

        return True
예제 #4
0
    def _sendNMA(self,
                 nma_api=None,
                 nma_priority=None,
                 event=None,
                 message=None,
                 force=False):

        title = 'Medusa'

        if not app.USE_NMA and not force:
            return False

        if nma_api is None:
            nma_api = app.NMA_API
        elif isinstance(nma_api, text_type):
            nma_api = [nma_api]

        if nma_priority is None:
            nma_priority = app.NMA_PRIORITY

        batch = False

        p = pynma.PyNMA()
        keys = nma_api
        p.addkey(keys)

        if len(keys) > 1:
            batch = True

        log.debug(
            u'NMA: Sending notice with details: event="{0}, message="{1}", priority={2}, batch={3}',
            event, message, nma_priority, batch)
        response = p.push(application=title,
                          event=event,
                          description=message,
                          priority=nma_priority,
                          batch_mode=batch)

        response_status_code = response[','.join(nma_api)][u'code']
        log_message = u'NMA: Could not send notification to NotifyMyAndroid.'

        if response_status_code == u'200':
            log.info(u'NMA: Notification sent to NotifyMyAndroid')
            return True
        elif response_status_code == u'402':
            log.info(u'{0} Maximum number of API calls per hour exceeded',
                     log_message)
        elif response_status_code == u'401':
            log.warning(u'{0} The apikey provided is not valid', log_message)
        elif response_status_code == u'400':
            log.error(
                u'{0} Data supplied is in the wrong format, invalid length or null',
                log_message)
        else:
            log.warning(u'{0} Error: {1}', log_message,
                        http_code_description(response_status_code))
        return False
예제 #5
0
def test_http_code_description(p):
    for (http_code, result) in iteritems(p):
        assert sut.http_code_description(http_code) == result
예제 #6
0
    def _request(self, method='get', params=None, data=None, files=None, cookies=None):

        if time.time() > self.last_time + 1800 or not self.auth:
            self.last_time = time.time()
            self._get_auth()

        text = str(data)
        log.debug(
            '{name}: Requested a {method} connection to {url} with'
            ' params: {params} Data: {data}', {
                'name': self.name,
                'method': method.upper(),
                'url': self.url,
                'params': params,
                'data': text[0:99] + '...' if len(text) > 102 else text
            }
        )

        if not self.auth:
            log.warning('{name}: Authentication Failed', {'name': self.name})

            return False
        try:
            self.response = self.session.__getattribute__(method)(self.url, params=params, data=data, files=files,
                                                                  cookies=cookies, timeout=120, verify=False)
        except requests.exceptions.ConnectionError as msg:
            log.error('{name}: Unable to connect {error}',
                      {'name': self.name, 'error': msg})
            return False
        except (requests.exceptions.MissingSchema, requests.exceptions.InvalidURL):
            log.error('{name}: Invalid Host', {'name': self.name})
            return False
        except requests.exceptions.HTTPError as msg:
            log.error('{name}: Invalid HTTP Request {error}',
                      {'name': self.name, 'error': msg})
            return False
        except requests.exceptions.Timeout as msg:
            log.warning('{name}: Connection Timeout {error}',
                        {'name': self.name, 'error': msg})
            return False
        except Exception as msg:
            log.error('{name}: Unknown exception raised when send torrent to'
                      ' {name} : {error}', {'name': self.name, 'error': msg})
            return False

        if self.response.status_code == 401:
            log.error('{name}: Invalid Username or Password,'
                      ' check your config', {'name': self.name})
            return False

        code_description = http_code_description(self.response.status_code)

        if code_description is not None:
            log.info('{name}: {code}',
                     {'name': self.name, 'code': code_description})
            return False

        log.debug('{name}: Response to {method} request is {response}', {
            'name': self.name,
            'method': method.upper(),
            'response': self.response.text
        })

        return True