sfeos-helpers 6.3.0__tar.gz → 6.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/PKG-INFO +66 -7
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/README.md +65 -6
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/setup.py +1 -1
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/sfeos_helpers.egg-info/PKG-INFO +66 -7
- sfeos_helpers-6.5.0/sfeos_helpers.egg-info/requires.txt +1 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/filter/client.py +9 -4
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/mappings.py +6 -1
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/version.py +1 -1
- sfeos_helpers-6.3.0/sfeos_helpers.egg-info/requires.txt +0 -1
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/setup.cfg +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/sfeos_helpers.egg-info/SOURCES.txt +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/sfeos_helpers.egg-info/dependency_links.txt +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/sfeos_helpers.egg-info/not-zip-safe +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/sfeos_helpers.egg-info/top_level.txt +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/aggregation/__init__.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/aggregation/client.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/aggregation/format.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/database/__init__.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/database/datetime.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/database/document.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/database/index.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/database/mapping.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/database/query.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/database/utils.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/filter/__init__.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/filter/cql2.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/filter/transform.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/models/patch.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/__init__.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/base.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/factory.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/index_operations.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/inserters.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/managers.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/selection/__init__.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/selection/base.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/selection/cache_manager.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/selection/factory.py +0 -0
- {sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/selection/selectors.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sfeos_helpers
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.5.0
|
|
4
4
|
Summary: Helper library for the Elasticsearch and Opensearch stac-fastapi backends.
|
|
5
5
|
Home-page: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch
|
|
6
6
|
License: MIT
|
|
@@ -54,11 +54,10 @@ SFEOS (stac-fastapi-elasticsearch-opensearch) is a high-performance, scalable AP
|
|
|
54
54
|
- **Scale to millions of geospatial assets** with fast search performance through optimized spatial indexing and query capabilities
|
|
55
55
|
- **Support OGC-compliant filtering** including spatial operations (intersects, contains, etc.) and temporal queries
|
|
56
56
|
- **Perform geospatial aggregations** to analyze data distribution across space and time
|
|
57
|
+
- **Enhanced collection search capabilities** with support for sorting and field selection
|
|
57
58
|
|
|
58
59
|
This implementation builds on the STAC-FastAPI framework, providing a production-ready solution specifically optimized for Elasticsearch and OpenSearch databases. It's ideal for organizations managing large geospatial data catalogs who need efficient discovery and access capabilities through standardized APIs.
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
|
|
62
61
|
## Common Deployment Patterns
|
|
63
62
|
|
|
64
63
|
stac-fastapi-elasticsearch-opensearch can be deployed in several ways depending on your needs:
|
|
@@ -85,12 +84,13 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
|
|
|
85
84
|
## Table of Contents
|
|
86
85
|
|
|
87
86
|
- [stac-fastapi-elasticsearch-opensearch](#stac-fastapi-elasticsearch-opensearch)
|
|
88
|
-
- [Sponsors
|
|
87
|
+
- [Sponsors & Supporters](#sponsors--supporters)
|
|
89
88
|
- [Project Introduction - What is SFEOS?](#project-introduction---what-is-sfeos)
|
|
90
89
|
- [Common Deployment Patterns](#common-deployment-patterns)
|
|
91
90
|
- [Technologies](#technologies)
|
|
92
91
|
- [Table of Contents](#table-of-contents)
|
|
93
|
-
- [
|
|
92
|
+
- [Collection Search Extensions](#collection-search-extensions)
|
|
93
|
+
- [Documentation & Resources](#documentation--resources)
|
|
94
94
|
- [Package Structure](#package-structure)
|
|
95
95
|
- [Examples](#examples)
|
|
96
96
|
- [Performance](#performance)
|
|
@@ -131,6 +131,59 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
|
|
|
131
131
|
- [Gitter Chat](https://app.gitter.im/#/room/#stac-fastapi-elasticsearch_community:gitter.im) - For real-time discussions
|
|
132
132
|
- [GitHub Discussions](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/discussions) - For longer-form questions and answers
|
|
133
133
|
|
|
134
|
+
## Collection Search Extensions
|
|
135
|
+
|
|
136
|
+
SFEOS provides enhanced collection search capabilities through two primary routes:
|
|
137
|
+
- **GET/POST `/collections`**: The standard STAC endpoint with extended query parameters
|
|
138
|
+
- **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)
|
|
139
|
+
|
|
140
|
+
These endpoints support advanced collection discovery features including:
|
|
141
|
+
|
|
142
|
+
- **Sorting**: Sort collections by sortable fields using the `sortby` parameter
|
|
143
|
+
- Example: `/collections?sortby=+id` (ascending sort by ID)
|
|
144
|
+
- Example: `/collections?sortby=-id` (descending sort by ID)
|
|
145
|
+
- Example: `/collections?sortby=-temporal` (descending sort by temporal extent)
|
|
146
|
+
|
|
147
|
+
- **Field Selection**: Request only specific fields to be returned using the `fields` parameter
|
|
148
|
+
- Example: `/collections?fields=id,title,description`
|
|
149
|
+
- This helps reduce payload size when only certain fields are needed
|
|
150
|
+
|
|
151
|
+
- **Free Text Search**: Search across collection text fields using the `q` parameter
|
|
152
|
+
- Example: `/collections?q=landsat`
|
|
153
|
+
- Searches across multiple text fields including title, description, and keywords
|
|
154
|
+
- Supports partial word matching and relevance-based sorting
|
|
155
|
+
|
|
156
|
+
- **Structured Filtering**: Filter collections using CQL2 expressions
|
|
157
|
+
- JSON format: `/collections?filter={"op":"=","args":[{"property":"id"},"sentinel-2"]}&filter-lang=cql2-json`
|
|
158
|
+
- Text format: `/collections?filter=id='sentinel-2'&filter-lang=cql2-text` (note: string values must be quoted)
|
|
159
|
+
- Advanced text format: `/collections?filter=id LIKE '%sentinel%'&filter-lang=cql2-text` (supports LIKE, BETWEEN, etc.)
|
|
160
|
+
- Supports both CQL2 JSON and CQL2 text formats with various operators
|
|
161
|
+
- Enables precise filtering on any collection property
|
|
162
|
+
|
|
163
|
+
- **Datetime Filtering**: Filter collections by their temporal extent using the `datetime` parameter
|
|
164
|
+
- Example: `/collections?datetime=2020-01-01T00:00:00Z/2020-12-31T23:59:59Z` (finds collections with temporal extents that overlap this range)
|
|
165
|
+
- Example: `/collections?datetime=2020-06-15T12:00:00Z` (finds collections whose temporal extent includes this specific time)
|
|
166
|
+
- Example: `/collections?datetime=2020-01-01T00:00:00Z/..` (finds collections with temporal extents that extend to or beyond January 1, 2020)
|
|
167
|
+
- Example: `/collections?datetime=../2020-12-31T23:59:59Z` (finds collections with temporal extents that begin on or before December 31, 2020)
|
|
168
|
+
- Collections are matched if their temporal extent overlaps with the provided datetime parameter
|
|
169
|
+
- This allows for efficient discovery of collections based on time periods
|
|
170
|
+
|
|
171
|
+
These extensions make it easier to build user interfaces that display and navigate through collections efficiently.
|
|
172
|
+
|
|
173
|
+
> **Configuration**: Collection search extensions (sorting, field selection, free text search, structured filtering, and datetime filtering) for the `/collections` endpoint can be disabled by setting the `ENABLE_COLLECTIONS_SEARCH` environment variable to `false`. By default, these extensions are enabled.
|
|
174
|
+
>
|
|
175
|
+
> **Configuration**: The custom `/collections-search` endpoint can be enabled by setting the `ENABLE_COLLECTIONS_SEARCH_ROUTE` environment variable to `true`. By default, this endpoint is **disabled**.
|
|
176
|
+
|
|
177
|
+
> **Note**: Sorting is only available on fields that are indexed for sorting in Elasticsearch/OpenSearch. With the default mappings, you can sort on:
|
|
178
|
+
> - `id` (keyword field)
|
|
179
|
+
> - `extent.temporal.interval` (date field)
|
|
180
|
+
> - `temporal` (alias to extent.temporal.interval)
|
|
181
|
+
>
|
|
182
|
+
> Text fields like `title` and `description` are not sortable by default as they use text analysis for better search capabilities. Attempting to sort on these fields will result in a user-friendly error message explaining which fields are sortable and how to make additional fields sortable by updating the mappings.
|
|
183
|
+
>
|
|
184
|
+
> **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.
|
|
185
|
+
|
|
186
|
+
|
|
134
187
|
## Package Structure
|
|
135
188
|
|
|
136
189
|
This project is organized into several packages, each with a specific purpose:
|
|
@@ -143,7 +196,7 @@ This project is organized into several packages, each with a specific purpose:
|
|
|
143
196
|
- Shared logic and utilities that improve code reuse between backends
|
|
144
197
|
|
|
145
198
|
- **stac_fastapi_elasticsearch**: Complete implementation of the STAC API using Elasticsearch as the backend database. This package depends on both `stac_fastapi_core` and `sfeos_helpers`.
|
|
146
|
-
|
|
199
|
+
|
|
147
200
|
- **stac_fastapi_opensearch**: Complete implementation of the STAC API using OpenSearch as the backend database. This package depends on both `stac_fastapi_core` and `sfeos_helpers`.
|
|
148
201
|
|
|
149
202
|
## Examples
|
|
@@ -261,10 +314,13 @@ You can customize additional settings in your `.env` file:
|
|
|
261
314
|
| `ENABLE_DIRECT_RESPONSE` | Enable direct response for maximum performance (disables all FastAPI dependencies, including authentication, custom status codes, and validation) | `false` | Optional |
|
|
262
315
|
| `RAISE_ON_BULK_ERROR` | Controls whether bulk insert operations raise exceptions on errors. If set to `true`, the operation will stop and raise an exception when an error occurs. If set to `false`, errors will be logged, and the operation will continue. **Note:** STAC Item and ItemCollection validation errors will always raise, regardless of this flag. | `false` | Optional |
|
|
263
316
|
| `DATABASE_REFRESH` | Controls whether database operations refresh the index immediately after changes. If set to `true`, changes will be immediately searchable. If set to `false`, changes may not be immediately visible but can improve performance for bulk operations. If set to `wait_for`, changes will wait for the next refresh cycle to become visible. | `false` | Optional |
|
|
264
|
-
| `
|
|
317
|
+
| `ENABLE_COLLECTIONS_SEARCH` | Enable collection search extensions (sort, fields, free text search, structured filtering, and datetime filtering) on the core `/collections` endpoint. | `true` | Optional |
|
|
318
|
+
| `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 |
|
|
319
|
+
| `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 |
|
|
265
320
|
| `STAC_ITEM_LIMIT` | Sets the environment variable for result limiting to SFEOS for the number of returned items and STAC collections. | `10` | Optional |
|
|
266
321
|
| `STAC_INDEX_ASSETS` | Controls if Assets are indexed when added to Elasticsearch/Opensearch. This allows asset fields to be included in search queries. | `false` | Optional |
|
|
267
322
|
| `ENV_MAX_LIMIT` | Configures the environment variable in SFEOS to override the default `MAX_LIMIT`, which controls the limit parameter for returned items and STAC collections. | `10,000` | Optional |
|
|
323
|
+
| `USE_DATETIME` | Configures the datetime search behavior in SFEOS. When enabled, searches both datetime field and falls back to start_datetime/end_datetime range for items with null datetime. When disabled, searches only by start_datetime/end_datetime range. | `true` | Optional |
|
|
268
324
|
|
|
269
325
|
> [!NOTE]
|
|
270
326
|
> The variables `ES_HOST`, `ES_PORT`, `ES_USE_SSL`, `ES_VERIFY_CERTS` and `ES_TIMEOUT` apply to both Elasticsearch and OpenSearch backends, so there is no need to rename the key names to `OS_` even if you're using OpenSearch.
|
|
@@ -406,6 +462,9 @@ The system uses a precise naming convention:
|
|
|
406
462
|
- **Root Path Configuration**: The application root path is the base URL by default.
|
|
407
463
|
- For AWS Lambda with Gateway API: Set `STAC_FASTAPI_ROOT_PATH` to match the Gateway API stage name (e.g., `/v1`)
|
|
408
464
|
|
|
465
|
+
- **Feature Configuration**: Control which features are enabled:
|
|
466
|
+
- `ENABLE_COLLECTIONS_SEARCH`: Set to `true` (default) to enable collection search extensions (sort, fields). Set to `false` to disable.
|
|
467
|
+
- `ENABLE_TRANSACTIONS_EXTENSIONS`: Set to `true` (default) to enable transaction extensions. Set to `false` to disable.
|
|
409
468
|
|
|
410
469
|
## Collection Pagination
|
|
411
470
|
|
|
@@ -36,11 +36,10 @@ SFEOS (stac-fastapi-elasticsearch-opensearch) is a high-performance, scalable AP
|
|
|
36
36
|
- **Scale to millions of geospatial assets** with fast search performance through optimized spatial indexing and query capabilities
|
|
37
37
|
- **Support OGC-compliant filtering** including spatial operations (intersects, contains, etc.) and temporal queries
|
|
38
38
|
- **Perform geospatial aggregations** to analyze data distribution across space and time
|
|
39
|
+
- **Enhanced collection search capabilities** with support for sorting and field selection
|
|
39
40
|
|
|
40
41
|
This implementation builds on the STAC-FastAPI framework, providing a production-ready solution specifically optimized for Elasticsearch and OpenSearch databases. It's ideal for organizations managing large geospatial data catalogs who need efficient discovery and access capabilities through standardized APIs.
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
|
|
44
43
|
## Common Deployment Patterns
|
|
45
44
|
|
|
46
45
|
stac-fastapi-elasticsearch-opensearch can be deployed in several ways depending on your needs:
|
|
@@ -67,12 +66,13 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
|
|
|
67
66
|
## Table of Contents
|
|
68
67
|
|
|
69
68
|
- [stac-fastapi-elasticsearch-opensearch](#stac-fastapi-elasticsearch-opensearch)
|
|
70
|
-
- [Sponsors
|
|
69
|
+
- [Sponsors & Supporters](#sponsors--supporters)
|
|
71
70
|
- [Project Introduction - What is SFEOS?](#project-introduction---what-is-sfeos)
|
|
72
71
|
- [Common Deployment Patterns](#common-deployment-patterns)
|
|
73
72
|
- [Technologies](#technologies)
|
|
74
73
|
- [Table of Contents](#table-of-contents)
|
|
75
|
-
- [
|
|
74
|
+
- [Collection Search Extensions](#collection-search-extensions)
|
|
75
|
+
- [Documentation & Resources](#documentation--resources)
|
|
76
76
|
- [Package Structure](#package-structure)
|
|
77
77
|
- [Examples](#examples)
|
|
78
78
|
- [Performance](#performance)
|
|
@@ -113,6 +113,59 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
|
|
|
113
113
|
- [Gitter Chat](https://app.gitter.im/#/room/#stac-fastapi-elasticsearch_community:gitter.im) - For real-time discussions
|
|
114
114
|
- [GitHub Discussions](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/discussions) - For longer-form questions and answers
|
|
115
115
|
|
|
116
|
+
## Collection Search Extensions
|
|
117
|
+
|
|
118
|
+
SFEOS provides enhanced collection search capabilities through two primary routes:
|
|
119
|
+
- **GET/POST `/collections`**: The standard STAC endpoint with extended query parameters
|
|
120
|
+
- **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)
|
|
121
|
+
|
|
122
|
+
These endpoints support advanced collection discovery features including:
|
|
123
|
+
|
|
124
|
+
- **Sorting**: Sort collections by sortable fields using the `sortby` parameter
|
|
125
|
+
- Example: `/collections?sortby=+id` (ascending sort by ID)
|
|
126
|
+
- Example: `/collections?sortby=-id` (descending sort by ID)
|
|
127
|
+
- Example: `/collections?sortby=-temporal` (descending sort by temporal extent)
|
|
128
|
+
|
|
129
|
+
- **Field Selection**: Request only specific fields to be returned using the `fields` parameter
|
|
130
|
+
- Example: `/collections?fields=id,title,description`
|
|
131
|
+
- This helps reduce payload size when only certain fields are needed
|
|
132
|
+
|
|
133
|
+
- **Free Text Search**: Search across collection text fields using the `q` parameter
|
|
134
|
+
- Example: `/collections?q=landsat`
|
|
135
|
+
- Searches across multiple text fields including title, description, and keywords
|
|
136
|
+
- Supports partial word matching and relevance-based sorting
|
|
137
|
+
|
|
138
|
+
- **Structured Filtering**: Filter collections using CQL2 expressions
|
|
139
|
+
- JSON format: `/collections?filter={"op":"=","args":[{"property":"id"},"sentinel-2"]}&filter-lang=cql2-json`
|
|
140
|
+
- Text format: `/collections?filter=id='sentinel-2'&filter-lang=cql2-text` (note: string values must be quoted)
|
|
141
|
+
- Advanced text format: `/collections?filter=id LIKE '%sentinel%'&filter-lang=cql2-text` (supports LIKE, BETWEEN, etc.)
|
|
142
|
+
- Supports both CQL2 JSON and CQL2 text formats with various operators
|
|
143
|
+
- Enables precise filtering on any collection property
|
|
144
|
+
|
|
145
|
+
- **Datetime Filtering**: Filter collections by their temporal extent using the `datetime` parameter
|
|
146
|
+
- Example: `/collections?datetime=2020-01-01T00:00:00Z/2020-12-31T23:59:59Z` (finds collections with temporal extents that overlap this range)
|
|
147
|
+
- Example: `/collections?datetime=2020-06-15T12:00:00Z` (finds collections whose temporal extent includes this specific time)
|
|
148
|
+
- Example: `/collections?datetime=2020-01-01T00:00:00Z/..` (finds collections with temporal extents that extend to or beyond January 1, 2020)
|
|
149
|
+
- Example: `/collections?datetime=../2020-12-31T23:59:59Z` (finds collections with temporal extents that begin on or before December 31, 2020)
|
|
150
|
+
- Collections are matched if their temporal extent overlaps with the provided datetime parameter
|
|
151
|
+
- This allows for efficient discovery of collections based on time periods
|
|
152
|
+
|
|
153
|
+
These extensions make it easier to build user interfaces that display and navigate through collections efficiently.
|
|
154
|
+
|
|
155
|
+
> **Configuration**: Collection search extensions (sorting, field selection, free text search, structured filtering, and datetime filtering) for the `/collections` endpoint can be disabled by setting the `ENABLE_COLLECTIONS_SEARCH` environment variable to `false`. By default, these extensions are enabled.
|
|
156
|
+
>
|
|
157
|
+
> **Configuration**: The custom `/collections-search` endpoint can be enabled by setting the `ENABLE_COLLECTIONS_SEARCH_ROUTE` environment variable to `true`. By default, this endpoint is **disabled**.
|
|
158
|
+
|
|
159
|
+
> **Note**: Sorting is only available on fields that are indexed for sorting in Elasticsearch/OpenSearch. With the default mappings, you can sort on:
|
|
160
|
+
> - `id` (keyword field)
|
|
161
|
+
> - `extent.temporal.interval` (date field)
|
|
162
|
+
> - `temporal` (alias to extent.temporal.interval)
|
|
163
|
+
>
|
|
164
|
+
> Text fields like `title` and `description` are not sortable by default as they use text analysis for better search capabilities. Attempting to sort on these fields will result in a user-friendly error message explaining which fields are sortable and how to make additional fields sortable by updating the mappings.
|
|
165
|
+
>
|
|
166
|
+
> **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.
|
|
167
|
+
|
|
168
|
+
|
|
116
169
|
## Package Structure
|
|
117
170
|
|
|
118
171
|
This project is organized into several packages, each with a specific purpose:
|
|
@@ -125,7 +178,7 @@ This project is organized into several packages, each with a specific purpose:
|
|
|
125
178
|
- Shared logic and utilities that improve code reuse between backends
|
|
126
179
|
|
|
127
180
|
- **stac_fastapi_elasticsearch**: Complete implementation of the STAC API using Elasticsearch as the backend database. This package depends on both `stac_fastapi_core` and `sfeos_helpers`.
|
|
128
|
-
|
|
181
|
+
|
|
129
182
|
- **stac_fastapi_opensearch**: Complete implementation of the STAC API using OpenSearch as the backend database. This package depends on both `stac_fastapi_core` and `sfeos_helpers`.
|
|
130
183
|
|
|
131
184
|
## Examples
|
|
@@ -243,10 +296,13 @@ You can customize additional settings in your `.env` file:
|
|
|
243
296
|
| `ENABLE_DIRECT_RESPONSE` | Enable direct response for maximum performance (disables all FastAPI dependencies, including authentication, custom status codes, and validation) | `false` | Optional |
|
|
244
297
|
| `RAISE_ON_BULK_ERROR` | Controls whether bulk insert operations raise exceptions on errors. If set to `true`, the operation will stop and raise an exception when an error occurs. If set to `false`, errors will be logged, and the operation will continue. **Note:** STAC Item and ItemCollection validation errors will always raise, regardless of this flag. | `false` | Optional |
|
|
245
298
|
| `DATABASE_REFRESH` | Controls whether database operations refresh the index immediately after changes. If set to `true`, changes will be immediately searchable. If set to `false`, changes may not be immediately visible but can improve performance for bulk operations. If set to `wait_for`, changes will wait for the next refresh cycle to become visible. | `false` | Optional |
|
|
246
|
-
| `
|
|
299
|
+
| `ENABLE_COLLECTIONS_SEARCH` | Enable collection search extensions (sort, fields, free text search, structured filtering, and datetime filtering) on the core `/collections` endpoint. | `true` | Optional |
|
|
300
|
+
| `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 |
|
|
301
|
+
| `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 |
|
|
247
302
|
| `STAC_ITEM_LIMIT` | Sets the environment variable for result limiting to SFEOS for the number of returned items and STAC collections. | `10` | Optional |
|
|
248
303
|
| `STAC_INDEX_ASSETS` | Controls if Assets are indexed when added to Elasticsearch/Opensearch. This allows asset fields to be included in search queries. | `false` | Optional |
|
|
249
304
|
| `ENV_MAX_LIMIT` | Configures the environment variable in SFEOS to override the default `MAX_LIMIT`, which controls the limit parameter for returned items and STAC collections. | `10,000` | Optional |
|
|
305
|
+
| `USE_DATETIME` | Configures the datetime search behavior in SFEOS. When enabled, searches both datetime field and falls back to start_datetime/end_datetime range for items with null datetime. When disabled, searches only by start_datetime/end_datetime range. | `true` | Optional |
|
|
250
306
|
|
|
251
307
|
> [!NOTE]
|
|
252
308
|
> The variables `ES_HOST`, `ES_PORT`, `ES_USE_SSL`, `ES_VERIFY_CERTS` and `ES_TIMEOUT` apply to both Elasticsearch and OpenSearch backends, so there is no need to rename the key names to `OS_` even if you're using OpenSearch.
|
|
@@ -388,6 +444,9 @@ The system uses a precise naming convention:
|
|
|
388
444
|
- **Root Path Configuration**: The application root path is the base URL by default.
|
|
389
445
|
- For AWS Lambda with Gateway API: Set `STAC_FASTAPI_ROOT_PATH` to match the Gateway API stage name (e.g., `/v1`)
|
|
390
446
|
|
|
447
|
+
- **Feature Configuration**: Control which features are enabled:
|
|
448
|
+
- `ENABLE_COLLECTIONS_SEARCH`: Set to `true` (default) to enable collection search extensions (sort, fields). Set to `false` to disable.
|
|
449
|
+
- `ENABLE_TRANSACTIONS_EXTENSIONS`: Set to `true` (default) to enable transaction extensions. Set to `false` to disable.
|
|
391
450
|
|
|
392
451
|
## Collection Pagination
|
|
393
452
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sfeos-helpers
|
|
3
|
-
Version: 6.
|
|
3
|
+
Version: 6.5.0
|
|
4
4
|
Summary: Helper library for the Elasticsearch and Opensearch stac-fastapi backends.
|
|
5
5
|
Home-page: https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch
|
|
6
6
|
License: MIT
|
|
@@ -54,11 +54,10 @@ SFEOS (stac-fastapi-elasticsearch-opensearch) is a high-performance, scalable AP
|
|
|
54
54
|
- **Scale to millions of geospatial assets** with fast search performance through optimized spatial indexing and query capabilities
|
|
55
55
|
- **Support OGC-compliant filtering** including spatial operations (intersects, contains, etc.) and temporal queries
|
|
56
56
|
- **Perform geospatial aggregations** to analyze data distribution across space and time
|
|
57
|
+
- **Enhanced collection search capabilities** with support for sorting and field selection
|
|
57
58
|
|
|
58
59
|
This implementation builds on the STAC-FastAPI framework, providing a production-ready solution specifically optimized for Elasticsearch and OpenSearch databases. It's ideal for organizations managing large geospatial data catalogs who need efficient discovery and access capabilities through standardized APIs.
|
|
59
60
|
|
|
60
|
-
|
|
61
|
-
|
|
62
61
|
## Common Deployment Patterns
|
|
63
62
|
|
|
64
63
|
stac-fastapi-elasticsearch-opensearch can be deployed in several ways depending on your needs:
|
|
@@ -85,12 +84,13 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
|
|
|
85
84
|
## Table of Contents
|
|
86
85
|
|
|
87
86
|
- [stac-fastapi-elasticsearch-opensearch](#stac-fastapi-elasticsearch-opensearch)
|
|
88
|
-
- [Sponsors
|
|
87
|
+
- [Sponsors & Supporters](#sponsors--supporters)
|
|
89
88
|
- [Project Introduction - What is SFEOS?](#project-introduction---what-is-sfeos)
|
|
90
89
|
- [Common Deployment Patterns](#common-deployment-patterns)
|
|
91
90
|
- [Technologies](#technologies)
|
|
92
91
|
- [Table of Contents](#table-of-contents)
|
|
93
|
-
- [
|
|
92
|
+
- [Collection Search Extensions](#collection-search-extensions)
|
|
93
|
+
- [Documentation & Resources](#documentation--resources)
|
|
94
94
|
- [Package Structure](#package-structure)
|
|
95
95
|
- [Examples](#examples)
|
|
96
96
|
- [Performance](#performance)
|
|
@@ -131,6 +131,59 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
|
|
|
131
131
|
- [Gitter Chat](https://app.gitter.im/#/room/#stac-fastapi-elasticsearch_community:gitter.im) - For real-time discussions
|
|
132
132
|
- [GitHub Discussions](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/discussions) - For longer-form questions and answers
|
|
133
133
|
|
|
134
|
+
## Collection Search Extensions
|
|
135
|
+
|
|
136
|
+
SFEOS provides enhanced collection search capabilities through two primary routes:
|
|
137
|
+
- **GET/POST `/collections`**: The standard STAC endpoint with extended query parameters
|
|
138
|
+
- **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)
|
|
139
|
+
|
|
140
|
+
These endpoints support advanced collection discovery features including:
|
|
141
|
+
|
|
142
|
+
- **Sorting**: Sort collections by sortable fields using the `sortby` parameter
|
|
143
|
+
- Example: `/collections?sortby=+id` (ascending sort by ID)
|
|
144
|
+
- Example: `/collections?sortby=-id` (descending sort by ID)
|
|
145
|
+
- Example: `/collections?sortby=-temporal` (descending sort by temporal extent)
|
|
146
|
+
|
|
147
|
+
- **Field Selection**: Request only specific fields to be returned using the `fields` parameter
|
|
148
|
+
- Example: `/collections?fields=id,title,description`
|
|
149
|
+
- This helps reduce payload size when only certain fields are needed
|
|
150
|
+
|
|
151
|
+
- **Free Text Search**: Search across collection text fields using the `q` parameter
|
|
152
|
+
- Example: `/collections?q=landsat`
|
|
153
|
+
- Searches across multiple text fields including title, description, and keywords
|
|
154
|
+
- Supports partial word matching and relevance-based sorting
|
|
155
|
+
|
|
156
|
+
- **Structured Filtering**: Filter collections using CQL2 expressions
|
|
157
|
+
- JSON format: `/collections?filter={"op":"=","args":[{"property":"id"},"sentinel-2"]}&filter-lang=cql2-json`
|
|
158
|
+
- Text format: `/collections?filter=id='sentinel-2'&filter-lang=cql2-text` (note: string values must be quoted)
|
|
159
|
+
- Advanced text format: `/collections?filter=id LIKE '%sentinel%'&filter-lang=cql2-text` (supports LIKE, BETWEEN, etc.)
|
|
160
|
+
- Supports both CQL2 JSON and CQL2 text formats with various operators
|
|
161
|
+
- Enables precise filtering on any collection property
|
|
162
|
+
|
|
163
|
+
- **Datetime Filtering**: Filter collections by their temporal extent using the `datetime` parameter
|
|
164
|
+
- Example: `/collections?datetime=2020-01-01T00:00:00Z/2020-12-31T23:59:59Z` (finds collections with temporal extents that overlap this range)
|
|
165
|
+
- Example: `/collections?datetime=2020-06-15T12:00:00Z` (finds collections whose temporal extent includes this specific time)
|
|
166
|
+
- Example: `/collections?datetime=2020-01-01T00:00:00Z/..` (finds collections with temporal extents that extend to or beyond January 1, 2020)
|
|
167
|
+
- Example: `/collections?datetime=../2020-12-31T23:59:59Z` (finds collections with temporal extents that begin on or before December 31, 2020)
|
|
168
|
+
- Collections are matched if their temporal extent overlaps with the provided datetime parameter
|
|
169
|
+
- This allows for efficient discovery of collections based on time periods
|
|
170
|
+
|
|
171
|
+
These extensions make it easier to build user interfaces that display and navigate through collections efficiently.
|
|
172
|
+
|
|
173
|
+
> **Configuration**: Collection search extensions (sorting, field selection, free text search, structured filtering, and datetime filtering) for the `/collections` endpoint can be disabled by setting the `ENABLE_COLLECTIONS_SEARCH` environment variable to `false`. By default, these extensions are enabled.
|
|
174
|
+
>
|
|
175
|
+
> **Configuration**: The custom `/collections-search` endpoint can be enabled by setting the `ENABLE_COLLECTIONS_SEARCH_ROUTE` environment variable to `true`. By default, this endpoint is **disabled**.
|
|
176
|
+
|
|
177
|
+
> **Note**: Sorting is only available on fields that are indexed for sorting in Elasticsearch/OpenSearch. With the default mappings, you can sort on:
|
|
178
|
+
> - `id` (keyword field)
|
|
179
|
+
> - `extent.temporal.interval` (date field)
|
|
180
|
+
> - `temporal` (alias to extent.temporal.interval)
|
|
181
|
+
>
|
|
182
|
+
> Text fields like `title` and `description` are not sortable by default as they use text analysis for better search capabilities. Attempting to sort on these fields will result in a user-friendly error message explaining which fields are sortable and how to make additional fields sortable by updating the mappings.
|
|
183
|
+
>
|
|
184
|
+
> **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.
|
|
185
|
+
|
|
186
|
+
|
|
134
187
|
## Package Structure
|
|
135
188
|
|
|
136
189
|
This project is organized into several packages, each with a specific purpose:
|
|
@@ -143,7 +196,7 @@ This project is organized into several packages, each with a specific purpose:
|
|
|
143
196
|
- Shared logic and utilities that improve code reuse between backends
|
|
144
197
|
|
|
145
198
|
- **stac_fastapi_elasticsearch**: Complete implementation of the STAC API using Elasticsearch as the backend database. This package depends on both `stac_fastapi_core` and `sfeos_helpers`.
|
|
146
|
-
|
|
199
|
+
|
|
147
200
|
- **stac_fastapi_opensearch**: Complete implementation of the STAC API using OpenSearch as the backend database. This package depends on both `stac_fastapi_core` and `sfeos_helpers`.
|
|
148
201
|
|
|
149
202
|
## Examples
|
|
@@ -261,10 +314,13 @@ You can customize additional settings in your `.env` file:
|
|
|
261
314
|
| `ENABLE_DIRECT_RESPONSE` | Enable direct response for maximum performance (disables all FastAPI dependencies, including authentication, custom status codes, and validation) | `false` | Optional |
|
|
262
315
|
| `RAISE_ON_BULK_ERROR` | Controls whether bulk insert operations raise exceptions on errors. If set to `true`, the operation will stop and raise an exception when an error occurs. If set to `false`, errors will be logged, and the operation will continue. **Note:** STAC Item and ItemCollection validation errors will always raise, regardless of this flag. | `false` | Optional |
|
|
263
316
|
| `DATABASE_REFRESH` | Controls whether database operations refresh the index immediately after changes. If set to `true`, changes will be immediately searchable. If set to `false`, changes may not be immediately visible but can improve performance for bulk operations. If set to `wait_for`, changes will wait for the next refresh cycle to become visible. | `false` | Optional |
|
|
264
|
-
| `
|
|
317
|
+
| `ENABLE_COLLECTIONS_SEARCH` | Enable collection search extensions (sort, fields, free text search, structured filtering, and datetime filtering) on the core `/collections` endpoint. | `true` | Optional |
|
|
318
|
+
| `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 |
|
|
319
|
+
| `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 |
|
|
265
320
|
| `STAC_ITEM_LIMIT` | Sets the environment variable for result limiting to SFEOS for the number of returned items and STAC collections. | `10` | Optional |
|
|
266
321
|
| `STAC_INDEX_ASSETS` | Controls if Assets are indexed when added to Elasticsearch/Opensearch. This allows asset fields to be included in search queries. | `false` | Optional |
|
|
267
322
|
| `ENV_MAX_LIMIT` | Configures the environment variable in SFEOS to override the default `MAX_LIMIT`, which controls the limit parameter for returned items and STAC collections. | `10,000` | Optional |
|
|
323
|
+
| `USE_DATETIME` | Configures the datetime search behavior in SFEOS. When enabled, searches both datetime field and falls back to start_datetime/end_datetime range for items with null datetime. When disabled, searches only by start_datetime/end_datetime range. | `true` | Optional |
|
|
268
324
|
|
|
269
325
|
> [!NOTE]
|
|
270
326
|
> The variables `ES_HOST`, `ES_PORT`, `ES_USE_SSL`, `ES_VERIFY_CERTS` and `ES_TIMEOUT` apply to both Elasticsearch and OpenSearch backends, so there is no need to rename the key names to `OS_` even if you're using OpenSearch.
|
|
@@ -406,6 +462,9 @@ The system uses a precise naming convention:
|
|
|
406
462
|
- **Root Path Configuration**: The application root path is the base URL by default.
|
|
407
463
|
- For AWS Lambda with Gateway API: Set `STAC_FASTAPI_ROOT_PATH` to match the Gateway API stage name (e.g., `/v1`)
|
|
408
464
|
|
|
465
|
+
- **Feature Configuration**: Control which features are enabled:
|
|
466
|
+
- `ENABLE_COLLECTIONS_SEARCH`: Set to `true` (default) to enable collection search extensions (sort, fields). Set to `false` to disable.
|
|
467
|
+
- `ENABLE_TRANSACTIONS_EXTENSIONS`: Set to `true` (default) to enable transaction extensions. Set to `false` to disable.
|
|
409
468
|
|
|
410
469
|
## Collection Pagination
|
|
411
470
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
stac-fastapi.core==6.5.0
|
|
@@ -4,6 +4,7 @@ from collections import deque
|
|
|
4
4
|
from typing import Any, Dict, Optional, Tuple
|
|
5
5
|
|
|
6
6
|
import attr
|
|
7
|
+
from fastapi import Request
|
|
7
8
|
|
|
8
9
|
from stac_fastapi.core.base_database_logic import BaseDatabaseLogic
|
|
9
10
|
from stac_fastapi.core.extensions.filter import ALL_QUERYABLES, DEFAULT_QUERYABLES
|
|
@@ -37,9 +38,11 @@ class EsAsyncBaseFiltersClient(AsyncBaseFiltersClient):
|
|
|
37
38
|
Returns:
|
|
38
39
|
Dict[str, Any]: A dictionary containing the queryables for the given collection.
|
|
39
40
|
"""
|
|
41
|
+
request: Optional[Request] = kwargs.get("request")
|
|
42
|
+
url_str: str = str(request.url) if request else ""
|
|
40
43
|
queryables: Dict[str, Any] = {
|
|
41
|
-
"$schema": "https://json-schema.org/draft
|
|
42
|
-
"$id": "
|
|
44
|
+
"$schema": "https://json-schema.org/draft-07/schema",
|
|
45
|
+
"$id": f"{url_str}",
|
|
43
46
|
"type": "object",
|
|
44
47
|
"title": "Queryables for STAC API",
|
|
45
48
|
"description": "Queryable names for the STAC API Item Search filter.",
|
|
@@ -49,7 +52,7 @@ class EsAsyncBaseFiltersClient(AsyncBaseFiltersClient):
|
|
|
49
52
|
if not collection_id:
|
|
50
53
|
return queryables
|
|
51
54
|
|
|
52
|
-
properties: Dict[str, Any] = queryables["properties"]
|
|
55
|
+
properties: Dict[str, Any] = queryables["properties"].copy()
|
|
53
56
|
queryables.update(
|
|
54
57
|
{
|
|
55
58
|
"properties": properties,
|
|
@@ -69,7 +72,9 @@ class EsAsyncBaseFiltersClient(AsyncBaseFiltersClient):
|
|
|
69
72
|
field_properties = field_def.get("properties")
|
|
70
73
|
if field_properties:
|
|
71
74
|
stack.extend(
|
|
72
|
-
(f"{field_fqn}.{k}", v)
|
|
75
|
+
(f"{field_fqn}.{k}", v)
|
|
76
|
+
for k, v in field_properties.items()
|
|
77
|
+
if v.get("enabled", True)
|
|
73
78
|
)
|
|
74
79
|
|
|
75
80
|
# Skip non-indexed or disabled fields
|
|
@@ -161,10 +161,15 @@ ES_COLLECTIONS_MAPPINGS = {
|
|
|
161
161
|
"properties": {
|
|
162
162
|
"id": {"type": "keyword"},
|
|
163
163
|
"extent.spatial.bbox": {"type": "long"},
|
|
164
|
-
"extent.temporal.interval": {
|
|
164
|
+
"extent.temporal.interval": {
|
|
165
|
+
"type": "date",
|
|
166
|
+
"format": "strict_date_optional_time||epoch_millis",
|
|
167
|
+
},
|
|
165
168
|
"providers": {"type": "object", "enabled": False},
|
|
166
169
|
"links": {"type": "object", "enabled": False},
|
|
167
170
|
"item_assets": {"type": "object", "enabled": get_bool_env("STAC_INDEX_ASSETS")},
|
|
171
|
+
# Field alias to allow sorting on 'temporal' (points to extent.temporal.interval)
|
|
172
|
+
"temporal": {"type": "alias", "path": "extent.temporal.interval"},
|
|
168
173
|
},
|
|
169
174
|
}
|
|
170
175
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""library version."""
|
|
2
|
-
__version__ = "6.
|
|
2
|
+
__version__ = "6.5.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
stac-fastapi.core==6.3.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/aggregation/__init__.py
RENAMED
|
File without changes
|
{sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/aggregation/client.py
RENAMED
|
File without changes
|
{sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/aggregation/format.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/__init__.py
RENAMED
|
File without changes
|
{sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/base.py
RENAMED
|
File without changes
|
{sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/inserters.py
RENAMED
|
File without changes
|
{sfeos_helpers-6.3.0 → sfeos_helpers-6.5.0}/stac_fastapi/sfeos_helpers/search_engine/managers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|