Refactor o2dms api swagger
[pti/o2.git] / o2dms / views / dms_route.py
1 # Copyright (C) 2021 Wind River Systems, Inc.
2 #
3 #  Licensed under the Apache License, Version 2.0 (the "License");
4 #  you may not use this file except in compliance with the License.
5 #  You may obtain a copy of the License at
6 #
7 #      http://www.apache.org/licenses/LICENSE-2.0
8 #
9 #  Unless required by applicable law or agreed to in writing, software
10 #  distributed under the License is distributed on an "AS IS" BASIS,
11 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 #  See the License for the specific language governing permissions and
13 #  limitations under the License.
14
15 # from flask import jsonify
16 from flask_restx import Resource
17
18 from o2common.config import config
19 from o2dms.views.dms_dto import DmsDTO, DmsLcmNfDeploymentDescriptorDTO
20 from o2dms.views import dms_lcm_view, api_dms_lcm_v1
21
22 apibase = config.get_o2dms_api_base()
23
24
25 # ----------  DeploymentManagers ---------- #
26 @api_dms_lcm_v1.route("/<deploymentManagerID>")
27 @api_dms_lcm_v1.param('deploymentManagerID', 'ID of the deployment manager')
28 @api_dms_lcm_v1.response(404, 'Deployment manager not found')
29 class DmsGetRouter(Resource):
30
31     model = DmsDTO.dms_get
32
33     @api_dms_lcm_v1.doc('Get deployment manager')
34     @api_dms_lcm_v1.marshal_with(model)
35     def get(self, deploymentManagerID):
36         result = dms_lcm_view.deployment_manager_one(
37             deploymentManagerID, bus.uow)
38         if result is not None:
39             return result
40         api_dms_lcm_v1.abort(404, "Deployment manager {} doesn't exist".format(
41             deploymentManagerID))
42
43
44 # LCM services #
45 @api_dms_lcm_v1\
46     .route("/<deploymentManagerID>/O2dms_DeploymentLifecycle/"
47            "NfDeploymentDescriptor")
48 @api_dms_lcm_v1\
49     .param('deploymentManagerID', 'ID of the deployment manager')
50 @api_dms_lcm_v1.response(404, 'DMS LCM not found')
51 class DmsLcmNfDeploymentDescListRouter(Resource):
52
53     model = DmsLcmNfDeploymentDescriptorDTO.dmslcm_NfDeploymentDescriptor_get
54
55     createdto = DmsLcmNfDeploymentDescriptorDTO.NfDeploymentDescriptor_create
56     post_resp = DmsLcmNfDeploymentDescriptorDTO.\
57         NfDeploymentDescriptor_create_post_resp
58
59     @api_dms_lcm_v1.doc('Get a list of NfDeploymentDescriptor')
60     @api_dms_lcm_v1.marshal_list_with(model)
61     def get(self, deploymentManagerID):
62         return dms_lcm_view.lcm_nfdeploymentdesc_list(
63             deploymentManagerID, bus.uow)
64
65     @api_dms_lcm_v1.doc('Create a NfDeploymentDescriptor')
66     @api_dms_lcm_v1.expect(createdto)
67     @api_dms_lcm_v1.marshal_with(post_resp, code=201)
68     def post(self, deploymentManagerID):
69         data = api_dms_lcm_v1.payload
70         id = dms_lcm_view.lcm_nfdeploymentdesc_create(
71             deploymentManagerID, data, bus.uow)
72         return {"id": id}, 201
73
74
75 @api_dms_lcm_v1\
76     .route("/<deploymentManagerID>/O2dms_DeploymentLifecycle/"
77            "NfDeploymentDescriptor/<nfDeploymentDescriptorId>")
78 @api_dms_lcm_v1\
79     .param('deploymentManagerID', 'ID of the deployment manager')
80 @api_dms_lcm_v1.param('nfDeploymentDescriptorId',
81                       'ID of the NfDeploymentDescriptor')
82 @api_dms_lcm_v1.response(404, 'DMS LCM not found')
83 class DmsLcmNfDeploymentDescGetRouter(Resource):
84
85     model = DmsLcmNfDeploymentDescriptorDTO.dmslcm_NfDeploymentDescriptor_get
86     updatedto = DmsLcmNfDeploymentDescriptorDTO.\
87         NfDeploymentDescriptor_update
88
89     @api_dms_lcm_v1.doc('Get a NfDeploymentDescriptor')
90     @api_dms_lcm_v1.marshal_with(model)
91     def get(self, nfDeploymentDescriptorId, deploymentManagerID):
92         result = dms_lcm_view\
93             .lcm_nfdeploymentdesc_one(nfDeploymentDescriptorId, bus.uow)
94         if result is not None:
95             return result
96         api_dms_lcm_v1.abort(
97             404, "NfDeploymentDescriptor {} doesn't exist".format(
98                 nfDeploymentDescriptorId))
99
100     @api_dms_lcm_v1.doc('Update a NfDeploymentDescriptor')
101     @api_dms_lcm_v1.expect(updatedto)
102     def put(self, nfDeploymentDescriptorId, deploymentManagerID):
103         data = api_dms_lcm_v1.payload
104         dms_lcm_view.lcm_nfdeploymentdesc_update(
105             nfDeploymentDescriptorId, data, bus.uow)
106         return {}, 201
107
108     @api_dms_lcm_v1.doc('Delete NfDeploymentDescriptor by ID')
109     @api_dms_lcm_v1.response(204, 'NfDeploymentDescriptor deleted')
110     def delete(self, nfDeploymentDescriptorId, deploymentManagerID):
111         with bus.uow:
112             bus.uow.nfdeployment_descs.delete(nfDeploymentDescriptorId)
113             bus.uow.commit()
114         return '', 204
115
116
117 def configure_namespace(app, bus_new):
118     app.add_namespace(api_dms_lcm_v1, path=apibase)
119
120     # Set global uow
121     global bus
122     bus = bus_new