|
9 | 9 | import orjson |
10 | 10 | from asyncpg.exceptions import InvalidDatetimeFormatError |
11 | 11 | from buildpg import render |
12 | | -from fastapi import Request |
| 12 | +from fastapi import HTTPException, Request |
| 13 | +from pydantic import ValidationError |
13 | 14 | from pygeofilter.backends.cql2_json import to_cql2 |
14 | 15 | from pygeofilter.parsers.cql2_text import parse as parse_cql2_text |
15 | 16 | from pypgstac.hydration import hydrate |
@@ -392,7 +393,13 @@ async def item_collection( |
392 | 393 | sortby=sortby, |
393 | 394 | ) |
394 | 395 |
|
395 | | - search_request = self.pgstac_search_model(**clean) |
| 396 | + try: |
| 397 | + search_request = self.pgstac_search_model(**clean) |
| 398 | + except ValidationError as e: |
| 399 | + raise HTTPException( |
| 400 | + status_code=400, detail=f"Invalid parameters provided {e}" |
| 401 | + ) from e |
| 402 | + |
396 | 403 | item_collection = await self._search_base(search_request, request=request) |
397 | 404 |
|
398 | 405 | links = await ItemCollectionLinks( |
@@ -506,7 +513,13 @@ async def get_search( |
506 | 513 | filter_lang=filter_lang, |
507 | 514 | ) |
508 | 515 |
|
509 | | - search_request = self.pgstac_search_model(**clean) |
| 516 | + try: |
| 517 | + search_request = self.pgstac_search_model(**clean) |
| 518 | + except ValidationError as e: |
| 519 | + raise HTTPException( |
| 520 | + status_code=400, detail=f"Invalid parameters provided {e}" |
| 521 | + ) from e |
| 522 | + |
510 | 523 | item_collection = await self._search_base(search_request, request=request) |
511 | 524 |
|
512 | 525 | # If we have the `fields` extension enabled |
|
0 commit comments