Catalog PyPI
PACKAGE EXPLORERView in registry

action0-open-meteo-api

PyPI

Fully typed Open-Meteo API clients built on action0-client — sync, async or Twisted, decided by the backend you plug in; generated from the official OpenAPI schemas

apiasyncclientforecasthttpopen-meteosynctwistedtypedweather
Versions collected1
Direct dependencies3From release 0.1.0
Last observed20 Oct, 18:31 UTC

README

Version 0.1.0 documentation

action0-open-meteo-api

Fully typed Python clients for the Open-Meteo weather APIs, built on action0-client: every endpoint is a typed operation dataclass that runs synchronously, on asyncio or on Twisted — the backend you plug in decides, and the static types follow along.

The code is generated from Open-Meteo's official OpenAPI schemas by action0-client-openapi and checked in — this project doubles as the worked real-world example of that generator (see How this library was generated).

uv add "action0-open-meteo-api[httpx]"
from action0.open_meteo.forecast import ForecastClient, GetV1Forecast, GetV1ForecastHourlyItem

from action0.client.backends.requests import RequestsBackend

client = ForecastClient(RequestsBackend())  # https://api.open-meteo.com
weather = client.send(
    GetV1Forecast(
        latitude="48.21",
        longitude="16.37",
        hourly=[GetV1ForecastHourlyItem.TEMPERATURE_2M, GetV1ForecastHourlyItem.RAIN],
        forecast_days=1,
    )
)
print(weather.hourly.temperature_2m)  # [17.2, 16.8, ...]

from action0.client.backends.httpx import AsyncHttpxBackend

client = ForecastClient(AsyncHttpxBackend())
weather = await client.send(GetV1Forecast(latitude="48.21", longitude="16.37"))

One subpackage per Open-Meteo service, each client preset to its base URL:

Subpackage (action0.open_meteo....)ClientAPI
forecastForecastClientapi.open-meteo.com — weather forecasts
historical_weatherHistoricalWeatherClientarchive-api.open-meteo.com — 1940 → today
air_qualityAirQualityClientair-quality-api.open-meteo.com
marineMarineClientmarine-api.open-meteo.com — waves & swell
ensembleEnsembleClientensemble-api.open-meteo.com — ensemble members
seasonalSeasonalClientseasonal-api.open-meteo.com — up to 9 months
climateClimateClientclimate-api.open-meteo.com — climate change projections
floodFloodClientflood-api.open-meteo.com — river discharge
elevationElevationClientapi.open-meteo.com/v1/elevation
geocodingGeocodingClientgeocoding-api.open-meteo.com — place name → coordinates

Enumerable request parameters are generated enums (IDE completion knows the legal weather variables), dates are datetime.date, and every JSON answer parses into plain typed dataclasses — mypy strict, pyright and ty pass on the generated code. Even the error path is typed: Open-Meteo's documented 400 answer raises a generated BadRequestError carrying the parsed reason. The Open-Meteo APIs are free for non-commercial use without an API key (terms); commercial subscriptions pass their key as the operations' apikey field.

Requires Python 3.11 or newer.

Full documentation including the API reference: https://laughinjar.github.io/action0-open-meteo-api/

Development

Uses uv: uv run pytest runs the tests, uv run ruff format && uv run ruff check formats and lints, uv run mypy, uv run pyright and uv run ty check type-check (all strict — on the generated code too). The generated subpackages under src/action0/open_meteo/ are regenerated from the schemas in schemas/ with bash tools/regenerate.sh — never edited by hand.

AI disclosure

This library was developed with substantial help from Claude (Anthropic), under human direction and review. The client code itself is generated by action0-client-openapi from Open-Meteo's OpenAPI schemas.

License

MIT — see LICENSE. Open-Meteo data and APIs are subject to Open-Meteo's terms (CC BY 4.0 attribution).

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.015 Aug 20263

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
laughinjar/action0-open-meteo-api

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:31 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:5aee6cdbee28419ffbe6bc088eabf8a0d20f3a371c9e6ac2cf698e561047fd96