# Changelog

This changelog is generated automatically from [GitHub Releases](https://github.com/lqgentner/freezebase/releases).


# freezebase 0.5.0

*2026-08-24* · [GitHub](https://github.com/lqgentner/freezebase/releases/tag/v0.5.0)


### Added

- Python 3.14 support
- `freezebase.__version__`, read from the installed distribution metadata.


### Fixed

- [HTTPDownloader](reference/download.HTTPDownloader.html#freezebase.download.HTTPDownloader) now closes the streamed response on every path out of a download, not only on the successful one.


# freezebase 0.4.0

*2026-08-17* · [GitHub](https://github.com/lqgentner/freezebase/releases/tag/v0.4.0)


### Added

- [HTTPDownloader.close()](reference/download.HTTPDownloader.html#freezebase.download.HTTPDownloader.close) and context-manager support, which close the downloader's session and release its pooled connections. Creating one downloader per download previously held a connection open until the garbage collector ran, which made downstream test suites fail unpredictably. The session is also closed on garbage collection as a fallback.


### Changed

- **Breaking:** [HTTPDownloader](reference/download.HTTPDownloader.html#freezebase.download.HTTPDownloader) no longer forwards arbitrary keyword arguments to `requests`. `method` and `timeout` are now named parameters and are spelled exactly as before, so calls that only used those keep working; `method` is restricted to `"GET"` and `"POST"`. Any other `requests` keyword, such as `params` or `headers`, now raises `TypeError` instead of reaching the request. To configure the transport, for example a connection pool size, mount an adapter on `HTTPDownloader.session`.


# freezebase 0.3.0

*2026-08-05* · [GitHub](https://github.com/lqgentner/freezebase/releases/tag/v0.3.0)

This release marks the first release of freezebase on PyPI!


### Added

- Per-path named AWS profile support in [make_s3_upath](reference/s3.make_s3_upath.html#freezebase.s3.make_s3_upath). Combinable with a custom `endpoint_url`, mutually exclusive with `anon=True` and explicit `key`/`secret`/`token`. Setting a profile takes environment credentials out of boto's resolution chain, so the path signs with the profile's keys only.
- `aws_session`, returning the cached Rasterio `AWSSession` for an S3 path, and `clear_aws_session_cache` to discard those sessions. Prefer `aws_session` over constructing an `AWSSession` directly, so every layer signs identically.


### Changed

- Renamed the package to `freezebase`, to allow publication on PyPI under the same name. The import path, PyPI distribution name, `FREEZEBASE_CACHE`/`FREEZEBASE_DATA` environment variables, and the GitHub repository all changed accordingly; there is no compatibility shim for the old names.
- [s3_env](reference/s3.s3_env.html#freezebase.s3.s3_env) reuses a cached `AWSSession` per distinct S3 configuration instead of building one per call. Constructing a session resolves boto's whole credential chain eagerly, and [s3_env](reference/s3.s3_env.html#freezebase.s3.s3_env) is entered on every raster operation, so a profile-authenticated path previously re-read the shared credentials file for every raster read and write. Refreshable STS/SSO credentials still rotate, because Rasterio re-freezes them on each `Env` entry; static credentials rewritten mid-process now need `clear_aws_session_cache`.
- [make_s3_upath](reference/s3.make_s3_upath.html#freezebase.s3.make_s3_upath) rejects credentials in `client_kwargs`, which reach s3fs but not [s3_env](reference/s3.s3_env.html#freezebase.s3.s3_env).
