From 934df4a4c0a21edb850856fc0ce4e941565f3d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20D=C3=B6rfelt?= Date: Tue, 9 May 2023 14:46:22 +0200 Subject: [PATCH] "todo_completed" is a timestamp, not a bool --- joppy/data_types.py | 13 +++++++++---- test/test_api.py | 5 ++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/joppy/data_types.py b/joppy/data_types.py index 58f23f1..db5608f 100644 --- a/joppy/data_types.py +++ b/joppy/data_types.py @@ -89,12 +89,17 @@ def __post_init__(self) -> None: # Exclude integer and empty string IDs. if value and isinstance(value, str) and not is_id_valid(value): raise ValueError("Invalid ID:", value) - elif field_.name.endswith("_time") or field_.name == "todo_due": - setattr(self, field_.name, datetime.fromtimestamp(value / 1000.0)) + elif field_.name.endswith("_time") or field_.name in ( + "todo_due", + "todo_completed", + ): + casted_value = ( + None if value == 0 else datetime.fromtimestamp(value / 1000.0) + ) + setattr(self, field_.name, casted_value) elif field_.name in ( "is_conflict", "is_todo", - "todo_completed", "encryption_applied", "is_shared", "encryption_blob_encrypted", @@ -151,7 +156,7 @@ class NoteData(BaseData): source_url: Optional[str] = None is_todo: Optional[bool] = None todo_due: Optional[datetime] = None - todo_completed: Optional[bool] = None + todo_completed: Optional[datetime] = None source: Optional[str] = None source_application: Optional[str] = None application_data: Optional[str] = None diff --git a/test/test_api.py b/test/test_api.py index c95bdf2..e0aacea 100644 --- a/test/test_api.py +++ b/test/test_api.py @@ -272,12 +272,15 @@ def test_get_notes_valid_properties(self): """Try to get specific properties of a note.""" self.api.add_notebook() self.api.add_note() - # TODO: Some of the fields yield HTTP 500. selected_fields = dt.NoteData.fields() - { + # TODO: Some of the fields yield HTTP 500. "body_html", "base_url", "image_data_url", "crop_rect", + # todo timestamps can be None + "todo_due", + "todo_completed", } property_combinations = self.get_combinations(selected_fields) for properties in property_combinations: