diff options
author | Lars Wirzenius <liw@liw.fi> | 2018-11-17 12:06:44 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-11-17 13:06:59 +0200 |
commit | 603fa65871346b528c1d2290be72226658676d7c (patch) | |
tree | 49ece3a5566c834632b033b1196ffe392ffcaf1b /effiapi | |
parent | fa0ff1f17d2863e64dd98097c70e9785aa9f9276 (diff) | |
download | effi-reg-603fa65871346b528c1d2290be72226658676d7c.tar.gz |
Add: effiapi /search and dummy Muck for testing
Diffstat (limited to 'effiapi')
-rwxr-xr-x | effiapi | 70 |
1 files changed, 68 insertions, 2 deletions
@@ -14,18 +14,50 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. +import copy import json import logging import os import sys +import uuid import bottle +class Muck: + + def __init__(self): + self._objs = {} + + def __len__(self): + return len(self._objs) + + def new_id(self): + return str(uuid.uuid4()) + + def create(self, obj): + obj_id = self.new_id() + self._objs[obj_id] = obj + + def update(self, obj_id, obj): + self._objs[obj_id] = obj + + def show(self, obj_id): + return self._objs.get(obj_id) + + def delete(self, obj_id): + if obj_id in self._objs: + del self._objs[obj_id] + + def search(self): + return copy.deepcopy(self._objs) + + class API: def __init__(self, bottleapp): self._add_routes(bottleapp) + self._muck = Muck() def _add_routes(self, bottleapp): routes = [ @@ -34,6 +66,16 @@ class API: 'path': '/status', 'callback': self._show_status, }, + { + 'method': 'GET', + 'path': '/search', + 'callback': self._search, + }, + { + 'method': 'POST', + 'path': '/mem', + 'callback': self._create, + }, ] for route in routes: @@ -41,9 +83,33 @@ class API: def _show_status(self): status = { - 'resources': -1, + 'resources': len(self._muck), + } + return response(200, status) + + def _search(self): + result = { + 'resources': self._muck.search(), } - return bottle.HTTPResponse(status=200, body=json.dumps(status)) + return response(200, result) + + def _create(self): + r = bottle.request + if r.content_type != 'application/json': + return response(400) + + obj = bottle.request.json + logging.info('CREATE %r', repr(obj)) + self._muck.create(obj) + return response(201, obj) + + +def response(status, body): + headers = {} + if isinstance(body, dict): + headers['Content-Type'] = 'application/json' + return bottle.HTTPResponse( + status=status, body=json.dumps(body), headers=headers) with open(sys.argv[1]) as f: |