1 ##############################################################################
2 # Copyright (c) 2015 Orange
3 # guyrodrigue.koffi@orange.com / koffirodrigue@gmail.com
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9 from opnfv_testapi.tornado_swagger import swagger
10 from handlers import GenericApiHandler
11 from opnfv_testapi.common.constants import HTTP_FORBIDDEN
12 from project_models import Project
15 class GenericProjectHandler(GenericApiHandler):
16 def __init__(self, application, request, **kwargs):
17 super(GenericProjectHandler, self).__init__(application,
20 self.table = 'projects'
21 self.table_cls = Project
24 class ProjectCLHandler(GenericProjectHandler):
25 @swagger.operation(nickname="listAllProjects")
28 @description: list all projects
29 @return 200: return all projects, empty list is no project exist
34 @swagger.operation(nickname="createProject")
37 @description: create a project
38 @param body: project to be created
39 @type body: L{ProjectCreateRequest}
41 @rtype: L{CreateResponse}
42 @return 200: project is created.
43 @raise 403: project already exists
44 @raise 400: body or name not provided
47 return {'name': data.name}
50 message = '{} already exists as a project'.format(data.name)
51 return HTTP_FORBIDDEN, message
53 miss_checks = ['name']
54 db_checks = [(self.table, False, query, error)]
55 self._create(miss_checks, db_checks)
58 class ProjectGURHandler(GenericProjectHandler):
59 @swagger.operation(nickname='getProjectByName')
60 def get(self, project_name):
62 @description: get a single project by project_name
64 @return 200: project exist
65 @raise 404: project not exist
67 self._get_one({'name': project_name})
69 @swagger.operation(nickname="updateProjectByName")
70 def put(self, project_name):
72 @description: update a single project by project_name
73 @param body: project to be updated
74 @type body: L{ProjectUpdateRequest}
77 @return 200: update success
78 @raise 404: project not exist
79 @raise 403: new project name already exist or nothing to update
81 query = {'name': project_name}
83 self._update(query, db_keys)
85 @swagger.operation(nickname='deleteProjectByName')
86 def delete(self, project_name):
88 @description: delete a project by project_name
89 @return 200: delete success
90 @raise 404: project not exist
92 self._delete({'name': project_name})