Update domain for event handler 70/7070/2
authorBin Yang <bin.yang@windriver.com>
Tue, 16 Nov 2021 08:02:03 +0000 (16:02 +0800)
committerBin Yang <bin.yang@windriver.com>
Wed, 17 Nov 2021 02:01:10 +0000 (10:01 +0800)
Signed-off-by: Bin Yang <bin.yang@windriver.com>
Change-Id: I9d871bb8fa0635a9a5df18247ed340e54ad9ff69

o2ims/domain/base.py [new file with mode: 0644]
o2ims/domain/ocloud.py
o2ims/domain/ocloud_repo.py
o2ims/domain/stx_object.py
o2ims/domain/stx_repo.py
o2ims/service/unit_of_work.py

diff --git a/o2ims/domain/base.py b/o2ims/domain/base.py
new file mode 100644 (file)
index 0000000..f7eceb7
--- /dev/null
@@ -0,0 +1,21 @@
+# Copyright (C) 2021 Wind River Systems, Inc.\r
+#\r
+#  Licensed under the Apache License, Version 2.0 (the "License");\r
+#  you may not use this file except in compliance with the License.\r
+#  You may obtain a copy of the License at\r
+#\r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+#\r
+#  Unless required by applicable law or agreed to in writing, software\r
+#  distributed under the License is distributed on an "AS IS" BASIS,\r
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+#  See the License for the specific language governing permissions and\r
+#  limitations under the License.\r
+\r
+from typing import List\r
+from .events import Event\r
+\r
+\r
+class AgRoot:\r
+    def __init__(self) -> None:\r
+        self.events = []  # type: List[Event]\r
index e86e45c..7ed2c1e 100644 (file)
@@ -13,6 +13,8 @@
 #  limitations under the License.\r
 \r
 from __future__ import annotations\r
+\r
+from o2ims.domain.base import AgRoot\r
 # from dataclasses import dataclass\r
 # from datetime import date\r
 # from typing import Optional, List, Set\r
@@ -20,7 +22,7 @@ from .resource_type import ResourceTypeEnum
 # from uuid import UUID\r
 \r
 \r
-class Subscription:\r
+class Subscription(AgRoot):\r
     def __init__(self, id: str, callback: str, consumersubid: list = [],\r
                  filter: list = []) -> None:\r
         self.subscriptionId = id\r
@@ -45,7 +47,7 @@ class DeploymentManager:
         self.extensions = []\r
 \r
 \r
-class ResourcePool:\r
+class ResourcePool(AgRoot):\r
     def __init__(self, id: str, name: str, location: str,\r
                  ocloudid: str, gLocationId: str = '',\r
                  description: str = '') -> None:\r
@@ -58,7 +60,7 @@ class ResourcePool:
         self.extensions = []\r
 \r
 \r
