Skip to content

Commit 1f911b6

Browse files
bmaranvillegvwilson
authored andcommitted
write single json instead of python files
1 parent 2cf19ff commit 1f911b6

File tree

2 files changed

+67
-6
lines changed

2 files changed

+67
-6
lines changed

codegen/__init__.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
)
2323
from codegen.validators import (
2424
write_validator_py,
25+
get_validator_params,
26+
write_validator_json,
2527
write_data_validator_py,
2628
get_data_validator_instance,
2729
)
@@ -171,20 +173,26 @@ def perform_codegen(reformat=True):
171173
if node.is_compound and not isinstance(node, ElementDefaultsNode)
172174
]
173175

176+
validator_params = {}
174177
# Write out validators
175178
# --------------------
176179
# # ### Layout ###
177180
for node in all_layout_nodes:
178-
write_validator_py(outdir, node)
181+
# write_validator_py(outdir, node)
182+
get_validator_params(node, validator_params)
179183

180184
# ### Trace ###
181185
for node in all_trace_nodes:
182-
write_validator_py(outdir, node)
186+
# write_validator_py(outdir, node)
187+
get_validator_params(node, validator_params)
183188

184189
# ### Frames ###
185190
for node in all_frame_nodes:
186-
write_validator_py(outdir, node)
187-
191+
# write_validator_py(outdir, node)
192+
get_validator_params(node, validator_params)
193+
194+
os.makedirs(validators_pkgdir, exist_ok=True)
195+
write_validator_json(outdir, validator_params)
188196
# ### Data (traces) validator ###
189197
write_data_validator_py(outdir, base_traces_node)
190198

@@ -235,8 +243,8 @@ def perform_codegen(reformat=True):
235243

236244
# Output validator __init__.py files
237245
validators_pkg = opath.join(outdir, "validators")
238-
for path_parts, rel_classes in validator_rel_class_imports.items():
239-
write_init_py(validators_pkg, path_parts, [], rel_classes)
246+
# for path_parts, rel_classes in validator_rel_class_imports.items():
247+
# write_init_py(validators_pkg, path_parts, [], rel_classes)
240248

241249
# Write datatype __init__.py files
242250
# --------------------------------

codegen/validators.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os.path as opath
22
from io import StringIO
3+
import json
34

45
import _plotly_utils.basevalidators
56
from codegen.utils import CAVEAT, PlotlyNode, TraceNode, write_source_py
@@ -114,6 +115,58 @@ def write_validator_py(outdir, node: PlotlyNode):
114115

115116
write_source_py(validator_source, filepath, leading_newlines=2)
116117

118+
def get_validator_params(node: PlotlyNode, store: dict):
119+
"""
120+
Write out the JSON schema for the validator
121+
122+
Parameters
123+
----------
124+
node : PlotlyNode
125+
The datatype node (node.is_datatype must evaluate to true) for which
126+
to build a validator class
127+
store : dict
128+
Dictionary to store the JSON data for the validator
129+
Returns
130+
-------
131+
None
132+
"""
133+
assert isinstance(store, dict)
134+
assert node.is_datatype
135+
136+
raw_params = node.get_validator_params()
137+
params = dict([(k, eval(v)) for k, v in raw_params.items()])
138+
superclass_name = node.name_base_validator.split(".")[-1]
139+
140+
key = ".".join(node.parent_path_parts + (node.name_property,))
141+
store[key] = {"params": params, "superclass": superclass_name}
142+
143+
def write_validator_json(outdir, params: dict):
144+
"""
145+
Write out the JSON schema for the validator
146+
147+
Parameters
148+
----------
149+
outdir : str
150+
Root outdir in which the validators package should reside
151+
params : dict
152+
Dictionary to store the JSON data for the validator
153+
Returns
154+
-------
155+
None
156+
"""
157+
import json
158+
# Validate inputs
159+
# ---------------
160+
if not isinstance(params, dict):
161+
raise ValueError("Expected params to be a dictionary")
162+
163+
# Write file
164+
# ----------
165+
filepath = opath.join(outdir, "validators", "_validators.json")
166+
with open(filepath, "w") as f:
167+
f.write(json.dumps(params, indent=4))
168+
# f.write(str(params))
169+
117170

118171
def build_data_validator_params(base_trace_node: TraceNode):
119172
"""

0 commit comments

Comments
 (0)