Skip to content

Commit 58a5ca9

Browse files
committed
Reimplement apply.py
1 parent 78e9c4a commit 58a5ca9

2 files changed

Lines changed: 121 additions & 88 deletions

File tree

ApplyCommand.cs

Lines changed: 0 additions & 88 deletions
This file was deleted.

apply.py

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import sys
2+
3+
from pathlib import Path
4+
from ruamel.yaml import YAML
5+
from ruamel.yaml.comments import CommentedMap
6+
from ruamel.yaml.comments import CommentedSeq
7+
from ruamel.yaml.compat import StringIO
8+
9+
APPLY_PENDING = sys.argv[1] == 'true'
10+
11+
class MyYAML(YAML):
12+
def dump(self, data, stream=None, **kw):
13+
inefficient = False
14+
if stream is None:
15+
inefficient = True
16+
stream = StringIO()
17+
YAML.dump(self, data, stream, **kw)
18+
if inefficient:
19+
return stream.getvalue()
20+
21+
def order_keys(data, order):
22+
if not isinstance(data, CommentedMap):
23+
raise Exception("Not a CommentedMap")
24+
25+
reordered = CommentedMap()
26+
for key in order:
27+
if key in data:
28+
comment = data.ca.items.get(key, None)
29+
reordered[key] = data.pop(key)
30+
if comment:
31+
reordered.ca.items[key] = comment
32+
33+
for key in list(data):
34+
comment = data.ca.items.get(key, None)
35+
reordered[key] = data.pop(key)
36+
if comment:
37+
reordered.ca.items[key] = comment
38+
39+
data.clear()
40+
data.update(reordered)
41+
return data
42+
43+
def recurse(data, *args):
44+
for a in args:
45+
data = a(data)
46+
47+
ret = []
48+
for fld in data.get('fields', []):
49+
ret.append(recurse(fld, *args))
50+
51+
if len(ret) != 0:
52+
comment = data.ca.items.get('fields', None)
53+
data['fields'] = ret
54+
if comment:
55+
data.ca.items['fields'] = comment
56+
return data
57+
58+
def apply_flow_style(data):
59+
if 'targets' in data:
60+
comment = data.ca.items.get('targets', None)
61+
seq = CommentedSeq(data['targets'])
62+
seq.fa.set_flow_style()
63+
data['targets'] = seq
64+
if comment:
65+
data.ca.items['targets'] = comment
66+
return data
67+
68+
def apply_names(data):
69+
if APPLY_PENDING:
70+
if 'pendingName' in data:
71+
comment = data.ca.items.get('pendingName', None)
72+
data['name'] = data.pop('pendingName')
73+
if comment:
74+
data.ca.items['name'] = comment
75+
return data
76+
77+
def apply_changes(data):
78+
if APPLY_PENDING:
79+
if 'pendingFields' in data:
80+
comment = data.ca.items.get('pendingFields', None)
81+
data['fields'] = data.pop('pendingFields')
82+
if comment:
83+
data.ca.items['fields'] = comment
84+
return data
85+
86+
yaml = MyYAML()
87+
yaml.preserve_quotes = True
88+
yaml.width = 4096
89+
yaml.indent(sequence=4, offset=2)
90+
91+
for path in sorted(list(Path('./schemas').glob('*/*.yml')), key = lambda p: p.stem):
92+
inp = path.read_text().strip()
93+
data = yaml.load(path)
94+
95+
data = order_keys(data, ['name', 'displayField', 'fields', 'pendingFields', 'relations'])
96+
data = apply_changes(data)
97+
98+
ret = []
99+
for fld in data['fields']:
100+
ret.append(recurse(fld, lambda f: order_keys(f, ['name', 'pendingName', 'comment', 'type', 'count', 'fields']), apply_flow_style, apply_names))
101+
if len(ret) != 0:
102+
comment = data.ca.items.get('fields', None)
103+
data['fields'] = ret
104+
if comment:
105+
data.ca.items['fields'] = comment
106+
107+
if 'pendingFields' in data:
108+
ret = []
109+
for fld in data['pendingFields']:
110+
ret.append(recurse(fld, lambda f: order_keys(f, ['name', 'pendingName', 'type', 'count', 'fields']), apply_flow_style, apply_names))
111+
if len(ret) != 0:
112+
comment = data.ca.items.get('pendingFields', None)
113+
data['pendingFields'] = ret
114+
if comment:
115+
data.ca.items['pendingFields'] = comment
116+
117+
output = yaml.dump(data).strip()
118+
if inp != output:
119+
print(path, 'changed')
120+
#print(output)
121+
path.write_text(output)

0 commit comments

Comments
 (0)