-class ResourceType:\r
+class ResourceType(AgRoot):\r
     def __init__(self, typeid: str, name: str, typeEnum: ResourceTypeEnum,\r
                  ocloudid: str, vender: str = '', model: str = '',\r
                  version: str = '',\r
@@ -74,7 +76,7 @@ class ResourceType:
         self.extensions = []\r
 \r
 \r
-class Resource:\r
+class Resource(AgRoot):\r
     def __init__(self, resourceId: str, resourceTypeId: str,\r
                  resourcePoolId: str, oCloudId: str = '',\r
                  parentId: str = '', elements: list = [],\r
@@ -89,11 +91,11 @@ class Resource:
         self.extensions = []\r
 \r
 \r
-class Ocloud:\r
+class Ocloud(AgRoot):\r
     def __init__(self, ocloudid: str, name: str, imsendpoint: str,\r
                  globalcloudId: str = '',\r
                  description: str = '', version_number: int = 0) -> None:\r
-\r
+        super().__init__()\r
         self.oCloudId = ocloudid\r
         self.globalcloudId = globalcloudId\r
         self.version_number = version_number\r
@@ -104,7 +106,7 @@ class Ocloud:
         self.deploymentManagers = []\r
         self.resourceTypes = []\r
         self.extensions = []\r
-        self.events = []\r
+        self.events = []\r
 \r
     def addDeploymentManager(self,\r
                              deploymentManager: DeploymentManager):\r
index 48ad840..f3b43d2 100644 (file)
@@ -36,6 +36,7 @@ class OcloudRepository(abc.ABC):
 \r
     def update(self, ocloud: ocloud.Ocloud):\r
         self._update(ocloud)\r
+        self.seen.add(ocloud)\r
 \r
     # def update_fields(self, ocloudid: str, updatefields: dict):\r
     #     self._update(ocloudid, updatefields)\r
@@ -72,6 +73,7 @@ class ResourceTypeRepository(abc.ABC):
 \r
     def update(self, resource_type: ocloud.ResourceType):\r
         self._update(resource_type)\r
+        self.seen.add(resource_type)\r
 \r
     @abc.abstractmethod\r
     def _add(self, resource_type: ocloud.ResourceType):\r
@@ -105,6 +107,7 @@ class ResourcePoolRepository(abc.ABC):
 \r
     def update(self, resource_pool: ocloud.ResourcePool):\r
         self._update(resource_pool)\r
+        self.seen.add(resource_pool)\r
 \r
     @abc.abstractmethod\r
     def _add(self, resource_pool: ocloud.ResourcePool):\r
@@ -138,6 +141,7 @@ class ResourceRepository(abc.ABC):
 \r
     def update(self, resource: ocloud.Resource):\r
         self._update(resource)\r
+        self.seen.add(resource)\r
 \r
     @abc.abstractmethod\r
     def _add(self, resource: ocloud.Resource):\r
index e648755..90c166f 100644 (file)
@@ -15,6 +15,7 @@
 # from dataclasses import dataclass\r
 import datetime\r
 import json\r
+from o2ims.domain.base import AgRoot\r
 \r
 from o2ims.domain.resource_type import ResourceTypeEnum\r
 from o2common.helper import o2logging\r
@@ -25,7 +26,7 @@ class MismatchedModel(Exception):
     pass\r
 \r
 \r
-class StxGenericModel:\r
+class StxGenericModel(AgRoot):\r
     def __init__(self, type: ResourceTypeEnum,\r
                  api_response: dict = None, content_hash=None) -> None:\r
         if api_response:\r
index cb74480..c9ef6c2 100644 (file)
@@ -37,6 +37,7 @@ class StxObjectRepository(abc.ABC):
 \r
     def update(self, stx_obj: StxGenericModel):\r
         self._update(stx_obj)\r
+        self.seen.add(stx_obj)\r
 \r
     # def update_fields(self, stx_obj_id: str, updatefields: dict):\r
     #     self._update(stx_obj_id, updatefields)\r
index a06e9e0..f329ebc 100644 (file)
 from __future__ import annotations
 import abc
 
-from o2ims.domain.ocloud_repo import OcloudRepository
+from o2ims.domain.ocloud_repo import OcloudRepository,\
+    ResourcePoolRepository, ResourceRepository, ResourceTypeRepository
 from o2ims.domain.stx_repo import StxObjectRepository
 
 
 class AbstractUnitOfWork(abc.ABC):
     oclouds: OcloudRepository
+    resource_types: ResourceTypeRepository
+    resource_pools: ResourcePoolRepository
+    resources: ResourceRepository
     stxobjects: StxObjectRepository
 
     def __enter__(self):
@@ -34,9 +38,21 @@ class AbstractUnitOfWork(abc.ABC):
         self._commit()
 
     def collect_new_events(self):
-        for ocloud in self.oclouds.seen:
-            while ocloud.events:
-                yield ocloud.events.pop(0)
+        for entry in self.oclouds.seen:
+            while entry.events:
+                yield entry.events.pop(0)
+        for entry in self.resource_pools.seen:
+            while entry.events:
+                yield entry.events.pop(0)
+        for entry in self.resources.seen:
+            while entry.events:
+                yield entry.events.pop(0)
+        for entry in self.resource_types.seen:
+            while entry.events:
+                yield entry.events.pop(0)
+        for entry in self.stxobjects.seen:
+            while entry.events:
+                yield entry.events.pop(0)
 
     @abc.abstractmethod
     def _commit(self):