You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.3 KiB

from typing import List, Optional
from datetime import datetime
from enum import Enum
from pydantic import BaseModel
class AlertSeverity(str, Enum):
UNKNOWN = "Unknown"
ADVISORY = "Advisory"
WATCH = "Watch"
WARNING = "Warning"
CRITICAL = "Critical"
class WeatherAlert(BaseModel):
id: str
severity: AlertSeverity
title: str
description: str
instruction: Optional[str] = None
area_description: str
effective: datetime
expires: datetime
issued: Optional[datetime] = None
@property
def is_active(self) -> bool:
now = datetime.now(self.expires.tzinfo)
return self.effective <= now < self.expires
class WeatherForecast(BaseModel):
period_name: str # e.g., "Today", "Tonight", "Monday"
high_temp: Optional[float] # Celsius
low_temp: Optional[float] # Celsius
summary: str
short_summary: Optional[str] = None
precip_probability: Optional[int]
class CurrentConditions(BaseModel):
temperature: float # Celsius
humidity: Optional[int]
wind_speed: Optional[float] # km/h
wind_direction: Optional[str]
description: str
class LocationInfo(BaseModel):
latitude: float
longitude: float
city: str
region: str # State/Province
country_code: str
timezone: str

Powered by TurnKey Linux.