def get_callback_url(self): if self.callback and self.verifier: # Append the oauth_verifier. parts = urlparse(self.callback) scheme, netloc, path, params, query, fragment = parts[:6] if query: query = '%s&oauth_verifier=%s' % (query, self.verifier) else: query = 'oauth_verifier=%s' % self.verifier return urlunparse((scheme, netloc, path, params, query, fragment)) return self.callback
def torrentAction(method, arguments): global session_id, host_url username = lazylibrarian.CONFIG['TRANSMISSION_USER'] password = lazylibrarian.CONFIG['TRANSMISSION_PASS'] if host_url: if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug("Using existing host %s" % host_url) else: host = lazylibrarian.CONFIG['TRANSMISSION_HOST'] port = check_int(lazylibrarian.CONFIG['TRANSMISSION_PORT'], 0) if not host or not port: logger.error( 'Invalid transmission host or port, check your config') return False if not host.startswith("http://") and not host.startswith("https://"): host = 'http://' + host if host.endswith('/'): host = host[:-1] # Fix the URL. We assume that the user does not point to the RPC endpoint, # so add it if it is missing. parts = list(urlparse(host)) if parts[0] not in ("http", "https"): parts[0] = "http" if ':' not in parts[1]: parts[1] += ":%s" % port if not parts[2].endswith("/rpc"): parts[2] += "/transmission/rpc" host_url = urlunparse(parts) auth = (username, password) if username and password else None proxies = proxyList() timeout = check_int(lazylibrarian.CONFIG['HTTP_TIMEOUT'], 30) # Retrieve session id if session_id: if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Using existing session_id %s' % session_id) else: response = requests.get(host_url, auth=auth, proxies=proxies, timeout=timeout) if response is None: logger.error("Error getting Transmission session ID") return # Parse response if response.status_code == 401: if auth: logger.error( "Username and/or password not accepted by Transmission") else: logger.error("Transmission authorization required") return elif response.status_code == 409: session_id = response.headers['x-transmission-session-id'] if not session_id: logger.error("Expected a Session ID from Transmission, got %s" % response.status_code) return # Prepare next request headers = {'x-transmission-session-id': session_id} data = {'method': method, 'arguments': arguments} try: response = requests.post(host_url, json=data, headers=headers, proxies=proxies, auth=auth, timeout=timeout) if response.status_code == 409: session_id = response.headers['x-transmission-session-id'] logger.debug("Retrying with new session_id %s" % session_id) headers = {'x-transmission-session-id': session_id} response = requests.post(host_url, json=data, headers=headers, proxies=proxies, auth=auth, timeout=timeout) if not str(response.status_code).startswith('2'): logger.error("Expected a response from Transmission, got %s" % response.status_code) return try: res = response.json() except ValueError: logger.error("Expected json, Transmission returned %s" % response.text) res = '' return res except Exception as e: logger.error('Transmission %s: %s' % (type(e).__name__, str(e))) return
def torrentAction(method, arguments): global session_id, host_url username = lazylibrarian.CONFIG['TRANSMISSION_USER'] password = lazylibrarian.CONFIG['TRANSMISSION_PASS'] if host_url: if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug("Using existing host %s" % host_url) else: host = lazylibrarian.CONFIG['TRANSMISSION_HOST'] port = check_int(lazylibrarian.CONFIG['TRANSMISSION_PORT'], 0) if not host or not port: res = 'Invalid transmission host or port, check your config' logger.error(res) return False, res if not host.startswith("http://") and not host.startswith("https://"): host = 'http://' + host if host.endswith('/'): host = host[:-1] # Fix the URL. We assume that the user does not point to the RPC endpoint, # so add it if it is missing. parts = list(urlparse(host)) if parts[0] not in ("http", "https"): parts[0] = "http" if ':' not in parts[1]: parts[1] += ":%s" % port if not parts[2].endswith("/rpc"): parts[2] += "/transmission/rpc" host_url = urlunparse(parts) auth = (username, password) if username and password else None proxies = proxyList() timeout = check_int(lazylibrarian.CONFIG['HTTP_TIMEOUT'], 30) # Retrieve session id if session_id: if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Using existing session_id %s' % session_id) else: response = requests.get(host_url, auth=auth, proxies=proxies, timeout=timeout) if response is None: res = "Error getting Transmission session ID" logger.error(res) return False, res # Parse response if response.status_code == 401: if auth: res = "Username and/or password not accepted by Transmission" else: res = "Transmission authorization required" logger.error(res) return False, res elif response.status_code == 409: session_id = response.headers['x-transmission-session-id'] if not session_id: res = "Expected a Session ID from Transmission, got %s" % response.status_code logger.error(res) return False, res # Prepare next request headers = {'x-transmission-session-id': session_id} data = {'method': method, 'arguments': arguments} try: response = requests.post(host_url, json=data, headers=headers, proxies=proxies, auth=auth, timeout=timeout) if response.status_code == 409: session_id = response.headers['x-transmission-session-id'] logger.debug("Retrying with new session_id %s" % session_id) headers = {'x-transmission-session-id': session_id} response = requests.post(host_url, json=data, headers=headers, proxies=proxies, auth=auth, timeout=timeout) if not str(response.status_code).startswith('2'): res = "Expected a response from Transmission, got %s" % response.status_code logger.error(res) return False, res try: res = response.json() except ValueError: res = "Expected json, Transmission returned %s" % response.text logger.error(res) return False, res return res, '' except Exception as e: res = 'Transmission %s: %s' % (type(e).__name__, str(e)) logger.error(res) return False, res