class ProjectHandler(BaseHandler): def initialize(self): self.project_dict = {"type": "project"} self.project = Project(couch_conf['base_url']) @asynchronous @gen.coroutine def get(self, database, project_id): query = self.get_arguments("q")[0] try: doc = yield self.project.get_doc(database, project_id) if query: self.write(json_encode(doc[query])) 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, project_name): request_body = self.project_dict.copy() if self.request.body: request_body.update(self.get_json_body_arguments()) try: project_id = uuid.uuid4().get_hex() resp = yield self.project.add_project(database, project_id, request_body) self.write(resp) except ValueError as e: self.err_write(500, e) self.finish() @asynchronous @gen.coroutine def put(self, database, project_id): if self.request.body: request_body = self.get_json_body_arguments() try: resp = yield self.project.update_project(database, project_id, request_body) self.write(resp) except ValueError 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, project_id): try: resp = yield self.project.del_doc(database, project_id) self.write('{{"ok": {0}}}'.format(resp)) except ValueError as e: self.err_write(500, e) self.finish()