From 8fd576ae81dec63c6bf4128fdd0d1000819043fb Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Fri, 6 Oct 2023 14:16:10 +0200
Subject: [PATCH] move productType enum into __init__ file for products

---
 gso/products/__init__.py                         | 16 +++++++++++-----
 gso/schemas/enums.py                             | 11 -----------
 gso/services/subscriptions.py                    | 12 +++++-------
 gso/workflows/tasks/import_iptrunk.py            |  2 +-
 gso/workflows/tasks/import_router.py             |  2 +-
 gso/workflows/tasks/import_site.py               |  2 +-
 test/fixtures.py                                 |  2 +-
 .../iptrunks/iptrunks/test_create_iptrunks.py    |  2 +-
 test/workflows/site/test_create_site.py          |  2 +-
 9 files changed, 22 insertions(+), 29 deletions(-)
 delete mode 100644 gso/schemas/enums.py

diff --git a/gso/products/__init__.py b/gso/products/__init__.py
index df2529a3..c48474d7 100644
--- a/gso/products/__init__.py
+++ b/gso/products/__init__.py
@@ -1,16 +1,22 @@
 """Module that updates the domain model of :term:`GSO`. Should contain all types of subscriptions."""
 from orchestrator.domain import SUBSCRIPTION_MODEL_REGISTRY
+from pydantic_forms.types import strEnum
 
 from gso.products.product_types.iptrunk import Iptrunk
 from gso.products.product_types.router import Router
 from gso.products.product_types.site import Site
 
+
+class ProductType(strEnum):
+    SITE = "Site"
+    ROUTER = "Router"
+    IP_TRUNK = "IP trunk"
+
+
 SUBSCRIPTION_MODEL_REGISTRY.update(
     {
-        "Site": Site,
-        "Router": Router,
-        "IP trunk": Iptrunk,
+        ProductType.SITE.value: Site,
+        ProductType.ROUTER.value: Router,
+        ProductType.IP_TRUNK.value: Iptrunk,
     }
 )
-
-__all__ = ["Site", "Iptrunk", "Router"]
diff --git a/gso/schemas/enums.py b/gso/schemas/enums.py
deleted file mode 100644
index c803ede4..00000000
--- a/gso/schemas/enums.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from orchestrator.types import strEnum
-
-
-class ProductType(strEnum):
-    SITE = "Site"
-    ROUTER = "Router"
-    IP_TRUNK = "IP trunk"
-
-
-class SubscriptionStatus(strEnum):
-    ACTIVE = "active"
diff --git a/gso/services/subscriptions.py b/gso/services/subscriptions.py
index 5e234813..f1c6b075 100644
--- a/gso/services/subscriptions.py
+++ b/gso/services/subscriptions.py
@@ -8,14 +8,12 @@ from orchestrator.db import (
     SubscriptionInstanceValueTable,
     SubscriptionTable,
 )
+from orchestrator.types import SubscriptionLifecycle
 
