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: body or name not provided
39 return {'name': data.name}
42 message = '{} already exists as a project'.format(data.name)
43 return HTTP_FORBIDDEN, message
45 miss_checks = ['name']
46 db_checks = [(self.table, False, query, error)]
47 self._create(miss_checks, db_checks)
50 class ProjectGURHandler(GenericProjectHandler):
51 @swagger.operation(nickname='get-one')
52 def get(self, project_name):
54 @description: get a single project by project_name
56 @return 200: project exist
57 @raise 404: project not exist
59 self._get_one({'name': project_name})
61 @swagger.operation(nickname="update")
62 def put(self, project_name):
64 @description: update a single project by project_name
65 @param body: project to be updated
66 @type body: L{ProjectUpdateRequest}
69 @return 200: update success
70 @raise 404: project not exist
71 @raise 403: new project name already exist or nothing to update
73 query = {'name': project_name}
75 self._update(query, db_keys)
77 @swagger.operation(nickname='delete')
78 def delete(self, project_name):
80 @description: delete a project by project_name
81 @return 200: delete success
82 @raise 404: project not exist
84 self._delete({'name': project_name})