You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+16-3Lines changed: 16 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,11 +17,23 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
17
17
18
18
### Fixed
19
19
20
+
- Fix unawaited coroutine in `stac_fastapi.core.core`. [#551](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/551)
21
+
- Parse `ES_TIMEOUT` environment variable as an integer. [#556](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/556)
22
+
- Implemented "Smart Unlink" logic in delete_catalog: when cascade=False (default), collections are unlinked from the catalog and become root-level orphans if they have no other parents, rather than being deleted. When cascade=True, collections are deleted entirely. This prevents accidental data loss and supports poly-hierarchy scenarios where collections belong to multiple catalogs. [#557](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/557)
23
+
- Fixed delete_catalog to use reverse lookup query on parent_ids field instead of fragile link parsing. This ensures all collections are found and updated correctly, preventing ghost relationships where collections remain tagged with deleted catalogs, especially in large catalogs or pagination scenarios. [#557](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/557)
24
+
25
+
### Removed
26
+
27
+
### Updated
28
+
29
+
## [v6.7.6] - 2025-12-04
30
+
31
+
### Fixed
32
+
20
33
- Fix incorrect min/max date formatting in `apply_datetime_filter` for `POST` requests. [#539](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/539)
21
34
- Fixed datetime filtering for .0Z milliseconds to preserve precision in apply_filter_datetime, ensuring only items exactly within the specified range are returned. [#535](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/535)
22
35
- Normalize datetime in POST /search requests to match GET /search behavior. [#543](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/543)
23
-
24
-
### Removed
36
+
- Fix optional Redis support in core.py. [#549](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/549)
25
37
26
38
## [v6.7.5] - 2025-11-25
27
39
@@ -663,7 +675,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
663
675
- Use genexp in execute_search and get_all_collections to return results.
664
676
- Added db_to_stac serializer to item_collection method in core.py.
@@ -28,6 +28,7 @@ The following organizations have contributed time and/or funding to support the
28
28
29
29
## Latest News
30
30
31
+
-**12/09/2025:** Feature Merge: **Federated Catalogs**. The [`Catalogs Endpoint`](https://github.com/Healy-Hyperspatial/stac-api-extensions-catalogs-endpoint) extension is now in main! This enables a registry of catalogs and supports **poly-hierarchy** (collections belonging to multiple catalogs simultaneously). Enable it via `ENABLE_CATALOGS_EXTENSION`. _Coming next: Support for nested sub-catalogs._
31
32
-**11/07/2025:** 🌍 The SFEOS STAC Viewer is now available at: https://healy-hyperspatial.github.io/sfeos-web. Use this site to examine your data and test your STAC API!
32
33
-**10/24/2025:** Added `previous_token` pagination using Redis for efficient navigation. This feature allows users to navigate backwards through large result sets by storing pagination state in Redis. To use this feature, ensure Redis is configured (see [Redis for navigation](#redis-for-navigation)) and set `REDIS_ENABLE=true` in your environment.
33
34
-**10/23/2025:** The `EXCLUDED_FROM_QUERYABLES` environment variable was added to exclude fields from the `queryables` endpoint. See [docs](#excluding-fields-from-queryables).
@@ -92,6 +93,7 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
@@ -168,6 +170,8 @@ SFEOS provides enhanced collection search capabilities through two primary route
168
170
-**GET/POST `/collections`**: The standard STAC endpoint with extended query parameters
169
171
-**GET/POST `/collections-search`**: A custom endpoint that supports the same parameters, created to avoid conflicts with the STAC Transactions extension if enabled (which uses POST `/collections` for collection creation)
170
172
173
+
The `/collections-search` endpoint follows the [STAC API Collection Search Endpoint](https://github.com/Healy-Hyperspatial/stac-api-extensions-collection-search-endpoint) specification, which provides a dedicated, conflict-free mechanism for advanced collection searching.
174
+
171
175
These endpoints support advanced collection discovery features including:
172
176
173
177
-**Sorting**: Sort collections by sortable fields using the `sortby` parameter
@@ -227,6 +231,103 @@ These extensions make it easier to build user interfaces that display and naviga
227
231
> **Important**: Adding keyword fields to make text fields sortable can significantly increase the index size, especially for large text fields. Consider the storage implications when deciding which fields to make sortable.
228
232
229
233
234
+
## Catalogs Route
235
+
236
+
SFEOS supports federated hierarchical catalog browsing through the `/catalogs` endpoint, enabling users to navigate through STAC catalog structures in a tree-like fashion. This extension allows for organized discovery and browsing of collections and sub-catalogs.
237
+
238
+
This implementation follows the [STAC API Catalogs Extension](https://github.com/Healy-Hyperspatial/stac-api-extensions-catalogs) specification, which enables a Federated STAC API architecture with a "Hub and Spoke" structure.
239
+
240
+
### Features
241
+
242
+
-**Hierarchical Navigation**: Browse catalogs and sub-catalogs in a parent-child relationship structure
243
+
-**Multi-Catalog Collections**: Collections can belong to multiple catalogs simultaneously, enabling flexible organizational hierarchies
244
+
-**Collection Discovery**: Access collections within specific catalog contexts
245
+
-**STAC API Compliance**: Follows STAC specification for catalog objects and linking
246
+
-**Flexible Querying**: Support for standard STAC API query parameters when browsing collections within catalogs
247
+
248
+
### Endpoints
249
+
250
+
-**GET `/catalogs`**: Retrieve the root catalog and its child catalogs
251
+
-**POST `/catalogs`**: Create a new catalog (requires appropriate permissions)
252
+
-**GET `/catalogs/{catalog_id}`**: Retrieve a specific catalog and its children
253
+
-**DELETE `/catalogs/{catalog_id}`**: Delete a catalog (optionally cascade delete all collections)
254
+
-**GET `/catalogs/{catalog_id}/collections`**: Retrieve collections within a specific catalog
255
+
-**POST `/catalogs/{catalog_id}/collections`**: Create a new collection within a specific catalog
256
+
-**GET `/catalogs/{catalog_id}/collections/{collection_id}`**: Retrieve a specific collection within a catalog
257
+
-**DELETE `/catalogs/{catalog_id}/collections/{collection_id}`**: Delete a collection from a catalog (removes parent_id if multiple parents exist, deletes collection if it's the only parent)
258
+
-**GET `/catalogs/{catalog_id}/collections/{collection_id}/items`**: Retrieve items within a collection in a catalog context
259
+
-**GET `/catalogs/{catalog_id}/collections/{collection_id}/items/{item_id}`**: Retrieve a specific item within a catalog context
The DELETE endpoint supports the following query parameter:
313
+
314
+
-**`cascade`** (boolean, default: `false`):
315
+
- If `false`: Only deletes the catalog. Collections linked to the catalog remain in the database but lose their catalog link.
316
+
- If `true`: Deletes the catalog AND all collections linked to it. Use with caution as this is a destructive operation.
317
+
318
+
### Response Structure
319
+
320
+
Catalog responses include:
321
+
-**Catalog metadata**: ID, title, description, and other catalog properties
322
+
-**Child catalogs**: Links to sub-catalogs for hierarchical navigation
323
+
-**Collections**: Links to collections contained within the catalog
324
+
-**STAC links**: Properly formatted STAC API links for navigation
325
+
326
+
This feature enables building user interfaces that provide organized, hierarchical browsing of STAC collections, making it easier for users to discover and navigate through large collections organized by theme, provider, or any other categorization scheme.
327
+
328
+
> **Configuration**: The catalogs route can be enabled or disabled by setting the `ENABLE_CATALOGS_ROUTE` environment variable to `true` or `false`. By default, this endpoint is **disabled**.
329
+
330
+
230
331
## Package Structure
231
332
232
333
This project is organized into several packages, each with a specific purpose:
@@ -360,6 +461,7 @@ You can customize additional settings in your `.env` file:
360
461
|`ENABLE_COLLECTIONS_SEARCH`| Enable collection search extensions (sort, fields, free text search, structured filtering, and datetime filtering) on the core `/collections` endpoint. |`true`| Optional |
361
462
|`ENABLE_COLLECTIONS_SEARCH_ROUTE`| Enable the custom `/collections-search` endpoint (both GET and POST methods). When disabled, the custom endpoint will not be available, but collection search extensions will still be available on the core `/collections` endpoint if `ENABLE_COLLECTIONS_SEARCH` is true. |`false`| Optional |
362
463
|`ENABLE_TRANSACTIONS_EXTENSIONS`| Enables or disables the Transactions and Bulk Transactions API extensions. This is useful for deployments where mutating the catalog via the API should be prevented. If set to `true`, the POST `/collections` route for search will be unavailable in the API. |`true`| Optional |
464
+
|`ENABLE_CATALOGS_ROUTE`| Enable the `/catalogs` endpoint for federated hierarchical catalog browsing and navigation. When enabled, provides access to federated STAC API architecture with hub-and-spoke pattern. |`false`| Optional |
363
465
|`STAC_GLOBAL_COLLECTION_MAX_LIMIT`| Configures the maximum number of STAC collections that can be returned in a single search request. | N/A | Optional |
364
466
|`STAC_DEFAULT_COLLECTION_LIMIT`| Configures the default number of STAC collections returned when no limit parameter is specified in the request. |`300`| Optional |
365
467
|`STAC_GLOBAL_ITEM_MAX_LIMIT`| Configures the maximum number of STAC items that can be returned in a single search request. | N/A | Optional |
0 commit comments