Пример #1
0
 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
Пример #2
0
 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
Пример #3
0
 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,
         )
Пример #4
0
 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,
         )
Пример #5
0
 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,
         )
Пример #6
0
 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 '',
     ))
Пример #7
0
 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)
Пример #8
0
 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)