150 parts = [part
for part
in name.split(
"_")
if part]
152 raise ValueError(
"empty option name")
155 for part
in parts[:-1]:
156 existing = node.get(part)
161 if not isinstance(existing, dict):
163 f
"cannot create nested option '{name}' because '{part}' is already scalar"
168 existing = node.get(last)
169 if isinstance(existing, dict):
171 f
"cannot assign scalar option '{name}' because it is already an object"
252 primary_mesh_file = DEFAULT_PRIMARY_MESH_FILE
253 used_placeholder_mesh =
True
254 python_script_files = []
262 for name, value
in options:
263 if name ==
"file_name":
264 primary_mesh_file = str(value)
265 used_placeholder_mesh =
False
268 if name ==
"sdf_file":
269 python_script_files.append(str(value))
272 if name
in REJECT_OPTION_NAMES:
274 f
"option '-{name}' is not supported by the converter; "
275 "remove it and configure that part manually"
280 warn(f
"skipping unsupported option '-{name}' with value '{value}'")
284 except ValueError
as exc:
285 warn(f
"skipping '-{name}' with value '{value}': {exc}")
288 config[
"meshes"].append(
292 "file_name": primary_mesh_file,
296 for index, python_script_file
in enumerate(python_script_files, start=1):
297 config[
"meshes"].append(
299 "name": f
"python_script_{index}",
300 "type":
"PYTHON_SCRIPT",
301 "file_name": python_script_file,
305 return config, used_placeholder_mesh
342 script_option_names = {
"-h",
"--help",
"-o",
"--output",
"--version",
"--indent"}
343 raw_argv = sys.argv[1:]
345 if raw_argv
and raw_argv[0].startswith(
"-")
and raw_argv[0]
not in script_option_names:
346 args = argparse.Namespace(output=
None, version=
"0.15", indent=2)
347 input_arg =
" ".join(raw_argv)
350 args, unknown_args = parser.parse_known_args()
352 input_arg = args.input
353 if input_arg
is None and unknown_args:
354 input_arg =
" ".join(unknown_args)
356 if input_arg
is None:
357 parser.error(
"the following arguments are required: input")
360 input_path = Path(input_arg)
361 if input_path.exists():
365 config, used_placeholder_mesh =
build_config(options, args.version)
366 except ValueError
as exc:
367 print(exc, file=sys.stderr)
370 output = json.dumps(config, indent=args.indent)
372 args.output.write_text(output +
"\n", encoding=
"utf-8")
376 if used_placeholder_mesh:
378 f
"no '-file_name' found; using placeholder primary mesh '{DEFAULT_PRIMARY_MESH_FILE}'",