code refactor for genericparser
[modeling/etsicatalog.git] / genericparser / packages / views / common.py
1 # Copyright 2018 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 traceback
16 import logging
17
18 from rest_framework import status
19 from rest_framework.response import Response
20
21 from genericparser.pub.exceptions import GenericparserException
22 from genericparser.pub.exceptions import BadRequestException
23 from genericparser.pub.exceptions import NsdmBadRequestException
24 from genericparser.pub.exceptions import PackageNotFoundException
25 from genericparser.pub.exceptions import ResourceNotFoundException
26 from genericparser.pub.exceptions import ArtifactNotFoundException
27 from genericparser.pub.exceptions import NsdmDuplicateSubscriptionException
28 from genericparser.pub.exceptions import VnfPkgDuplicateSubscriptionException
29 from genericparser.pub.exceptions import VnfPkgSubscriptionException
30
31 logger = logging.getLogger(__name__)
32
33
34 def validate_data(data, serializer):
35     serialized_data = serializer(data=data)
36     if not serialized_data.is_valid():
37         logger.error('Data validation failed.')
38         raise GenericparserException(serialized_data.errors)
39     return serialized_data
40
41
42 def fmt_error_rsp(error_message, status):
43     return {"errorMessage": error_message, "error": status}
44
45
46 def make_error_resp(status, detail):
47     return Response(
48         data={
49             'status': status,
50             'detail': detail
51         },
52         status=status
53     )
54
55
56 def view_safe_call_with_log(logger):
57     def view_safe_call(func):
58         def wrapper(*args, **kwargs):
59             try:
60                 return func(*args, **kwargs)
61             except NsdmDuplicateSubscriptionException as e:
62                 logger.error(e.message)
63                 return make_error_resp(
64                     detail=e.message,
65                     status=status.HTTP_303_SEE_OTHER
66                 )
67             except VnfPkgDuplicateSubscriptionException as e:
68                 logger.error(e.message)
69                 return make_error_resp(
70                     detail=e.message,
71                     status=status.HTTP_303_SEE_OTHER
72                 )
73             except PackageNotFoundException as e:
74                 logger.error(e.message)
75                 return make_error_resp(
76                     detail=e.message,
77                     status=status.HTTP_404_NOT_FOUND
78                 )
79             except ResourceNotFoundException as e:
80                 logger.error(e.message)
81                 return make_error_resp(
82                     detail=e.message,
83                     status=status.HTTP_404_NOT_FOUND
84                 )
85             except ArtifactNotFoundException as e:
86                 logger.error(e.message)
87                 return make_error_resp(
88                     detail=e.message,
89                     status=status.HTTP_404_NOT_FOUND
90                 )
91             except BadRequestException as e:
92                 logger.error(e.message)
93                 return make_error_resp(
94                     detail=e.message,
95                     status=status.HTTP_400_BAD_REQUEST
96                 )
97             except NsdmBadRequestException as e:
98                 logger.error(e.message)
99                 return make_error_resp(
100                     detail=e.message,
101                     status=status.HTTP_400_BAD_REQUEST
102                 )
103             except VnfPkgSubscriptionException as e:
104                 logger.error(e.message)
105                 return make_error_resp(
106                     detail=e.message,
107                     status=status.HTTP_500_INTERNAL_SERVER_ERROR
108                 )
109             except GenericparserException as e:
110                 logger.error(e.message)
111                 return make_error_resp(
112                     detail=e.message,
113                     status=status.HTTP_500_INTERNAL_SERVER_ERROR
114                 )
115             except Exception as e:
116                 logger.error(e.message)
117                 logger.error(traceback.format_exc())
118                 return make_error_resp(
119                     detail='Unexpected exception',
120                     status=status.HTTP_500_INTERNAL_SERVER_ERROR
121                 )
122         return wrapper
123     return view_safe_call