Skip to main content

Tempest SDK for Python

Project description

Tempest

Python SDK for the Tempest API.

Installation

Requires Python 3.13+.

  • From PyPI:
  pip install tempestwx

Usage

Ensure TEMPEST_ACCESS_TOKEN is set (via environment or .env).

from tempestwx import Tempest

# Recommended: Use context manager for automatic resource cleanup
with Tempest() as twx:
    stations = twx.stations()
    print(stations)

# Alternative: Manual resource management
twx = Tempest()
try:
    stations = twx.stations()
    print(stations)
finally:
    twx.close()

The client returns Pydantic models. Use .model_dump() to convert to dict when needed.

Configuration & Settings

The client uses a deterministic cascade to resolve configuration:

  1. Library defaults (built‑in constants)
  2. config.json (first existing among: $TEMPEST_CONFIG_PATH, ./config.json)
  3. .env file (loaded automatically once, without overriding already exported environment vars)
  4. Live environment variables (take precedence over .env values)
  5. Explicit parameters passed to Tempest(...) (highest precedence)

Resolved values are materialized into an immutable Settings instance:

from tempestwx.settings_loader import load_settings
settings = load_settings()
print(settings.api_uri, settings.token)

You can explicitly override when constructing the client:

from tempestwx import Tempest

with Tempest(token="OVERRIDE_TOKEN") as twx:
    stations = twx.stations()

Or derive a modified settings object:

from tempestwx.settings_loader import load_settings

base = load_settings()
custom = base.with_overrides(api_uri="https://example.test/api/")

with Tempest(settings=custom) as twx:
    stations = twx.stations()

Environment Variables

Supported variables:

  • TEMPEST_ACCESS_TOKEN – API auth token
  • TEMPEST_API_URI – Base API URI (defaults to https://swd.weatherflow.com/swd/rest/)
  • TEMPEST_CONFIG_PATH – Optional path to a JSON config file (fallbacks to ./config.json)
  • Unit overrides (optional):
    • TEMPEST_DEFAULT_UNIT_TEMPERATURE
    • TEMPEST_DEFAULT_UNIT_PRESSURE
    • TEMPEST_DEFAULT_UNIT_WIND
    • TEMPEST_DEFAULT_UNIT_DISTANCE
    • TEMPEST_DEFAULT_UNIT_PRECIP
    • TEMPEST_DEFAULT_UNIT_BRIGHTNESS
    • TEMPEST_DEFAULT_UNIT_SOLAR_RADIATION
    • TEMPEST_DEFAULT_UNIT_BUCKET_STEP_MINUTES

.env Support

If a .env file exists in the working directory, it is loaded automatically (without overriding already exported variables) the first time load_settings() runs.

Example .env:

TEMPEST_ACCESS_TOKEN=your-token-here

config.json example

If present, values provide defaults that can be overridden by environment variables:

{
  "api_uri": "https://swd.weatherflow.com/swd/rest/",
  "default_unit_temperature": "c",
  "default_unit_pressure": "mb",
  "default_unit_wind": "mps",
  "default_unit_distance": "km",
  "default_units_precip": "mm",
  "default_units_brightness": "lux",
  "default_units_solar_radiation": "w/m2",
  "default_units_bucket_step_minutes": 1
}

Note: tokens are not read from config.json. Use environment variables or .env for TEMPEST_ACCESS_TOKEN.

Reloading Settings

Caching avoids repeated disk & env parsing. To pick up changes at runtime:

from tempestwx.settings_loader import reload_settings
reload_settings()  # clears cache and re-evaluates cascade

Units Overrides

You can supply partial unit overrides via UnitsOverrides (only fields you specify are changed):

from tempestwx import Tempest
from tempestwx.settings import UnitsOverrides
from tempestwx.settings_loader import load_settings

base = load_settings()
custom = base.with_overrides(units_overrides=UnitsOverrides(temp="f", wind="mph"))

with Tempest(settings=custom) as twx:
    forecast = twx.better_forecast(station_id=12345)

Token Context Override

Temporarily swap tokens within a context:

from tempestwx import Tempest

with Tempest() as twx:
    # Use default token
    stations = twx.stations()

    # Temporarily use different token
    with twx.token_as("temporary-token"):
        other_stations = twx.stations()

    # Back to default token
    more_stations = twx.stations()

Async Usage

All endpoints support async when the client is created with asynchronous=True:

import asyncio
from tempestwx import Tempest

async def main():
    # Use async context manager for proper cleanup
    async with Tempest(asynchronous=True) as twx:
        stations = await twx.stations()
        print(stations)

asyncio.run(main())

Roadmap

  • OAuth Authorization Code (with PKCE) grant types
  • Additional Tempest APIs, e.g. TempestOne
  • Standalone documentation with MkDocs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tempestwx-0.0.2.tar.gz (79.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tempestwx-0.0.2-py3-none-any.whl (66.6 kB view details)

Uploaded Python 3

File details

Details for the file tempestwx-0.0.2.tar.gz.

File metadata

  • Download URL: tempestwx-0.0.2.tar.gz
  • Upload date:
  • Size: 79.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for tempestwx-0.0.2.tar.gz
Algorithm Hash digest
SHA256 ea84f941b470186aab69c52ed14326adca33f05a473f7a904355e3dc031d3686
MD5 862181f55b27f302f4e77a225eb7b2f3
BLAKE2b-256 19c4da25f14bf1933f2817872e2fa0c4d8cbdab9821ad1f6880a62be680376aa

See more details on using hashes here.

File details

Details for the file tempestwx-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: tempestwx-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 66.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for tempestwx-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ab2987959233850f82a69e2f3230a8fc2d9f8a8995c91a8814883ace465b3872
MD5 f69e8c7c7a684aadeed5a83efa1d8efd
BLAKE2b-256 726a5ba7a56b09c2d618e772357d357492691fd701caae3cc85d1e24337de7ee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page