summaryrefslogtreecommitdiff
path: root/effiapi
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-11-17 12:06:44 +0200
committerLars Wirzenius <liw@liw.fi>2018-11-17 13:06:59 +0200
commit603fa65871346b528c1d2290be72226658676d7c (patch)
tree49ece3a5566c834632b033b1196ffe392ffcaf1b /effiapi
parentfa0ff1f17d2863e64dd98097c70e9785aa9f9276 (diff)
downloadeffi-reg-603fa65871346b528c1d2290be72226658676d7c.tar.gz
Add: effiapi /search and dummy Muck for testing
Diffstat (limited to 'effiapi')
-rwxr-xr-xeffiapi70
1 files changed, 68 insertions, 2 deletions
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 <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: