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

Merge branch 'experimental/docker'

parents ec43e319 10f2a195
......@@ -37,13 +37,17 @@ def remove_random_id(text: str) -> str:
return re.sub(r"^(20\d{6}_\d{4}_)?[a-z0-9]{4}_", "", text)
def clean_old_workflows(folder: Path, pattern: str = "20*.flow", hours: int = 1) -> None:
def clean_old_workflows(
folder: Path, pattern: str = "20*.flow", hours: int = 1
) -> None:
"""Remove timestamped workflow folders older than `hours` from `folder`.
Only deletes paths whose names match the random_id timestamp pattern.
"""
# TODO: Should it be called before simulation too?
cutoff = (datetime.datetime.now() - datetime.timedelta(hours=hours)).strftime("%Y%m%d_%H%M_")
cutoff = (datetime.datetime.now() - datetime.timedelta(hours=hours)).strftime(
"%Y%m%d_%H%M_"
)
for path in sorted(folder.glob(pattern)):
if m := WORKFLOW_FOLDER_PATTERN.match(path.name):
if m.group(1) < cutoff:
......
......@@ -19,7 +19,9 @@ def _set_weather_file(meteonorm_filename: str | None) -> dict[str, str]:
# No meteonorm file has been specified, fall back to PVGIS
return {"<string>TMY3_HOURLY_FILE</string>": "<string>PVGIS_DATABASE</string>"}
return {
"<string>METEONORM_FILE</string>": f"<string>{Path(meteonorm_filename).name}</string>"
"<string>METEONORM_FILE</string>": f"<string>{Path(meteonorm_filename).name}</string>",
# Make sure Meteonorm is actually used:
"<string>PVGIS_DATABASE</string>": "<string>TMY3_HOURLY_FILE</string>",
}
......@@ -66,7 +68,7 @@ def photovoltaic_simulation(
"<int>MIN_ROOF_INSOLATION</int>": f"<int>{min_roof_insolation}</int>",
"<boolean>HOURLY_PV</boolean>": f"<boolean>{str(hourly_pv).lower()}</boolean>",
}
template = BUNDLED_TEMPLATES / ("105_PVWithShadow" if with_shadows else "103_PV")
template = BUNDLED_TEMPLATES / ("PVWithShadow" if with_shadows else "PV")
pv_results = run_workflow_with_citygml(
template,
citygml_path,
......@@ -102,7 +104,7 @@ def heatdemand_simulation(
"""
citygml_path = Path(citygml_path)
template = BUNDLED_TEMPLATES / (
"104_HeatDemandWithShadow" if with_shadows else "101_HeatDemand"
"HeatDemandWithShadow" if with_shadows else "HeatDemand"
)
replaces = (
_set_weather_file(meteonorm_filename)
......@@ -139,7 +141,7 @@ def greenwater_simulation(
"<double>MAX_WATER_STRESS</double>": f"<double>{1 - irrigation_ratio}</double>",
}
return run_workflow_with_citygml(
BUNDLED_TEMPLATES / "102_GreenWater",
BUNDLED_TEMPLATES / "GreenWater",
citygml_path,
replaces=replaces,
description=description,
......
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.citygml.steps.ImportCityGml" id="ImportCityGml0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="ImportCityGml0"/>
<boolean>true</boolean>
</void>
</void>
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="ImportCityGml0"/>
<string>01_Preprocessing.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.GeometricPreprocessorStep" id="GeometricPreprocessorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>startStep</string>
<void method="set">
<object idref="GeometricPreprocessorStep0"/>
<boolean>true</boolean>
</void>
</void>
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="GeometricPreprocessorStep0"/>
<string>01_GeometricEstimator.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.GeometricEstimatorStep" id="GeometricEstimatorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="GeometricEstimatorStep0"/>
<string>02_PhysicsPreprocessor.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.PhysicsPreprocessorStep" id="PhysicsPreprocessorStep0">
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="PhysicsPreprocessorStep0"/>
<string>03_UsagePreprocessor.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.UsagePreprocessorStep">
<void property="name">
<string>Base</string>
</void>
</object>
</java>
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_422" class="java.beans.XMLDecoder">
<object class="eu.simstadt.workflowsteps.Preprocessing" id="Preprocessing0">
<void class="de.hftstuttgart.hierarchicworkflow.Workflow" method="getField">
<string>selectedStartStepPath</string>
<void method="set">
<object idref="Preprocessing0"/>
<string>00_GeometricPreprocessor.step</string>
</void>
</void>
<void class="de.hftstuttgart.hierarchicworkflow.WorkflowStep" method="getField">
<string>selectedNextStepPath</string>
<void method="set">
<object idref="Preprocessing0"/>
<string>02_WeatherProcessor.step</string>
</void>
</void>
<void property="name">
<string>Base</string>
</void>
</object>
</java>
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