Source code for controllers.rest_eventsearch_api

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from rest import json_response
from rest import CORS_DEFAULT_ALLOW_ORIGIN, RESTControllerSkeleton
from events import EventsController


[docs]class EventSearchApiController(RESTControllerSkeleton): """ RESTful Controller for ``/api/eventsearch`` endpoint """ def __init__(self, *args, **kwargs): RESTControllerSkeleton.__init__(self, *args, **kwargs) self.ec_instance = EventsController()
[docs] def render_GET(self, request): """ HTTP GET implementation. .. seealso:: * *querytype* Parameter – :ref:`event_search_parameters-label` * *flags* Parameter – :ref:`event_format-label` Args: request (twisted.web.server.Request): HTTP request object Returns: HTTP response with headers .. http:get:: /api/eventsearch :query basestring what: search term :query int querytype: (optional) query type :query basestring flags: (optional) fields to be returned :query int max_rows: (optional) maximum number of result rows :statuscode 200: no error """ request.setHeader( 'Access-Control-Allow-Origin', CORS_DEFAULT_ALLOW_ORIGIN) mangled_parameters = dict( case_sensitive=False, flags=None, what=None ) if "flags" in request.args: mangled_parameters["flags"] = request.args["flags"][0] for key in ("querytype", "max_rows"): try: value = int(request.args[key][0]) except Exception: value = None mangled_parameters[key] = value if request.args.get("case_sensitive", [False])[0]: mangled_parameters["case_sensitive"] = True data = { "errors": [], "result": False, "mangled_parameters": mangled_parameters, "len": 0 } try: mangled_parameters["what"] = request.args["what"][0] except KeyError: data['errors'].append("Nothing to search for?!") except Exception as exc1: data['errors'].append(repr(exc1)) if mangled_parameters["what"]: try: data['events'] = self.ec_instance.search(**mangled_parameters) data['result'] = True data['len'] = len(data['events']) except Exception as exc: data['errors'].append(repr(exc)) return json_response(request, data)