\r
from drf_yasg.utils import swagger_auto_schema\r
from lcm.nf.biz.create_subscription import CreateSubscription\r
+from lcm.nf.biz.query_subscription import QuerySubscription\r
from rest_framework import status\r
from rest_framework.response import Response\r
from rest_framework.views import APIView\r
\r
from lcm.nf.serializers.lccn_subscription_request import LccnSubscriptionRequestSerializer\r
from lcm.nf.serializers.lccn_subscription import LccnSubscriptionSerializer\r
+from lcm.nf.serializers.lccn_subscriptions import LccnSubscriptionsSerializer\r
+from lcm.nf.serializers.response import ProblemDetailsSerializer\r
from lcm.pub.exceptions import NFLCMException\r
\r
logger = logging.getLogger(__name__)\r
+VALID_FILTERS = ["operationTypes", "operationStates", "notificationTypes", "vnfInstanceId"]\r
+\r
+\r
+def get_problem_details_serializer(status_code, error_message):\r
+ problem_details = {\r
+ "status": status_code,\r
+ "detail": error_message\r
+ }\r
+ problem_details_serializer = ProblemDetailsSerializer(data=problem_details)\r
+ problem_details_serializer.is_valid()\r
+ return problem_details_serializer\r
\r
\r
class SubscriptionsView(APIView):\r
request_body=LccnSubscriptionRequestSerializer(),\r
responses={\r
status.HTTP_201_CREATED: LccnSubscriptionSerializer(),\r
- status.HTTP_303_SEE_OTHER: "",\r
- status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"\r
+ status.HTTP_303_SEE_OTHER: ProblemDetailsSerializer(),\r
+ status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()\r
}\r
)\r
def post(self, request):\r
logger.error(e.message)\r
logger.error(traceback.format_exc())\r
return Response(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r
+\r
+ @swagger_auto_schema(\r
+ responses={\r
+ status.HTTP_200_OK: LccnSubscriptionsSerializer(),\r
+ status.HTTP_400_BAD_REQUEST: ProblemDetailsSerializer(),\r
+ status.HTTP_500_INTERNAL_SERVER_ERROR: ProblemDetailsSerializer()\r
+ }\r
+ )\r
+ def get(self, request):\r
+ logger.debug("SubscribeNotification--get::> %s" % request.query_params)\r
+ try:\r
+ if request.query_params and not set(request.query_params).issubset(set(VALID_FILTERS)):\r
+ problem_details_serializer = get_problem_details_serializer(status.HTTP_400_BAD_REQUEST, "Not a valid filter")\r
+ return Response(data=problem_details_serializer.data, status=status.HTTP_400_BAD_REQUEST)\r
+ resp_data = QuerySubscription(request.query_params).query_multi_subscriptions()\r
+\r
+ subscriptions_serializer = LccnSubscriptionsSerializer(data=resp_data)\r
+ if not subscriptions_serializer.is_valid():\r
+ raise NFLCMException(subscriptions_serializer.errors)\r
+\r
+ logger.debug("SubscribeNotification--get::> Remove default fields if exclude_default" +\r
+ " is specified")\r
+ return Response(data=subscriptions_serializer.data, status=status.HTTP_200_OK)\r
+ except NFLCMException as e:\r
+ logger.error(e.message)\r
+ problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR, traceback.format_exc())\r
+ return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r
+\r
+ except Exception as e:\r
+ logger.error(e.message)\r
+ logger.error(traceback.format_exc())\r
+ problem_details_serializer = get_problem_details_serializer(status.HTTP_500_INTERNAL_SERVER_ERROR, traceback.format_exc())\r
+ return Response(data=problem_details_serializer.data, status=status.HTTP_500_INTERNAL_SERVER_ERROR)\r