From a95bfff36293215a809319c6d62a5a2275194298 Mon Sep 17 00:00:00 2001
From: Karel van Klink <karel.vanklink@geant.org>
Date: Mon, 13 Nov 2023 17:20:37 +0000
Subject: [PATCH] add docstrings to the tasks

---
 gso/workflows/tasks/__init__.py       |  1 +
 gso/workflows/tasks/import_iptrunk.py |  6 ++++++
 gso/workflows/tasks/import_router.py  | 17 ++++++++++-------
 gso/workflows/tasks/import_site.py    |  7 +++++++
 4 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/gso/workflows/tasks/__init__.py b/gso/workflows/tasks/__init__.py
index e69de29b..3f8c2160 100644
--- a/gso/workflows/tasks/__init__.py
+++ b/gso/workflows/tasks/__init__.py
@@ -0,0 +1 @@
+"""Task workflows that are either started by an :term:`API` endpoint, or by one of the set schedules."""
diff --git a/gso/workflows/tasks/import_iptrunk.py b/gso/workflows/tasks/import_iptrunk.py
index b6b9d836..ef2f20c7 100644
--- a/gso/workflows/tasks/import_iptrunk.py
+++ b/gso/workflows/tasks/import_iptrunk.py
@@ -1,3 +1,5 @@
+"""A creation workflow for adding an existing IP trunk to the service database."""
+
 import ipaddress
 
 from orchestrator import workflow
@@ -27,6 +29,7 @@ def _generate_routers() -> dict[str, str]:
 
 
 def initial_input_form_generator() -> FormGenerator:
+    """Take all information passed to this workflow by the :term:`API` endpoint that was called."""
     routers = _generate_routers()
     router_enum = Choice("Select a router", zip(routers.keys(), routers.items(), strict=True))  # type: ignore[arg-type]
 
@@ -61,6 +64,7 @@ def initial_input_form_generator() -> FormGenerator:
 
 @step("Create a new subscription")
 def create_subscription(customer: str) -> State:
+    """Create a new subscription in the service database."""
     customer_id = get_customer_by_name(customer)["id"]
     product_id = subscriptions.get_product_id_by_name(ProductType.IP_TRUNK)
     subscription = IptrunkInactive.from_product_id(product_id, customer_id)
@@ -77,6 +81,7 @@ def update_ipam_stub_for_subscription(
     iptrunk_ipv4_network: ipaddress.IPv4Network,
     iptrunk_ipv6_network: ipaddress.IPv6Network,
 ) -> State:
+    """Update :term:`IPAM` information in the subscription."""
     subscription.iptrunk.iptrunk_ipv4_network = iptrunk_ipv4_network
     subscription.iptrunk.iptrunk_ipv6_network = iptrunk_ipv6_network
 
@@ -89,6 +94,7 @@ def update_ipam_stub_for_subscription(
     target=Target.SYSTEM,
 )
 def import_iptrunk() -> StepList:
+    """Import an IP trunk without provisioning it."""
     return (
         init
         >> create_subscription
diff --git a/gso/workflows/tasks/import_router.py b/gso/workflows/tasks/import_router.py
index 31e936ee..77c8de5f 100644
--- a/gso/workflows/tasks/import_router.py
+++ b/gso/workflows/tasks/import_router.py
@@ -1,3 +1,5 @@
+"""A creation workflow that adds an existing router to the service database."""
+
 import ipaddress
 from uuid import UUID
 
@@ -10,7 +12,7 @@ from orchestrator.workflows.steps import resync, set_status, store_process_subsc
 
 from gso.products import ProductType
 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 PortNumber, RouterRole, RouterVendor, generate_fqdn
 from gso.products.product_types import router
 from gso.products.product_types.router import RouterInactive
 from gso.products.product_types.site import Site
@@ -35,6 +37,7 @@ def _get_site_by_name(site_name: str) -> Site:
 
 @step("Create subscription")
 def create_subscription(customer: str) -> State:
+    """Create a new subscription object."""
     customer_id = get_customer_by_name(customer)["id"]
     product_id: UUID = subscriptions.get_product_id_by_name(ProductType.ROUTER)
     subscription = RouterInactive.from_product_id(product_id, customer_id)
@@ -46,6 +49,7 @@ def create_subscription(customer: str) -> State:
 
 
 def initial_input_form_generator() -> FormGenerator:
+    """Generate a form that is filled in using information passed through the :term:`API` endpoint."""
     class ImportRouter(FormPage):
         class Config:
             title = "Import Router"
@@ -85,14 +89,12 @@ def initialize_subscription(
     router_ias_lt_ipv4_network: ipaddress.IPv4Network | None = None,
     router_ias_lt_ipv6_network: ipaddress.IPv6Network | None = None,
 ) -> State:
+    """Initialise the router subscription using input data."""
     subscription.router.router_ts_port = ts_port
     subscription.router.router_vendor = router_vendor
-    subscription.router.router_site = _get_site_by_name(router_site).site
-    fqdn = (
-        f"{hostname}.{subscription.router.router_site.site_name.lower()}."
-        f"{subscription.router.router_site.site_country_code.lower()}"
-        ".geant.net"
-    )
+    router_site_obj = _get_site_by_name(router_site).site
+    subscription.router.router_site = router_site_obj
+    fqdn = generate_fqdn(hostname, router_site_obj.site_name, router_site_obj.site_country_code)
     subscription.router.router_fqdn = fqdn
     subscription.router.router_role = router_role
     subscription.router.router_access_via_ts = True
@@ -116,6 +118,7 @@ def initialize_subscription(
     target=Target.SYSTEM,
 )
 def import_router() -> StepList:
+    """Import a router without provisioning it."""
     return (
         init
         >> create_subscription
diff --git a/gso/workflows/tasks/import_site.py b/gso/workflows/tasks/import_site.py
index 9e381509..e928861f 100644
--- a/gso/workflows/tasks/import_site.py
+++ b/gso/workflows/tasks/import_site.py
@@ -1,3 +1,5 @@
+"""A creation workflow for importing an existing site."""
+
 from uuid import UUID
 
 from orchestrator.forms import FormPage
@@ -16,6 +18,10 @@ from gso.workflows.site.create_site import initialize_subscription
 
 @step("Create subscription")
 def create_subscription(customer: str) -> State:
+    """Create a new subscription object in the service database.
+
+    FIXME: all attributes passed by the input form appear to be unused
+    """
     customer_id = get_customer_by_name(customer)["id"]
     product_id: UUID = subscriptions.get_product_id_by_name(ProductType.SITE)
     subscription = SiteInactive.from_product_id(product_id, customer_id)
@@ -27,6 +33,7 @@ def create_subscription(customer: str) -> State:
 
 
 def generate_initial_input_form() -> FormGenerator:
+    """Generate a form that is filled in using information passed through the :term:`API` endpoint."""
     class ImportSite(FormPage):
         class Config:
             title = "Import Site"
-- 
GitLab