Merge changes from topics 'get_project', 'get_projects'
[yardstick.git] / api / resources / v2 / projects.py
1 import uuid
2
3 from datetime import datetime
4
5 from api import ApiResource
6 from api.database.v2.handlers import V2ProjectHandler
7 from yardstick.common.utils import result_handler
8 from yardstick.common.utils import change_obj_to_dict
9 from yardstick.common import constants as consts
10
11
12 class V2Projects(ApiResource):
13
14     def get(self):
15         project_handler = V2ProjectHandler()
16         projects = [change_obj_to_dict(p) for p in project_handler.list_all()]
17
18         for p in projects:
19             tasks = p['tasks']
20             p['tasks'] = tasks.split(',') if tasks else []
21
22         return result_handler(consts.API_SUCCESS, {'projects': projects})
23
24     def post(self):
25         return self._dispatch_post()
26
27     def create_project(self, args):
28         try:
29             name = args['name']
30         except KeyError:
31             return result_handler(consts.API_ERROR, 'name must be provided')
32
33         project_id = str(uuid.uuid4())
34         create_time = datetime.now()
35         project_handler = V2ProjectHandler()
36
37         project_init_data = {
38             'uuid': project_id,
39             'name': name,
40             'time': create_time
41         }
42         project_handler.insert(project_init_data)
43
44         return result_handler(consts.API_SUCCESS, {'uuid': project_id})
45
46
47 class V2Project(ApiResource):
48
49     def get(self, project_id):
50         try:
51             uuid.UUID(project_id)
52         except ValueError:
53             return result_handler(consts.API_ERROR, 'invalid project id')
54
55         project_handler = V2ProjectHandler()
56         try:
57             project = project_handler.get_by_uuid(project_id)
58         except ValueError:
59             return result_handler(consts.API_ERROR, 'no such project id')
60
61         project_info = change_obj_to_dict(project)
62         tasks = project_info['tasks']
63         project_info['tasks'] = tasks.split(',') if tasks else []
64
65         return result_handler(consts.API_SUCCESS, {'project': project_info})