home
·
contact
·
privacy
projects
/
plomtask
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Refactor saving and caching tests, treatment of None IDs.
[plomtask]
/
plomtask
/
versioned_attributes.py
diff --git
a/plomtask/versioned_attributes.py
b/plomtask/versioned_attributes.py
index d3c364942e3d76edf0eb9618df8366866c603709..8861c9834ff3924d6459ced5cb9c69629424bb45 100644
(file)
--- a/
plomtask/versioned_attributes.py
+++ b/
plomtask/versioned_attributes.py
@@
-4,7
+4,8
@@
from typing import Any
from sqlite3 import Row
from time import sleep
from plomtask.db import DatabaseConnection
from sqlite3 import Row
from time import sleep
from plomtask.db import DatabaseConnection
-from plomtask.exceptions import HandledException, BadFormatException
+from plomtask.exceptions import (HandledException, BadFormatException,
+ NotFoundException)
TIMESTAMP_FMT = '%Y-%m-%d %H:%M:%S.%f'
TIMESTAMP_FMT = '%Y-%m-%d %H:%M:%S.%f'
@@
-19,6
+20,12
@@
class VersionedAttribute:
self.default = default
self.history: dict[str, str | float] = {}
self.default = default
self.history: dict[str, str | float] = {}
+ def __hash__(self) -> int:
+ history_tuples = tuple((k, v) for k, v in self.history.items())
+ hashable = (self.parent.id_, self.table_name, self.default,
+ history_tuples)
+ return hash(hashable)
+
@property
def _newest_timestamp(self) -> str:
"""Return most recent timestamp."""
@property
def _newest_timestamp(self) -> str:
"""Return most recent timestamp."""
@@
-92,6
+99,8
@@
class VersionedAttribute:
def save(self, db_conn: DatabaseConnection) -> None:
"""Save as self.history entries, but first wipe old ones."""
def save(self, db_conn: DatabaseConnection) -> None:
"""Save as self.history entries, but first wipe old ones."""
+ if self.parent.id_ is None:
+ raise NotFoundException('cannot save attribute to parent if no ID')
db_conn.rewrite_relations(self.table_name, 'parent', self.parent.id_,
[[item[0], item[1]]
for item in self.history.items()])
db_conn.rewrite_relations(self.table_name, 'parent', self.parent.id_,
[[item[0], item[1]]
for item in self.history.items()])