Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- unified the type of queryables endpoint to `application/schema+json`. [#445](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/445)
- updated `numReturned` & `numMatched` fields in itemCollection return to `numberReturned` & `numberMatched`. [#446](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/446)

### Fixed
- Fix broken and outdated conformance links in conformsTo list. [#453](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/453)

## [v6.3.0] - 2025-09-16

### Added
Expand Down
10 changes: 9 additions & 1 deletion stac_fastapi/core/stac_fastapi/core/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,15 @@ class CoreClient(AsyncBaseCoreClient):

database: BaseDatabaseLogic = attr.ib()
base_conformance_classes: List[str] = attr.ib(
factory=lambda: BASE_CONFORMANCE_CLASSES
factory=lambda: [
(
"http://www.opengis.net/spec/ogcapi-features-1/1.0/req/oas30"
if cls.value
== "http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30"
else cls.value
)
for cls in BASE_CONFORMANCE_CLASSES
]
)
extensions: List[ApiExtension] = attr.ib(default=attr.Factory(list))

Expand Down
53 changes: 50 additions & 3 deletions stac_fastapi/opensearch/stac_fastapi/opensearch/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,26 +68,49 @@
filter_extension.conformance_classes.append(
FilterConformanceClasses.ADVANCED_COMPARISON_OPERATORS
)
filter_extension.conformance_classes = [
"https://api.stacspec.org/v1.0.0-rc.1/item-search#filter"
if cls.value == "https://api.stacspec.org/v1.0.0-rc.2/item-search#filter"
else cls.value
for cls in filter_extension.conformance_classes
]

# Adding collection search extension for compatibility with stac-auth-proxy
# (https://github.com/developmentseed/stac-auth-proxy)
# The extension is not fully implemented yet but is required for collection filtering support
collection_search_extension = CollectionSearchExtension()
collection_search_extension.conformance_classes.append(
"https://api.stacspec.org/v1.0.0-rc.1/collection-search#filter"
)

collection_search_extension.conformance_classes = [
cls
for cls in collection_search_extension.conformance_classes
if cls != "https://api.stacspec.org/v1.0.0-rc.1/collection-search"
and cls != "http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/simple-query"
]

aggregation_extension = AggregationExtension(
client=EsAsyncBaseAggregationClient(
database=database_logic, session=session, settings=settings
)
)

aggregation_extension.conformance_classes = [
cls
for cls in aggregation_extension.conformance_classes
if cls != "https://api.stacspec.org/v0.3.0/aggregation"
]

aggregation_extension.POST = EsAggregationExtensionPostRequest
aggregation_extension.GET = EsAggregationExtensionGetRequest

fields_extension = FieldsExtension()
fields_extension.conformance_classes.append(FieldsConformanceClasses.ITEMS)

fields_extension.conformance_classes = [
cls
for cls in fields_extension.conformance_classes
if cls.value != "http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/simple-query"
]

search_extensions = [
fields_extension,
QueryExtension(),
Expand Down Expand Up @@ -120,6 +143,30 @@
),
)

LINKS_TO_BE_REMOVED = {
"https://api.stacspec.org/v1.0.0/collections/extensions/transaction",
"https://api.stacspec.org/v1.0.0/ogcapi-features/extensions/transaction",
"https://api.stacspec.org/v1.0.0/item-search#query",
"https://api.stacspec.org/v1.0.0-rc.1/item-search#free-text",
"https://api.stacspec.org/v1.0.0/ogcapi-features#fields",
}

search_extensions = [
ext for ext in search_extensions
if not any(cls in LINKS_TO_BE_REMOVED for cls in ext.conformance_classes)
]

for extension in search_extensions:
extension.conformance_classes = [
"https://api.stacspec.org/v1.0.0-rc.1/item-search#fields"
if cls == "https://api.stacspec.org/v1.0.0/item-search#fields"
else "https://api.stacspec.org/v1.0.0-rc.1/item-search#sort"
if cls == "https://api.stacspec.org/v1.0.0/item-search#sort"
else cls
for cls in extension.conformance_classes
]


extensions = [aggregation_extension] + search_extensions

database_logic.extensions = [type(ext).__name__ for ext in extensions]
Expand Down