stac-fastapi-elasticsearch 6.5.1__tar.gz → 6.7.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.
Files changed (21) hide show
  1. stac_fastapi_elasticsearch-6.7.0/.gitignore +143 -0
  2. stac_fastapi_elasticsearch-6.7.0/PKG-INFO +70 -0
  3. stac_fastapi_elasticsearch-6.7.0/README.md +32 -0
  4. stac_fastapi_elasticsearch-6.7.0/pyproject.toml +71 -0
  5. stac_fastapi_elasticsearch-6.7.0/pytest.ini +4 -0
  6. {stac_fastapi_elasticsearch-6.5.1 → stac_fastapi_elasticsearch-6.7.0}/stac_fastapi/elasticsearch/app.py +1 -0
  7. {stac_fastapi_elasticsearch-6.5.1 → stac_fastapi_elasticsearch-6.7.0}/stac_fastapi/elasticsearch/database_logic.py +29 -71
  8. {stac_fastapi_elasticsearch-6.5.1 → stac_fastapi_elasticsearch-6.7.0}/stac_fastapi/elasticsearch/version.py +1 -1
  9. stac_fastapi_elasticsearch-6.5.1/PKG-INFO +0 -716
  10. stac_fastapi_elasticsearch-6.5.1/README.md +0 -695
  11. stac_fastapi_elasticsearch-6.5.1/setup.cfg +0 -7
  12. stac_fastapi_elasticsearch-6.5.1/setup.py +0 -58
  13. stac_fastapi_elasticsearch-6.5.1/stac_fastapi_elasticsearch.egg-info/PKG-INFO +0 -716
  14. stac_fastapi_elasticsearch-6.5.1/stac_fastapi_elasticsearch.egg-info/SOURCES.txt +0 -15
  15. stac_fastapi_elasticsearch-6.5.1/stac_fastapi_elasticsearch.egg-info/dependency_links.txt +0 -1
  16. stac_fastapi_elasticsearch-6.5.1/stac_fastapi_elasticsearch.egg-info/entry_points.txt +0 -2
  17. stac_fastapi_elasticsearch-6.5.1/stac_fastapi_elasticsearch.egg-info/not-zip-safe +0 -1
  18. stac_fastapi_elasticsearch-6.5.1/stac_fastapi_elasticsearch.egg-info/requires.txt +0 -21
  19. stac_fastapi_elasticsearch-6.5.1/stac_fastapi_elasticsearch.egg-info/top_level.txt +0 -1
  20. {stac_fastapi_elasticsearch-6.5.1 → stac_fastapi_elasticsearch-6.7.0}/stac_fastapi/elasticsearch/__init__.py +0 -0
  21. {stac_fastapi_elasticsearch-6.5.1 → stac_fastapi_elasticsearch-6.7.0}/stac_fastapi/elasticsearch/config.py +0 -0
