Advertisement
Zooarcher

Dict Multi help

Feb 1st, 2023
969
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.51 KB | None | 0 0
  1. def link_match_multi():
  2.     import json
  3.     testbed_file = 'cleaned_master.json'
  4.     with open(testbed_file, "r") as f:                
  5.         testbed = json.load(f)  
  6.          
  7.  
  8.     sites = set()
  9.     backhauls = set()
  10.     links = {}
  11.     for System_Name1, sysval1 in testbed.items():
  12.         for Network_Name1, netval1 in sysval1.items():
  13.             for Site_name1, siteval1 in netval1.items():                
  14.                 sites.add(f'{System_Name1}-{Network_Name1}-{Site_name1}')  
  15.                 for Site_Items1, item1 in siteval1.items():
  16.                     for Items_Check, check1 in item1.items():
  17.                         if Items_Check == 'Device_Type':
  18.                             if check1 == 'Backhaul':
  19.                                 # backhauls.add(Site_Items)
  20.  
  21.                                 for System_Name2, sysval2 in testbed.items():
  22.                                     for Network_Name2, netval2 in sysval2.items():
  23.                                         for Site_name2, siteval2 in netval2.items():  
  24.  
  25.                                             if Network_Name1 == Network_Name2:
  26.                                                 if Site_name1 != Site_name2:
  27.                                                    
  28.                                                     for Site_items2, item2 in siteval2.items():
  29.                                                         for Items_Check2, check2 in item2.items():
  30.                                                             if check2 == 'Backhaul':                                                                
  31.                                                                 if Site_name1 in Site_items2 and Site_name2 in Site_Items1:                                                                    
  32.                                                                    
  33.                                                                     if System_Name1 not in links:
  34.                                                                         links[System_Name1] = {}
  35.                                                                     if Network_Name1 not in links[System_Name1]:
  36.                                                                         links[System_Name1][Network_Name1] = {}
  37.                                                                     if Site_name1 not in links[System_Name1][Network_Name1]:
  38.                                                                         links[System_Name1][Network_Name1][Site_name1] = {}
  39.                                                                     if 'links' not in links[System_Name1][Network_Name1][Site_name1]:
  40.                                                                         links[System_Name1][Network_Name1][Site_name1]['links'] = []
  41.  
  42.                                                                     if Site_name2 not in links[System_Name1][Network_Name1][Site_name1]['links']:
  43.                                                                         links[System_Name1][Network_Name1][Site_name1]['links'].append(Site_name2)                                                                    
  44.  
  45.     with open('goole_files/site_links.json', 'w') as f:
  46.         json.dump(links, f, indent=4)
  47.     return sites, backhauls, links
  48.                                  
  49. # sites, backhauls, links = site_extract()
  50.  
  51. # sites, backhauls, links = link_match_multi()
  52. # print(f'Tower Sites')
  53. # print(len(sites))
  54. # print(len(backhauls))
  55. # print(len(links))
  56.  
  57. above is single core working version
  58. ################################################################
  59. below is trying to extract information for quicker checks... iterating is an issue :(
  60.  
  61. import json
  62. from pprint import pprint
  63. from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
  64. testbed_file = 'cleaned_master.json'
  65. with open(testbed_file, "r") as f:                
  66.     testbed = json.load(f)  
  67. backhauls = set()
  68. links = {}
  69.  
  70. def get_first_target(testbed_file):        
  71.     target = {}      
  72.     for System_Name1, sysval1 in testbed.items():
  73.         for Network_Name1, netval1 in sysval1.items():
  74.             for Site_name1, siteval1 in netval1.items():
  75.                 target = {'System_Name': System_Name1,
  76.                         'Network_Name': Network_Name1,
  77.                         'Site_name': Site_name1,
  78.                         'backhauls': []}
  79.                 for Site_Items1, item1 in siteval1.items():                    
  80.                     for Items_Check, check1 in item1.items():
  81.                         if Items_Check == 'Device_Type':                            
  82.                             if check1 == 'Backhaul':
  83.                                 backhauls.add(Site_Items1)                                                                                
  84.                                 target['backhauls'].append(Site_Items1)
  85.                                        
  86.                 if System_Name1 not in links:
  87.                     return target
  88.                 else:
  89.                     get_first_target(target)
  90.                 if Network_Name1 not in links[System_Name1]:
  91.                     return target
  92.                 else:
  93.                     get_first_target(target)
  94.                 if Site_name1 not in links[System_Name1][Network_Name1]:
  95.                     return target
  96.                 else:
  97.                     get_first_target(target)
  98.              
  99.                                                    
  100. def get_second_target(target):
  101.     System_Name1 = target['System_Name']    
  102.     Network_Name1 = target['Network_Name']
  103.     Site_name1 = target['Site_name']
  104.     Site_Items1 = target['backhauls']
  105.  
  106.     for System_Name2, sysval2 in testbed.items():
  107.         if System_Name2 == System_Name1:
  108.             for Network_Name2, netval2 in sysval2.items():
  109.                 for Site_name2, siteval2 in netval2.items():
  110.  
  111.                     if Network_Name1 == Network_Name2:
  112.                         if Site_name1 != Site_name2:
  113.                             destination = {'System_Name': System_Name2,
  114.                                                             'Network_Name': Network_Name2,
  115.                                                             'Site_name': Site_name2,
  116.                                                             'backhauls': []
  117.                                                             }
  118.  
  119.                             for Site_items2, item2 in siteval2.items():
  120.                                 for Items_Check2, check2 in item2.items():
  121.                                     if check2 == 'Backhaul':  
  122.                                         for item in Site_Items1:
  123.                                             if Site_name1 in Site_items2 and Site_name2 in Site_Items1:                                                
  124.                                                 destination['backhauls'].append(Site_items2)
  125.                                 return destination
  126.    
  127.      
  128. def check_links(run_check):
  129.     target, destination = run_check
  130.     System_Name1 = target['System_Name']    
  131.     Network_Name1 = target['Network_Name']
  132.     Site_name1 = target['Site_name']
  133.     Site_Items1 = target['backhauls']
  134.  
  135.     System_Name2 = destination['System_Name']    
  136.     Network_Name2 = destination['Network_Name']
  137.     Site_name2 = destination['Site_name']
  138.     Site_Items2 = destination['backhauls']
  139.  
  140.     if System_Name1 not in links:
  141.         links[System_Name1] = {}
  142.     if Network_Name1 not in links[System_Name1]:
  143.         links[System_Name1][Network_Name1] = {}
  144.     if Site_name1 not in links[System_Name1][Network_Name1]:
  145.         links[System_Name1][Network_Name1][Site_name1] = {}
  146.     if 'links' not in links[System_Name1][Network_Name1][Site_name1]:
  147.         links[System_Name1][Network_Name1][Site_name1]['links'] = []
  148.  
  149.     if Site_name2 not in links[System_Name1][Network_Name1][Site_name1]['links']:
  150.         links[System_Name1][Network_Name1][Site_name1]['links'].append(Site_name2)
  151.  
  152.     pprint(links)
  153.  
  154.    
  155.      
  156. def worker(run_check):
  157.     target, destination =  run_check
  158.     target = get_first_target(testbed_file)
  159.     destination = get_second_target(target)
  160.     links = check_links(links, target, destination)
  161.  
  162.  
  163. max_workers = 14
  164.  
  165. target = get_first_target(testbed)
  166. destination = get_second_target(target)
  167. run_check = target, destination
  168. for key in testbed:
  169.     with ThreadPoolExecutor(max_workers) as executor:
  170.         output = executor.submit(check_links, run_check)
  171.  
  172. pprint(links)
  173. # with open('goole_files/site_links2.json', 'a') as f:
  174. #     json.dump(links, f, indent=4)
  175.  
  176.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement