1
1
import json
2
2
import os
3
- import os .path as opath
4
3
import shutil
5
- import subprocess
6
4
import sys
7
5
8
6
from codegen .datatypes import build_datatype_py , write_datatype_py # noqa: F401
@@ -87,45 +85,30 @@ def preprocess_schema(plotly_schema):
87
85
items ["colorscale" ] = items .pop ("concentrationscales" )
88
86
89
87
90
- def make_paths (outdir ):
91
- """Make various paths needed for formatting and linting ."""
88
+ def make_paths (codedir ):
89
+ """Make various paths needed for code generation ."""
92
90
93
- validators_dir = opath . join ( outdir , "validators" )
94
- graph_objs_dir = opath . join ( outdir , "graph_objs" )
95
- graph_objects_path = opath . join ( outdir , "graph_objects" , "__init__.py" )
91
+ validators_dir = codedir / "validators"
92
+ graph_objs_dir = codedir / "graph_objs"
93
+ graph_objects_path = codedir / "graph_objects" / "__init__.py"
96
94
return validators_dir , graph_objs_dir , graph_objects_path
97
95
98
96
99
- def lint_code (outdir ):
100
- """Check Python code using settings in pyproject.toml."""
101
-
102
- subprocess .call (["ruff" , "check" , * make_paths (outdir )])
103
-
104
-
105
- def reformat_code (outdir ):
106
- """Reformat Python code using settings in pyproject.toml."""
107
-
108
- subprocess .call (["ruff" , "format" , * make_paths (outdir )])
109
-
110
-
111
- def perform_codegen (outdir , noformat = False ):
112
- """Generate code (and possibly reformat)."""
97
+ def perform_codegen (codedir , noformat = False ):
98
+ """Generate code."""
113
99
114
100
# Get paths
115
- validators_dir , graph_objs_dir , graph_objects_path = make_paths (outdir )
101
+ validators_dir , graph_objs_dir , graph_objects_path = make_paths (codedir )
116
102
117
103
# Delete prior codegen output
118
- if opath .exists (validators_dir ):
104
+ if validators_dir .exists ():
119
105
shutil .rmtree (validators_dir )
120
- if opath .exists (graph_objs_dir ):
106
+ if graph_objs_dir .exists ():
121
107
shutil .rmtree (graph_objs_dir )
122
108
123
109
# Load plotly schema
124
- project_root = opath .dirname (outdir )
125
- plot_schema_path = opath .join (
126
- project_root , "codegen" , "resources" , "plot-schema.json"
127
- )
128
-
110
+ project_root = codedir .parent
111
+ plot_schema_path = project_root / "resources" / "plot-schema.json"
129
112
with open (plot_schema_path , "r" ) as f :
130
113
plotly_schema = json .load (f )
131
114
@@ -193,26 +176,26 @@ def perform_codegen(outdir, noformat=False):
193
176
194
177
# Write out the JSON data for the validators
195
178
os .makedirs (validators_dir , exist_ok = True )
196
- write_validator_json (outdir , validator_params )
179
+ write_validator_json (codedir , validator_params )
197
180
198
181
# Alls
199
182
alls = {}
200
183
201
184
# Write out datatypes
202
185
for node in all_compound_nodes :
203
- write_datatype_py (outdir , node )
186
+ write_datatype_py (codedir , node )
204
187
205
188
# Deprecated
206
189
# These are deprecated legacy datatypes like graph_objs.Marker
207
- write_deprecated_datatypes (outdir )
190
+ write_deprecated_datatypes (codedir )
208
191
209
192
# Write figure class to graph_objs
210
193
data_validator = get_data_validator_instance (base_traces_node )
211
194
layout_validator = layout_node .get_validator_instance ()
212
195
frame_validator = frame_node .get_validator_instance ()
213
196
214
197
write_figure_classes (
215
- outdir ,
198
+ codedir ,
216
199
base_traces_node ,
217
200
data_validator ,
218
201
layout_validator ,
@@ -242,7 +225,7 @@ def perform_codegen(outdir, noformat=False):
242
225
# Write plotly/graph_objs/graph_objs.py
243
226
# This is for backward compatibility. It just imports everything from
244
227
# graph_objs/__init__.py
245
- write_graph_objs_graph_objs (outdir )
228
+ write_graph_objs_graph_objs (codedir )
246
229
247
230
# Add Figure and FigureWidget
248
231
root_datatype_imports = datatype_rel_class_imports [()]
@@ -287,12 +270,13 @@ def __getattr__(import_name):
287
270
# __all__
288
271
for path_parts , class_names in alls .items ():
289
272
if path_parts and class_names :
290
- filepath = opath .join (outdir , "graph_objs" , * path_parts , "__init__.py" )
273
+ filepath = codedir / "graph_objs"
274
+ filepath = filepath .joinpath (* path_parts ) / "__init__.py"
291
275
with open (filepath , "at" ) as f :
292
276
f .write (f"\n __all__ = { class_names } " )
293
277
294
278
# Output datatype __init__.py files
295
- graph_objs_pkg = opath . join ( outdir , "graph_objs" )
279
+ graph_objs_pkg = codedir / "graph_objs"
296
280
for path_parts in datatype_rel_class_imports :
297
281
rel_classes = sorted (datatype_rel_class_imports [path_parts ])
298
282
rel_modules = sorted (datatype_rel_module_imports .get (path_parts , []))
@@ -317,18 +301,13 @@ def __getattr__(import_name):
317
301
graph_objects_rel_classes ,
318
302
init_extra = optional_figure_widget_import ,
319
303
)
320
- graph_objects_path = opath .join (outdir , "graph_objects" , "__init__.py" )
321
- os .makedirs (opath .join (outdir , "graph_objects" ), exist_ok = True )
304
+ graph_objects_path = codedir / "graph_objects"
305
+ graph_objects_path .mkdir (parents = True , exist_ok = True )
306
+ graph_objects_path /= "__init__.py"
322
307
with open (graph_objects_path , "wt" ) as f :
323
308
f .write ("# ruff: noqa: F401\n " )
324
309
f .write (graph_objects_init_source )
325
310
326
- # Run code formatter on output directories
327
- if noformat :
328
- print ("skipping reformatting" )
329
- else :
330
- reformat_code (outdir )
331
-
332
311
333
312
if __name__ == "__main__" :
334
313
if len (sys .argv ) != 2 :
0 commit comments