4 from datetime import datetime
6 from api import ApiResource
7 from api.database.v2.handlers import V2ProjectHandler
8 from api.database.v2.handlers import V2TaskHandler
9 from yardstick.common.utils import result_handler
10 from yardstick.common.utils import change_obj_to_dict
11 from yardstick.common import constants as consts
13 LOG = logging.getLogger(__name__)
14 LOG.setLevel(logging.DEBUG)
17 class V2Projects(ApiResource):
20 project_handler = V2ProjectHandler()
21 projects = [change_obj_to_dict(p) for p in project_handler.list_all()]
25 p['tasks'] = tasks.split(',') if tasks else []
27 return result_handler(consts.API_SUCCESS, {'projects': projects})
30 return self._dispatch_post()
32 def create_project(self, args):
36 return result_handler(consts.API_ERROR, 'name must be provided')
38 project_id = str(uuid.uuid4())
39 create_time = datetime.now()
40 project_handler = V2ProjectHandler()
47 project_handler.insert(project_init_data)
49 return result_handler(consts.API_SUCCESS, {'uuid': project_id})
52 class V2Project(ApiResource):
54 def get(self, project_id):
58 return result_handler(consts.API_ERROR, 'invalid project id')
60 project_handler = V2ProjectHandler()
62 project = project_handler.get_by_uuid(project_id)
64 return result_handler(consts.API_ERROR, 'no such project id')
66 project_info = change_obj_to_dict(project)
67 tasks = project_info['tasks']
68 project_info['tasks'] = tasks.split(',') if tasks else []
70 return result_handler(consts.API_SUCCESS, {'project': project_info})
72 def delete(self, project_id):
76 return result_handler(consts.API_ERROR, 'invalid project id')
78 project_handler = V2ProjectHandler()
80 project = project_handler.get_by_uuid(project_id)
82 return result_handler(consts.API_ERROR, 'no such project id')
85 LOG.info('delete related task')
86 task_handler = V2TaskHandler()
87 for task_id in project.tasks.split(','):
88 LOG.debug('delete task: %s', task_id)
90 task_handler.delete_by_uuid(task_id)
92 LOG.exception('no such task id: %s', task_id)
94 LOG.info('delete project in database')
95 project_handler.delete_by_uuid(project_id)
97 return result_handler(consts.API_SUCCESS, {'project': project_id})