PersistentObjects 0.1.6__tar.gz → 0.1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/PKG-INFO +1 -1
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/PersistentObjects/core.py +56 -0
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/PersistentObjects.egg-info/PKG-INFO +1 -1
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/pyproject.toml +1 -1
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/LICENSE +0 -0
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/PersistentObjects/__init__.py +0 -0
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/PersistentObjects.egg-info/SOURCES.txt +0 -0
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/PersistentObjects.egg-info/dependency_links.txt +0 -0
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/PersistentObjects.egg-info/top_level.txt +0 -0
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/README.md +0 -0
- {persistentobjects-0.1.6 → persistentobjects-0.1.7}/setup.cfg +0 -0
|
@@ -23,6 +23,7 @@ class _PersistentState:
|
|
|
23
23
|
self._path = os.path.abspath(path)
|
|
24
24
|
self._lock = threading.Lock()
|
|
25
25
|
self._data = {}
|
|
26
|
+
self._defaults = {}
|
|
26
27
|
self._load()
|
|
27
28
|
|
|
28
29
|
def _load(self):
|
|
@@ -96,6 +97,7 @@ class _Namespace:
|
|
|
96
97
|
self._initialized = True
|
|
97
98
|
self._root = root
|
|
98
99
|
self._key = key
|
|
100
|
+
self._defaults = {}
|
|
99
101
|
|
|
100
102
|
def __getattr__(self, name):
|
|
101
103
|
if name.startswith("_"):
|
|
@@ -126,10 +128,64 @@ class _Namespace:
|
|
|
126
128
|
bucket[name] = value
|
|
127
129
|
self._root._save()
|
|
128
130
|
|
|
131
|
+
def setdefault(self, name: str, value):
|
|
132
|
+
"""Set a value only if the key doesn't already exist. Registers the value as the default for reset()."""
|
|
133
|
+
self._defaults[name] = value
|
|
134
|
+
with self._root._lock:
|
|
135
|
+
bucket = self._root._data.setdefault(self._key, {})
|
|
136
|
+
if name not in bucket:
|
|
137
|
+
bucket[name] = value
|
|
138
|
+
self._root._save()
|
|
139
|
+
return self._root._data[self._key][name]
|
|
140
|
+
|
|
141
|
+
def reset(self, name: str | None = None):
|
|
142
|
+
"""Reset a key to its default value, or all keys if no name is given.
|
|
143
|
+
|
|
144
|
+
Raises KeyError if the key has no registered default.
|
|
145
|
+
"""
|
|
146
|
+
with self._root._lock:
|
|
147
|
+
bucket = self._root._data.setdefault(self._key, {})
|
|
148
|
+
if name is not None:
|
|
149
|
+
if name not in self._defaults:
|
|
150
|
+
raise KeyError(
|
|
151
|
+
f"No default registered for '{name}'. Use setdefault() first."
|
|
152
|
+
)
|
|
153
|
+
bucket[name] = self._defaults[name]
|
|
154
|
+
else:
|
|
155
|
+
for key, value in self._defaults.items():
|
|
156
|
+
bucket[key] = value
|
|
157
|
+
self._root._save()
|
|
158
|
+
|
|
129
159
|
|
|
130
160
|
class PersistentObject(_PersistentState):
|
|
131
161
|
def namespace(self, name) -> _Namespace:
|
|
132
162
|
return _Namespace(self, name)
|
|
133
163
|
|
|
164
|
+
def setdefault(self, name: str, value):
|
|
165
|
+
"""Set a value only if the key doesn't already exist. Registers the value as the default for reset()."""
|
|
166
|
+
self._defaults[name] = value
|
|
167
|
+
with self._lock:
|
|
168
|
+
if name not in self._data:
|
|
169
|
+
self._data[name] = value
|
|
170
|
+
self._save()
|
|
171
|
+
return self._data[name]
|
|
172
|
+
|
|
173
|
+
def reset(self, name: str | None = None):
|
|
174
|
+
"""Reset a key to its default value, or all keys if no name is given.
|
|
175
|
+
|
|
176
|
+
Raises KeyError if the key has no registered default.
|
|
177
|
+
"""
|
|
178
|
+
with self._lock:
|
|
179
|
+
if name is not None:
|
|
180
|
+
if name not in self._defaults:
|
|
181
|
+
raise KeyError(
|
|
182
|
+
f"No default registered for '{name}'. Use setdefault() first."
|
|
183
|
+
)
|
|
184
|
+
self._data[name] = self._defaults[name]
|
|
185
|
+
else:
|
|
186
|
+
for key, value in self._defaults.items():
|
|
187
|
+
self._data[key] = value
|
|
188
|
+
self._save()
|
|
189
|
+
|
|
134
190
|
|
|
135
191
|
__all__ = ["PersistentObject"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{persistentobjects-0.1.6 → persistentobjects-0.1.7}/PersistentObjects.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{persistentobjects-0.1.6 → persistentobjects-0.1.7}/PersistentObjects.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|