forcingkit 0.7.0__tar.gz → 0.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {forcingkit-0.7.0 → forcingkit-0.7.1}/PKG-INFO +1 -1
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/conf.py +1 -1
- {forcingkit-0.7.0 → forcingkit-0.7.1}/pyproject.toml +1 -1
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/hrrr.py +7 -10
- {forcingkit-0.7.0 → forcingkit-0.7.1}/uv.lock +1 -1
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.agents/forcingkit.md +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.claude/CLAUDE.md +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.env.template +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.github/copilot-instructions.md +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.github/workflows/docs.yml +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.github/workflows/publish.yml +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.github/workflows/tests.yml +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.gitignore +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.markdownlint.yaml +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.pre-commit-config.yaml +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/.python-version +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/AGENTS.md +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/CONTRIBUTING.md +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/Dockerfile +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/LICENSE +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/README.md +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docker-compose.yml +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/Makefile +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/make.bat +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/requirements-docs.txt +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/_extra/CNAME +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/_static/custom.css +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/_static/forcingkit-noreaster-wind.gif +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/atmospheric_forcing.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/fetchers.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/hycom.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/index.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/necofs.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/nyofs.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/rivers.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/roadmap.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/docs/source/sources.rst +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/main.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/service/__init__.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/service/forcingkit_serve/__init__.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/service/forcingkit_serve/main.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/service/forcingkit_serve/routers/bathymetry.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/service/forcingkit_serve/routers/plotly_api.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/service/forcingkit_serve/routers/removed.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/service/forcingkit_serve/routers/viewer.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/service/run_server.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/__init__.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/data/rivers/northeast_us.json +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/dispatcher.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/coastwatch.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/dbofs.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/erddap.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/hrrr_atmosphere.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/hrrr_points.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/hycom.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/hydrography.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/ndbc.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/necofs.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/noaa.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/nyofs.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/usgs.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/fetchers/usgs_rivers.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/settings.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/src/forcingkit/zarr_stream.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/static/app.js +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/static/favicon.ico +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/static/favicon.svg +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/static/index.html +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/static/logo.svg +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/static/preview3d.js +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/static/styles.css +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/__init__.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/integration/test_auth.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/integration/test_erddap_fetch.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/integration/test_nyofs_obc_fetch.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/integration/test_obc_offshore_nj.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/integration/test_ofs_archive_paths.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/integration/test_s3_roms_fetchers.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/scripts/inspect_dem.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/scripts/inspect_grib.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/scripts/inspect_zarr.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_coastwatch.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_dbofs.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_dispatcher.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_hrrr_atm.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_hrrr_idx.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_hrrr_points.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_hycom.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_main.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_ndbc.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_necofs_parent.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_noaa_currents.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_noaa_datum.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_nyofs.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_obc_donor_report.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_obc_pipeline.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_removed_routes.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_settings.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_usgs.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_usgs_rivers.py +0 -0
- {forcingkit-0.7.0 → forcingkit-0.7.1}/tests/unit/test_zarr_stream.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: forcingkit
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: Spatiotemporal forcing for computational Earth-system models: selects, regrids and serves model-ready time series with provenance.
|
|
5
5
|
Project-URL: Documentation, https://forcingkit.docs.lhzn.io
|
|
6
6
|
Project-URL: Issues, https://github.com/lhzn-io/forcingkit/issues
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "forcingkit"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.1"
|
|
8
8
|
description = "Spatiotemporal forcing for computational Earth-system models: selects, regrids and serves model-ready time series with provenance."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -57,16 +57,13 @@ def _fetch_s3_byte_ranges(
|
|
|
57
57
|
Download specific byte ranges from an S3 object and concatenate into a
|
|
58
58
|
single valid GRIB2 file. Each GRIB2 message is self-contained, so
|
|
59
59
|
concatenating selected messages produces a valid file.
|
|
60
|
+
|
|
61
|
+
Each range is one ranged GET of exactly its bytes. A buffered file
|
|
62
|
+
(``fs.open`` then ``seek`` and ``read``) fetches whole blocks with
|
|
63
|
+
read-ahead, which for 1 to 2 MB messages downloaded about 38 times the
|
|
64
|
+
bytes needed (4.0 GB for 106 MB of messages in one HRRR cycle).
|
|
60
65
|
"""
|
|
61
66
|
with open(output_path, "wb") as f:
|
|
62
67
|
for start, end in ranges:
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
with fs.open(s3_path, "rb") as s3f:
|
|
66
|
-
s3f.seek(start)
|
|
67
|
-
f.write(s3f.read(length))
|
|
68
|
-
else:
|
|
69
|
-
# Read from start to EOF
|
|
70
|
-
with fs.open(s3_path, "rb") as s3f:
|
|
71
|
-
s3f.seek(start)
|
|
72
|
-
f.write(s3f.read())
|
|
68
|
+
# end=None reads to the end of the object (the file's last message)
|
|
69
|
+
f.write(fs.cat_file(s3_path, start=start, end=end))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|