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