74 lines
2.0 KiB
Python
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()
|