From 16ac4906d0f63b561abda50c11db6aeb624d3be3 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Wed, 4 Dec 2024 14:35:46 -0500 Subject: [PATCH] Implement tracking changes of individual database object values --- lib/nntp/tiny/db.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/nntp/tiny/db.py b/lib/nntp/tiny/db.py index 7459772..fc96d49 100644 --- a/lib/nntp/tiny/db.py +++ b/lib/nntp/tiny/db.py @@ -7,7 +7,24 @@ class DatabaseOrder(enum.Enum): DESC = 2 class DatabaseTable(): - pass + __slots__ = '__dirty__', '__dirty_columns__', + + def __init__(self): + object.__setattr__(self, '__dirty__', False) + object.__setattr__(self, '__dirty_columns__', dict()) + + def __reset__(self): + object.__setattr__(self, '__dirty__', False) + object.__setattr__(self, '__dirty_columns__', {k: 0 for k in self.columns}) + + def __setattr__(self, k, v): + object.__setattr__(self, k, v) + + values = object.__getattribute__(self, '__dirty_columns__') + + if k in values: + object.__setattr__(self, '__dirty__', True) + values[k] += 1 class DatabaseTableCursor(): __slots__ = 'cr', 'table', @@ -33,6 +50,8 @@ class DatabaseTableCursor(): except IndexError: setattr(obj, name, None) + obj.__reset__() + return obj def fetchone(self):