-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathgen_data_dictionary.py
78 lines (65 loc) · 2.55 KB
/
gen_data_dictionary.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import argparse
import json
import csv
import os
import sys
def write_fields(writer, fields, product, exposure='-', peril='-'):
for field in fields:
# possibly add a required/optional column?
# should we deal with conditinoals?
field_row = {}
field_row['product'] = product
field_row['exposure'] = exposure
field_row['peril'] = peril
field_row['field_name'] = field['name']
field_row['type'] = field['type']
writer.writerow(field_row)
# Add subfields
for subfield in field.get('fields', []):
field_row = {}
field_row['product'] = product
field_row['exposure'] = exposure
field_row['peril'] = peril
field_row['field_name'] = field['name'] + "\\" + subfield['name']
field_row['type'] = subfield['type']
writer.writerow(field_row)
# Example: python gen_data_dictionary.py -d ~/socotra_config
def main(argv):
parser = argparse.ArgumentParser(
description='Data Dictionary Generator')
parser.add_argument('-o', '--output', default='output.csv',
required=False)
parser.add_argument('-d', '--directory', help='Config folder')
args = parser.parse_args(argv)
base_dir = args.directory
output_file = open(args.output, 'w')
headers = [
"product",
"exposure",
"peril",
"field_name",
"type"
]
writer = csv.DictWriter(output_file, fieldnames=headers)
writer.writeheader()
product_dir = base_dir + '/products'
for product in sorted(os.listdir(product_dir)):
if product.startswith('.'):
continue
policy = json.load(open(product_dir + '/' + product +
'/policy/policy.json'))
write_fields(writer, policy['fields'], product)
exp_dir = product_dir + '/' + product + '/policy/exposures'
for exp in sorted(os.listdir(exp_dir)):
if exp.startswith('.'):
continue
exposure = json.load(open(exp_dir + '/' + exp + '/exposure.json'))
write_fields(writer, exposure['fields'], product, exp)
peril_dir = exp_dir + '/' + exp + '/perils'
for peril in sorted(os.listdir(peril_dir)):
if peril.startswith('.') or peril.endswith('.liquid'):
continue
peril = json.load(open(peril_dir + '/' + peril))
write_fields(writer, peril['fields'], product, exp, peril)
if __name__ == "__main__":
main(sys.argv[1:])