Merge "Improve ansible code for network xml creation"
[yardstick.git] / api / resources / v2 / projects.py
1 ##############################################################################
2 # Copyright (c) 2017 Huawei Technologies Co.,Ltd.
3 #
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 import uuid
10 import logging
11
12 from datetime import datetime
13
14 from api import ApiResource
15 from api.database.v2.handlers import V2ProjectHandler
16 from api.database.v2.handlers import V2TaskHandler
17 from yardstick.common.utils import result_handler
18 from yardstick.common.utils import change_obj_to_dict
19 from yardstick.common import constants as consts
20
21 LOG = logging.getLogger(__name__)
22 LOG.setLevel(logging.DEBUG)
23
24
25 class V2Projects(ApiResource):
26
27     def get(self):
28         project_handler = V2ProjectHandler()
29         projects = [change_obj_to_dict(p) for p in project_handler.list_all()]
30
31         for p in projects:
32             tasks = p['tasks']
33             p['tasks'] = tasks.split(',') if tasks else []
34
35         return result_handler(consts.API_SUCCESS, {'projects': projects})
36
37     def post(self):
38         return self._dispatch_post()
39
40     def create_project(self, args):
41         try:
42             name = args['name']
43         except KeyError:
44             return result_handler(consts.API_ERROR, 'name must be provided')
45
46         project_id = str(uuid.uuid4())
47         create_time = datetime.now()
48         project_handler = V2ProjectHandler()
49
50         project_init_data = {
51             'uuid': project_id,
52             'name': name,
53             'time': create_time
54         }
55         project_handler.insert(project_init_data)
56
57         return result_handler(consts.API_SUCCESS, {'uuid': project_id})
58
59
60 class V2Project(ApiResource):
61
62     def get(self, project_id):
63         try:
64             uuid.UUID(project_id)
65         except ValueError:
66             return result_handler(consts.API_ERROR, 'invalid project id')
67
68         project_handler = V2ProjectHandler()
69         try:
70             project = project_handler.get_by_uuid(project_id)
71         except ValueError:
72             return result_handler(consts.API_ERROR, 'no such project id')
73
74         project_info = change_obj_to_dict(project)
75         tasks = project_info['tasks']
76         project_info['tasks'] = tasks.split(',') if tasks else []
77
78         return result_handler(consts.API_SUCCESS, {'project': project_info})
79
80     def delete(self, project_id):
81         try:
82             uuid.UUID(project_id)
83         except ValueError:
84             return result_handler(consts.API_ERROR, 'invalid project id')
85
86         project_handler = V2ProjectHandler()
87         try:
88             project = project_handler.get_by_uuid(project_id)
89         except ValueError:
90             return result_handler(consts.API_ERROR, 'no such project id')
91
92         if project.tasks:
93             LOG.info('delete related task')
94             task_handler = V2TaskHandler()
95             for task_id in project.tasks.split(','):
96                 LOG.debug('delete task: %s', task_id)
97                 try:
98                     task_handler.delete_by_uuid(task_id)
99                 except ValueError:
100                     LOG.exception('no such task id: %s', task_id)
101
102         LOG.info('delete project in database')
103         project_handler.delete_by_uuid(project_id)
104
105         return result_handler(consts.API_SUCCESS, {'project': project_id})