init
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import os
|
||||
import sys
|
||||
|
||||
from dotenv import load_dotenv
|
||||
from sqlalchemy import create_engine, select
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from db_models import Base, WeatherForecast, save_forecasts
|
||||
from exporter import export_md
|
||||
from geo_locator import GeoError, get_geo
|
||||
from weather_client import WeatherAPIError, get_forecast
|
||||
|
||||
|
||||
def main() -> None:
|
||||
load_dotenv()
|
||||
|
||||
try:
|
||||
geo = get_geo()
|
||||
print(
|
||||
f"{geo.city}{'' if geo.lat is None or geo.lon is None else f' ({geo.lat}, {geo.lon})'}"
|
||||
)
|
||||
|
||||
forecasts = get_forecast(geo)
|
||||
print(f"{len(forecasts)} days forecast")
|
||||
|
||||
database_url = os.getenv("DB_URL", "sqlite:///weather.db").format(
|
||||
DB_USER=os.getenv("DB_USER", ""),
|
||||
DB_PASSWORD=os.getenv("DB_PASSWORD", ""),
|
||||
)
|
||||
city = forecasts[0].city
|
||||
engine = create_engine(database_url)
|
||||
Base.metadata.create_all(engine)
|
||||
with Session(engine) as session:
|
||||
saved = save_forecasts(session, forecasts)
|
||||
records = list(
|
||||
session.scalars(
|
||||
select(WeatherForecast)
|
||||
.where(WeatherForecast.city == city)
|
||||
.order_by(WeatherForecast.forecast_date)
|
||||
).all()
|
||||
)
|
||||
print(f"records: {len(records)}{f' +{saved}' if saved > 0 else ''}")
|
||||
|
||||
output_file = os.getenv("OUTPUT_FILE", "weather_report.md")
|
||||
export_md(records, output_file, city)
|
||||
print(f"Exported: {output_file}")
|
||||
|
||||
if records:
|
||||
dates = sorted(r.forecast_date for r in records)
|
||||
print(f"{dates[0]} - {dates[-1]}")
|
||||
except (GeoError, WeatherAPIError, SQLAlchemyError) as exc:
|
||||
print(f"error: {exc}", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user