From 2c14a000dc3957607af9aa8493b462e191011ed6 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Thu, 21 Jul 2022 13:32:16 -0600 Subject: [PATCH 1/4] Permit None value for datetime As mentioned in #77, we should permit a None value for datetime property under certain circumstances. --- stac_pydantic/item.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/stac_pydantic/item.py b/stac_pydantic/item.py index 8852ea6..ac32f10 100644 --- a/stac_pydantic/item.py +++ b/stac_pydantic/item.py @@ -16,11 +16,11 @@ class ItemProperties(StacCommonMetadata): https://github.com/radiantearth/stac-spec/blob/v1.0.0/item-spec/item-spec.md#properties-object """ - datetime: Union[dt, str] = Field(..., alias="datetime") + datetime: Union[dt, str, None] = Field(..., alias="datetime") @validator("datetime") - def validate_datetime(cls, v: Union[dt, str], values: Dict[str, Any]) -> dt: - if v == "null": + def validate_datetime(cls, v: Union[dt, str, None], values: Dict[str, Any]) -> dt: + if v in ("null", None): if not values["start_datetime"] and not values["end_datetime"]: raise ValueError( "start_datetime and end_datetime must be specified when datetime is null" From 006b0cfe5dd0429d083e9a0c6c41acf7869d74c5 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Thu, 21 Jul 2022 13:42:44 -0600 Subject: [PATCH 2/4] Update item.py --- stac_pydantic/item.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/stac_pydantic/item.py b/stac_pydantic/item.py index ac32f10..1077a9a 100644 --- a/stac_pydantic/item.py +++ b/stac_pydantic/item.py @@ -16,19 +16,16 @@ class ItemProperties(StacCommonMetadata): https://github.com/radiantearth/stac-spec/blob/v1.0.0/item-spec/item-spec.md#properties-object """ - datetime: Union[dt, str, None] = Field(..., alias="datetime") + datetime: Optional[dt] = Field(..., alias="datetime") @validator("datetime") - def validate_datetime(cls, v: Union[dt, str, None], values: Dict[str, Any]) -> dt: - if v in ("null", None): + def validate_datetime(cls, v: Optional[dt], values: Dict[str, Any]) -> Optional[dt]: + if v is None: if not values["start_datetime"] and not values["end_datetime"]: raise ValueError( "start_datetime and end_datetime must be specified when datetime is null" ) - if isinstance(v, str): - return parse_datetime(v) - return v class Config: From a8992176a4644503400d23c90ebe618173702e77 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Mon, 29 Aug 2022 15:08:02 -0600 Subject: [PATCH 3/4] Fix bug where `start_datetime` or `end_datetime` may not exist. --- stac_pydantic/item.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stac_pydantic/item.py b/stac_pydantic/item.py index 1077a9a..4dc4c4a 100644 --- a/stac_pydantic/item.py +++ b/stac_pydantic/item.py @@ -21,7 +21,7 @@ class ItemProperties(StacCommonMetadata): @validator("datetime") def validate_datetime(cls, v: Optional[dt], values: Dict[str, Any]) -> Optional[dt]: if v is None: - if not values["start_datetime"] and not values["end_datetime"]: + if not all([values.get("start_datetime"), values.get("end_datetime")]): raise ValueError( "start_datetime and end_datetime must be specified when datetime is null" ) From fcbf19b665a6716c0392a8d9539791910c1e2474 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Mon, 29 Aug 2022 15:09:11 -0600 Subject: [PATCH 4/4] Rm unused import --- stac_pydantic/item.py | 1 - 1 file changed, 1 deletion(-) diff --git a/stac_pydantic/item.py b/stac_pydantic/item.py index 4dc4c4a..2073dc3 100644 --- a/stac_pydantic/item.py +++ b/stac_pydantic/item.py @@ -3,7 +3,6 @@ from geojson_pydantic.features import Feature, FeatureCollection # type: ignore from pydantic import AnyUrl, Field, root_validator, validator -from pydantic.datetime_parse import parse_datetime from stac_pydantic.api.extensions.context import ContextExtension from stac_pydantic.links import Links