From 3a37ad5eff9af642424c519159d74ce9abe7a926 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 10 Mar 2019 14:20:31 +0200 Subject: Add: PUT to effiapi to update member resource --- effiapi | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'effiapi') diff --git a/effiapi b/effiapi index 5575a37..f3894fc 100755 --- a/effiapi +++ b/effiapi @@ -92,7 +92,19 @@ class FakeHTTPAPI(HTTPAPI): return FakeResponse(201, headers, copy.deepcopy(body)) def PUT(self, url, headers, body): - raise NotImplementedError() + logging.debug( + 'FakeHTTPAPI.PUT url=%r headers=%r body=r', + url, headers, body) + + rid = headers.get('Muck-Id') + if not rid: + return FakeResponse(400, {}, 'No Muck-Id in request') + + self._memb[rid] = copy.deepcopy(body) + headers = { + 'Muck-Id': rid, + } + return FakeResponse(200, headers, copy.deepcopy(body)) def GET(self, url, headers=None, body=None): logging.info( @@ -183,12 +195,12 @@ class MuckAPI: raise MuckError('{} {}'.format(r.status_code, r.text)) return r.json() - def create(self, member): + def _write(self, member, func): url = self.url('/res') headers = self._get_headers() headers['Content-Type'] = 'application/json' - r = self._httpapi.POST(url, headers, json.dumps(member)) - logging.info('Show result: %s %s', r.status_code, r.text) + r = func(url, headers, json.dumps(member)) + logging.info('Write result: %s %s', r.status_code, r.text) if not r.ok: raise MuckError('{} {}'.format(r.status_code, r.text)) rid = r.headers.get('Muck-Id') @@ -196,6 +208,12 @@ class MuckAPI: raise MuckError('Muck did not return Muck-Id') return rid, r.json() + def create(self, member): + return self._write(member, self._httpapi.POST) + + def update(self, member): + return self._write(member, self._httpapi.PUT) + def search(self, cond): url = self.url('/search') headers = self._get_headers() @@ -235,6 +253,11 @@ class API: 'path': '/memb', 'callback': self._call(self._create), }, + { + 'method': 'PUT', + 'path': '/memb', + 'callback': self._call(self._update), + }, ] for route in routes: @@ -302,6 +325,16 @@ class API: rid, newobj = self._muck.create(obj) return response(201, rid, newobj) + def _update(self): + r = bottle.request + if r.content_type != 'application/json': + return response(400, None, 'wrong content type') + + obj = bottle.request.json + logging.info('UPDATE %r', repr(obj)) + rid, newobj = self._muck.update(obj) + return response(200, rid, newobj) + def response(status, rid, body): headers = { -- cgit v1.2.1