Example #1
0
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()
Example #2
0
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()
Example #3
0
 def setUp(self):
     super(TestProject, self).setUp()  # setup io_loop
     self.project = Project(io_loop=self.io_loop)
     self.doc = {"type": "project"}
Example #4
0
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")
Example #5
0
 def initialize(self):
     self.project_dict = {"type": "project"}
     self.project = Project(couch_conf['base_url'])
Example #6
0
 def initialize(self):
     self.project = Project(couch_conf['base_url'])