def links(self, uri, arguments): links = {} arguments['per_page'] = [self.per_page] if self.page > 1 and self.page <= self.pages: arguments['page'] = [1] links['first'] = '{}?{}'.format(uri, utils.url_encode_tornado_arguments(arguments)) arguments['page'] = [self.page - 1] links['prev'] = '{}?{}'.format(uri, utils.url_encode_tornado_arguments(arguments)) if self.page >= 1 and self.page < self.pages: arguments['page'] = [self.page + 1] links['next'] = '{}?{}'.format(uri, utils.url_encode_tornado_arguments(arguments)) if self.page < self.pages and self.pages > 1: arguments['page'] = [self.pages] links['last'] = '{}?{}'.format(uri, utils.url_encode_tornado_arguments(arguments)) return links
def es(self, url, query={}, body={}): http_client = AsyncHTTPClient() if not url.startswith('/'): url = '/'+url for arg in query: if not isinstance(query[arg], list): query[arg] = [query[arg]] try: response = yield http_client.fetch( 'http://{}{}?{}'.format( config['api']['elasticsearch'], url, utils.url_encode_tornado_arguments(query) \ if query else '', ), method='POST' if body else 'GET', body=utils.json_dumps(body) if body else None, ) return utils.json_loads(response.body) except HTTPError as e: try: extra = utils.json_loads(e.response.body) except: extra = {'error': e.response.body.decode('utf-8')} raise exceptions.Elasticsearch_exception( e.code, extra, )
def es(self, url, query={}, body={}): http_client = AsyncHTTPClient() if not url.startswith('/'): url = '/' + url for arg in query: if not isinstance(query[arg], list): query[arg] = [query[arg]] try: response = yield http_client.fetch( 'http://{}{}?{}'.format( config['api']['elasticsearch'], url, utils.url_encode_tornado_arguments(query) \ if query else '', ), method='POST' if body else 'GET', body=utils.json_dumps(body) if body else None, ) return utils.json_loads(response.body) except HTTPError as e: try: extra = utils.json_loads(e.response.body) except: extra = {'error': e.response.body.decode('utf-8')} raise exceptions.Elasticsearch_exception( e.code, extra, )
async def es_get(self, url, query={}, body={}): http_client = AsyncHTTPClient() if not url.startswith('/'): url = '/' + url for arg in query: if not isinstance(query[arg], list): query[arg] = [query[arg]] try: response = await http_client.fetch( 'http://{}{}?{}'.format( config['api']['elasticsearch'], url, utils.url_encode_tornado_arguments(query) \ if query else '', connect_timeout=2.0, request_timeout=2.0, ), method='POST' if body else 'GET', headers={ 'Content-Type': 'application/json', }, body=utils.json_dumps(body) if body else None, ) return utils.json_loads(response.body) except HTTPError as e: try: extra = utils.json_loads(e.response.body) if e.code == 404: return extra except: extra = {'error': e.response.body.decode('utf-8')} raise exceptions.Elasticsearch_exception( e.code, extra, )
def get(self, show_id): show = yield self.client.get('/shows/{}'.format(show_id)) if not show: raise HTTPError(404, 'Unknown show') self.redirect('/show/{}/{}{}'.format( show_id, utils.slugify(show['title']), '?'+utils.url_encode_tornado_arguments(self.request.arguments) \ if self.request.arguments else '', ))
async def get(self): httpclient = AsyncHTTPClient() tvmaze = self.get_argument('tvmaze', None) if tvmaze: url = 'https://api.tvmaze.com/shows/{}'.format(tvmaze) else: url = 'https://api.tvmaze.com/lookup/shows?{}'.format( utils.url_encode_tornado_arguments(self.request.arguments) ) response = await httpclient.fetch(url, raise_error=False) if 200 <= response.code <= 399: self.write(response.body) else: raise HTTPError(response.code, response.body)
async def get(self, show_id=None): if show_id: show = await self.get_show(show_id) self.write_object(show) else: q = self.get_argument('q', None) title = self.get_argument('title', None) title_suggest = self.get_argument('title_suggest', None) if q or title or title_suggest: shows = await self.search_show() self.write_object(shows) else: shows = await self.get_shows() if shows: logging.info(self.request.query_arguments) self.request.query_arguments['from_id'] = [ str(shows[-1]['id']) ] logging.info(self.request.query_arguments) n = urljoin(config['api']['base_url'], self.request.path ) + '?' + utils.url_encode_tornado_arguments( self.request.query_arguments) self.set_header('Link', f'<{n}>; rel="next"') self.write_object(shows)