#!/usr/bin/env python3 """Patch point alarm registrations from a CSV file (blank cells are not sent).""" from __future__ import annotations import argparse import logging import sys from pathlib import Path from common import ApiError, ConfigurationError, IklimClient, configure_logging from point_alarm import PointAlarmService, PointUpdateProcessor BASE_DIR = Path(__file__).resolve().parent def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser( description=( "CSV satırlarından nokta alarm kayıtlarını kısmen günceller (PATCH). Sütunlar: " "registrationId (zorunlu) ve isteğe bağlı recipientId;lat;lng;radius;lightningType;" "peakCurrent;inCloudHeight;intersectsAffectedPolygon;intersectsCellPolygon;" "severityThreshold;speedThreshold;precipitationIntensities ('|' ile ayrılır). Boş hücre " "gönderilmez; lat ve lng birlikte verilmelidir. Bir alan boşaltılamaz (temizleme " "desteklenmez). thunderstorm.speedThreshold backend PATCH'inde işlenmiyor (GAIA-476). " "Sonuç sütunları status;httpStatus;errorBody aynı dosyaya yazılır." ) ) parser.add_argument("csv_file", type=Path, help="İşlenecek noktalı virgüllü CSV") parser.add_argument( "--dry-run", action="store_true", help="İstek göndermeden ve CSV'yi değiştirmeden PATCH gövdelerini ekrana yazar", ) parser.add_argument( "--debug-log", type=Path, default=BASE_DIR / "logs" / "iklim-api-debug.log", help="Maskelenmiş HTTP debug log dosyası", ) return parser.parse_args() def main() -> int: args = parse_args() configure_logging(args.debug_log) try: client = IklimClient.from_env(BASE_DIR / ".env") PointUpdateProcessor( PointAlarmService(client), csv_path=args.csv_file, dry_run=args.dry_run ).run() except (ConfigurationError, ApiError, OSError) as exc: logging.error("İşlem durduruldu: %s", exc) return 1 return 0 if __name__ == "__main__": sys.exit(main())