-from gso.schemas.enums import ProductType, SubscriptionStatus
+from gso.products import ProductType
 
 
-def get_active_subscriptions(
-    product_type: str,
-    fields: list[str],
-) -> list[Subscription]:
+def get_active_subscriptions(product_type: str, fields: list[str]) -> list[Subscription]:
     """Retrieve active subscriptions for a specific product type.
 
     :param product_type: The type of the product for which to retrieve subscriptions.
@@ -32,7 +30,7 @@ def get_active_subscriptions(
         SubscriptionTable.query.join(ProductTable)
         .filter(
             ProductTable.product_type == product_type,
-            SubscriptionTable.status == SubscriptionStatus.ACTIVE,
+            SubscriptionTable.status == SubscriptionLifecycle.ACTIVE,
         )
         .with_entities(*dynamic_fields)
         .all()
@@ -91,6 +89,6 @@ def get_active_site_subscription_by_name(site_name: str) -> Subscription:
         .join(ResourceTypeTable)
         .filter(SubscriptionInstanceValueTable.value == site_name)
         .filter(ResourceTypeTable.resource_type == "site_name")
-        .filter(SubscriptionTable.status == SubscriptionStatus.ACTIVE)
+        .filter(SubscriptionTable.status == SubscriptionLifecycle.ACTIVE)
         .first()
     )
diff --git a/gso/workflows/tasks/import_iptrunk.py b/gso/workflows/tasks/import_iptrunk.py
index f1c3e6cf..fc03382e 100644
--- a/gso/workflows/tasks/import_iptrunk.py
+++ b/gso/workflows/tasks/import_iptrunk.py
@@ -11,7 +11,7 @@ from orchestrator.workflows.steps import resync, set_status, store_process_subsc
 from gso.products.product_blocks import PhyPortCapacity
 from gso.products.product_blocks.iptrunk import IptrunkType
 from gso.products.product_types.iptrunk import IptrunkInactive, IptrunkProvisioning
-from gso.schemas.enums import ProductType
+from gso.products import ProductType
 from gso.services import subscriptions
 from gso.services.crm import get_customer_by_name
 from gso.workflows.iptrunk.create_iptrunk import initialize_subscription
diff --git a/gso/workflows/tasks/import_router.py b/gso/workflows/tasks/import_router.py
index 0821e314..58582390 100644
--- a/gso/workflows/tasks/import_router.py
+++ b/gso/workflows/tasks/import_router.py
@@ -14,7 +14,7 @@ from gso.products.product_types import router
 from gso.products.product_types.router import RouterInactive
 from gso.products.product_types.site import Site
 from gso.products.shared import PortNumber
-from gso.schemas.enums import ProductType
+from gso.products import ProductType
 from gso.services import subscriptions
 from gso.services.crm import get_customer_by_name
 
diff --git a/gso/workflows/tasks/import_site.py b/gso/workflows/tasks/import_site.py
index 20967c71..b9ea20ed 100644
--- a/gso/workflows/tasks/import_site.py
+++ b/gso/workflows/tasks/import_site.py
@@ -8,7 +8,7 @@ from orchestrator.workflows.steps import resync, set_status, store_process_subsc
 
 from gso.products.product_blocks.site import SiteTier
 from gso.products.product_types.site import SiteInactive
-from gso.schemas.enums import ProductType
+from gso.products import ProductType
 from gso.services import subscriptions
 from gso.services.crm import get_customer_by_name
 from gso.workflows.site.create_site import initialize_subscription
diff --git a/test/fixtures.py b/test/fixtures.py
index 2f3ba899..65ad4c0d 100644
--- a/test/fixtures.py
+++ b/test/fixtures.py
@@ -9,8 +9,8 @@ from gso.products.product_blocks.router import RouterRole, RouterVendor
 from gso.products.product_blocks.site import SiteTier
 from gso.products.product_types.router import RouterInactive
 from gso.products.product_types.site import Site, SiteInactive
-from gso.schemas.enums import ProductType
 from gso.services import subscriptions
+from gso.products import ProductType
 
 CUSTOMER_ID: UUIDstr = "2f47f65a-0911-e511-80d0-005056956c1a"
 
diff --git a/test/workflows/iptrunks/iptrunks/test_create_iptrunks.py b/test/workflows/iptrunks/iptrunks/test_create_iptrunks.py
index cf50c2cc..b38253f1 100644
--- a/test/workflows/iptrunks/iptrunks/test_create_iptrunks.py
+++ b/test/workflows/iptrunks/iptrunks/test_create_iptrunks.py
@@ -6,7 +6,7 @@ import pytest
 from gso.products import Iptrunk
 from gso.products.product_blocks import PhyPortCapacity
 from gso.products.product_blocks.iptrunk import IptrunkType
-from gso.schemas.enums import ProductType
+from gso.products import ProductType
 from gso.services.crm import get_customer_by_name
 from gso.services.subscriptions import get_product_id_by_name
 from gso.workflows.utils import customer_selector
diff --git a/test/workflows/site/test_create_site.py b/test/workflows/site/test_create_site.py
index da25a2b0..6023f05a 100644
--- a/test/workflows/site/test_create_site.py
+++ b/test/workflows/site/test_create_site.py
@@ -2,7 +2,7 @@ import pytest
 
 from gso.products.product_blocks.site import SiteTier
 from gso.products.product_types.site import Site
-from gso.schemas.enums import ProductType
+from gso.products import ProductType
 from gso.services.crm import get_customer_by_name
 from gso.services.subscriptions import get_product_id_by_name
 from test.workflows import assert_complete, extract_state, run_workflow
-- 
GitLab