"""
設定管理
"""
import os
from pydantic import BaseModel
class Settings(BaseModel):
"""アプリケーション設定"""
# OpenMeteo API設定
openmeteo_base_url: str = "https://api.open-meteo.com/v1/forecast"
api_timeout: float = 30.0
# レート制限設定
rate_limit_requests_per_minute: int = 60
# ログ設定
log_level: str = "INFO"
log_format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
# データファイルパス
locations_csv_path: str = "data/japanese_locations.csv"
# キャッシュ設定
enable_cache: bool = True
cache_ttl_seconds: int = 3600 # 1時間
@classmethod
def from_env(cls) -> "Settings":
"""環境変数から設定を読み込み"""
return cls(
openmeteo_base_url=os.getenv(
"OPENMETEO_BASE_URL", cls.model_fields["openmeteo_base_url"].default
),
api_timeout=float(
os.getenv("API_TIMEOUT", cls.model_fields["api_timeout"].default)
),
rate_limit_requests_per_minute=int(
os.getenv(
"RATE_LIMIT_RPM",
cls.model_fields["rate_limit_requests_per_minute"].default,
)
),
log_level=os.getenv("LOG_LEVEL", cls.model_fields["log_level"].default),
locations_csv_path=os.getenv(
"LOCATIONS_CSV_PATH", cls.model_fields["locations_csv_path"].default
),
enable_cache=os.getenv("ENABLE_CACHE", "true").lower() == "true",
cache_ttl_seconds=int(
os.getenv(
"CACHE_TTL_SECONDS", cls.model_fields["cache_ttl_seconds"].default
)
),
)
def get_settings() -> Settings:
"""設定インスタンスを取得"""
return Settings.from_env()