Commit f34d5150 authored by Eric Duminil's avatar Eric Duminil
Browse files

Use CSV export as parameter

parent 82415e8f
......@@ -65,6 +65,7 @@ def cmd_run(args: argparse.Namespace) -> None:
description=args.description,
destination=args.destination,
project_path=args.project_path,
csv_export=args.csv_export,
)
except (FileNotFoundError, ValueError) as e:
print(f"Error: {e}", file=sys.stderr)
......
......@@ -69,8 +69,11 @@ def get_template_path() -> Path:
"No template path found. Set SIMSTADT_TEMPLATE_PATH or create a templates/ directory."
)
def get_version_and_date() -> tuple[str, str]:
SIMSTADT_VERSION_PATTERN = re.compile(f"Launching SimStadt {SIMSTADT_VERSION_FORMAT}")
SIMSTADT_VERSION_PATTERN = re.compile(
f"Launching SimStadt {SIMSTADT_VERSION_FORMAT}"
)
output = get_simstadt_output(get_simstadt_folder())
m = SIMSTADT_VERSION_PATTERN.search(output)
if not m:
......@@ -78,6 +81,7 @@ def get_version_and_date() -> tuple[str, str]:
version, _branch, _commit, date = m.groups()
return version, date
# ---------------------------------------------------------------------------
# Low-level workflow helpers
# ---------------------------------------------------------------------------
......@@ -207,16 +211,22 @@ def get_simstadt_output(path: Path) -> str:
)
return result.stdout
# TODO: Show which workflow is currently run
# TODO: Show absolute paths to listed files?
def run_simstadt(workflow_path: Path, name: str) -> str:
def run_simstadt(workflow_path: Path, name: str, csv_export: bool = False) -> str:
"""Invoke the SimStadt CLI for the given workflow. Returns stdout."""
workflow_path = workflow_path.resolve()
with chdir(get_simstadt_folder()):
log.info("Launching %s:", name)
# NOTE: --csv-export requires SimStadt version >= August 2026
params = [_simstadt_script(), str(workflow_path)]
if csv_export:
params.append("--csv-export")
result = subprocess.run(
[_simstadt_script(), str(workflow_path)],
params,
text=True,
capture_output=True,
check=False,
......@@ -247,13 +257,17 @@ def run_regionchooser(*params: str) -> str:
return result.stdout
def run_workflow(workflow_path: Path, citygmls: list[str]) -> list[Path]:
def run_workflow(
workflow_path: Path,
citygmls: list[str],
csv_export: bool = False,
) -> list[Path]:
"""Prepare and run a SimStadt workflow. Returns the list of files written by SimStadt."""
repo_path = workflow_path.parent.parent
_check_paths(repo_path, workflow_path)
name = _prepare_workflow(workflow_path, citygmls)
before = _get_all_files(workflow_path)
run_simstadt(workflow_path, name)
run_simstadt(workflow_path, name, csv_export)
after = _get_all_files(workflow_path)
return _compare_written_files(repo_path, before, after)
......@@ -273,7 +287,7 @@ def _resolve_project(citygml_path: Path, project_path: Path | None) -> tuple[Pat
if not citygml_path.exists():
raise FileNotFoundError(f"{citygml_path} not found")
if project_path is not None:
project_path = project_path.with_suffix('.proj')
project_path = project_path.with_suffix(".proj")
project_path.mkdir(exist_ok=True, parents=True)
dest = project_path / citygml_path.name
if not dest.exists():
......@@ -300,6 +314,7 @@ def run_workflow_with_citygml(
description: str | None = None,
destination: str | None = None,
project_path: Path | None = None,
csv_export: bool = False,
) -> SimStadtResults:
"""Copy a workflow template, inject parameters, run SimStadt, and return parsed results.
......@@ -313,6 +328,7 @@ def run_workflow_with_citygml(
- project_path given: copy CityGML there if not already present (takes priority).
- CityGML inside a .proj folder: use parent as project, reference by name.
- Neither: create a temporary repository under /tmp (not auto-cleaned).
csv_export: If available, workflowsteps will export Buildings/Surfaces CSV files.
"""
citygml_path = Path(citygml_path)
......@@ -331,7 +347,7 @@ def run_workflow_with_citygml(
workflow_path = copy_workflow_from_template(
template_path, resolved_project_path, destination, replaces
)
output_files = run_workflow(workflow_path, [citygml_filename])
output_files = run_workflow(workflow_path, [citygml_filename], csv_export)
if description is None:
description = f"{template_name} for {citygml_path.name}"
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment