From 8a17d7e282a466c5152b2fccf96f5e0d85663928 Mon Sep 17 00:00:00 2001 From: Jeff Stein Date: Tue, 30 Jul 2024 08:54:06 -0600 Subject: [PATCH] model tweaking --- flake.lock | 6 +++--- simplefin4py/model.py | 22 ++++++++-------------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/flake.lock b/flake.lock index 6de9822..89e1c76 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1720181791, - "narHash": "sha256-i4vJL12/AdyuQuviMMd1Hk2tsGt02hDNhA0Zj1m16N8=", + "lastModified": 1722141560, + "narHash": "sha256-Ul3rIdesWaiW56PS/Ak3UlJdkwBrD4UcagCmXZR9Z7Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4284c2b73c8bce4b46a6adf23e16d9e2ec8da4bb", + "rev": "038fb464fcfa79b4f08131b07f2d8c9a6bcc4160", "type": "github" }, "original": { diff --git a/simplefin4py/model.py b/simplefin4py/model.py index 7cd19da..3bf4be0 100644 --- a/simplefin4py/model.py +++ b/simplefin4py/model.py @@ -1,12 +1,15 @@ """Data models.""" from __future__ import annotations -import datetime +from datetime import datetime, timezone from dataclasses import dataclass, field from enum import Enum from dataclasses_json import dataclass_json, config +def _timestamp_to_utc(ts: float) -> datetime: + return datetime.fromtimestamp(ts, tz=timezone.utc) + class AccountType(Enum): """Account type enum.""" @@ -46,12 +49,12 @@ class Transaction: """Transaction data.""" id: str - posted: datetime = field(metadata=config(decoder=datetime.datetime.fromtimestamp)) + posted: datetime = field(metadata=config(decoder=_timestamp_to_utc)) amount: str description: str payee: str memo: str - transacted_at: datetime = field(metadata=config(decoder=datetime.datetime.fromtimestamp)) + transacted_at: datetime = field(metadata=config(decoder=_timestamp_to_utc)) @dataclass_json @@ -60,7 +63,7 @@ class Holding: """Holding data.""" id: str - created: datetime = field(metadata=config(decoder=datetime.datetime.fromtimestamp)) + created: datetime = field(metadata=config(decoder=_timestamp_to_utc)) currency: str | None # Using `|` for optional fields cost_basis: str = field(metadata=config(field_name="cost-basis")) description: str @@ -81,7 +84,7 @@ class Account: currency: str balance: str available_balance: str = field(metadata=config(field_name="available-balance")) - balance_date: datetime = field(metadata=config(field_name="balance-date", decoder=datetime.datetime.fromtimestamp)) + balance_date: datetime = field(metadata=config(field_name="balance-date", decoder=_timestamp_to_utc)) transactions: list[Transaction] holdings: list[Holding] = field(default_factory=list) @@ -90,15 +93,6 @@ class Account: # Optional Error field added by me possible_error: bool = False - def _timestamp_to_utc(ts: float) -> datetime: - return datetime.fromtimestamp(ts, tz=datetime.timezone.utc) - - - @property - def last_update_utc(self) -> datetime.datetime: - """Return the last update as a datetime object with a timezone.""" - if self.balance_date.tzinfo is None: - return self.balance_date.replace(tzinfo=datetime.timezone.utc) @property def last_update_timestamp(self) -> float: