diff --git a/circuit_tree.py b/circuit_tree.py index 96b7928e6629f7715fcb94d37979c684e399bbfb..1d392e179a1d18bcec429a444cccb9d07eb1ebc4 100644 --- a/circuit_tree.py +++ b/circuit_tree.py @@ -1,10 +1,12 @@ +import json import os from operator import itemgetter import click +import redis from tree_format import format_tree -from inventory_provider.db.ims import IMS, CIRCUIT_PROPERTIES +from inventory_provider.db.ims import IMS, CIRCUIT_PROPERTIES, InventoryStatus username = 'TEST05' password = '' @@ -20,25 +22,33 @@ NAV_PROPS = [ @click.command() @click.option('-c', 'carriers', is_flag=True) +@click.option('-l', 'local', is_flag=True) @click.argument('root_circuit_id', type=click.INT, required=True) -def cli(carriers, root_circuit_id): - if carriers: - children_prop = 'carriercircuits' - childid = 'carriercircuitid' - NAV_PROPS.append(CIRCUIT_PROPERTIES['CarrierCircuits']) +def cli(carriers, local, root_circuit_id): + if local: + if carriers: + children_prop = 'carrier-circuits' + else: + children_prop = 'sub-circuits' else: - children_prop = 'subcircuits' - childid = 'subcircuitid' - NAV_PROPS.append(CIRCUIT_PROPERTIES['SubCircuits']) + if carriers: + children_prop = 'carriercircuits' + childid = 'carriercircuitid' + NAV_PROPS.append(CIRCUIT_PROPERTIES['CarrierCircuits']) + else: + children_prop = 'subcircuits' + childid = 'subcircuitid' + NAV_PROPS.append(CIRCUIT_PROPERTIES['SubCircuits']) def _get_childcircuit_tree(circuit_id): - circuit = ds.get_entity_by_id( 'circuit', circuit_id, navigation_properties=NAV_PROPS) + # print(circuit["id"]) _tree = [ f'{circuit["id"]} -- {circuit["name"]} -- ' - f'prod. {circuit["product"]["name"]} -- ' - f'spd. {circuit["speed"]["name"]}' + f'prod: {circuit["product"]["name"]} -- ' + f'spd: {circuit["speed"]["name"]} -- ' + f'status: {InventoryStatus(circuit["inventorystatusid"]).name}' ] if circuit[children_prop]: @@ -52,7 +62,40 @@ def cli(carriers, root_circuit_id): else: _tree.append([]) return _tree - tree = _get_childcircuit_tree(root_circuit_id) + + def _get_childcircuit_tree_local(circuit_id, r): + circuit = r.get(f'ims:circuit_hierarchy:{circuit_id}') + if not circuit: + return None + circuit = json.loads(circuit)[0] + _tree = [ + f'{circuit["id"]} -- {circuit["name"]} -- ' + f'prod: {circuit["product"]} -- ' + f'spd: {circuit["speed"]} -- ' + f'status: {circuit["status"]}' + ] + + if circuit.get(children_prop, None): + + children = [] + for child_id in circuit[children_prop]: + v = _get_childcircuit_tree_local(child_id, r) + if v: + children.append(v) + _tree.append(children) + else: + _tree.append([]) + return _tree + + if local: + tree = _get_childcircuit_tree_local( + root_circuit_id, + redis.StrictRedis( + host='localhost', db=0, decode_responses=True, + encoding='utf-8') + ) + else: + tree = _get_childcircuit_tree(root_circuit_id) print(format_tree( tree, format_node=itemgetter(0), get_children=itemgetter(1)) )