From c07a65f432389938aa20b9391bafa71ab6877596 Mon Sep 17 00:00:00 2001
From: Robert Latta <robert.latta@geant.org>
Date: Wed, 2 Feb 2022 09:32:29 +0000
Subject: [PATCH] added SID retrieval and test

---
 inventory_provider/db/ims_data.py  |  9 +++++
 inventory_provider/tasks/worker.py |  8 +++++
 test/test_ims_data.py              | 53 +++++++++++++++++++++++++++++-
 3 files changed, 69 insertions(+), 1 deletion(-)

diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py
index e3a59750..271faaf0 100644
--- a/inventory_provider/db/ims_data.py
+++ b/inventory_provider/db/ims_data.py
@@ -84,6 +84,15 @@ def get_monitored_circuit_ids(ds: IMS):
         yield d['extrafieldvalueobjectinfo']['objectid']
 
 
+def get_ids_and_sids(ds: IMS):
+    for sid_circuit in ds.get_filtered_entities(
+        'ExtraFieldValue',
+        'extrafieldid == 3209 | value <> ""',
+        step_count=10000
+    ):
+        yield sid_circuit['objectid'], sid_circuit['value']
+
+
 def get_service_types(ds: IMS):
     for d in ds.get_filtered_entities(
             'ComboBoxData',
diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py
index b866a70a..f841b942 100644
--- a/inventory_provider/tasks/worker.py
+++ b/inventory_provider/tasks/worker.py
@@ -719,6 +719,7 @@ def extract_ims_data():
     lg_routers = []
     customer_contacts = {}
     circuit_ids_to_monitor = []
+    circuit_ids_and_sids = {}
     additional_circuit_customer_ids = {}
 
     hierarchy = {}
@@ -743,6 +744,11 @@ def extract_ims_data():
         circuit_ids_to_monitor = \
             list(ims_data.get_monitored_circuit_ids(ds=_ds()))
 
+    def _populate_sids():
+        nonlocal circuit_ids_and_sids
+        circuit_ids_and_sids = \
+            {cid: sid for cid, sid in ims_data.get_ids_and_sids(ds=_ds())}
+
     def _populate_additional_circuit_customer_ids():
         nonlocal additional_circuit_customer_ids
         additional_circuit_customer_ids = \
@@ -756,6 +762,7 @@ def extract_ims_data():
             executor.submit(_populate_customer_contacts): 'customer_contacts',
             executor.submit(_populate_circuit_ids_to_monitor):
                 'circuit_ids_to_monitor',
+            executor.submit(_populate_sids): 'sids',
             executor.submit(_populate_additional_circuit_customer_ids):
                 'additional_circuit_customer_ids'
         }
@@ -804,6 +811,7 @@ def extract_ims_data():
         'lg_routers': lg_routers,
         'customer_contacts': customer_contacts,
         'circuit_ids_to_monitor': circuit_ids_to_monitor,
+        'circuit_ids_sids': circuit_ids_and_sids,
         'additional_circuit_customer_ids': additional_circuit_customer_ids,
         'hierarchy': hierarchy,
         'port_id_details': port_id_details,
diff --git a/test/test_ims_data.py b/test/test_ims_data.py
index 7d07aff8..80abcc9d 100644
--- a/test/test_ims_data.py
+++ b/test/test_ims_data.py
@@ -8,7 +8,7 @@ from inventory_provider.db.ims import InventoryStatus
 from inventory_provider.db.ims_data import lookup_lg_routers, \
     get_node_locations, IMS_OPSDB_STATUS_MAP, \
     get_port_id_services, get_port_details, \
-    get_circuit_hierarchy, NODE_LOCATION_SCHEMA
+    get_circuit_hierarchy, get_ids_and_sids, NODE_LOCATION_SCHEMA
 
 
 def _json_test_data(filename):
@@ -298,3 +298,54 @@ def test_get_node_location(mocker):
             'latitude': 51.5308142,
         }
     })
+
+
+def test_get_circuit_ids_and_sids(mocker):
+    ims = mocker.patch('inventory_provider.db.ims.IMS')
+    ims.return_value.get_filtered_entities.return_value = \
+        [
+            {
+                'id': 999999,
+                'extrafieldid': 3209,
+                'objectid': 111111,
+                'value': 'SID-01',
+                'extrafield': None,
+                'links': None,
+                'extrafieldvalueobjectinfo': None,
+                'rowversion': '2021-12-10T19:40:51',
+                'errors': None,
+                'haserrors': False
+            },{
+                'id': 999998,
+                'extrafieldid': 3209,
+                'objectid': 111112,
+                'value': 'SID-02',
+                'extrafield': None,
+                'links': None,
+                'extrafieldvalueobjectinfo': None,
+                'rowversion': '2021-12-10T19:40:51',
+                'errors': None,
+                'haserrors': False
+            },{
+                'id': 999997,
+                'extrafieldid': 3209,
+                'objectid': 111113,
+                'value': 'SID-03',
+                'extrafield': None,
+                'links': None,
+                'extrafieldvalueobjectinfo': None,
+                'rowversion': '2021-12-10T19:40:51',
+                'errors': None,
+                'haserrors': False
+            },
+        ]
+    expected_response = [
+        (111111, 'SID-01'),
+        (111112, 'SID-02'),
+        (111113, 'SID-03')
+    ]
+
+    ds = inventory_provider.db.ims.IMS(
+        'dummy_base', 'dummy_username', 'dummy_password')
+    res = list(get_ids_and_sids(ds))
+    assert res == expected_response
-- 
GitLab