All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Add comprehensive test coverage for warning context managers (
ignore()andstrict()) (#832) - Moved -Werror to pyproject.toml (#841)
- Make
get_collectionraise ifcollection_idis empty (#809) - Update
get_collectionto return None if no collection exists (#861)
- Add comprehensive test coverage for ConformanceClasses enum (#834)
- Update contributing guide to consistently use
uvworkflow (#822) - Fix format script to use
ruff-formatinstead of deprecatedblackhook (#822) - Add "How to..." section to usage documentation with latest datetime search across multiple collections example (#823)
v0.9.0 - 2025-07-17
- Coerce cql2 style to match HTTP method using
cql2library (#804)
- Fix usage documentation of
ItemSearch(#790) - Fix fields argument to CLI (#797)
- Clarify recursive behaviour of the
get_itemsmethod in the method docstring (#800)
v0.8.6 - 2025-02-11
v0.8.5 - 2024-10-23
- Use urljoin to build hrefs (#746)
v0.8.4 - 2024-10-16
- Support for collection search via
CollectionSearchclass and associated client methods (#735)
- Python 3.9 support (#724)
v0.8.3 - 2024-07-01
- Actually set
timeoutwhen initializingStacApiIO(#709) - Set
_stac_ioonCollectionClientwhen reading (#709)
v0.8.2 - 2024-05-30
- Support for "Feature" type
intersectsdictionaries (#696)
v0.8.1 - 2024-05-23
- Use singular
includeandexcludeField extension key names (#690)
v0.8.0 - 2024-05-17
v0.7.7 - 2024-04-19
- Updated to pystac v1.10.0 (#661)
- Use uv for CI (#663)
- use
APILayoutStrategyas fallback strategy (#666) - Updated grammar in README (#676)
- Respect the
REQUESTS_CA_BUNDLEandCURL_CA_BUNDLEenvironment variables when sending requests (#669)
v0.7.6 - 2024-02-28
- Recursion error in
get_items(#608) - Fixes inconsistent behavior in
CollectionClient.get_itemswhen Item IDs are supplied (#639) - Logic determining if
context.matchedinItemSearch.matchedresponse (#646)
- Passing
-qto the CLI rather than--query(#614)
v0.7.5 - 2023-09-05
--matchedflag in CLI (#588)
v0.7.4 - 2023-09-05
- Don't provide a
limitby default, trust the server to know its limits (#584)
v0.7.3 - 2023-08-21
v0.7.2 - 2023-06-23
- Remove troublesome assertion (#549)
v0.7.1 - 2023-06-13
- Remove unnecessary
typing_extensionsimport (#541)
v0.7.0 - 2023-06-12
- Timeout option added to
Client.open(#463, #538) - Support for fetching catalog queryables (#477)
- PySTAC Client specific warnings (#480)
- Support for fetching and merging a selection of queryables (#511)
- Better error messages for the CLI (#531)
Modifiableto our public API (#534)max_retriesparameter toStacApiIO(#532)
- Switched to Ruff from isort/flake8 (#457)
- Move to
FutureWarningfromDeprecationWarningfor item search interface functions that are to be removed (#464) - Consolidate contributing docs into one place (#478)
- Use
pyproject.tomlinstead ofsetup.py(#501) - Enable Ruff import sorting (#518)
queryparameter in GET requests (#362)- Double encoding of
intersectsparameter in GET requests (#362) - Fix geometry instantiation in item-search-intersects.ipynb (#484)
- Three tests that were false positives due to out-of-date cassettes (#491)
- Max items checks when paging (#492)
ItemSearch.url_with_parametersno longer unquotes the url (#530)
pystac_client.conformance.CONFORMANCE_URISdictionary (#480)
v0.6.1 - 2023-03-14
- Bumped PySTAC dependency to >= 1.7.0 (#449)
- Fix parse fail when header has multiple '=' characters (#440)
Client.openandClient.from_filenow applyheaders, etc to existingstac_ioinstances ((#439))
v0.6.0 - 2023-01-27
- Python 3.11 support (#347)
request_modifiertoStacApiIOto allow for additional authentication mechanisms (e.g. AWS SigV4) (#372)- Authentication tutorial, demonstrating how to use to the provided hooks to use both basic and AWS SigV4 authentication (#372)
- CI checks for Windows and MacOS (#378)
- Fallback to
STAC API - Item Searchwhen finding a single item inCollectionClientifSTAC API - Featuresis not implemented (#379)
- Stop iteration on an empty page (#338)
- Some mishandled cases for datetime intervals (#363)
- Collection requests when the Client's url ends in a '/' (#373, #405)
- Parse datetimes more strictly (#364)
- Python 3.7 support (#347)
v0.5.1 - 2022-09-19
- Added
ItemSearch.url_with_parametersto get a formatted search url (#304)
- Fix variable name in quickstart example (#316)
StacApiIO.write_text_to_href(#312)- Removed mention of STAC_URL in
Client.opendocstring (#317)
v0.5.0 - 2022-08-19
- Added a new keyword
modifierto various constructors likeClient.open()(#259)
- Fix type annotation of
Client._stac_ioand avoid implicit re-exports inpystac_client.__init__.py(#249) - Added
ItemSearch.pages,ItemSearch.pages_as_dicts,ItemSearch.item_collection, andItemSearch.item_collection_as_dictas replacements for various deprecated methods (#237) - Restored the previous behavior of
Client.search()to return an unlimited number of items by default. (#273)
ItemSearch.item_collectionshas been deprecated in favor ofItemSearch.pages. (#237)
v0.4.0 - 2022-06-08
- Significantly improved type hints
- lru_cache to several methods (#167)
- Direct item GET via ogcapi-features, if conformant (#166)
py.typedfor downstream type checking (#163)- Added tutorial for using various geometry objects (e.g., shapely, geojson) as an Item Search intersects argument (#232)
- Item Search no longer defaults to returning an unlimited number of result Items from
its "items" methods. The
max_itemsparameter now defaults to 100 instead of None. Since thelimitparameter also defaults to 100, in an ideal situation, only one request will be made to the server to retrieve all 100 items. Both of these parameters can be carefully adjusted upwards to align with the server's capabilities and the expected number of search results. (#208) - Better error message when trying to search a non-item-search-conforming catalog (#164)
- Search
filter-langdefaults tocql2-jsoninstead ofcql-json(#169) - Search
filter-langwill be set tocql2-jsonif thefilteris a dict, orcql2-textif it is a string (#169) - Search parameter
intersectsis now typed to only accept a str, dict, or object that implements__geo_interface__(#174) - Better error message when trying to open a Collection with
Client.open(#222)
- Item Search methods
get_items()andget_item_collections()have been renamed toitems()anditem_collections(). The original methods are now deprecated and may be removed as early as v0.5.0. (#206) - Item Search methods
get_all_items()andget_all_items_as_dict()are now deprecated, and may be removed as early as v0.5.0. These have been deprecated because they have the potential to perform a large number of requests to the server and instantiate a large number of objects in memory. To a user, this is only visible as a large delay in the method call and/or the exhaustion of all available memory. The iterator methodsitems()oritem_collections()should be used instead. (#206) - CLI parameter
-qis now deprecated and may be removed as early as v0.5.0. Use--queryinstead. (#215)
- Client parameter
require_geojson_linkhas been removed. (#165)
- Search query parameter now has correct typing and handles Query Extension JSON format. (#220)
- Search sortby parameter now has correct typing and handles both GET and POST JSON parameter formats. (#175)
- Search fields parameter now has correct typing and handles both GET and POST JSON parameter formats. (#184)
- Use pytest configuration to skip benchmarks by default (instead of a
skipmark). (#168) - Methods retrieving collections incorrectly checked the existence of the OAFeat OpenAPI 3.0 conformance class
(http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30) instead of the
STAC API - Collections(https://api.stacspec.org/v1.0.0-beta.1/collections) orSTAC API - Features(https://api.stacspec.org/v1.0.0-beta.1/ogcapi-features) conformance classes. (#223)
v0.3.5 - 2022-05-26
- Search against earth-search v0 failed with message "object of type 'Link' has no len()" (#179)
v0.3.4 - 2022-05-18
v0.3.3 - 2022-04-28
- Add
--filter-langparameter to allow specifying other filter language to be used within the--filterparameter (#140) - CI checks against minimum versions of all dependencies and any pre-release versions of PySTAC (#144)
v0.3.2 - 2022-01-11
Client.searchaccepts an optionalfilter_langargument forfilterrequests (#128)- Added support for filtering the search endpoint using the
media_typeinClient.open(#142)
- Values from
parametersandheadersarguments toClient.openandClient.from_fileare now also used in requests made fromCollectionClientinstances fetched from the same API ((#126)) - The tests folder is no longer installed as a package.
v0.3.1 - 2021-11-17
- Adds
--block-networkoption to all test commands to ensure no network requests are made during unit tests (#119) parametersargument toStacApiIO,Client.open, andClient.from_fileto allow query string parameters to be passed to all requests (#118)
- Update min PySTAC version to 1.2
- Default page size limit set to 100 rather than relying on the server default
- Fetch single collection directly from endpoint in API rather than iterating through children Issue #114
Client.get_collectionsraised an exception when API did not publish/collectionsconformance class instead of falling back to using child links (#120)
v0.3.0 - 2021-09-28
- Jupyter Notebook tutorials
- Basic CQL-JSON filtering (#100)
- Improved performance when constructing
pystac.ItemCollectionobjects. - Relax
requestsdependency (#87) - Use regular expressions for checking conformance classes (#97)
- Reorganized documentation, updated all docs
ItemSearchnow correctly handles times without a timezone specifier (#92)- queries including
gsdcast to string to float when using shortcut query syntax (i.e., "key=val" strings). (#98) - Documentation lints (#108)
v0.2.0 - 2021-08-04
Client.openfalls back to theSTAC_URLenvironment variable if no url is provided as an argument (#48)- New Search.get_pages() iterator function to retrieve pages as raw JSON, not as ItemCollections
StacApiIOclass added, subclass from PySTACStacIO. AStacApiIOinstance is used for all IO for a Client instance, and all requests are in a single HTTP session, handle pagination and respects conformanceconformance.CONFORMANCE_CLASSESdictionary added containing all STAC API Capabilities from stac-api-speccollectionssubcommand to CLI, for saving all Collections in catalog as JSONClient.get_collectionsoverrides Catalog to use /collections endpoint if API conformsClient.get_collection(<collection_id>)for getting specific collectionClient.get_itemsandClient.get_all_itemsoverride Catalog functions to use search endpoint instead of traversing catalog
- Update to use PySTAC 1.1.0
- IO changed to use PySTAC's new StacIO base class.
Search.item_collections()renamed toSearch.get_item_collections()Search.item()renamed toSearch.get_items()- Conformance is checked by each individual function that requires a particular conformance
- STAC API testing URLs changed to updated APIs
ItemSearch.get_pages()function moved to StacApiIO class for general use- Logging is now enabled in the CLI in all cases. If data are being printed to stdout, logging goes to stderr. (#79)
- Improved logging for GET requests (prints encoded URL)
get_pagesandsimple_stac_resolverfunctions frompystac_client.stac_io(The new StacApiIO class understandsLinkobjects)Client.search()no longer accepts anext_resolverargument- pystac.extensions modules, which were based on PySTAC's previous extension implementation, replaced in 1.0.0
stac_api_object.StacApiObjectMixin, replaced with conformance checking inStacApiIO- PySTAC Collection objects can no longer be passed in as
collectionsarguments to theItemSearchclass (just pass ids) Catalog.get_collection_list(was alias toget_child_links) because made assumption about this being an API only. Also redundant withCatalog.get_collectionsSearch.item_collections()Search.items()- STAC_URL environment variable in Client.open(). url parameter in Client is now required
- STAC_URL environment variable in CLI. CLI now has a required positional argument for the URL
- Running
stac-clientwith no arguments no longer raises a confusing exception (#52) Client.get_collections_list(#44)- The regular expression used for datetime parsing (#59)
Client.from_filenow works as expected, usingClient.openis not required, although it will fetch STAC_URL from an envvar
v0.1.1 - 2021-04-16
ItemSearch.items_as_collection(#37)- Documentation published on ReadTheDocs (#46)
- CLI: pass in headers as list of KEY=VALUE pairs
- Include headers in STAC_IO (#38)
- README updated to reflect actual CLI behavior
v0.1.0 - 2021-04-14
Initial release.