Skip to content
This repository was archived by the owner on May 12, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 5 additions & 9 deletions datapi/catalogue.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

import datapi

from . import config
from . import config, utils
from .processing import ApiResponse, ApiResponsePaginated, RequestKwargs


Expand All @@ -46,28 +46,24 @@ def begin_datetime(self) -> datetime.datetime | None:
"""Begin datetime of the collection."""
if (value := self._json_dict["extent"]["temporal"]["interval"][0][0]) is None:
return value
return datetime.datetime.fromisoformat(value.replace("Z", "+00:00"))
return utils.string_to_datetime(value)

@property
def end_datetime(self) -> datetime.datetime | None:
"""End datetime of the collection."""
if (value := self._json_dict["extent"]["temporal"]["interval"][0][1]) is None:
return value
return datetime.datetime.fromisoformat(value.replace("Z", "+00:00"))
return utils.string_to_datetime(value)

@property
def published_at(self) -> datetime.datetime:
"""When the collection was first published."""
return datetime.datetime.fromisoformat(
self._json_dict["published"].replace("Z", "+00:00")
)
return utils.string_to_datetime(self._json_dict["published"])

@property
def updated_at(self) -> datetime.datetime:
"""When the collection was last updated."""
return datetime.datetime.fromisoformat(
self._json_dict["updated"].replace("Z", "+00:00")
)
return utils.string_to_datetime(self._json_dict["updated"])

@property
def title(self) -> str:
Expand Down
10 changes: 5 additions & 5 deletions datapi/processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

import datapi

from . import config
from . import config, utils

T_ApiResponse = TypeVar("T_ApiResponse", bound="ApiResponse")

Expand Down Expand Up @@ -444,12 +444,12 @@ def status(self) -> str:
@property
def updated_at(self) -> datetime.datetime:
"""When the job was last updated."""
return datetime.datetime.fromisoformat(self.json["updated"])
return utils.string_to_datetime(self.json["updated"])

@property
def created_at(self) -> datetime.datetime:
"""When the job was created."""
return datetime.datetime.fromisoformat(self.json["created"])
return utils.string_to_datetime(self.json["created"])

@property
def creation_datetime(self) -> datetime.datetime:
Expand All @@ -465,7 +465,7 @@ def creation_datetime(self) -> datetime.datetime:
def started_at(self) -> datetime.datetime | None:
"""When the job started. If None, the job has not started."""
value = self.json.get("started")
return value if value is None else datetime.datetime.fromisoformat(value)
return value if value is None else utils.string_to_datetime(value)

@property
def start_datetime(self) -> datetime.datetime | None:
Expand All @@ -481,7 +481,7 @@ def start_datetime(self) -> datetime.datetime | None:
def finished_at(self) -> datetime.datetime | None:
"""When the job finished. If None, the job has not finished."""
value = self.json.get("finished")
return value if value is None else datetime.datetime.fromisoformat(value)
return value if value is None else utils.string_to_datetime(value)

@property
def end_datetime(self) -> datetime.datetime | None:
Expand Down
9 changes: 9 additions & 0 deletions datapi/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import datetime


def string_to_datetime(string: str) -> datetime.datetime:
string = string.replace("Z", "+00:00") # Support python<3.11
date_time = datetime.datetime.fromisoformat(string)
if date_time.tzinfo is None:
date_time = date_time.replace(tzinfo=datetime.timezone.utc)
return date_time
22 changes: 12 additions & 10 deletions tests/test_20_processing.py
Original file line number Diff line number Diff line change
Expand Up @@ -381,12 +381,12 @@ def test_submit(cat: catalogue.Catalogue) -> None:
assert remote.status == "successful"
assert remote.results_ready is True

assert remote.created_at.isoformat() == "2022-09-02T17:30:48.201213"
assert remote.updated_at.isoformat() == "2022-09-02T17:32:54.308116"
assert remote.created_at.isoformat() == "2022-09-02T17:30:48.201213+00:00"
assert remote.updated_at.isoformat() == "2022-09-02T17:32:54.308116+00:00"
assert remote.started_at is not None
assert remote.started_at.isoformat() == "2022-09-02T17:32:43.890617"
assert remote.started_at.isoformat() == "2022-09-02T17:32:43.890617+00:00"
assert remote.finished_at is not None
assert remote.finished_at.isoformat() == "2022-09-02T17:32:54.308120"
assert remote.finished_at.isoformat() == "2022-09-02T17:32:54.308120+00:00"


@responses.activate
Expand All @@ -403,15 +403,17 @@ def test_depracations(cat: catalogue.Catalogue) -> None:
with pytest.warns(
DeprecationWarning, match="`creation_datetime` has been deprecated"
):
assert remote.creation_datetime.isoformat() == "2022-09-02T17:30:48.201213"
assert (
remote.creation_datetime.isoformat() == "2022-09-02T17:30:48.201213+00:00"
)

with pytest.warns(DeprecationWarning, match="`start_datetime` has been deprecated"):
assert remote.start_datetime is not None
assert remote.start_datetime.isoformat() == "2022-09-02T17:32:43.890617"
assert remote.start_datetime.isoformat() == "2022-09-02T17:32:43.890617+00:00"

with pytest.warns(DeprecationWarning, match="`end_datetime` has been deprecated"):
assert remote.end_datetime is not None
assert remote.end_datetime.isoformat() == "2022-09-02T17:32:54.308120"
assert remote.end_datetime.isoformat() == "2022-09-02T17:32:54.308120+00:00"


@responses.activate
Expand Down Expand Up @@ -449,11 +451,11 @@ def test_wait_on_result_failed(cat: catalogue.Catalogue) -> None:
):
remote._wait_on_results()

assert remote.created_at.isoformat() == "2022-09-02T17:30:48.201213"
assert remote.created_at.isoformat() == "2022-09-02T17:30:48.201213+00:00"
assert remote.started_at is not None
assert remote.started_at.isoformat() == "2022-09-02T17:32:43.890617"
assert remote.started_at.isoformat() == "2022-09-02T17:32:43.890617+00:00"
assert remote.finished_at is not None
assert remote.finished_at.isoformat() == "2022-09-02T17:32:54.308120"
assert remote.finished_at.isoformat() == "2022-09-02T17:32:54.308120+00:00"


@responses.activate
Expand Down