From 654f088bab35aff16cd999a5744b8f045e2cc49b Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 10 Mar 2019 14:40:14 +0200 Subject: Add: Delete members --- effiapi | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) (limited to 'effiapi') diff --git a/effiapi b/effiapi index f3894fc..5f92901 100755 --- a/effiapi +++ b/effiapi @@ -81,7 +81,7 @@ class FakeHTTPAPI(HTTPAPI): def POST(self, url, headers, body): logging.debug( - 'FakeHTTPAPI.POST url=%r headers=%r body=r', + 'FakeHTTPAPI.POST url=%r headers=%r body=%r', url, headers, body) rid = str(uuid.uuid4()) @@ -93,7 +93,7 @@ class FakeHTTPAPI(HTTPAPI): def PUT(self, url, headers, body): logging.debug( - 'FakeHTTPAPI.PUT url=%r headers=%r body=r', + 'FakeHTTPAPI.PUT url=%r headers=%r body=%r', url, headers, body) rid = headers.get('Muck-Id') @@ -117,7 +117,7 @@ class FakeHTTPAPI(HTTPAPI): if url.endswith('/res'): return self._get_resource(headers) - logging.error('Cannot server url') + logging.error('Cannot serve url') assert 0 def _get_status(self): @@ -136,6 +136,10 @@ class FakeHTTPAPI(HTTPAPI): logging.warning('FakeHTTPAPI.GET: empty resource id in headers') return FakeResponse(404, {}, 'No such member') + if rid not in self._memb: + logging.debug('Members: %r', self._memb) + return FakeResponse(404, {}, 'Retrieving member that does not exist') + memb = self._memb[rid] headers = { 'Muck-Id': rid, @@ -144,7 +148,19 @@ class FakeHTTPAPI(HTTPAPI): return FakeResponse(200, headers, memb) def DELETE(self, url, headers): - raise NotImplementedError() + logging.debug('FakeHTTPAPI.DELETE url=%r headers=%r', url, headers) + + rid = headers.get('Muck-Id') + if not rid: + logging.warning('FakeHTTPAPI.DELETE: empty resource id in headers') + return FakeResponse(404, {}, 'No such member') + + if rid not in self._memb: + logging.debug('Members: %r', self._memb) + return FakeResponse(404, {}, 'Deleting member that does not exist') + + del self._memb[rid] + return FakeResponse(200, {}, {}) class MuckError(Exception): @@ -214,6 +230,14 @@ class MuckAPI: def update(self, member): return self._write(member, self._httpapi.PUT) + def delete(self): + url = self.url('/res') + headers = self._get_headers() + r = self._httpapi.DELETE(url, headers) + logging.info('Delete result: %s %s', r.status_code, r.text) + if not r.ok: + raise MuckError('{} {}'.format(r.status_code, r.text)) + def search(self, cond): url = self.url('/search') headers = self._get_headers() @@ -258,6 +282,11 @@ class API: 'path': '/memb', 'callback': self._call(self._update), }, + { + 'method': 'DELETE', + 'path': '/memb', + 'callback': self._call(self._delete), + }, ] for route in routes: @@ -335,6 +364,11 @@ class API: rid, newobj = self._muck.update(obj) return response(200, rid, newobj) + def _delete(self): + r = bottle.request + self._muck.delete() + return response(200, None, None) + def response(status, rid, body): headers = { -- cgit v1.2.1