class TPBClient(object):
	def __init__(self):
		self.http_handler = DefaultHTTPHandler()

	def request(self, keywords):
		LOGGER.info("TPBClient : " + keywords)
		start = time.time()
		url = BASE_URL + quote(keywords) + "?$top=5"

		LOGGER.info("TPBClient URL : " + url)
		http_data = self._http_request(url)
		elapsed = time.time() - start
		LOGGER.info('http request took %.3f s' % (elapsed))
		LOGGER.info(http_data)
		return json.loads(http_data)

	def _http_request(self, url, timeout=None):  
		result = '{}'

		while True:
			try:
				result = self.http_handler.get(url)
				break
			except HTTPHandlerError as error:
				raise
		return result
class RPCClient(object):
	def __init__(self):
		self.session_id = 0
		self.http_handler = DefaultHTTPHandler()
		self.http_handler.set_authentication(TRANSMISSION_URL, TRANSMISSION_USR, TRANSMISSION_PWD)

	def request(self, method, arguments={}):
		query = json.dumps({'method': method, 'arguments': arguments})
		start = time.time()
		http_data = self._http_request(query)
		elapsed = time.time() - start
		LOGGER.info('http request took %.3f s' % (elapsed))
		LOGGER.info(http_data)
		return json.loads(http_data)

	def _http_request(self, query, timeout=None):  
		_session_id = 0
		headers = {'x-transmission-session-id': str(self.session_id)}
		result = '{}'
		request_count = 0

		if timeout == None:
			timeout = DEFAULT_TIMEOUT

		while True:
			try:
				LOGGER.info(json.dumps({
					'url': TRANSMISSION_URL, 'headers': headers, 
					'query': query, 'timeout': timeout}, indent=2))
				result = self.http_handler.request(TRANSMISSION_URL, query, headers, timeout)
				break
			except HTTPHandlerError as error:
				if error.code == 409:
					LOGGER.info('Server responded with 409, trying to set session-id.')
					if request_count > 1:
						raise
					self.session_id = None
					for key in list(error.headers.keys()):
						if key.lower() == 'x-transmission-session-id':
							self.session_id = error.headers[key]
							headers = {'x-transmission-session-id': str(self.session_id)}
					if self.session_id is None:
						raise
				else:
					raise
		return result
	def __init__(self):
		self.http_handler = DefaultHTTPHandler()
	def __init__(self):
		self.session_id = 0
		self.http_handler = DefaultHTTPHandler()
		self.http_handler.set_authentication(TRANSMISSION_URL, TRANSMISSION_USR, TRANSMISSION_PWD)