usdata
Unified Python SDK and CLI for discovering, fetching, and tracking the provenance of U.S. public scientific data (NOAA, USGS, NASA, and more).
Status: pre-alpha.
noaa:ghcn-dailyandnoaa:nexrad-level2fetch real data with provenance; other registry entries are stubs. See docs/roadmap.md.
Providers
| Provider | Available | Stub | Planned | Next up (0.3) | Datasets |
|---|---|---|---|---|---|
| NOAA | 2 | 1 | 26 | coastwatch-sst |
ghcn-daily, nexrad-level2, coastwatch-sst, +26 planned |
| Census Bureau | 0 | 0 | 1 | — | +1 planned |
| EPA | 0 | 0 | 1 | — | +1 planned |
| FEMA | 0 | 0 | 1 | — | +1 planned |
| NASA | 0 | 0 | 1 | — | +1 planned |
| USDA | 0 | 0 | 1 | — | +1 planned |
| USGS | 0 | 0 | 3 | — | +3 planned |
Available datasets are in code, stubs in italics; planned ones are counted. Each provider page has access notes and full dataset details; docs/roadmap.md lists datasets by target version.
Install
pip install usdata # or: uv add usdata
Usage
from usdata import build_query, get, search
from usdata.fetch import fetch
for r in search("precipitation", location="Oklahoma"):
print(r.dataset.id, r.dataset.title)
ds = get("noaa:ghcn-daily")
query = build_query(
lat=35.39,
lon=-97.60,
radius_km=15,
start="2024-05-06",
end="2024-05-07",
variables=["PRCP", "TMAX"],
)
for item in fetch(ds, query):
print(item.path, item.provenance.checksum)
usdata search "tornado radar" --state OK
usdata info noaa:ghcn-daily
usdata fetch noaa:ghcn-daily --lat 35.39 --lon -97.60 --radius-km 15 \
--start 2024-05-06 --end 2024-05-07 --vars PRCP,TMAX
usdata fetch noaa:ghcn-daily -p stations=USW00013967 --start 2024-01-01 --end 2024-12-31
usdata fetch noaa:nexrad-level2 --lat 35.47 --lon -97.52 \
--start 2024-05-06T20:00 --end 2024-05-06T23:00 # nearest radar (KTLX)
usdata fetch noaa:nexrad-level2 -p site=KTLX --start 2024-05-06T20:00 --end 2024-05-06T20:30 --dry-run
usdata pull dataset.yaml # resolve, fetch, write dataset.lock.json
usdata verify dataset.yaml # exit 1 if any cached input drifted
Fetched files land in ~/.cache/usdata/<provider>/<dataset>/ (override with
USDATA_CACHE_DIR or --cache-dir), each with a .provenance.json sidecar
recording source URL, retrieval time, checksum, size, and license.
A manifest declares every input a project needs. pull resolves each source,
fetches it, and writes dataset.lock.json pinning every asset with its checksum
and provenance. A second pull restores exactly what the lockfile pins without
re-querying upstream, so the inputs stay reproducible even if the source
changes. verify re-hashes the cached files against the lockfile. Editing the
manifest after locking requires pull --force to re-resolve.
name: tornado-environment
sources:
- dataset: noaa:nexrad-level2
location: oklahoma
start: 2024-05-06
end: 2024-05-07
- dataset: noaa:ghcn-daily
location: oklahoma
start: 2024-05-01
end: 2024-05-31
Development
git clone https://github.com/jakeryderv/usdata && cd usdata
just setup # install toolchain and dependencies
just test # unit tests
just check # format, lint, typecheck, tests (what CI runs)
just run search radar
Integration tests that hit live services run with just test-integration.
Releases: just release minor opens a version-bump PR; merging it publishes
to PyPI and creates the tag and GitHub release. See
docs/versioning.md.
See docs/providers/ for per-provider access notes, docs/architecture.md for how the pieces fit, docs/adr/ for why, and CONTRIBUTING.md to add a dataset.
License
Apache-2.0
Release files for usdata 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| usdata-0.3.0.tar.gz | 34.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| usdata-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 77.4 kB
Release files / usdata-0.3.0.tar.gz
| Download URL | usdata-0.3.0.tar.gz |
|---|---|
| Size | 34.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4a1faaab34475faf6c4920a59bfc1bedbff4696113f6f368621e8364cd710b17
|
|
BLAKE2b-256 checksum How to use checksums |
c59263a7a0333470bf1c0041c81509f04b6b25af818a99d76fa283cea5422995
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"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}
|
Release files / usdata-0.3.0-py3-none-any.whl
| Download URL | usdata-0.3.0-py3-none-any.whl |
|---|---|
| Size | 42.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
91885e9b0f35238ed5249ca1e76291cced094da78136a13cd74ce30b0c5582b6
|
|
BLAKE2b-256 checksum How to use checksums |
8af7cfb792ffcca7883ee965d20d40b991a5eaad05b2b307ef27a73e9047e8ee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"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}
|