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