Add view common for catalog 92/84592/2
authorfujinhua <fu.jinhua@zte.com.cn>
Tue, 9 Apr 2019 03:42:39 +0000 (11:42 +0800)
committerfujinhua <fu.jinhua@zte.com.cn>
Tue, 9 Apr 2019 03:43:54 +0000 (11:43 +0800)
Change-Id: I00ff2fb2d9c95092dd270c267f19c1e80af0b4e4
Issue-ID: VFC-1306
Signed-off-by: fujinhua <fu.jinhua@zte.com.cn>
catalog/packages/views/common.py

index 94566eb..f6b4a06 100644 (file)
 # 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 catalog.pub.exceptions import CatalogException
+from catalog.pub.exceptions import NsdmBadRequestException
+from catalog.pub.exceptions import PackageNotFoundException
 
 logger = logging.getLogger(__name__)
 
@@ -29,3 +35,47 @@ def validate_data(data, serializer):
 
 def fmt_error_rsp(error_message, status):
     return {"errorMessage": error_message, "error": status}
+
+
+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 PackageNotFoundException as e:
+                logger.error(e.message)
+                return make_error_resp(
+                    detail=e.message,
+                    status=status.HTTP_404_NOT_FOUND
+                )
+            except NsdmBadRequestException as e:
+                logger.error(e.message)
+                return make_error_resp(
+                    detail=e.message,
+                    status=status.HTTP_400_BAD_REQUEST
+                )
+            except CatalogException as e:
+                logger.error(e.message)
+                return make_error_resp(
+                    detail=e.message,
+                    status=status.HTTP_500_INTERNAL_SERVER_ERROR
+                )
+            except Exception as e:
+                logger.error(e.message)
+                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