This repository has been archived by the owner on Jan 13, 2022. It is now read-only.
/
server.py
91 lines (78 loc) · 2.7 KB
/
server.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import falcon
from falcon_cors import CORS
from event_controller import EventController
event_controller = EventController()
class SearchEventResource:
def on_post(self, req, resp):
j = req.media
event_controller.create_search(
query=j['query'],
session_uuid=j['session_uuid']
)
resp.status = falcon.HTTP_201
class SearchRatingEventResource:
def on_post(self, req, resp):
j = req.media
try:
event_controller.create_search_rating(
query=j['query'],
relevant=j['relevant']
)
resp.status = falcon.HTTP_201
except ValueError:
resp.body = '{"message": "Rating must be True or False"}'
resp.status = falcon.HTTP_400
class ResultClickEventResource:
def on_post(self, req, resp):
j = req.media
event_controller.create_result_click(
session_uuid=j['session_uuid'],
result_uuid=j['result_uuid'],
query=j['query'],
rank=j['result_rank']
)
resp.status = falcon.HTTP_201
class DetailEventResource:
def on_post(self, req, resp):
j = req.media
try:
event_controller.create_detail_event(
event=j['event_type'],
result_uuid=j['result_uuid']
)
resp.status = falcon.HTTP_201
except KeyError:
valid_events = event_controller.list_valid_detail_events()
resp.body = \
'{{"message": "Invalid event_type. Valid types: {}"}}' \
.format(valid_events)
resp.status = falcon.HTTP_400
class RedocResource:
def on_get(self, req, resp):
resp.status = falcon.HTTP_200
resp.content_type = 'text/html'
with open('docs/redoc.html', 'r') as f:
resp.body = f.read()
class OpenAPISpecResource:
def on_get(self, req, resp):
resp.status = falcon.HTTP_200
resp.content_type = 'text/html'
with open('docs/swagger.yaml', 'r') as f:
resp.body = f.read()
origins = [
'https://ccsearch.creativecommons.org',
'https://ccsearch-dev.creativecommons.org',
'https://search.creativecommons.org'
]
cors = CORS(
allow_origins_list=origins,
allow_all_methods=True,
allow_all_headers=True
)
api = falcon.API(middleware=[cors.middleware])
api.add_route('/', RedocResource())
api.add_route('/swagger.yaml', OpenAPISpecResource())
api.add_route('/search_event', SearchEventResource())
api.add_route('/search_rating_event', SearchRatingEventResource())
api.add_route('/result_click_event', ResultClickEventResource())
api.add_route('/detail_page_event', DetailEventResource())