Skip to content
Snippets Groups Projects
Commit bf2211cf authored by Robert Latta's avatar Robert Latta
Browse files

ensured all contacts are added to classification responses

parent bc4eea18
Branches
Tags
No related merge requests found
......@@ -2,7 +2,8 @@ import logging
import re
from collections import OrderedDict, defaultdict
from copy import copy
from itertools import chain
from itertools import chain, groupby
from operator import itemgetter
from inventory_provider import environment
from inventory_provider.db import ims
......@@ -75,6 +76,18 @@ def get_customer_service_emails(ds: IMS):
yield k, sorted(list(v))
def get_circuit_related_customer_ids(ds: IMS):
relations = sorted(
list(
ds.get_filtered_entities(
'CircuitCustomerRelation',
'circuit.inventoryStatusId== 3')
), key=itemgetter('circuitid'))
return {k: [c['customerid'] for c in v] for k, v in
groupby(relations, key=itemgetter('circuitid'))}
def get_port_id_services(ds: IMS):
circuit_nav_props = [
ims.CIRCUIT_PROPERTIES['Ports'],
......
......@@ -185,12 +185,12 @@ def get_interface_services_and_loc(ims_source_equipment, ims_interface, redis):
for s in json.loads(raw_services.decode('utf-8')):
related_services.update(
{r['id']: r for r in s['related-services']})
contacts.update(set(s.pop('contacts', set())))
if s['circuit_type'] == 'service':
contacts.update(set(s.pop('contacts', set())))
_format_service(s)
result['services'].append(s)
result['related-services'] = list(related_services.values())
result['contacts'] = sorted(list(contacts))
result['related-services'] = list(related_services.values())
if not result['services']:
result.pop('services', None)
......
......@@ -574,6 +574,8 @@ def update_circuit_hierarchy_and_port_id_services(self, use_current=False):
{k: v for k, v in ims_data.get_customer_service_emails(ds1)}
circuit_ids_to_monitor = \
list(ims_data.get_monitored_circuit_ids(ds1))
additional_circuit_customer_ids = \
ims_data.get_circuit_related_customer_ids(ds1)
hierarchy = None
port_id_details = defaultdict(list)
......@@ -613,12 +615,18 @@ def update_circuit_hierarchy_and_port_id_services(self, use_current=False):
else:
return 0
def _get_circuit_contacts(c):
customer_ids = {c['customerid']}
customer_ids.update(additional_circuit_customer_ids.get(c['id'], []))
return set().union(
*[customer_contacts.get(cid, []) for cid in customer_ids])
def _populate_hierarchy():
nonlocal hierarchy
hierarchy = {}
for d in ims_data.get_circuit_hierarchy(ds1):
d['contacts'] = customer_contacts.get(d['customerid'], [])
hierarchy[d['id']] = d
d['contacts'] = sorted(list(_get_circuit_contacts(d)))
logger.debug("hierarchy complete")
def _populate_port_id_details():
......@@ -672,7 +680,7 @@ def update_circuit_hierarchy_and_port_id_services(self, use_current=False):
'circuit_type': c['circuit-type'],
'service_type': c['product'],
'project': c['project'],
'contacts': sorted(list(c['contacts']))
'contacts': c['contacts']
}
if c['id'] in circuit_ids_to_monitor:
rs[c['id']]['status'] = c['status']
......@@ -737,13 +745,7 @@ def update_circuit_hierarchy_and_port_id_services(self, use_current=False):
circuits = port_id_services.get(details['port_id'], [])
for circ in circuits:
contacts = set()
contacts.update(
customer_contacts.get(
circ['customerid'],
[]
)
)
contacts = _get_circuit_contacts(circ)
circ['fibre-routes'] = []
for x in set(_get_fibre_routes(circ['id'])):
c = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment