Skip to content
Snippets Groups Projects
Select Git revision
  • fef8db90b841646110ef035b63c82e2b30d8320d
  • develop default
  • master protected
  • feature/frontend-tests
  • 0.99
  • 0.98
  • 0.97
  • 0.96
  • 0.95
  • 0.94
  • 0.93
  • 0.92
  • 0.91
  • 0.90
  • 0.89
  • 0.88
  • 0.87
  • 0.86
  • 0.85
  • 0.84
  • 0.83
  • 0.82
  • 0.81
  • 0.80
24 results

excel_parser.py

Blame
  • circuit_tree.py 4.76 KiB
    import json
    import os
    from operator import itemgetter
    
    import click
    import redis
    from click import BadParameter
    from tree_format import format_tree
    
    from inventory_provider.db.ims import IMS, CIRCUIT_PROPERTIES, InventoryStatus
    
    username = 'TEST05'
    password = 'robert_Testing250'
    bt = os.getenv('IMS_BT')
    
    ds = IMS('http://83.97.94.128:2080/api', username, password, bt)
    
    NAV_PROPS = [
        CIRCUIT_PROPERTIES['Speed'],
        CIRCUIT_PROPERTIES['Product']
    ]
    
    
    @click.command()
    @click.option('-c', 'carriers', is_flag=True)
    @click.option('-l', 'local', is_flag=True)
    @click.option('-i', 'interface_', is_flag=True)
    @click.argument('root_identifier', type=click.STRING, required=True)
    def cli(carriers, local, interface_, root_identifier):
        if interface_ and not local:
            raise BadParameter('-i flag only works with -l flag')
        if local:
            if carriers:
                children_prop = 'carrier-circuits'
            else:
                children_prop = 'sub-circuits'
        else:
            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'])
    
        if local:
            r = redis.StrictRedis(
                host='localhost', db=0, decode_responses=True,
                encoding='utf-8')
    
            def _get_childcircuit_tree_local(circuit_id):
    
                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)
                        if v:
                            children.append(v)
                    _tree.append(children)
                else:
                    _tree.append([])
                return _tree
    
            if interface_:
    
                if_services = r.get(f'ims:interface_services:{root_identifier}')
                if if_services:
                    root_identifiers = [s['id'] for s in json.loads(if_services)]
                    children = []
                    for id_ in root_identifiers:
                        children.append(_get_childcircuit_tree_local(id_))
    
                    tree = [root_identifier, children]
                else:
                    print(f'No circuit found for: {root_identifier}')
                    exit(0)
            else:
                try:
                    root_identifier = int(root_identifier)
                except ValueError:
                    for k in r.scan_iter('ims:circuit_hierarchy:*', count=2000):
                        ch = r.get(k)
                        details = json.loads(ch)[0]
                        if root_identifier.lower() == details['name'].lower():
                            root_identifier = details['id']
                            break
                    else:
                        print(f'No circuit found for: {root_identifier}')
                        exit(0)
    
                tree = _get_childcircuit_tree_local(root_identifier)
        else:
    
            def _get_childcircuit_tree_remote(circuit_id):
                circuit = ds.get_entity_by_id(
                    'circuit', circuit_id, navigation_properties=NAV_PROPS)
                _tree = [
                    f'{circuit["id"]} -- {circuit["name"]} -- '
                    f'prod: {circuit["product"]["name"]} -- '
                    f'spd: {circuit["speed"]["name"]} -- '
                    f'status: {InventoryStatus(circuit["inventorystatusid"]).name}'
                ]
    
                if circuit[children_prop]:
    
                    children = []
                    for child_circuit in circuit[children_prop]:
                        children.append(_get_childcircuit_tree_remote(
                            child_circuit[childid]
                        ))
                    _tree.append(children)
                else:
                    _tree.append([])
                return _tree
    
            try:
                root_identifier = int(root_identifier)
            except ValueError:
                root_circuit = \
                    ds.get_entity_by_name('circuit', root_identifier)
                if root_circuit:
                    root_identifier = root_circuit['id']
                else:
                    print(f'No circuit found for: {root_identifier}')
                    exit(0)
    
            tree = _get_childcircuit_tree_remote(root_identifier)
        print(format_tree(
            tree, format_node=itemgetter(0), get_children=itemgetter(1))
        )
    
    
    if __name__ == '__main__':
        # 659386
        cli()