Skip to content

Commit dbfe1b2

Browse files
YuriZmytrakovYuri Zmytrakov
authored andcommitted
Merge branch 'main' into CAT-1382-2
2 parents 072592d + 5c0d44f commit dbfe1b2

File tree

11 files changed

+51
-51
lines changed

11 files changed

+51
-51
lines changed

.github/workflows/cicd.yml

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616

1717
services:
1818
elasticsearch_8_svc:
19-
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
19+
image: docker.elastic.co/elasticsearch/elasticsearch:8.19.5
2020
env:
2121
cluster.name: stac-cluster
2222
node.name: es01
@@ -32,25 +32,8 @@ jobs:
3232
ports:
3333
- 9200:9200
3434

35-
elasticsearch_7_svc:
36-
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.1
37-
env:
38-
cluster.name: stac-cluster
39-
node.name: es01
40-
network.host: 0.0.0.0
41-
transport.host: 0.0.0.0
42-
discovery.type: single-node
43-
http.port: 9400
44-
xpack.license.self_generated.type: basic
45-
xpack.security.enabled: false
46-
xpack.security.transport.ssl.enabled: false
47-
ES_JAVA_OPTS: -Xms512m -Xmx1g
48-
action.destructive_requires_name: false
49-
ports:
50-
- 9400:9400
51-
52-
opensearch_2_11:
53-
image: opensearchproject/opensearch:2.11.1
35+
opensearch_2_19:
36+
image: opensearchproject/opensearch:2.19.3
5437
env:
5538
cluster.name: stac-cluster
5639
node.name: os01
@@ -59,12 +42,19 @@ jobs:
5942
discovery.type: single-node
6043
http.port: 9202
6144
http.cors.enabled: true
62-
plugins.security.disabled: true
63-
plugins.security.ssl.http.enabled: true
45+
DISABLE_SECURITY_PLUGIN: true
46+
DISABLE_INSTALL_DEMO_CONFIG: true
6447
OPENSEARCH_JAVA_OPTS: -Xms512m -Xmx512m
6548
action.destructive_requires_name: false
6649
ports:
6750
- 9202:9202
51+
options: >-
52+
--health-cmd="curl -f http://localhost:9202/_cluster/health || exit 1"
53+
--health-interval=10s
54+
--health-timeout=5s
55+
--health-retries=10
56+
--ulimit nofile=65536:65536
57+
--ulimit memlock=-1:-1
6858
6959
redis:
7060
image: redis:7-alpine
@@ -78,8 +68,8 @@ jobs:
7868

7969
strategy:
8070
matrix:
81-
python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13"]
82-
backend: [ "elasticsearch7", "elasticsearch8", "opensearch"]
71+
python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
72+
backend: [ "elasticsearch8", "opensearch"]
8373

8474
name: Python ${{ matrix.python-version }} testing with ${{ matrix.backend }}
8575

@@ -130,12 +120,12 @@ jobs:
130120
pipenv run pytest -svvv --timeout=300
131121
env:
132122
ENVIRONMENT: testing
133-
ES_PORT: ${{ matrix.backend == 'elasticsearch7' && '9400' || matrix.backend == 'elasticsearch8' && '9200' || '9202' }}
123+
ES_PORT: ${{ matrix.backend == 'elasticsearch8' && '9200' || '9202' }}
134124
ES_HOST: 172.17.0.1
135125
ES_USE_SSL: false
136126
DATABASE_REFRESH: true
137127
ES_VERIFY_CERTS: false
138-
BACKEND: ${{ matrix.backend == 'elasticsearch7' && 'elasticsearch' || matrix.backend == 'elasticsearch8' && 'elasticsearch' || 'opensearch' }}
139128
REDIS_ENABLE: true
140129
REDIS_HOST: localhost
141130
REDIS_PORT: 6379
131+
BACKEND: ${{ matrix.backend == 'elasticsearch8' && 'elasticsearch' || 'opensearch' }}

CHANGELOG.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,32 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
99

1010
### Added
1111

