42 lines
No EOL
1.2 KiB
Python
42 lines
No EOL
1.2 KiB
Python
import collections
|
|
from datetime import datetime
|
|
|
|
|
|
class TimestampedDict(collections.UserDict):
|
|
"""
|
|
A dictionary with additional metadata
|
|
"""
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs) # NOQA
|
|
|
|
self._last_modified = datetime.now() # last time a value got modified
|
|
self._last_added = datetime.now() # last time a new value have been added
|
|
|
|
def __setitem__(self, key, value):
|
|
# if the key is already used, we only update a value
|
|
update = key in self
|
|
# set the value
|
|
super().__setitem__(key, value)
|
|
|
|
# update modification time
|
|
self._last_modified = datetime.now()
|
|
# if this is not an update, set the added time
|
|
if not update:
|
|
self._last_added = datetime.now()
|
|
|
|
def __delitem__(self, key):
|
|
super().__delitem__(key)
|
|
self._last_modified = datetime.now()
|
|
|
|
def update(self, *args, **kwargs):
|
|
super().update(*args, **kwargs) # NOQA
|
|
self._last_modified = datetime.now()
|
|
|
|
@property
|
|
def last_modified(self):
|
|
return self._last_modified
|
|
|
|
@property
|
|
def last_added(self):
|
|
return self._last_added |