summaryrefslogtreecommitdiff
path: root/effiapi
diff options
context:
space:
mode:
Diffstat (limited to 'effiapi')
-rwxr-xr-xeffiapi42
1 files changed, 38 insertions, 4 deletions
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 = {