3 from datetime import datetime
5 from oslo_serialization import jsonutils
7 from api import ApiResource
8 from api.database.v2.handlers import V2TaskHandler
9 from api.database.v2.handlers import V2ProjectHandler
10 from api.database.v2.handlers import V2EnvironmentHandler
11 from yardstick.common.utils import result_handler
12 from yardstick.common.utils import change_obj_to_dict
13 from yardstick.common import constants as consts
15 LOG = logging.getLogger(__name__)
16 LOG.setLevel(logging.DEBUG)
19 class V2Tasks(ApiResource):
22 return self._dispatch_post()
24 def create_task(self, args):
28 return result_handler(consts.API_ERROR, 'name must be provided')
31 project_id = args['project_id']
33 return result_handler(consts.API_ERROR, 'project_id must be provided')
35 task_id = str(uuid.uuid4())
36 create_time = datetime.now()
37 task_handler = V2TaskHandler()
39 LOG.info('create task in database')
42 'project_id': project_id,
47 task_handler.insert(task_init_data)
49 LOG.info('create task in project')
50 project_handler = V2ProjectHandler()
51 project_handler.append_attr(project_id, {'tasks': task_id})
53 return result_handler(consts.API_SUCCESS, {'uuid': task_id})
56 class V2Task(ApiResource):
58 def get(self, task_id):
62 return result_handler(consts.API_ERROR, 'invalid task id')
64 task_handler = V2TaskHandler()
66 task = task_handler.get_by_uuid(task_id)
68 return result_handler(consts.API_ERROR, 'no such task id')
70 task_info = change_obj_to_dict(task)
71 result = task_info['result']
72 task_info['result'] = jsonutils.loads(result) if result else None
74 return result_handler(consts.API_SUCCESS, {'task': task_info})
76 def delete(self, task_id):
80 return result_handler(consts.API_ERROR, 'invalid task id')
82 task_handler = V2TaskHandler()
84 project_id = task_handler.get_by_uuid(task_id).project_id
86 return result_handler(consts.API_ERROR, 'no such task id')
88 LOG.info('delete task in database')
89 task_handler.delete_by_uuid(task_id)
91 project_handler = V2ProjectHandler()
92 project = project_handler.get_by_uuid(project_id)
95 LOG.info('update tasks in project')
96 new_task_list = project.tasks.split(',').remove(task_id)
98 new_tasks = ','.join(new_task_list)
101 project_handler.update_attr(project_id, {'tasks': new_tasks})
103 return result_handler(consts.API_SUCCESS, {'task': task_id})
105 def put(self, task_id):
110 return result_handler(consts.API_ERROR, 'invalid task id')
112 task_handler = V2TaskHandler()
114 task_handler.get_by_uuid(task_id)
116 return result_handler(consts.API_ERROR, 'no such task id')
118 return self._dispatch_post(task_id=task_id)
120 def add_environment(self, args):
122 task_id = args['task_id']
124 environment_id = args['environment_id']
126 return result_handler(consts.API_ERROR, 'environment_id must be provided')
129 uuid.UUID(environment_id)
131 return result_handler(consts.API_ERROR, 'invalid environment id')
133 environment_handler = V2EnvironmentHandler()
135 environment_handler.get_by_uuid(environment_id)
137 return result_handler(consts.API_ERROR, 'no such environment id')
139 LOG.info('update environment_id in task')
140 task_handler = V2TaskHandler()
141 task_handler.update_attr(task_id, {'environment_id': environment_id})
143 return result_handler(consts.API_SUCCESS, {'uuid': task_id})
145 def add_case(self, args):
146 task_id = args['task_id']
148 name = args['case_name']
150 return result_handler(consts.API_ERROR, 'case_name must be provided')
153 content = args['case_content']
155 return result_handler(consts.API_ERROR, 'case_content must be provided')
157 LOG.info('update case info in task')
158 task_handler = V2TaskHandler()
164 task_handler.update_attr(task_id, task_update_data)
166 return result_handler(consts.API_SUCCESS, {'uuid': task_id})