11import json
22import os
3- import os .path as opath
43import shutil
5- import subprocess
64import sys
75
86from codegen .datatypes import build_datatype_py , write_datatype_py # noqa: F401
@@ -87,45 +85,30 @@ def preprocess_schema(plotly_schema):
8785 items ["colorscale" ] = items .pop ("concentrationscales" )
8886
8987
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 ."""
9290
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"
9694 return validators_dir , graph_objs_dir , graph_objects_path
9795
9896
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."""
11399
114100 # 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 )
116102
117103 # Delete prior codegen output
118- if opath .exists (validators_dir ):
104+ if validators_dir .exists ():
119105 shutil .rmtree (validators_dir )
120- if opath .exists (graph_objs_dir ):
106+ if graph_objs_dir .exists ():
121107 shutil .rmtree (graph_objs_dir )
122108
123109 # 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"
129112 with open (plot_schema_path , "r" ) as f :
130113 plotly_schema = json .load (f )
131114
@@ -193,26 +176,26 @@ def perform_codegen(outdir, noformat=False):
193176
194177 # Write out the JSON data for the validators
195178 os .makedirs (validators_dir , exist_ok = True )
196- write_validator_json (outdir , validator_params )
179+ write_validator_json (codedir , validator_params )
197180
198181 # Alls
199182 alls = {}
200183
201184 # Write out datatypes
202185 for node in all_compound_nodes :
203- write_datatype_py (outdir , node )
186+ write_datatype_py (codedir , node )
204187
205188 # Deprecated
206189 # These are deprecated legacy datatypes like graph_objs.Marker
207- write_deprecated_datatypes (outdir )
190+ write_deprecated_datatypes (codedir )
208191
209192 # Write figure class to graph_objs
210193 data_validator = get_data_validator_instance (base_traces_node )
211194 layout_validator = layout_node .get_validator_instance ()
212195 frame_validator = frame_node .get_validator_instance ()
213196
214197 write_figure_classes (
215- outdir ,
198+ codedir ,
216199 base_traces_node ,
217200 data_validator ,
218201 layout_validator ,
@@ -242,7 +225,7 @@ def perform_codegen(outdir, noformat=False):
242225 # Write plotly/graph_objs/graph_objs.py
243226 # This is for backward compatibility. It just imports everything from
244227 # graph_objs/__init__.py
245- write_graph_objs_graph_objs (outdir )
228+ write_graph_objs_graph_objs (codedir )
246229
247230 # Add Figure and FigureWidget
248231 root_datatype_imports = datatype_rel_class_imports [()]
@@ -287,12 +270,13 @@ def __getattr__(import_name):
287270 # __all__
288271 for path_parts , class_names in alls .items ():
289272 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"
291275 with open (filepath , "at" ) as f :
292276 f .write (f"\n __all__ = { class_names } " )
293277
294278 # Output datatype __init__.py files
295- graph_objs_pkg = opath . join ( outdir , "graph_objs" )
279+ graph_objs_pkg = codedir / "graph_objs"
296280 for path_parts in datatype_rel_class_imports :
297281 rel_classes = sorted (datatype_rel_class_imports [path_parts ])
298282 rel_modules = sorted (datatype_rel_module_imports .get (path_parts , []))
@@ -317,18 +301,13 @@ def __getattr__(import_name):
317301 graph_objects_rel_classes ,
318302 init_extra = optional_figure_widget_import ,
319303 )
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"
322307 with open (graph_objects_path , "wt" ) as f :
323308 f .write ("# ruff: noqa: F401\n " )
324309 f .write (graph_objects_init_source )
325310
326- # Run code formatter on output directories
327- if noformat :
328- print ("skipping reformatting" )
329- else :
330- reformat_code (outdir )
331-
332311
333312if __name__ == "__main__" :
334313 if len (sys .argv ) != 2 :
0 commit comments