-
Notifications
You must be signed in to change notification settings - Fork 38
Quick and harmless fix to help with alternate OpenSearch schemas #553
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Quick and harmless fix to help with alternate OpenSearch schemas #553
Conversation
jonhealy1
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @tloubrieu-jpl This looks really good. Can you add the same changes to the Elasticsearch backend. Thanks!
|
Hello @jonhealy1 , I made the extension to elasticsearch, I also realized that I initially missed some strings, derived from the constants newly defined, in the nested field syntax of elasticsearch/opensearch. I made this fix with the latest commit. I re-ran the tests (make test) as well and I noticed some errors (5) that I initially missed but sounds unrelated to te change of this PR. Thanks |
|
Tests pass here! @tloubrieu-jpl Thanks for making the updates. How would you feel about adding environment variables? This would make it a lot easier for developers to modify these fields. PROPERTIES_DATETIME_FIELD = os.getenv("STAC_FIELD_PROP_DATETIME", "properties.datetime")
PROPERTIES_START_DATETIME_FIELD = os.getenv("STAC_FIELD_PROP_START_DATETIME", "properties.start_datetime")
PROPERTIES_END_DATETIME_FIELD = os.getenv("STAC_FIELD_PROP_END_DATETIME", "properties.end_datetime")
COLLECTION_FIELD = os.getenv("STAC_FIELD_COLLECTION", "collection")
GEOMETRY_FIELD = os.getenv("STAC_FIELD_GEOMETRY", "geometry") |
|
Hi @jonhealy1 , I made the changes you proposed and updated the README with the new environment variables. That might be useful to other developers as the more of the OpenSearch/ElasticSearch index can be configured. Thanks, |
jonhealy1
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@tloubrieu-jpl Nice work - thanks for this.
**Related Issue(s):** - None **Description:** #### Added - Environment variable `VALIDATE_QUERYABLES` to enable/disable validation of queryables in search/filter requests. When set to `true`, search requests will be validated against the defined queryables, returning an error for any unsupported fields. Defaults to `false` for backward compatibility.[#532](#532) - Environment variable `QUERYABLES_CACHE_TTL` to configure the TTL (in seconds) for caching queryables. Default is `1800` seconds (30 minutes) to balance performance and freshness of queryables data. [#532](#532) - Added optional `/catalogs` route support to enable federated hierarchical catalog browsing and navigation. [#547](#547) - Added DELETE `/catalogs/{catalog_id}/collections/{collection_id}` endpoint to support removing collections from catalogs. When a collection belongs to multiple catalogs, it removes only the specified catalog from the collection's parent_ids. When a collection belongs to only one catalog, the collection is deleted entirely. [#554](#554) - Added `parent_ids` internal field to collections to support multi-catalog hierarchies. Collections can now belong to multiple catalogs, with parent catalog IDs stored in this field for efficient querying and management. [#554](#554) - Added GET `/catalogs/{catalog_id}/children` endpoint implementing the STAC Children extension for efficient hierarchical catalog browsing. Supports type filtering (?type=Catalog|Collection), pagination, and returns numberReturned/numberMatched counts at the top level. [#558](#558) - Implemented context-aware dynamic linking: catalogs use dynamic `rel="children"` links pointing to the `/catalogs/{id}/children` endpoint, and collections have context-dependent `rel="parent"` links (pointing to catalog when accessed via `/catalogs/{id}/collections/{id}`, or root when accessed via `/collections/{id}`). Catalog links are only injected in catalog context. This eliminates race conditions and ensures consistency with parent_ids relationships. [#559](#559) #### Changed - Have opensearch datetime, geometry and collections fields defined as constant strings [#553](#553) #### Fixed - Fix unawaited coroutine in `stac_fastapi.core.core`. [#551](#551) - Parse `ES_TIMEOUT` environment variable as an integer. [#556](#556) - 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](#557) - 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](#557) **PR Checklist:** - [x] Code is formatted and linted (run `pre-commit run --all-files`) - [x] Tests pass (run `make test`) - [x] Documentation has been updated to reflect changes, if applicable - [x] Changes are added to the changelog
Related Issue(s):
(I did not want to create a new ticket which could be redundant with this one)
Description:
Have opensearch datetime, geometry and collections fields defined as constant string so to be easily overwritten when the OpenSearch mapping requires it, as shown in example https://github.com/NASA-PDS/registry-stac-api/blob/464ce37952367fa845b325e36263b04a1fd89965/src/pds/registry/stac/database_logic.py#L28
PR Checklist:
pre-commit run --all-files)make test)