12-
- Spatial search support for collections via `bbox` parameter on `/collections` endpoint. Collections are now indexed with a `bbox_shape` field (GeoJSON polygon) derived from their spatial extent for efficient geospatial queries when created or updated. [#481](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/481)
12+
- Spatial search support for collections via `bbox` parameter on `/collections` endpoint. Collections are now indexed with a `bbox_shape` field (GeoJSON polygon) derived from their spatial extent for efficient geospatial queries when created or updated. [#481](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/481
1313
- Introduced SFEOS Tools (`sfeos_tools/`) - An installable Click-based CLI package for managing SFEOS deployments. Initial command `add-bbox-shape` adds the `bbox_shape` field to existing collections for spatial search compatibility. Install with `pip install sfeos-tools[elasticsearch]` or `pip install sfeos-tools[opensearch]`. [#481](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/481)
1414
- Moved SFEOS Tools to its own repository at [Healy-Hyperspatial/sfeos-tools](https://github.com/Healy-Hyperspatial/sfeos-tools). The CLI package is now maintained separately. [#PR_NUMBER]
1515
- CloudFerro logo to sponsors and supporters list [#485](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/485)
1616
- Latest news section to README [#485](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/485)
1717
- Added Redis caching configuration for navigation pagination support, enabling proper `prev` and `next` links in paginated responses. [#488](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/488)
18+
- Python 3.14 support [#500](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/500)
1819

1920
### Changed
2021

2122
- Removed ENV_MAX_LIMIT environment variable; maximum limits are now handled by the default global limit environment variable. [#482](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/482)
2223
- Changed the default and maximum pagination limits for collections/items endpoints. [#482](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/482)
24+
- Removed the `rel=child` links to the collections from the landing page, as the listing was incomplete due to pagination. [#496](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/496)
2325

2426
### Fixed
2527

28+
### Removed
29+
30+
- Removed Elasticsearch 7 from CI/CD test matrix. The project now only tests against Elasticsearch 8 and OpenSearch. [#497](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/497)
31+
32+
### Updated
33+
34+
- Updated Elasticsearch version to 8.19.5 in CI/CD test matrix and compose.yml. [#497](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/497)
35+
- Updated OpenSearch version to 2.19.3 in CI/CD test matrix and compose.yml. [#499](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/499)
36+
- Updated elasticsearh python library to 8.19.1 in setup.py. [#499](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/499)
37+
2638
## [v6.5.1] - 2025-09-30
2739

2840
### Fixed

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
116116
- [Collection Pagination](#collection-pagination)
117117
- [SFEOS Tools CLI](#sfeos-tools-cli)
118118
- [Ingesting Sample Data CLI Tool](#ingesting-sample-data-cli-tool)
119+
- [Redis for navigation](#redis-for-navigation)
119120
- [Elasticsearch Mappings](#elasticsearch-mappings)
120121
- [Managing Elasticsearch Indices](#managing-elasticsearch-indices)
121122
- [Snapshots](#snapshots)
@@ -341,12 +342,11 @@ You can customize additional settings in your `.env` file:
341342
> [!NOTE]
342343
> 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.
343344
344-
## Redis for Navigation:
345+
## Redis for Navigation environment variables:
345346
These Redis configuration variables to enable proper navigation functionality in STAC FastAPI.
346347

347348
| Variable | Description | Default | Required |
348349
|-------------------------------|----------------------------------------------------------------------------------------------|--------------------------|---------------------------------------------------------------------------------------------|
349-
| **General** | | | |
350350
| `REDIS_ENABLE` | Enables or disables Redis caching for navigation. Set to `true` to use Redis, or `false` to disable. | `false` | **Required** (determines whether Redis is used at all) |
351351
| **Redis Sentinel** | | | |
352352
| `REDIS_SENTINEL_HOSTS` | Comma-separated list of Redis Sentinel hostnames/IP addresses. | `""` | Conditional (required if using Sentinel) |
@@ -621,8 +621,12 @@ The Redis cache stores navigation state for paginated results, allowing the syst
621621

622622
Steps to configure:
623623
1. Ensure that a Redis instance is available, either a standalone server or a Sentinel-managed cluster.
624-
2. Establish a connection between STAC FastAPI and Redis instance by setting the appropriate [**environment variables**](#redis-for-navigation)These define the Redis host, port, authentication, and optional Sentinel settings.
624+
2. Establish a connection between STAC FastAPI and Redis instance by setting the appropriate [**environment variables**](#redis-for-navigation-environment-variables). These define the Redis host, port, authentication, and optional Sentinel settings.
625625
3. Control whether Redis caching is activated using the `REDIS_ENABLE` environment variable to `True` or `False`.
626+
4. Ensure the appropriate version of `Redis` is installed:
627+
```
628+
pip install stac-fastapi-elasticsearch[redis]
629+
```
626630

627631
## Elasticsearch Mappings
628632

compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ services:
7979

8080
elasticsearch:
8181
container_name: es-container
82-
image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTICSEARCH_VERSION:-8.11.0}
82+
image: docker.elastic.co/elasticsearch/elasticsearch:${ELASTICSEARCH_VERSION:-8.19.5}
8383
hostname: elasticsearch
8484
environment:
8585
ES_JAVA_OPTS: -Xms512m -Xmx1g
@@ -92,7 +92,7 @@ services:
9292

9393
opensearch:
9494
container_name: os-container
95-
image: opensearchproject/opensearch:${OPENSEARCH_VERSION:-2.11.1}
95+
image: opensearchproject/opensearch:${OPENSEARCH_VERSION:-2.19.3}
9696
hostname: opensearch
9797
environment:
9898
- discovery.type=single-node

stac_fastapi/core/setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"stac-fastapi.types==6.0.0",
1414
"stac-fastapi.api==6.0.0",
1515
"stac-fastapi.extensions==6.0.0",
16-
"orjson~=3.9.0",
16+
"orjson~=3.11.0",
1717
"overrides~=7.4.0",
1818
"geojson-pydantic~=1.0.0",
1919
"pygeofilter~=0.3.1",
@@ -37,6 +37,7 @@
3737
"Programming Language :: Python :: 3.11",
3838
"Programming Language :: Python :: 3.12",
3939
"Programming Language :: Python :: 3.13",
40+
"Programming Language :: Python :: 3.14",
4041
"License :: OSI Approved :: MIT License",
4142
],
4243
url="https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch",

stac_fastapi/core/stac_fastapi/core/core.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -202,17 +202,6 @@ async def landing_page(self, **kwargs) -> stac_types.LandingPage:
202202
]
203203
)
204204

205-
collections = await self.all_collections(request=kwargs["request"])
206-
for collection in collections["collections"]:
207-
landing_page["links"].append(
208-
{
209-
"rel": Relations.child.value,
210-
"type": MimeTypes.json.value,
211-
"title": collection.get("title") or collection.get("id"),
212-
"href": urljoin(base_url, f"collections/{collection['id']}"),
213-
}
214-
)
215-
216205
# Add OpenAPI URL
217206
landing_page["links"].append(
218207
{
@@ -888,7 +877,8 @@ async def post_search(
888877
links = await PagingLinks(request=request, next=next_token).get_links()
889878

890879
collection_links = []
891-
if search_request.collections:
880+
# Add "collection" and "parent" rels only for /collections/{collection_id}/items
881+
if search_request.collections and "/items" in str(request.url):
892882
for collection_id in search_request.collections:
893883
collection_links.extend(
894884
[

stac_fastapi/core/stac_fastapi/core/redis_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ async def redis_pagination_links(
255255
links.insert(
256256
0,
257257
{
258-
"rel": "prev",
258+
"rel": "previous",
259259
"type": "application/json",
260260
"method": "GET",
261261
"href": prev_link,

stac_fastapi/elasticsearch/setup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
install_requires = [
99
"stac-fastapi-core==6.5.1",
1010
"sfeos-helpers==6.5.1",
11-
"elasticsearch[async]~=8.18.0",
11+
"elasticsearch[async]~=8.19.1",
1212
"uvicorn~=0.23.0",
1313
"starlette>=0.35.0,<0.36.0",
1414
]
1515

1616
extra_reqs = {
1717
"dev": [
18-
"pytest~=7.0.0",
18+
"pytest~=8.0",
1919
"pytest-cov~=4.0.0",
2020
"pytest-asyncio~=0.21.0",
2121
"pre-commit~=3.0.0",
@@ -43,6 +43,7 @@
4343
"Programming Language :: Python :: 3.11",
4444
"Programming Language :: Python :: 3.12",
4545
"Programming Language :: Python :: 3.13",
46+
"Programming Language :: Python :: 3.14",
4647
"License :: OSI Approved :: MIT License",
4748
],
4849
url="https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch",

stac_fastapi/opensearch/setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
extra_reqs = {
1818
"dev": [
19-
"pytest~=7.0.0",
19+
"pytest~=8.0",
2020
"pytest-cov~=4.0.0",
2121
"pytest-asyncio~=0.21.0",
2222
"pre-commit~=3.0.0",
@@ -44,6 +44,7 @@
4444
"Programming Language :: Python :: 3.11",
4545
"Programming Language :: Python :: 3.12",
4646
"Programming Language :: Python :: 3.13",
47+
"Programming Language :: Python :: 3.14",
4748
"License :: OSI Approved :: MIT License",
4849
],
4950
url="https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch",

stac_fastapi/sfeos_helpers/setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"Programming Language :: Python :: 3.11",
2525
"Programming Language :: Python :: 3.12",
2626
"Programming Language :: Python :: 3.13",
27+
"Programming Language :: Python :: 3.14",
2728
"License :: OSI Approved :: MIT License",
2829
],
2930
url="https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch",

0 commit comments

Comments
 (0)