1*8ffdff6aSGreg Kroah-Hartman#!/usr/bin/env python3 2*8ffdff6aSGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0+ 3*8ffdff6aSGreg Kroah-Hartman 4*8ffdff6aSGreg Kroah-Hartmanfrom os import path 5*8ffdff6aSGreg Kroah-Hartmanimport os, csv 6*8ffdff6aSGreg Kroah-Hartmanfrom itertools import chain 7*8ffdff6aSGreg Kroah-Hartman 8*8ffdff6aSGreg Kroah-Hartmanfrom csv_collection import CSVCollection 9*8ffdff6aSGreg Kroah-Hartmanfrom ni_names import value_to_name 10*8ffdff6aSGreg Kroah-Hartmanimport ni_values 11*8ffdff6aSGreg Kroah-Hartman 12*8ffdff6aSGreg Kroah-HartmanCSV_DIR = 'csv' 13*8ffdff6aSGreg Kroah-Hartman 14*8ffdff6aSGreg Kroah-Hartmandef iter_src_values(D): 15*8ffdff6aSGreg Kroah-Hartman return D.items() 16*8ffdff6aSGreg Kroah-Hartman 17*8ffdff6aSGreg Kroah-Hartmandef iter_src(D): 18*8ffdff6aSGreg Kroah-Hartman for dest in D: 19*8ffdff6aSGreg Kroah-Hartman yield dest, 1 20*8ffdff6aSGreg Kroah-Hartman 21*8ffdff6aSGreg Kroah-Hartmandef create_csv(name, D, src_iter): 22*8ffdff6aSGreg Kroah-Hartman # have to change dest->{src:val} to src->{dest:val} 23*8ffdff6aSGreg Kroah-Hartman fieldnames = [value_to_name[i] for i in sorted(D.keys())] 24*8ffdff6aSGreg Kroah-Hartman fieldnames.insert(0, CSVCollection.source_column_name) 25*8ffdff6aSGreg Kroah-Hartman 26*8ffdff6aSGreg Kroah-Hartman S = dict() 27*8ffdff6aSGreg Kroah-Hartman for dest, srcD in D.items(): 28*8ffdff6aSGreg Kroah-Hartman for src,val in src_iter(srcD): 29*8ffdff6aSGreg Kroah-Hartman S.setdefault(src,{})[dest] = val 30*8ffdff6aSGreg Kroah-Hartman 31*8ffdff6aSGreg Kroah-Hartman S = sorted(S.items(), key = lambda src_destD : src_destD[0]) 32*8ffdff6aSGreg Kroah-Hartman 33*8ffdff6aSGreg Kroah-Hartman 34*8ffdff6aSGreg Kroah-Hartman csv_fname = path.join(CSV_DIR, name + '.csv') 35*8ffdff6aSGreg Kroah-Hartman with open(csv_fname, 'w') as F_csv: 36*8ffdff6aSGreg Kroah-Hartman dR = csv.DictWriter(F_csv, fieldnames, delimiter=';', quotechar='"') 37*8ffdff6aSGreg Kroah-Hartman dR.writeheader() 38*8ffdff6aSGreg Kroah-Hartman 39*8ffdff6aSGreg Kroah-Hartman # now change the json back into the csv dictionaries 40*8ffdff6aSGreg Kroah-Hartman rows = [ 41*8ffdff6aSGreg Kroah-Hartman dict(chain( 42*8ffdff6aSGreg Kroah-Hartman ((CSVCollection.source_column_name,value_to_name[src]),), 43*8ffdff6aSGreg Kroah-Hartman *(((value_to_name[dest],v),) for dest,v in destD.items()) 44*8ffdff6aSGreg Kroah-Hartman )) 45*8ffdff6aSGreg Kroah-Hartman for src, destD in S 46*8ffdff6aSGreg Kroah-Hartman ] 47*8ffdff6aSGreg Kroah-Hartman 48*8ffdff6aSGreg Kroah-Hartman dR.writerows(rows) 49*8ffdff6aSGreg Kroah-Hartman 50*8ffdff6aSGreg Kroah-Hartman 51*8ffdff6aSGreg Kroah-Hartmandef to_csv(): 52*8ffdff6aSGreg Kroah-Hartman for d in ['route_values', 'device_routes']: 53*8ffdff6aSGreg Kroah-Hartman try: 54*8ffdff6aSGreg Kroah-Hartman os.makedirs(path.join(CSV_DIR,d)) 55*8ffdff6aSGreg Kroah-Hartman except: 56*8ffdff6aSGreg Kroah-Hartman pass 57*8ffdff6aSGreg Kroah-Hartman 58*8ffdff6aSGreg Kroah-Hartman for family, dst_src_map in ni_values.ni_route_values.items(): 59*8ffdff6aSGreg Kroah-Hartman create_csv(path.join('route_values',family), dst_src_map, iter_src_values) 60*8ffdff6aSGreg Kroah-Hartman 61*8ffdff6aSGreg Kroah-Hartman for device, dst_src_map in ni_values.ni_device_routes.items(): 62*8ffdff6aSGreg Kroah-Hartman create_csv(path.join('device_routes',device), dst_src_map, iter_src) 63*8ffdff6aSGreg Kroah-Hartman 64*8ffdff6aSGreg Kroah-Hartman 65*8ffdff6aSGreg Kroah-Hartmanif __name__ == '__main__': 66*8ffdff6aSGreg Kroah-Hartman to_csv() 67