33from contextlib import asynccontextmanager
44
55from eoapi .stac .config import ApiSettings , TilesApiSettings
6- from eoapi .stac .config import extensions as PgStacExtensions
7- from eoapi .stac .config import get_request_model as GETModel
8- from eoapi .stac .config import post_request_model as POSTModel
96from eoapi .stac .extension import TiTilerExtension
7+ from eoapi .stac .extension import extensions_map as PgStacExtensions
108from fastapi import FastAPI
119from fastapi .responses import ORJSONResponse
1210from stac_fastapi .api .app import StacApi
11+ from stac_fastapi .api .models import create_get_request_model , create_post_request_model
1312from stac_fastapi .pgstac .config import Settings
1413from stac_fastapi .pgstac .core import CoreCrudClient
1514from stac_fastapi .pgstac .db import close_db_connection , connect_to_db
15+ from stac_fastapi .pgstac .types .search import PgstacSearch
1616from starlette .middleware .cors import CORSMiddleware
1717from starlette .requests import Request
1818from starlette .responses import HTMLResponse
@@ -43,12 +43,22 @@ async def lifespan(app: FastAPI):
4343 await close_db_connection (app )
4444
4545
46+ if enabled_extensions := api_settings .extensions :
47+ extensions = [
48+ PgStacExtensions [extension_name ] for extension_name in enabled_extensions
49+ ]
50+ else :
51+ extensions = list (PgStacExtensions .values ())
52+
53+ POSTModel = create_post_request_model (extensions , base_model = PgstacSearch )
54+ GETModel = create_get_request_model (extensions )
55+
4656api = StacApi (
4757 app = FastAPI (title = api_settings .name , lifespan = lifespan ),
4858 title = api_settings .name ,
4959 description = api_settings .name ,
5060 settings = settings ,
51- extensions = PgStacExtensions ,
61+ extensions = extensions ,
5262 client = CoreCrudClient (post_request_model = POSTModel ),
5363 search_get_request_model = GETModel ,
5464 search_post_request_model = POSTModel ,
@@ -63,7 +73,7 @@ async def lifespan(app: FastAPI):
6373 CORSMiddleware ,
6474 allow_origins = api_settings .cors_origins ,
6575 allow_credentials = True ,
66- allow_methods = [ "GET" , "POST" , "OPTIONS" ] ,
76+ allow_methods = api_settings . cors_methods ,
6777 allow_headers = ["*" ],
6878 )
6979
0 commit comments