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)
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
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
def test_http_code_description(p): for (http_code, result) in iteritems(p): assert sut.http_code_description(http_code) == result
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