@@ -0,0 +1,143 @@
1
+ elasticsearch/snapshots/
2
+
3
+ # Byte-compiled / optimized / DLL files
4
+ __pycache__/
5
+ *.py[cod]
6
+ *$py.class
7
+
8
+ # C extensions
9
+ *.so
10
+
11
+ # Distribution / packaging
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ lib/
20
+ lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ pip-wheel-metadata/
26
+ share/python-wheels/
27
+ *.egg-info/
28
+ .installed.cfg
29
+ *.egg
30
+ MANIFEST
31
+
32
+ # PyInstaller
33
+ # Usually these files are written by a python script from a template
34
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
35
+ *.manifest
36
+ *.spec
37
+
38
+ # Installer logs
39
+ pip-log.txt
40
+ pip-delete-this-directory.txt
41
+
42
+ # Unit test / coverage reports
43
+ htmlcov/
44
+ .tox/
45
+ .nox/
46
+ .coverage
47
+ .coverage.*
48
+ .cache
49
+ nosetests.xml
50
+ coverage.xml
51
+ *.cover
52
+ *.py,cover
53
+ .hypothesis/
54
+ .pytest_cache/
55
+
56
+ # Translations
57
+ *.mo
58
+ *.pot
59
+
60
+ # Django stuff:
61
+ *.log
62
+ local_settings.py
63
+ db.sqlite3
64
+ db.sqlite3-journal
65
+
66
+ # Flask stuff:
67
+ instance/
68
+ .webassets-cache
69
+
70
+ # Scrapy stuff:
71
+ .scrapy
72
+
73
+ # Sphinx documentation
74
+ docs/_build/
75
+
76
+ # PyBuilder
77
+ target/
78
+
79
+ # Jupyter Notebook
80
+ .ipynb_checkpoints
81
+
82
+ # IPython
83
+ profile_default/
84
+ ipython_config.py
85
+
86
+ # pyenv
87
+ .python-version
88
+
89
+ # pipenv
90
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
91
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
92
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
93
+ # install all needed dependencies.
94
+ #Pipfile.lock
95
+
96
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
97
+ __pypackages__/
98
+
99
+ # Celery stuff
100
+ celerybeat-schedule
101
+ celerybeat.pid
102
+
103
+ # SageMath parsed files
104
+ *.sage.py
105
+
106
+ # Environments
107
+ .env
108
+ .venv
109
+ env/
110
+ venv/
111
+ ENV/
112
+ env.bak/
113
+ venv.bak/
114
+
115
+ # Spyder project settings
116
+ .spyderproject
117
+ .spyproject
118
+
119
+ # Rope project settings
120
+ .ropeproject
121
+
122
+ # mkdocs documentation
123
+ /site
124
+
125
+ # mypy
126
+ .mypy_cache/
127
+ .dmypy.json
128
+ dmypy.json
129
+
130
+ # Pyre type checker
131
+ .pyre/
132
+
133
+ /esdata
134
+
135
+ # Virtualenv
136
+ venv
137
+
138
+ # VSCode folder
139
+ .vscode
140
+
141
+ /docs/src/api/*
142
+
143
+ .DS_Store
@@ -0,0 +1,70 @@
1
+ Metadata-Version: 2.4
2
+ Name: stac_fastapi_elasticsearch
3
+ Version: 6.7.0
4
+ Summary: An implementation of STAC API based on the FastAPI framework with Elasticsearch.
5
+ Project-URL: Homepage, https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch
6
+ License: MIT
7
+ Keywords: Elasticsearch,FastAPI,STAC,STAC-API,stac-fastapi
8
+ Classifier: Intended Audience :: Developers
9
+ Classifier: Intended Audience :: Information Technology
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3.9
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Requires-Python: >=3.9
19
+ Requires-Dist: elasticsearch[async]~=8.19.1
20
+ Requires-Dist: sfeos-helpers==6.7.0
21
+ Requires-Dist: stac-fastapi-core==6.7.0
22
+ Requires-Dist: starlette<0.36.0,>=0.35.0
23
+ Requires-Dist: uvicorn~=0.23.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: ciso8601~=2.3.0; extra == 'dev'
26
+ Requires-Dist: httpx<0.28.0,>=0.24.0; extra == 'dev'
27
+ Requires-Dist: pre-commit~=3.0.0; extra == 'dev'
28
+ Requires-Dist: pytest-asyncio~=0.21.0; extra == 'dev'
29
+ Requires-Dist: pytest-cov~=4.0.0; extra == 'dev'
30
+ Requires-Dist: pytest~=8.0; extra == 'dev'
31
+ Provides-Extra: docs
32
+ Requires-Dist: mkdocs-material~=9.0.0; extra == 'docs'
33
+ Requires-Dist: mkdocs~=1.4.0; extra == 'docs'
34
+ Requires-Dist: pdocs~=1.2.0; extra == 'docs'
35
+ Provides-Extra: server
36
+ Requires-Dist: uvicorn[standard]~=0.23.0; extra == 'server'
37
+ Description-Content-Type: text/markdown
38
+
39
+ # stac-fastapi-elasticsearch
40
+
41
+ <p align="left">
42
+ <img src="https://raw.githubusercontent.com/stac-utils/stac-fastapi-elasticsearch-opensearch/refs/heads/main/assets/sfeos.png" width=1000>
43
+ </p>
44
+
45
+ [![Downloads](https://static.pepy.tech/badge/stac-fastapi-core?color=blue)](https://pepy.tech/project/stac-fastapi-core)
46
+ [![GitHub contributors](https://img.shields.io/github/contributors/stac-utils/stac-fastapi-elasticsearch-opensearch?color=blue)](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/graphs/contributors)
47
+ [![GitHub stars](https://img.shields.io/github/stars/stac-utils/stac-fastapi-elasticsearch-opensearch.svg?color=blue)](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/stargazers)
48
+ [![GitHub forks](https://img.shields.io/github/forks/stac-utils/stac-fastapi-elasticsearch-opensearch.svg?color=blue)](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/network/members)
49
+ [![PyPI version](https://img.shields.io/pypi/v/stac-fastapi-elasticsearch.svg?color=blue)](https://pypi.org/project/stac-fastapi-elasticsearch/)
50
+ [![STAC](https://img.shields.io/badge/STAC-1.1.0-blue.svg)](https://github.com/radiantearth/stac-spec/tree/v1.1.0)
51
+ [![stac-fastapi](https://img.shields.io/badge/stac--fastapi-6.0.0-blue.svg)](https://github.com/stac-utils/stac-fastapi)
52
+
53
+ This is the Elasticsearch backend for stac-fastapi. For full documentation, please see the [main README](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/blob/main/README.md).
54
+
55
+ ## Package Information
56
+
57
+ - **Package name**: stac-fastapi-elasticsearch
58
+ - **Description**: An implementation of STAC API based on the FastAPI framework with Elasticsearch.
59
+ - **Documentation**: [https://stac-utils.github.io/stac-fastapi-elasticsearch-opensearch/](https://stac-utils.github.io/stac-fastapi-elasticsearch-opensearch/)
60
+ - **Source**: [GitHub Repository](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/)
61
+
62
+ ## Installation
63
+
64
+ ```bash
65
+ pip install stac-fastapi-elasticsearch
66
+ ```
67
+
68
+ ## Quick Start
69
+
70
+ For detailed usage and examples, please refer to the [main documentation](https://stac-utils.github.io/stac-fastapi-elasticsearch-opensearch/).
@@ -0,0 +1,32 @@
1
+ # stac-fastapi-elasticsearch
2
+
3
+ <p align="left">
4
+ <img src="https://raw.githubusercontent.com/stac-utils/stac-fastapi-elasticsearch-opensearch/refs/heads/main/assets/sfeos.png" width=1000>
5
+ </p>
6
+
7
+ [![Downloads](https://static.pepy.tech/badge/stac-fastapi-core?color=blue)](https://pepy.tech/project/stac-fastapi-core)
8
+ [![GitHub contributors](https://img.shields.io/github/contributors/stac-utils/stac-fastapi-elasticsearch-opensearch?color=blue)](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/graphs/contributors)
9
+ [![GitHub stars](https://img.shields.io/github/stars/stac-utils/stac-fastapi-elasticsearch-opensearch.svg?color=blue)](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/stargazers)
10
+ [![GitHub forks](https://img.shields.io/github/forks/stac-utils/stac-fastapi-elasticsearch-opensearch.svg?color=blue)](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/network/members)
11
+ [![PyPI version](https://img.shields.io/pypi/v/stac-fastapi-elasticsearch.svg?color=blue)](https://pypi.org/project/stac-fastapi-elasticsearch/)
12
+ [![STAC](https://img.shields.io/badge/STAC-1.1.0-blue.svg)](https://github.com/radiantearth/stac-spec/tree/v1.1.0)
13
+ [![stac-fastapi](https://img.shields.io/badge/stac--fastapi-6.0.0-blue.svg)](https://github.com/stac-utils/stac-fastapi)
14
+
15
+ This is the Elasticsearch backend for stac-fastapi. For full documentation, please see the [main README](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/blob/main/README.md).
16
+
17
+ ## Package Information
18
+
19
+ - **Package name**: stac-fastapi-elasticsearch
20
+ - **Description**: An implementation of STAC API based on the FastAPI framework with Elasticsearch.
21
+ - **Documentation**: [https://stac-utils.github.io/stac-fastapi-elasticsearch-opensearch/](https://stac-utils.github.io/stac-fastapi-elasticsearch-opensearch/)
22
+ - **Source**: [GitHub Repository](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/)
23
+
24
+ ## Installation
25
+
26
+ ```bash
27
+ pip install stac-fastapi-elasticsearch
28
+ ```
29
+
30
+ ## Quick Start
31
+
32
+ For detailed usage and examples, please refer to the [main documentation](https://stac-utils.github.io/stac-fastapi-elasticsearch-opensearch/).
@@ -0,0 +1,71 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "stac_fastapi_elasticsearch"
7
+ description = "An implementation of STAC API based on the FastAPI framework with Elasticsearch."
8
+ readme = "README.md"
9
+ requires-python = ">=3.9"
10
+ license = {text = "MIT"}
11
+ authors = []
12
+ classifiers = [
13
+ "Intended Audience :: Developers",
14
+ "Intended Audience :: Information Technology",
15
+ "Intended Audience :: Science/Research",
16
+ "Programming Language :: Python :: 3.9",
17
+ "Programming Language :: Python :: 3.10",
18
+ "Programming Language :: Python :: 3.11",
19
+ "Programming Language :: Python :: 3.12",
20
+ "Programming Language :: Python :: 3.13",
21
+ "Programming Language :: Python :: 3.14",
22
+ "License :: OSI Approved :: MIT License",
23
+ ]
24
+ keywords = [
25
+ "STAC",
26
+ "STAC-API",
27
+ "FastAPI",
28
+ "Elasticsearch",
29
+ "stac-fastapi",
30
+ ]
31
+ dynamic = ["version"]
32
+ dependencies = [
33
+ "stac-fastapi-core==6.7.0",
34
+ "sfeos-helpers==6.7.0",
35
+ "elasticsearch[async]~=8.19.1",
36
+ "uvicorn~=0.23.0",
37
+ "starlette>=0.35.0,<0.36.0",
38
+ ]
39
+
40
+ [project.urls]
41
+ Homepage = "https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch"
42
+
43
+ [project.optional-dependencies]
44
+ dev = [
45
+ "pytest~=8.0",
46
+ "pytest-cov~=4.0.0",
47
+ "pytest-asyncio~=0.21.0",
48
+ "pre-commit~=3.0.0",
49
+ "ciso8601~=2.3.0",
50
+ "httpx>=0.24.0,<0.28.0",
51
+ ]
52
+ docs = [
53
+ "mkdocs~=1.4.0",
54
+ "mkdocs-material~=9.0.0",
55
+ "pdocs~=1.2.0",
56
+ ]
57
+ server = [
58
+ "uvicorn[standard]~=0.23.0",
59
+ ]
60
+
61
+ [project.scripts]
62
+ stac-fastapi-elasticsearch = "stac_fastapi.elasticsearch.app:run"
63
+
64
+ [tool.hatch.version]
65
+ path = "stac_fastapi/elasticsearch/version.py"
66
+
67
+ [tool.hatch.build.targets.sdist]
68
+ exclude = ["alembic", "tests", "scripts"]
69
+
70
+ [tool.hatch.build.targets.wheel]
71
+ only-include = ["stac_fastapi"]
@@ -0,0 +1,4 @@
1
+ [pytest]
2
+ testpaths = tests
3
+ addopts = -sv
4
+ asyncio_mode = auto
@@ -198,6 +198,7 @@ if ENABLE_COLLECTIONS_SEARCH_ROUTE:
198
198
  FieldsConformanceClasses.COLLECTIONS,
199
199
  ],
200
200
  )
201
+ extensions.append(collection_search_ext)
201
202
  extensions.append(collections_search_endpoint_ext)
202
203
 
203
204
 
@@ -17,7 +17,7 @@ from starlette.requests import Request
17
17
 
18
18
  from stac_fastapi.core.base_database_logic import BaseDatabaseLogic
19
19
  from stac_fastapi.core.serializers import CollectionSerializer, ItemSerializer
20
- from stac_fastapi.core.utilities import bbox2polygon, get_bool_env, get_max_limit
20
+ from stac_fastapi.core.utilities import MAX_LIMIT, bbox2polygon, get_bool_env
21
21
  from stac_fastapi.elasticsearch.config import AsyncElasticsearchSettings
22
22
  from stac_fastapi.elasticsearch.config import (
23
23
  ElasticsearchSettings as SyncElasticsearchSettings,
@@ -29,13 +29,15 @@ from stac_fastapi.extensions.core.transaction.request import (
29
29
  )
30
30
  from stac_fastapi.sfeos_helpers import filter as filter_module
31
31
  from stac_fastapi.sfeos_helpers.database import (
32
+ add_bbox_shape_to_collection,
33
+ apply_collections_bbox_filter_shared,
34
+ apply_collections_datetime_filter_shared,
32
35
  apply_free_text_filter_shared,
33
36
  apply_intersects_filter_shared,
34
37
  create_index_templates_shared,
35
38
  delete_item_index_shared,
36
39
  get_queryables_mapping_shared,
37
40
  index_alias_by_collection_id,
38
- index_by_collection_id,
39
41
  mk_actions,
40
42
  mk_item_id,
41
43
  populate_sort_shared,
@@ -99,26 +101,6 @@ async def create_collection_index() -> None:
99
101
  await client.close()
100
102
 
101
103
 
102
- async def create_item_index(collection_id: str):
103
- """
104
- Create the index for Items. The settings of the index template will be used implicitly.
105
-
106
- Args:
107
- collection_id (str): Collection identifier.
108
-
109
- Returns:
110
- None
111
-
112
- """
113
- client = AsyncElasticsearchSettings().create_client
114
-
115
- await client.options(ignore_status=400).indices.create(
116
- index=f"{index_by_collection_id(collection_id)}-000001",
117
- body={"aliases": {index_alias_by_collection_id(collection_id): {}}},
118
- )
119
- await client.close()
120
-
121
-
122
104
  async def delete_item_index(collection_id: str):
123
105
  """Delete the index for items in a collection.
124
106
 
@@ -175,6 +157,7 @@ class DatabaseLogic(BaseDatabaseLogic):
175
157
  limit: int,
176
158
  request: Request,
177
159
  sort: Optional[List[Dict[str, Any]]] = None,
160
+ bbox: Optional[List[float]] = None,
178
161
  q: Optional[List[str]] = None,
179
162
  filter: Optional[Dict[str, Any]] = None,
180
163
  query: Optional[Dict[str, Dict[str, Any]]] = None,
@@ -187,6 +170,7 @@ class DatabaseLogic(BaseDatabaseLogic):
187
170
  limit (int): The number of results to return.
188
171
  request (Request): The FastAPI request object.
189
172
  sort (Optional[List[Dict[str, Any]]]): Optional sort parameter from the request.
173
+ bbox (Optional[List[float]]): Bounding box to filter collections by spatial extent.
190
174
  q (Optional[List[str]]): Free text search terms.
191
175
  query (Optional[Dict[str, Dict[str, Any]]]): Query extension parameters.
192
176
  filter (Optional[Dict[str, Any]]): Structured query in CQL2 format.
@@ -314,12 +298,15 @@ class DatabaseLogic(BaseDatabaseLogic):
314
298
  query_parts.append({"bool": {"must_not": {"match_all": {}}}})
315
299
  raise
316
300
 
317
- # Combine all query parts with AND logic if there are multiple
318
- datetime_filter = None
319
- if datetime:
320
- datetime_filter = self._apply_collection_datetime_filter(datetime)
321
- if datetime_filter:
322
- query_parts.append(datetime_filter)
301
+ # Apply bbox filter if provided
302
+ bbox_filter = apply_collections_bbox_filter_shared(bbox)
303
+ if bbox_filter:
304
+ query_parts.append(bbox_filter)
305
+
306
+ # Apply datetime filter if provided
307
+ datetime_filter = apply_collections_datetime_filter_shared(datetime)
308
+ if datetime_filter:
309
+ query_parts.append(datetime_filter)
323
310
 
324
311
  # Combine all query parts with AND logic
325
312
  if query_parts:
@@ -329,12 +316,6 @@ class DatabaseLogic(BaseDatabaseLogic):
329
316
  else {"bool": {"must": query_parts}}
330
317
  )
331
318
 
332
- # Create a copy of the body for count query (without pagination and sorting)
333
- count_body = body.copy()
334
- if "search_after" in count_body:
335
- del count_body["search_after"]
336
- count_body["size"] = 0
337
-
338
319
  # Create async tasks for both search and count
339
320
  search_task = asyncio.create_task(
340
321
  self.client.search(
@@ -384,41 +365,6 @@ class DatabaseLogic(BaseDatabaseLogic):
384
365
 
385
366
  return collections, next_token, matched
386
367
 
387
- @staticmethod
388
- def _apply_collection_datetime_filter(
389
- datetime_str: Optional[str],
390
- ) -> Optional[Dict[str, Any]]:
391
- """Create a temporal filter for collections based on their extent."""
392
- if not datetime_str:
393
- return None
394
-
395
- # Parse the datetime string into start and end
396
- if "/" in datetime_str:
397
- start, end = datetime_str.split("/")
398
- # Replace open-ended ranges with concrete dates
399
- if start == "..":
400
- # For open-ended start, use a very early date
401
- start = "1800-01-01T00:00:00Z"
402
- if end == "..":
403
- # For open-ended end, use a far future date
404
- end = "2999-12-31T23:59:59Z"
405
- else:
406
- # If it's just a single date, use it for both start and end
407
- start = end = datetime_str
408
-
409
- return {
410
- "bool": {
411
- "must": [
412
- # Check if any date in the array is less than or equal to the query end date
413
- # This will match if the collection's start date is before or equal to the query end date
414
- {"range": {"extent.temporal.interval": {"lte": end}}},
415
- # Check if any date in the array is greater than or equal to the query start date
416
- # This will match if the collection's end date is after or equal to the query start date
417
- {"range": {"extent.temporal.interval": {"gte": start}}},
418
- ]
419
- }
420
- }
421
-
422
368
  async def get_one_item(self, collection_id: str, item_id: str) -> Dict:
423
369
  """Retrieve a single item from the database.
424
370
 
@@ -816,7 +762,7 @@ class DatabaseLogic(BaseDatabaseLogic):
816
762
  index_param = ITEM_INDICES
817
763
  query = add_collections_to_body(collection_ids, query)
818
764
 
819
- max_result_window = get_max_limit()
765
+ max_result_window = MAX_LIMIT
820
766
 
821
767
  size_limit = min(limit + 1, max_result_window)
822
768
 
@@ -1386,7 +1332,7 @@ class DatabaseLogic(BaseDatabaseLogic):
1386
1332
  None
1387
1333
 
1388
1334
  Notes:
1389
- A new index is created for the items in the Collection using the `create_item_index` function.
1335
+ A new index is created for the items in the Collection if the index insertion strategy requires it.
1390
1336
  """
1391
1337
  collection_id = collection["id"]
1392
1338
 
@@ -1404,6 +1350,12 @@ class DatabaseLogic(BaseDatabaseLogic):
1404
1350
  if await self.client.exists(index=COLLECTIONS_INDEX, id=collection_id):
1405
1351
  raise ConflictError(f"Collection {collection_id} already exists")
1406
1352
 
1353
+ if get_bool_env("ENABLE_COLLECTIONS_SEARCH") or get_bool_env(
1354
+ "ENABLE_COLLECTIONS_SEARCH_ROUTE"
1355
+ ):
1356
+ # Convert bbox to bbox_shape for geospatial queries (ES/OS specific)
1357
+ add_bbox_shape_to_collection(collection)
1358
+
1407
1359
  # Index the collection in the database
1408
1360
  await self.client.index(
1409
1361
  index=COLLECTIONS_INDEX,
@@ -1507,6 +1459,12 @@ class DatabaseLogic(BaseDatabaseLogic):
1507
1459
  await self.delete_collection(collection_id)
1508
1460
 
1509
1461
  else:
1462
+ if get_bool_env("ENABLE_COLLECTIONS_SEARCH") or get_bool_env(
1463
+ "ENABLE_COLLECTIONS_SEARCH_ROUTE"
1464
+ ):
1465
+ # Convert bbox to bbox_shape for geospatial queries (ES/OS specific)
1466
+ add_bbox_shape_to_collection(collection)
1467
+
1510
1468
  # Update the existing collection
1511
1469
  await self.client.index(
1512
1470
  index=COLLECTIONS_INDEX,
@@ -1,2 +1,2 @@
1
1
  """library version."""
2
- __version__ = "6.5.1"
2
+ __version__ = "6.7.0"