|
1 | 1 | """FastAPI application.""" |
2 | 2 |
|
3 | | -import logging |
4 | 3 | import os |
5 | 4 | from contextlib import asynccontextmanager |
6 | 5 |
|
|
22 | 21 | from stac_fastapi.core.rate_limit import setup_rate_limit |
23 | 22 | from stac_fastapi.core.route_dependencies import get_route_dependencies |
24 | 23 | from stac_fastapi.core.session import Session |
25 | | -from stac_fastapi.core.utilities import get_bool_env |
26 | 24 | from stac_fastapi.extensions.core import ( |
27 | 25 | AggregationExtension, |
| 26 | + CollectionSearchExtension, |
| 27 | + CollectionSearchFilterExtension, |
28 | 28 | FilterExtension, |
29 | 29 | FreeTextExtension, |
30 | 30 | SortExtension, |
31 | 31 | TokenPaginationExtension, |
32 | 32 | TransactionExtension, |
33 | 33 | ) |
| 34 | +from stac_fastapi.extensions.core.fields import FieldsConformanceClasses |
34 | 35 | from stac_fastapi.extensions.core.filter import FilterConformanceClasses |
| 36 | +from stac_fastapi.extensions.core.free_text import FreeTextConformanceClasses |
| 37 | +from stac_fastapi.extensions.core.query import QueryConformanceClasses |
| 38 | +from stac_fastapi.extensions.core.sort import SortConformanceClasses |
35 | 39 | from stac_fastapi.extensions.third_party import BulkTransactionExtension |
36 | 40 | from stac_fastapi.opensearch.config import OpensearchSettings |
37 | 41 | from stac_fastapi.opensearch.database_logic import ( |
|
42 | 46 | from stac_fastapi.sfeos_helpers.aggregation import EsAsyncBaseAggregationClient |
43 | 47 | from stac_fastapi.sfeos_helpers.filter import EsAsyncBaseFiltersClient |
44 | 48 |
|
45 | | -logging.basicConfig(level=logging.INFO) |
46 | | -logger = logging.getLogger(__name__) |
47 | | - |
48 | | -TRANSACTIONS_EXTENSIONS = get_bool_env("ENABLE_TRANSACTIONS_EXTENSIONS", default=True) |
49 | | -logger.info("TRANSACTIONS_EXTENSIONS is set to %s", TRANSACTIONS_EXTENSIONS) |
50 | | - |
51 | 49 | settings = OpensearchSettings() |
52 | 50 | session = Session.create_from_settings(settings) |
53 | 51 |
|
|
57 | 55 | client=EsAsyncBaseFiltersClient(database=database_logic) |
58 | 56 | ) |
59 | 57 | filter_extension.conformance_classes.append( |
60 | | - FilterConformanceClasses.ADVANCED_COMPARISON_OPERATORS |
| 58 | + "http://www.opengis.net/spec/cql2/1.0/conf/advanced-comparison-operators" |
61 | 59 | ) |
62 | 60 |
|
63 | 61 | aggregation_extension = AggregationExtension( |
|
69 | 67 | aggregation_extension.GET = EsAggregationExtensionGetRequest |
70 | 68 |
|
71 | 69 | search_extensions = [ |
| 70 | + TransactionExtension( |
| 71 | + client=TransactionsClient( |
| 72 | + database=database_logic, session=session, settings=settings |
| 73 | + ), |
| 74 | + settings=settings, |
| 75 | + ), |
| 76 | + BulkTransactionExtension( |
| 77 | + client=BulkTransactionsClient( |
| 78 | + database=database_logic, |
| 79 | + session=session, |
| 80 | + settings=settings, |
| 81 | + ) |
| 82 | + ), |
| 83 | + CollectionSearchExtension(), |
72 | 84 | FieldsExtension(), |
73 | 85 | QueryExtension(), |
74 | 86 | SortExtension(), |
|
77 | 89 | FreeTextExtension(), |
78 | 90 | ] |
79 | 91 |
|
| 92 | +extensions = [aggregation_extension] + search_extensions |
80 | 93 |
|
81 | | -if TRANSACTIONS_EXTENSIONS: |
82 | | - search_extensions.insert( |
83 | | - 0, |
84 | | - TransactionExtension( |
85 | | - client=TransactionsClient( |
86 | | - database=database_logic, session=session, settings=settings |
87 | | - ), |
88 | | - settings=settings, |
89 | | - ), |
90 | | - ) |
91 | | - search_extensions.insert( |
92 | | - 1, |
93 | | - BulkTransactionExtension( |
94 | | - client=BulkTransactionsClient( |
95 | | - database=database_logic, |
96 | | - session=session, |
97 | | - settings=settings, |
98 | | - ) |
99 | | - ), |
100 | | - ) |
| 94 | +post_request_model = create_post_request_model(search_extensions) |
101 | 95 |
|
102 | | -extensions = [aggregation_extension] + search_extensions |
| 96 | +# Define the collection search extensions map |
| 97 | +cs_extensions_map = { |
| 98 | + "query": QueryExtension(conformance_classes=[QueryConformanceClasses.COLLECTIONS]), |
| 99 | + "sort": SortExtension(conformance_classes=[SortConformanceClasses.COLLECTIONS]), |
| 100 | + "fields": FieldsExtension( |
| 101 | + conformance_classes=[FieldsConformanceClasses.COLLECTIONS] |
| 102 | + ), |
| 103 | + "filter": CollectionSearchFilterExtension( |
| 104 | + conformance_classes=[FilterConformanceClasses.COLLECTIONS] |
| 105 | + ), |
| 106 | + "free_text": FreeTextExtension( |
| 107 | + conformance_classes=[FreeTextConformanceClasses.COLLECTIONS], |
| 108 | + ), |
| 109 | +} |
| 110 | + |
| 111 | +# Determine enabled extensions (customize as needed) |
| 112 | +enabled_extensions = set(cs_extensions_map.keys()) |
| 113 | + |
| 114 | +# Build the enabled collection search extensions |
| 115 | +cs_extensions = [ |
| 116 | + extension |
| 117 | + for key, extension in cs_extensions_map.items() |
| 118 | + if key in enabled_extensions |
| 119 | +] |
| 120 | + |
| 121 | +# Create the CollectionSearchExtension from the enabled extensions |
| 122 | +collection_search_extension = CollectionSearchExtension.from_extensions(cs_extensions) |
| 123 | +collections_get_request_model = collection_search_extension.GET |
| 124 | +extensions.append(collection_search_extension) |
103 | 125 |
|
104 | 126 | database_logic.extensions = [type(ext).__name__ for ext in extensions] |
105 | 127 |
|
@@ -146,7 +168,7 @@ def run() -> None: |
146 | 168 | import uvicorn |
147 | 169 |
|
148 | 170 | uvicorn.run( |
149 | | - "stac_fastapi.opensearch.app:app", |
| 171 | + "stac_fastapi.elasticsearch.app:app", |
150 | 172 | host=settings.app_host, |
151 | 173 | port=settings.app_port, |
152 | 174 | log_level="info", |
|
0 commit comments