From bbbd0402aa929517007fc3c26b02ceab576964a3 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Mon, 28 Aug 2023 15:20:20 +0200
Subject: [PATCH] extract PortNumber to shared package

---
 gso/products/product_blocks/router.py | 12 +-----------
 gso/products/shared.py                | 11 +++++++++++
 gso/workflows/router/create_router.py |  2 +-
 gso/workflows/tasks/import_router.py  |  3 ++-
 4 files changed, 15 insertions(+), 13 deletions(-)
 create mode 100644 gso/products/shared.py

diff --git a/gso/products/product_blocks/router.py b/gso/products/product_blocks/router.py
index 200012a7..58026318 100644
--- a/gso/products/product_blocks/router.py
+++ b/gso/products/product_blocks/router.py
@@ -4,9 +4,9 @@ from typing import Optional
 
 from orchestrator.domain.base import ProductBlockModel
 from orchestrator.types import SubscriptionLifecycle, strEnum
-from pydantic import ConstrainedInt
 
 from gso.products.product_blocks.site import SiteBlock, SiteBlockInactive, SiteBlockProvisioning
+from gso.products.shared import PortNumber
 
 
 class RouterVendor(strEnum):
@@ -24,16 +24,6 @@ class RouterRole(strEnum):
     AMT = "amt"
 
 
-class PortNumber(ConstrainedInt):
-    """Constrained integer for valid port numbers.
-
-    The range from 49152 to 65535 is marked as ephemeral, and can therefore not be selected for permanent allocation.
-    """
-
-    gt = 0
-    le = 49151
-
-
 class RouterBlockInactive(
     ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="RouterBlock"
 ):
diff --git a/gso/products/shared.py b/gso/products/shared.py
new file mode 100644
index 00000000..81e08061
--- /dev/null
+++ b/gso/products/shared.py
@@ -0,0 +1,11 @@
+from pydantic import ConstrainedInt
+
+
+class PortNumber(ConstrainedInt):
+    """Constrained integer for valid port numbers.
+
+    The range from 49152 to 65535 is marked as ephemeral, and can therefore not be selected for permanent allocation.
+    """
+
+    gt = 0
+    le = 49151
diff --git a/gso/workflows/router/create_router.py b/gso/workflows/router/create_router.py
index 1f7b96c4..c94826f2 100644
--- a/gso/workflows/router/create_router.py
+++ b/gso/workflows/router/create_router.py
@@ -9,12 +9,12 @@ from orchestrator.types import FormGenerator, State, SubscriptionLifecycle, UUID
 from orchestrator.workflow import StepList, done, init, step, workflow
 from orchestrator.workflows.steps import resync, set_status, store_process_subscription
 from orchestrator.workflows.utils import wrap_create_initial_input_form
-from products.product_blocks.router import PortNumber
 
 from gso.products.product_blocks import router as router_pb
 from gso.products.product_types import router
 from gso.products.product_types.router import RouterInactive, RouterProvisioning
 from gso.products.product_types.site import Site
+from gso.products.shared import PortNumber
 from gso.services import ipam, provisioning_proxy, subscriptions
 from gso.services.provisioning_proxy import pp_interaction
 from gso.workflows.utils import customer_selector, iso_from_ipv4
diff --git a/gso/workflows/tasks/import_router.py b/gso/workflows/tasks/import_router.py
index 8f122b35..01b7081d 100644
--- a/gso/workflows/tasks/import_router.py
+++ b/gso/workflows/tasks/import_router.py
@@ -10,9 +10,10 @@ from orchestrator.workflow import StepList, done, init, step
 from orchestrator.workflows.steps import resync, set_status, store_process_subscription
 
 from gso.products.product_blocks import router as router_pb
-from gso.products.product_blocks.router import PortNumber, RouterRole, RouterVendor
+from gso.products.product_blocks.router import RouterRole, RouterVendor
 from gso.products.product_types import router
 from gso.products.product_types.router import RouterInactive
+from gso.products.shared import PortNumber
 from gso.products.product_types.site import Site
 from gso.schemas.enums import ProductType
 from gso.services import subscriptions
-- 
GitLab