52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
import argparse
|
|
import csv
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from open_data_connector import import_event_rows
|
|
|
|
|
|
def import_events(csv_path: Path) -> dict:
|
|
rows = []
|
|
with csv_path.open("r", encoding="utf-8") as handle:
|
|
reader = csv.DictReader(handle)
|
|
required = {"lat", "lon", "event_type", "start_datetime", "end_datetime", "risk_modifier"}
|
|
if not required.issubset(set(reader.fieldnames or [])):
|
|
raise ValueError(f"CSV missing required columns: {sorted(required)}")
|
|
|
|
for line in reader:
|
|
rows.append(
|
|
{
|
|
"id": None,
|
|
"event_type": (line.get("event_type") or "").strip(),
|
|
"lat": (line.get("lat") or "").strip(),
|
|
"lon": (line.get("lon") or "").strip(),
|
|
"start_datetime": (line.get("start_datetime") or "").strip(),
|
|
"end_datetime": (line.get("end_datetime") or "").strip(),
|
|
"risk_modifier": (line.get("risk_modifier") or "0").strip(),
|
|
}
|
|
)
|
|
|
|
# Legacy CSV import keeps source-name bound to filename.
|
|
source_name = f"open_data_events:{csv_path.name}"
|
|
normalized = []
|
|
for idx, row in enumerate(rows):
|
|
row["id"] = f"{source_name}:{idx}"
|
|
normalized.append(row)
|
|
|
|
result = import_event_rows(normalized, source_name=source_name, notes=str(csv_path))
|
|
result["source"] = str(csv_path)
|
|
return result
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Import Open Data events CSV for StaySense")
|
|
parser.add_argument("--file", required=True, help="CSV with lat,lon,event_type,start_datetime,end_datetime,risk_modifier,source")
|
|
args = parser.parse_args()
|
|
|
|
result = import_events(Path(args.file))
|
|
print(json.dumps(result, ensure_ascii=True))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|