class ServiceHanlder(BaseHandler): def initialize(self): self.service_dict = {"type": "service"} self.service = Service(couch_conf['base_url']) @asynchronous @gen.coroutine def get(self, database, service_id): query = self.get_arguments("q") try: doc = yield self.service.get_doc(database, service_id) if query: self.write(json_encode(doc[query[0]])) else: self.write(json_encode(doc)) except ValueError as e: self.err_write(500, e) except KeyError as e: e.message = 'error key: ' + e.message self.err_write(500, e) self.finish() @asynchronous @gen.coroutine def post(self, database, service_id): request_body = self.service_dict.copy() if self.request.body: request_body.update(self.get_json_body_arguments()) try: resp = yield self.service.add_service(database, service_id, request_body) self.write(resp) except ValueError as e: self.err_write(500, e) self.finish() @asynchronous @gen.coroutine def put(self, database, service_id): if self.request.body: request_body = self.get_json_body_arguments() try: resp = yield self.service.update_doc(database, service_id, request_body) self.write(resp) except Exception as e: self.err_write(500, e) else: self.err_write(500, "Request body is empty") self.finish() @asynchronous @gen.coroutine def delete(self, database, service_id): try: resp = yield self.service.del_doc(database, service_id) self.write('{{"ok": {0}}}'.format(resp)) except ValueError as e: self.err_write(500, e) self.finish()