summaryrefslogtreecommitdiffstats
path: root/components/pm-subscription-handler/pmsh_service/mod/api/controller.py
diff options
context:
space:
mode:
Diffstat (limited to 'components/pm-subscription-handler/pmsh_service/mod/api/controller.py')
-rwxr-xr-xcomponents/pm-subscription-handler/pmsh_service/mod/api/controller.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/components/pm-subscription-handler/pmsh_service/mod/api/controller.py b/components/pm-subscription-handler/pmsh_service/mod/api/controller.py
index 21d29caf..8af6c777 100755
--- a/components/pm-subscription-handler/pmsh_service/mod/api/controller.py
+++ b/components/pm-subscription-handler/pmsh_service/mod/api/controller.py
@@ -1,5 +1,5 @@
# ============LICENSE_START===================================================
-# Copyright (C) 2019-2020 Nordix Foundation.
+# Copyright (C) 2019-2021 Nordix Foundation.
# ============================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -17,6 +17,11 @@
# ============LICENSE_END=====================================================
from mod.subscription import Subscription
+from http import HTTPStatus
+from mod import logger
+from mod.api.services import subscription_service
+from connexion import NoContent
+from mod.api.custom_exception import InvalidDataException, DuplicateDataException
def status():
@@ -40,3 +45,34 @@ def get_all_sub_to_nf_relations():
"""
subs_dict = [s.serialize() for s in Subscription.get_all()]
return subs_dict
+
+
+def post_subscription(body):
+ """
+ Creates a subscription
+
+ Args:
+ body (dict): subscription request body to save.
+
+ Returns:
+ Success : NoContent, 201
+ Invalid Data : Invalid message, 400
+ Duplicate Data : Duplicate field detail, 409
+
+ Raises:
+ Error: If anything fails in the server.
+ """
+ response = NoContent, HTTPStatus.CREATED.value
+ try:
+ subscription_service.create_subscription(body['subscription'])
+ except DuplicateDataException as e:
+ logger.error(f'Failed to create subscription for '
+ f'{body["subscription"]["subscriptionName"]} due to duplicate data: {e}',
+ exc_info=True)
+ response = e.duplicate_field_info, HTTPStatus.CONFLICT.value
+ except InvalidDataException as e:
+ logger.error(f'Failed to create subscription for '
+ f'{body["subscription"]["subscriptionName"]} due to invalid data: {e}',
+ exc_info=True)
+ response = e.invalid_message, HTTPStatus.BAD_REQUEST.value
+ return response