From 1148c9db529728795c74aef722b253761638e85a Mon Sep 17 00:00:00 2001 From: Jonathan Healy Date: Thu, 18 Apr 2024 23:03:13 +0800 Subject: [PATCH] fix datetime validator (#662) * fix datetime validator * lint code * fix pull request # --- CHANGES.md | 4 ++++ .../types/stac_fastapi/types/rfc3339.py | 17 +++++++++++------ stac_fastapi/types/tests/test_rfc3339.py | 7 +++++++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 6bf2c50b5..e3a91da62 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +* BaseSearchGetRequest datetime validator str_to_interval not allowing GET /search requests with datetime = None ([#662](https://github.com/stac-utils/stac-fastapi/pull/662)) + ## [2.5.1] - 2024-04-18 ### Fixed diff --git a/stac_fastapi/types/stac_fastapi/types/rfc3339.py b/stac_fastapi/types/stac_fastapi/types/rfc3339.py index 43baa8d53..b1d40999e 100644 --- a/stac_fastapi/types/stac_fastapi/types/rfc3339.py +++ b/stac_fastapi/types/stac_fastapi/types/rfc3339.py @@ -45,9 +45,7 @@ def rfc3339_str_to_datetime(s: str) -> datetime: return iso8601.parse_date(s) -def str_to_interval( - interval: str, -) -> Optional[DateTimeType]: +def str_to_interval(interval: Optional[str]) -> Optional[DateTimeType]: """Extract a tuple of datetimes from an interval string. Interval strings are defined by @@ -56,12 +54,19 @@ def str_to_interval( or end (but not both) to be open-ended with '..' or ''. Args: - interval (str) : The interval string to convert to a :class:`datetime.datetime` - tuple. + interval (str or None): The interval string to convert to a tuple of + datetime.datetime objects, or None if no datetime is specified. + + Returns: + Optional[DateTimeType]: A tuple of datetime.datetime objects or None if + input is None. Raises: - ValueError: If the string is not a valid interval string. + ValueError: If the string is not a valid interval string and not None. """ + if interval is None: + return None + if not interval: raise ValueError("Empty interval string is invalid.") diff --git a/stac_fastapi/types/tests/test_rfc3339.py b/stac_fastapi/types/tests/test_rfc3339.py index 0a402699a..23f6242bc 100644 --- a/stac_fastapi/types/tests/test_rfc3339.py +++ b/stac_fastapi/types/tests/test_rfc3339.py @@ -103,3 +103,10 @@ def test_now_functions() -> None: assert now1.tzinfo == timezone.utc rfc3339_str_to_datetime(now_to_rfc3339_str()) + + +def test_str_to_interval_with_none(): + """Test that str_to_interval returns None when provided with None.""" + assert ( + str_to_interval(None) is None + ), "str_to_interval should return None when input is None"