Eliminate appx 350 Sphinx Warnings
[vfc/nfvo/lcm.git] / lcm / packages / ns_package.py
1 # Copyright 2016 ZTE Corporation.
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 import logging
16
17 import traceback
18 import sys
19
20 from lcm.pub.database.models import NSDModel, NSInstModel
21 from lcm.pub.utils.values import ignore_case_get
22 from lcm.pub.msapi.catalog import query_csar_from_catalog, set_csar_state
23 from lcm.pub.msapi.catalog import delete_csar_from_catalog
24 from lcm.pub.exceptions import NSLCMException
25
26 logger = logging.getLogger(__name__)
27
28 STATUS_SUCCESS, STATUS_FAILED = "success", "failed"
29
30
31 def fmt_ns_pkg_rsp(status, desc, error_code="500"):
32     return [0, {"status": status, "statusDescription": desc, "errorCode": error_code}]
33
34
35 def ns_common_call(fun, csar_id, operation=""):
36     ret = None
37     try:
38         if operation == "":
39             ret = fun(csar_id)
40         else:
41             ret = fun(csar_id, operation)
42
43         if ret[0] != 0:
44             return fmt_ns_pkg_rsp(STATUS_FAILED, ret[1])
45     except NSLCMException as e:
46         return fmt_ns_pkg_rsp(STATUS_FAILED, e.message)
47     except:
48         logger.error(traceback.format_exc())
49         return fmt_ns_pkg_rsp(STATUS_FAILED, str(sys.exc_info()))
50     return fmt_ns_pkg_rsp(STATUS_SUCCESS, ret[1], "")
51
52
53 def ns_delete_pending_csar(csar_id):
54     return ns_common_call(NsPackage().delete_pending_csar, csar_id)
55
56
57 def ns_set_state_csar(csar_id, operation):
58     return ns_common_call(NsPackage().set_state_csar, csar_id, operation)
59
60
61 ###############################################################################################################
62
63
64 class NsPackage(object):
65     """
66     Actions for ns package.
67     """
68
69     def __init__(self):
70         pass
71
72     def delete_csar(self, csar_id):
73         if not NSDModel.objects.filter(id=csar_id):
74             return delete_csar_from_catalog(csar_id)
75
76         if NSInstModel.objects.filter(nspackage_id=csar_id):
77             return set_csar_state(csar_id, "deletionPending", True)
78
79         ret = delete_csar_from_catalog(csar_id)
80         if ret[0] == 0:
81             NSDModel.objects.filter(id=csar_id).delete()
82         return ret
83
84     def delete_pending_csar(self, csar_id):
85         if not NSDModel.objects.filter(id=csar_id):
86             return [0, "Delete pending CSAR(%s) successfully." % csar_id]
87
88         pending = query_csar_from_catalog(csar_id, "deletionPending")
89
90         if pending.lower() == "false":
91             return [1, "CSAR(%s) need not to be deleted." % csar_id]
92
93         if NSInstModel.objects.filter(nspackage_id=csar_id):
94             return [1, "CSAR(%s) is in using, cannot be deleted." % csar_id]
95
96         ret = delete_csar_from_catalog(csar_id)
97         if ret[0] == 0:
98             NSDModel.objects.filter(id=csar_id).delete()
99         return ret
100
101     def set_state_csar(self, csar_id, operation):
102         if not NSDModel.objects.filter(id=csar_id):
103             raise NSLCMException("CSAR(%s) does not exist." % csar_id)
104
105         csar = query_csar_from_catalog(csar_id)
106         if ignore_case_get(csar, "operationalState") == operation.capitalize():
107             raise NSLCMException("CSAR(%s) already %s." % (csar_id, operation))
108         return set_csar_state(csar_id, 'operationState', operation.capitalize())