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()
class ProjectsHandler(BaseHandler): def initialize(self): self.project = Project(couch_conf['base_url']) @asynchronous @gen.coroutine def get(self, database): self.set_cors_headers() try: resp = yield self.project.list_project(database) self.write(json_encode(resp)) except ValueError as e: self.err_write(500, e) self.finish()
def setUp(self): super(TestProject, self).setUp() # setup io_loop self.project = Project(io_loop=self.io_loop) self.doc = {"type": "project"}
class TestProject(AsyncTestCase): @classmethod def setUpClass(cls): cls.server = CouchServer() cls.database = "couch-project_test" cls.server.create(cls.database) cls.project_id = "测试项目" cls.service_id = "192.168.99.100:8080" @classmethod def tearDownClass(cls): cls.server = CouchServer() cls.database = "couch-project_test" cls.server.delete(cls.database) def setUp(self): super(TestProject, self).setUp() # setup io_loop self.project = Project(io_loop=self.io_loop) self.doc = {"type": "project"} def test_check_project_data(self): doc = {"type": "foo"} self.assertRaises(ValueError, self.project.check_project_data, doc) try: self.project.check_project_data(doc) except ValueError as e: self.assertEqual(e.message, "Can Not Change Document Field: type") @gen_test(timeout=3) def test_1_add_project(self): response = yield self.project.add_project(self.database, self.project_id, self.doc) self.assertEqual(json_decode(response)["ok"], True) # add project again try: yield self.project.add_project(self.database, self.project_id, self.doc) except KeyError as e: self.assertEqual(e.message, "Project: {0} Exist".format(self.project_id)) @gen_test(timeout=5) def test_2_list_project(self): # add design path = os.path.dirname(__file__) filepath = os.path.join(path, "../../design/project.json") with open(filepath) as f: doc = json_decode(f.read()) yield self.project.update_doc(self.database, "_design/project", doc) projects = yield self.project.list_project(self.database) self.assertEqual(projects, [self.project_id]) @gen_test(timeout=3) def test_31_update_project(self): rev = yield self.project.get_doc_rev(self.database, self.project_id) doc = {"_rev": rev, "services": [self.service_id]} with mock.patch.object(Service, "list_service") as mock_list: setup_func(mock_list, [self.service_id]) resp = yield self.project.update_project(self.database, self.project_id, doc) self.assertEqual(json_decode(resp)["ok"], True) @gen_test(timeout=3) def test_32_update_project_type_field(self): doc = {"type": "should not change the field"} try: yield self.project.update_project(self.database, self.project_id, doc) except Exception as e: self.assertIsInstance(e, ValueError) self.assertEqual(e.message, "Can Not Change Document Field: type")
def initialize(self): self.project_dict = {"type": "project"} self.project = Project(couch_conf['base_url'])
def initialize(self): self.project = Project(couch_conf['base_url'])