This repository has been archived by the owner on Jan 25, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathquery_endpoint.py
77 lines (61 loc) · 2.38 KB
/
query_endpoint.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from aiohttp import web
import hive_handler
import os
from prometheus_client import start_http_server, Counter
handled_Requests = Counter('hive_query_requests_handled', 'counts the hive query requests partitioned by record type and code', ['record', 'code'])
try:
os.environ['token']
except Exception:
raise(ValueError("token not set"))
def parse_params(request):
query = request.rel_url.query
params = {}
try:
params['limit'] = query['limit']
except KeyError:
params['limit'] = 100
try:
params['where'] = query['where']
except KeyError:
params['where'] = 'True'
return params
@web.middleware
async def metrics_middleware(request, handler):
response = await handler(request)
handled_Requests.labels(request.path[1:], response.status).inc()
return response
@web.middleware
async def check_token_middleware(request, handler):
if request.headers.get('access-token') != os.environ['token']:
print(request.headers.get('access-token'))
return web.json_response({'error': 'not_allowed'}, status=401)
return await handler(request)
async def handle_user(request):
params = parse_params(request)
data = hive_handler.fetch_users(limit=params['limit'], where=params['where'])
return web.json_response(data)
async def handle_items(request):
params = parse_params(request)
data = hive_handler.fetch_items(limit=params['limit'], where=params['where'])
return web.json_response(data)
async def handle_interactions(request):
params = parse_params(request)
data = hive_handler.fetch_interactions(limit=params['limit'], where=params['where'])
return web.json_response(data)
async def handle_target_users(request):
params = parse_params(request)
data = hive_handler.fetch_target_users(limit=params['limit'], where=params['where'])
return web.json_response(data)
async def handle_target_items(request):
params = parse_params(request)
data = hive_handler.fetch_target_items(limit=params['limit'], where=params['where'])
return web.json_response(data)
hive_handler.init()
app = web.Application(middlewares=[metrics_middleware,check_token_middleware])
app.router.add_get('/users', handle_user)
app.router.add_get('/items', handle_items)
app.router.add_get('/interactions', handle_interactions)
app.router.add_get('/target_users', handle_target_users)
app.router.add_get('/target_items', handle_target_items)
start_http_server(3004)
web.run_app(app,port=3003)