diff options
-rw-r--r-- | lcm/ns/views/deprecated/common.py | 62 | ||||
-rw-r--r-- | lcm/ns/views/deprecated/update_ns_view.py | 36 |
2 files changed, 78 insertions, 20 deletions
diff --git a/lcm/ns/views/deprecated/common.py b/lcm/ns/views/deprecated/common.py new file mode 100644 index 00000000..ac1d312c --- /dev/null +++ b/lcm/ns/views/deprecated/common.py @@ -0,0 +1,62 @@ +# Copyright 2019 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import traceback +import logging + +from rest_framework import status +from rest_framework.response import Response + +from lcm.pub.exceptions import BadRequestException +from lcm.pub.exceptions import NSLCMException + +logger = logging.getLogger(__name__) + + +def make_error_resp(status, detail): + return Response( + data={ + 'status': status, + 'detail': detail + }, + status=status + ) + + +def view_safe_call_with_log(logger): + def view_safe_call(func): + def wrapper(*args, **kwargs): + try: + return func(*args, **kwargs) + except BadRequestException as e: + logger.error(e.args[0]) + return make_error_resp( + detail=e.args[0], + status=status.HTTP_400_BAD_REQUEST + ) + except NSLCMException as e: + logger.error(e.args[0]) + return make_error_resp( + detail=e.args[0], + status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) + except Exception as e: + logger.error(e.args[0]) + logger.error(traceback.format_exc()) + return make_error_resp( + detail='Unexpected exception', + status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) + return wrapper + return view_safe_call diff --git a/lcm/ns/views/deprecated/update_ns_view.py b/lcm/ns/views/deprecated/update_ns_view.py index 47ab0c4f..706f4991 100644 --- a/lcm/ns/views/deprecated/update_ns_view.py +++ b/lcm/ns/views/deprecated/update_ns_view.py @@ -26,6 +26,7 @@ from lcm.pub.exceptions import NSLCMException from lcm.pub.exceptions import BadRequestException from lcm.pub.utils.jobutil import JobUtil from lcm.jobs.enum import JOB_TYPE, JOB_ACTION +from .common import view_safe_call_with_log logger = logging.getLogger(__name__) @@ -39,24 +40,19 @@ class NSUpdateView(APIView): status.HTTP_500_INTERNAL_SERVER_ERROR: "Inner error" } ) + @view_safe_call_with_log(logger=logger) def post(self, request, ns_instance_id): - try: - logger.debug("Enter UpdateNSView::post %s, %s", request.data, ns_instance_id) - req_serializer = UpdateNsReqSerializer(data=request.data) - if not req_serializer.is_valid(): - raise BadRequestException(req_serializer.errors) - - job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.UPDATE, ns_instance_id) - NSUpdateService(ns_instance_id, request.data, job_id).start() - - resp_serializer = _NsOperateJobSerializer(data={'jobId': job_id}) - if not resp_serializer.is_valid(): - raise NSLCMException(resp_serializer.errors) - - logger.debug("Leave UpdateNSView::post ret=%s", resp_serializer.data) - return Response(data=resp_serializer.data, status=status.HTTP_202_ACCEPTED) - except BadRequestException as e: - return Response(data={'error': e.args[0]}, status=status.HTTP_400_BAD_REQUEST) - except Exception as e: - logger.error("Exception in UpdateNSView: %s", e.args[0]) - return Response(data={'error': e.args[0]}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + logger.debug("Enter UpdateNSView::post %s, %s", request.data, ns_instance_id) + req_serializer = UpdateNsReqSerializer(data=request.data) + if not req_serializer.is_valid(): + raise BadRequestException(req_serializer.errors) + + job_id = JobUtil.create_job(JOB_TYPE.NS, JOB_ACTION.UPDATE, ns_instance_id) + NSUpdateService(ns_instance_id, request.data, job_id).start() + + resp_serializer = _NsOperateJobSerializer(data={'jobId': job_id}) + if not resp_serializer.is_valid(): + raise NSLCMException(resp_serializer.errors) + + logger.debug("Leave UpdateNSView::post ret=%s", resp_serializer.data) + return Response(data=resp_serializer.data, status=status.HTTP_202_ACCEPTED) |