Adjust API level on swagger and set API doc expansion by default
[pti/o2.git] / o2ims / service / unit_of_work.py
index 40e0f76..0445996 100644 (file)
 # pylint: disable=attribute-defined-outside-init
 from __future__ import annotations
 import abc
-from sqlalchemy import create_engine
-from sqlalchemy.orm import sessionmaker
-from sqlalchemy.orm.session import Session
 
-from o2ims import config
-from o2ims.adapter import ocloud_repository
+from o2ims.domain.ocloud_repo import OcloudRepository,\
+    ResourcePoolRepository, ResourceRepository, ResourceTypeRepository,\
+    DeploymentManagerRepository
+from o2ims.domain.stx_repo import StxObjectRepository
 
 
 class AbstractUnitOfWork(abc.ABC):
-    oclouds: ocloud_repository.OcloudRepository
+    oclouds: OcloudRepository
+    resource_types: ResourceTypeRepository
+    resource_pools: ResourcePoolRepository
+    resources: ResourceRepository
+    deployment_managers: DeploymentManagerRepository
+    stxobjects: StxObjectRepository
 
     def __enter__(self):
         return self
@@ -36,9 +40,24 @@ 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)
+        for entry in self.deployment_managers.seen:
+            while entry.events:
+                yield entry.events.pop(0)
 
     @abc.abstractmethod
     def _commit(self):
@@ -47,32 +66,3 @@ class AbstractUnitOfWork(abc.ABC):
     @abc.abstractmethod
     def rollback(self):
         raise NotImplementedError
-
-
-DEFAULT_SESSION_FACTORY = sessionmaker(
-    bind=create_engine(
-        config.get_postgres_uri(),
-        isolation_level="REPEATABLE READ",
-    )
-)
-
-
-class SqlAlchemyUnitOfWork(AbstractUnitOfWork):
-    def __init__(self, session_factory=DEFAULT_SESSION_FACTORY):
-        self.session_factory = session_factory
-
-    def __enter__(self):
-        self.session = self.session_factory()  # type: Session
-        self.oclouds = ocloud_repository\
-            .OcloudSqlAlchemyRepository(self.session)
-        return super().__enter__()
-
-    def __exit__(self, *args):
-        super().__exit__(*args)
-        self.session.close()
-
-    def _commit(self):
-        self.session.commit()
-
-    def rollback(self):
-        self.session.rollback()