|
1 | 1 | """TiTiler+stacapi FastAPI application.""" |
2 | 2 |
|
3 | | -from typing import Any, List, Literal, Optional |
| 3 | +from typing import Annotated, Any, Literal |
4 | 4 |
|
5 | 5 | import httpx |
6 | 6 | import jinja2 |
|
12 | 12 | from starlette.middleware.cors import CORSMiddleware |
13 | 13 | from starlette.requests import Request |
14 | 14 | from starlette.templating import Jinja2Templates |
15 | | -from typing_extensions import Annotated |
16 | 15 |
|
17 | 16 | from titiler.core import __version__ as titiler_version |
18 | 17 | from titiler.core.dependencies import AssetsBidxExprParams |
|
27 | 26 | from titiler.core.models.OGC import Conformance, Landing |
28 | 27 | from titiler.core.resources.enums import OptionalHeader |
29 | 28 | from titiler.core.utils import accept_media_type, create_html_response, update_openapi |
| 29 | +from titiler.extensions import wmtsExtension |
30 | 30 | from titiler.mosaic.errors import MOSAIC_STATUS_CODES |
| 31 | +from titiler.mosaic.extensions.wmts import wmtsExtension as wmtsExtensionMosaic |
31 | 32 | from titiler.mosaic.factory import MosaicTilerFactory |
32 | 33 | from titiler.stacapi import __version__ as titiler_stacapi_version |
33 | 34 | from titiler.stacapi.backend import STACAPIBackend |
|
47 | 48 | stacapi_config = STACAPISettings() |
48 | 49 |
|
49 | 50 | # custom template directory |
50 | | -templates_location: List[Any] = ( |
| 51 | +templates_location: list[Any] = ( |
51 | 52 | [jinja2.FileSystemLoader(settings.template_directory)] |
52 | 53 | if settings.template_directory |
53 | 54 | else [] |
|
146 | 147 | layer_dependency=AssetsBidxExprParams, |
147 | 148 | router_prefix="/collections/{collection_id}", |
148 | 149 | add_viewer=True, |
| 150 | + extensions=[ |
| 151 | + wmtsExtensionMosaic( |
| 152 | + get_renders=lambda obj: obj.info().renders or {} # type: ignore [attr-defined] |
| 153 | + ), |
| 154 | + ], |
149 | 155 | templates=templates, |
150 | 156 | ) |
151 | 157 | app.include_router( |
|
164 | 170 | path_dependency=ItemIdParams, |
165 | 171 | router_prefix="/collections/{collection_id}/items/{item_id}", |
166 | 172 | add_viewer=True, |
| 173 | + extensions=[ |
| 174 | + wmtsExtension(get_renders=lambda obj: obj.item.properties.get("renders", {})), # type: ignore [attr-defined] |
| 175 | + ], |
167 | 176 | templates=templates, |
168 | 177 | ) |
169 | 178 | app.include_router( |
|
214 | 223 | def landing( |
215 | 224 | request: Request, |
216 | 225 | f: Annotated[ |
217 | | - Optional[Literal["html", "json"]], |
| 226 | + Literal["html", "json"] | None, |
218 | 227 | Query( |
219 | 228 | description="Response MediaType. Defaults to endpoint's default or value defined in `accept` header." |
220 | 229 | ), |
@@ -326,7 +335,7 @@ def landing( |
326 | 335 | def conformance( |
327 | 336 | request: Request, |
328 | 337 | f: Annotated[ |
329 | | - Optional[Literal["html", "json"]], |
| 338 | + Literal["html", "json"] | None, |
330 | 339 | Query( |
331 | 340 | description="Response MediaType. Defaults to endpoint's default or value defined in `accept` header." |
332 | 341 | ), |
|
0 commit comments