From d4bb5654cc358d8840ca5843736f9438f39e84e2 Mon Sep 17 00:00:00 2001
From: Erik Reid <erik.reid@geant.org>
Date: Sat, 22 Apr 2023 10:20:09 +0200
Subject: [PATCH] one possible way of combining similar methods

---
 gso/workflows/iptrunk/create_iptrunk.py | 27 +++++--------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

diff --git a/gso/workflows/iptrunk/create_iptrunk.py b/gso/workflows/iptrunk/create_iptrunk.py
index 2d4ae020..f4e7685e 100644
--- a/gso/workflows/iptrunk/create_iptrunk.py
+++ b/gso/workflows/iptrunk/create_iptrunk.py
@@ -19,26 +19,8 @@ from orchestrator.db.models import ProductTable, SubscriptionTable
 from orchestrator.forms.validators import Choice, choice_list
 from typing import List, Optional
 
-def a_side_device_selector() -> list:
-    device_subscriptions = {}
-    for device_id, device_description in (
-        SubscriptionTable.query.join(ProductTable)
-        .filter(
-            ProductTable.product_type == "Device",
-            SubscriptionTable.status == "active",
-        )
-        .with_entities(SubscriptionTable.subscription_id, SubscriptionTable.description)
-        .all()
-    ):
-        device_subscriptions[str(device_id)] = device_description
-
-    return choice_list(
-        Choice("DeviceEnumA", zip(device_subscriptions.keys(), device_subscriptions.items())),  # type:ignore
-        min_items=1,
-        max_items=1,
-    )
 
-def b_side_device_selector() -> list:
+def device_selector(choice_value: str) -> list:
     device_subscriptions = {}
     for device_id, device_description in (
         SubscriptionTable.query.join(ProductTable)
@@ -52,19 +34,20 @@ def b_side_device_selector() -> list:
         device_subscriptions[str(device_id)] = device_description
 
     return choice_list(
-        Choice("DeviceEnumB", zip(device_subscriptions.keys(), device_subscriptions.items())),  # type:ignore
+        Choice(choice_value, zip(device_subscriptions.keys(), device_subscriptions.items())),  # type:ignore
         min_items=1,
         max_items=1,
     )
 
+
 def initial_input_form_generator(product_name: str) -> FormGenerator:
     class CreateIptrunkForm(FormPage):
         class Config:
             title = product_name
 
         geant_s_sid: str
-        iptrunk_sideA_fqdn: a_side_device_selector()
-        iptrunk_sideB_fqdn: b_side_device_selector()
+        iptrunk_sideA_fqdn: device_selector(choice_value='DeviceEnumA')
+        iptrunk_sideB_fqdn: device_selector(choice_value='DeviceEnumB')
 
     user_input = yield CreateIptrunkForm
 
-- 
GitLab