import falcon from falcon_cors import CORS from 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())