From c6d227ad574cdfc1866f0febdf27465b14f1fac9 Mon Sep 17 00:00:00 2001 From: Yuri Zmytrakov Date: Mon, 1 Sep 2025 14:36:19 +0200 Subject: [PATCH] dummy commit --- stac_fastapi/core/stac_fastapi/core/core.py | 6 +++ .../core/stac_fastapi/core/datetime_utils.py | 38 +++++++++++++++++++ .../opensearch/stac_fastapi/opensearch/app.py | 2 +- .../stac_fastapi/opensearch/database_logic.py | 2 +- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/stac_fastapi/core/stac_fastapi/core/core.py b/stac_fastapi/core/stac_fastapi/core/core.py index 8e7da91b..922fd463 100644 --- a/stac_fastapi/core/stac_fastapi/core/core.py +++ b/stac_fastapi/core/stac_fastapi/core/core.py @@ -439,9 +439,13 @@ async def get_search( "q": q, } + print("datetime:", datetime) + if datetime: base_args["datetime"] = format_datetime_range(date_str=datetime) + print("get_search: base_args[datetime]", base_args["datetime"]) + if intersects: base_args["intersects"] = orjson.loads(unquote_plus(intersects)) @@ -499,6 +503,8 @@ async def post_search( search = self.database.make_search() + # print("search_request: ", search_request) + if search_request.ids: search = self.database.apply_ids_filter( search=search, item_ids=search_request.ids diff --git a/stac_fastapi/core/stac_fastapi/core/datetime_utils.py b/stac_fastapi/core/stac_fastapi/core/datetime_utils.py index 87911ac5..6282800e 100644 --- a/stac_fastapi/core/stac_fastapi/core/datetime_utils.py +++ b/stac_fastapi/core/stac_fastapi/core/datetime_utils.py @@ -35,6 +35,44 @@ def normalize(dt): return f"{normalize(start)}/{normalize(end)}" +# def format_datetime_range(date_str: str) -> str: +# """ +# Convert a datetime range string while preserving millisecond precision. +# """ +# if not isinstance(date_str, str): +# return "../.." + +# # If it's already a range with "..", return as-is to preserve precision +# if "/" in date_str and ".." in date_str: +# return date_str # <-- PRESERVE original format like "../2025-07-16T00:24:19.000Z" + +# # Only apply normalization for closed ranges without ".." +# if "/" not in date_str: +# # Single datetime - normalize with precision +# return normalize(date_str) + +# # For closed ranges (start/end without ".."), normalize both parts +# try: +# start, end = date_str.split("/", 1) +# return f"{normalize(start)}/{normalize(end)}" +# except Exception: +# return "../.." + + +# def normalize(dt): +# dt = dt.strip() +# if not dt or dt == "..": +# return ".." +# dt_obj = rfc3339_str_to_datetime(dt) +# dt_utc = dt_obj.astimezone(timezone.utc) + +# # PRESERVE MILLISECONDS +# if dt_obj.microsecond > 0: +# return dt_utc.isoformat(timespec='milliseconds').replace('+00:00', 'Z') +# else: +# return dt_utc.strftime("%Y-%m-%dT%H:%M:%SZ") + + # Borrowed from pystac - https://github.com/stac-utils/pystac/blob/f5e4cf4a29b62e9ef675d4a4dac7977b09f53c8f/pystac/utils.py#L370-L394 def datetime_to_str(dt: datetime, timespec: str = "auto") -> str: """Convert a :class:`datetime.datetime` instance to an ISO8601 string in the `RFC 3339, section 5.6. diff --git a/stac_fastapi/opensearch/stac_fastapi/opensearch/app.py b/stac_fastapi/opensearch/stac_fastapi/opensearch/app.py index c0560966..935c8f39 100644 --- a/stac_fastapi/opensearch/stac_fastapi/opensearch/app.py +++ b/stac_fastapi/opensearch/stac_fastapi/opensearch/app.py @@ -159,7 +159,7 @@ def run() -> None: "stac_fastapi.opensearch.app:app", host=settings.app_host, port=settings.app_port, - log_level="info", + log_level="debug", reload=settings.reload, ) except ImportError: diff --git a/stac_fastapi/opensearch/stac_fastapi/opensearch/database_logic.py b/stac_fastapi/opensearch/stac_fastapi/opensearch/database_logic.py index 4ff44ca0..62f4db59 100644 --- a/stac_fastapi/opensearch/stac_fastapi/opensearch/database_logic.py +++ b/stac_fastapi/opensearch/stac_fastapi/opensearch/database_logic.py @@ -520,7 +520,7 @@ async def execute_search( """ search_body: Dict[str, Any] = {} query = search.query.to_dict() if search.query else None - + # print("query: ", query) index_param = await self.async_index_selector.select_indexes( collection_ids, datetime_search )