diff --git a/src/validators.py b/src/validators.py index e1c1c0a..d6e9cd9 100644 --- a/src/validators.py +++ b/src/validators.py @@ -26,29 +26,34 @@ class DataValidator: def validate_measurement(cls, measurement: Dict[str, Any]) -> bool: """Validate a single measurement""" try: - # Check required fields - required_fields = ['timestamp', 'station_id', 'water_level', 'discharge'] + # Check required fields (discharge is now optional) + required_fields = ['timestamp', 'station_id', 'water_level'] for field in required_fields: if field not in measurement: logger.warning(f"Missing required field: {field}") return False - + # Validate timestamp if not isinstance(measurement['timestamp'], datetime): logger.warning(f"Invalid timestamp type: {type(measurement['timestamp'])}") return False - - # Validate water level + + # Validate water level (required) + if measurement['water_level'] is None: + logger.warning("Water level cannot be None") + return False water_level = float(measurement['water_level']) if not (cls.WATER_LEVEL_MIN <= water_level <= cls.WATER_LEVEL_MAX): logger.warning(f"Water level out of range: {water_level}") return False - - # Validate discharge - discharge = float(measurement['discharge']) - if not (cls.DISCHARGE_MIN <= discharge <= cls.DISCHARGE_MAX): - logger.warning(f"Discharge out of range: {discharge}") - return False + + # Validate discharge (optional - can be None) + discharge_value = measurement.get('discharge') + if discharge_value is not None: + discharge = float(discharge_value) + if not (cls.DISCHARGE_MIN <= discharge <= cls.DISCHARGE_MAX): + logger.warning(f"Discharge out of range: {discharge}") + return False # Validate discharge percent if present if measurement.get('discharge_percent') is not None: