Add nfdeployment handlers
[pti/o2.git] / o2dms / api / dms_lcm_nfdeployment.py
index bdf5ea5..97eb12a 100644 (file)
@@ -14,8 +14,8 @@
 \r
 from sqlalchemy import select\r
 import uuid\r
+from o2dms.domain.states import NfDeploymentState\r
 from o2common.service import messagebus\r
-from o2dms.domain import events\r
 from o2common.service import unit_of_work\r
 from o2dms.adapter.orm import nfDeployment\r
 from o2dms.api.dms_dto import DmsLcmNfDeploymentDTO\r
@@ -48,19 +48,20 @@ def lcm_nfdeployment_create(
         bus: messagebus.MessageBus):\r
 \r
     uow = bus.uow\r
+    id = str(uuid.uuid4())\r
     with uow:\r
         _check_duplication(input, uow)\r
         _check_dependencies(input, uow)\r
-        id = str(uuid.uuid4())\r
         entity = NfDeployment(\r
             id, input['name'], deploymentManagerId, input['description'],\r
             input['descriptorId'], input['parentDeploymentId'])\r
         uow.nfdeployments.add(entity)\r
+        entity.transit_state(NfDeploymentState.NotInstalled)\r
 \r
-        # publish event\r
-        event = events.NfDeploymentCreated(NfDeploymentId=id)\r
+        # to be refactor later according to O2 DMS API design\r
+        entity.transit_state(NfDeploymentState.Installing)\r
         uow.commit()\r
-    bus.handle(event)\r
+    _handle_events(bus)\r
 \r
     return id\r
 \r
@@ -68,26 +69,63 @@ def lcm_nfdeployment_create(
 def lcm_nfdeployment_update(\r
         nfdeploymentid: str,\r
         input: DmsLcmNfDeploymentDTO.NfDeployment_update,\r
-        uow: unit_of_work.AbstractUnitOfWork):\r
+        bus: messagebus.MessageBus):\r
 \r
+    uow = bus.uow\r
     with uow:\r
-        entity = uow.nfdeployments.get(nfdeploymentid)\r
+        entity: NfDeployment = uow.nfdeployments.get(nfdeploymentid)\r
         entity.name = input['name']\r
         entity.description = input['description']\r
         entity.outputParams = input['parentDeploymentId']\r
+        entity.transit_state(NfDeploymentState.Updating)\r
         uow.commit()\r
+    _handle_events(bus)\r
     return True\r
 \r
 \r
-def lcm_nfdeployment_delete(\r
-        nfdeploymentid: str, uow: unit_of_work.AbstractUnitOfWork):\r
+def _handle_events(bus: messagebus.MessageBus):\r
+    # handle events\r
+    events = bus.uow.collect_new_events()\r
+    for event in events:\r
+        bus.handle(event)\r
+    return True\r
+\r
 \r
+def lcm_nfdeployment_uninstall(\r
+        nfdeploymentid: str,\r
+        bus: messagebus.MessageBus):\r
+\r
+    uow = bus.uow\r
     with uow:\r
-        uow.nfdeployments.delete(nfdeploymentid)\r
+        entity: NfDeployment = uow.nfdeployments.get(nfdeploymentid)\r
+        if entity.status == NfDeploymentState.Installed:\r
+            entity.transit_state(NfDeploymentState.Uninstalling)\r
+        elif entity.status == NfDeploymentState.Abnormal:\r
+            bus.uow.nfdeployments.delete(nfdeploymentid)\r
+        else:\r
+            entity.transit_state(NfDeploymentState.Abnormal)\r
         uow.commit()\r
+    _handle_events(bus)\r
     return True\r
 \r
 \r
+# def lcm_nfdeployment_delete(\r
+#         nfdeploymentid: str,\r
+#         bus: messagebus.MessageBus):\r
+\r
+#     uow = bus.uow\r
+#     with uow:\r
+#         entity = uow.nfdeployments.get(nfdeploymentid)\r
+#         if entity.status != NfDeploymentState.Initial:\r
+#             raise Exception(\r
+#                 "NfDeployment {} is not in status to delete".format(\r
+#                     nfdeploymentid))\r
+#         uow.nfdeployments.delete(nfdeploymentid)\r
+#         entity.transit_state(NfDeploymentState.Deleted)\r
+#         uow.commit()\r
+#     return True\r
+\r
+\r
 def _check_duplication(\r
         input: DmsLcmNfDeploymentDTO,\r
         uow: unit_of_work.AbstractUnitOfWork):\r