From 603fa65871346b528c1d2290be72226658676d7c Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 17 Nov 2018 12:06:44 +0200 Subject: Add: effiapi /search and dummy Muck for testing --- effiapi | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 68 insertions(+), 2 deletions(-) (limited to 'effiapi') diff --git a/effiapi b/effiapi index 3bad86a..bc47a66 100755 --- a/effiapi +++ b/effiapi @@ -14,18 +14,50 @@ # along with this program. If not, see . +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: -- cgit v1.2.1