1 from tornado_swagger_ui.tornado_swagger import swagger
2 from handlers import GenericApiHandler
3 from common.constants import HTTP_FORBIDDEN
4 from project_models import Project
7 class GenericProjectHandler(GenericApiHandler):
8 def __init__(self, application, request, **kwargs):
9 super(GenericProjectHandler, self).__init__(application,
12 self.table = 'projects'
13 self.table_cls = Project
16 class ProjectCLHandler(GenericProjectHandler):
17 @swagger.operation(nickname="list-all")
20 @description: list all projects
21 @return 200: return all projects, empty list is no project exist
26 @swagger.operation(nickname="create")
29 @description: create a project
30 @param body: project to be created
31 @type body: L{ProjectCreateRequest}
34 @return 200: project is created.
35 @raise 403: project already exists
36 @raise 400: post without body
39 return {'name': data.name}
42 message = '{} already exists as a project'.format(data.name)
43 return HTTP_FORBIDDEN, message
45 db_check = [(self.table, False, query, error)]
46 self._create(db_check)
49 class ProjectGURHandler(GenericProjectHandler):
50 @swagger.operation(nickname='get-one')
51 def get(self, project_name):
53 @description: get a single project by project_name
55 @return 200: project exist
56 @raise 404: project not exist
58 self._get_one({'name': project_name})
60 @swagger.operation(nickname="update")
61 def put(self, project_name):
63 @description: update a single project by project_name
64 @param body: project to be updated
65 @type body: L{ProjectUpdateRequest}
68 @return 200: update success
69 @raise 404: project not exist
70 @raise 403: new project name already exist or nothing to update
72 query = {'name': project_name}
74 self._update(query, db_keys)
76 @swagger.operation(nickname='delete')
77 def delete(self, project_name):
79 @description: delete a project by project_name
80 @return 200: delete success
81 @raise 404: project not exist
83 self._delete({'name': project_name})