Add API(v2) to add environment to task
[yardstick.git] / api / resources / v2 / tasks.py
1 import uuid
2 import logging
3 from datetime import datetime
4
5 from api import ApiResource
6 from api.database.v2.handlers import V2TaskHandler
7 from api.database.v2.handlers import V2ProjectHandler
8 from api.database.v2.handlers import V2EnvironmentHandler
9 from yardstick.common.utils import result_handler
10 from yardstick.common import constants as consts
11
12 LOG = logging.getLogger(__name__)
13 LOG.setLevel(logging.DEBUG)
14
15
16 class V2Tasks(ApiResource):
17
18     def post(self):
19         return self._dispatch_post()
20
21     def create_task(self, args):
22         try:
23             name = args['name']
24         except KeyError:
25             return result_handler(consts.API_ERROR, 'name must be provided')
26
27         try:
28             project_id = args['project_id']
29         except KeyError:
30             return result_handler(consts.API_ERROR, 'project_id must be provided')
31
32         task_id = str(uuid.uuid4())
33         create_time = datetime.now()
34         task_handler = V2TaskHandler()
35
36         LOG.info('create task in database')
37         task_init_data = {
38             'uuid': task_id,
39             'project_id': project_id,
40             'name': name,
41             'time': create_time,
42             'status': -1
43         }
44         task_handler.insert(task_init_data)
45
46         LOG.info('create task in project')
47         project_handler = V2ProjectHandler()
48         project_handler.append_attr(project_id, {'tasks': task_id})
49
50         return result_handler(consts.API_SUCCESS, {'uuid': task_id})
51
52
53 class V2Task(ApiResource):
54
55     def put(self, task_id):
56
57         try:
58             uuid.UUID(task_id)
59         except ValueError:
60             return result_handler(consts.API_ERROR, 'invalid task id')
61
62         task_handler = V2TaskHandler()
63         try:
64             task_handler.get_by_uuid(task_id)
65         except ValueError:
66             return result_handler(consts.API_ERROR, 'no such task id')
67
68         return self._dispatch_post(task_id=task_id)
69
70     def add_environment(self, args):
71
72         task_id = args['task_id']
73         try:
74             environment_id = args['environment_id']
75         except KeyError:
76             return result_handler(consts.API_ERROR, 'environment_id must be provided')
77
78         try:
79             uuid.UUID(environment_id)
80         except ValueError:
81             return result_handler(consts.API_ERROR, 'invalid environment id')
82
83         environment_handler = V2EnvironmentHandler()
84         try:
85             environment_handler.get_by_uuid(environment_id)
86         except ValueError:
87             return result_handler(consts.API_ERROR, 'no such environment id')
88
89         LOG.info('update environment_id in task')
90         task_handler = V2TaskHandler()
91         task_handler.update_attr(task_id, {'environment_id': environment_id})
92
93         return result_handler(consts.API_SUCCESS, {'uuid': task_id})