Files
weather/src/geo_mask/pipeline.py
OpenAI Codex c957fef15b Initial import
2026-03-17 19:52:51 +08:00

74 lines
2.0 KiB
Python

from pathlib import Path
import importlib.util
import subprocess
import sys
import time
SCRIPT_DIR = Path(__file__).resolve().parent
DOWNLOADER = "src.geo_mask.downloader"
GENERATOR = "src.geo_mask.raster_tile_generator"
STEP_DEPENDENCIES = {
"Geo Mask Downloader": ("requests",),
"Geo Mask Raster Generator": ("mercantile", "shapely", "numpy"),
}
def check_dependencies():
missing = []
for step_name, modules in STEP_DEPENDENCIES.items():
missing_modules = [module for module in modules if importlib.util.find_spec(module) is None]
if missing_modules:
missing.append(f"{step_name}: {', '.join(missing_modules)}")
return missing
def run_step(name, module_name):
print("\n==========================")
print("Running:", name)
print("==========================\n")
start = time.time()
command = [sys.executable, "-u", "-m", module_name]
process = subprocess.Popen(
command,
cwd=str(SCRIPT_DIR.parent.parent),
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
bufsize=1,
)
assert process.stdout is not None
for line in process.stdout:
print(line, end="")
return_code = process.wait()
if return_code != 0:
raise RuntimeError(f"{name} failed with exit code {return_code}")
print("\nFinished:", name)
print("Time:", round(time.time() - start, 2), "seconds")
def main():
print("Geo Mask Pipeline Starting...")
print("Date:", time.strftime("%Y-%m-%d %H:%M:%S"))
missing_dependencies = check_dependencies()
if missing_dependencies:
print("\n" + "!" * 50)
print("Pipeline Failed: missing runtime dependencies")
for item in missing_dependencies:
print("-", item)
print("!" * 50)
raise SystemExit(1)
run_step("Geo Mask Downloader", DOWNLOADER)
run_step("Geo Mask Raster Generator", GENERATOR)
print("\nGeo Mask Pipeline Completed Successfully!")
if __name__ == "__main__":
main()