hivemind-sqlite-database 0.4.0a4__tar.gz → 0.4.0a5__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.
Potentially problematic release.
This version of hivemind-sqlite-database might be problematic. Click here for more details.
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/PKG-INFO +1 -1
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/hivemind_sqlite_database/__init__.py +20 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/hivemind_sqlite_database/version.py +1 -1
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/hivemind_sqlite_database.egg-info/PKG-INFO +1 -1
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/tests/test_sqlitedb.py +16 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/LICENSE.md +0 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/README.md +0 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/hivemind_sqlite_database.egg-info/SOURCES.txt +0 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/hivemind_sqlite_database.egg-info/dependency_links.txt +0 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/hivemind_sqlite_database.egg-info/entry_points.txt +0 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/hivemind_sqlite_database.egg-info/requires.txt +0 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/hivemind_sqlite_database.egg-info/top_level.txt +0 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/pyproject.toml +0 -0
- {hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/setup.cfg +0 -0
|
@@ -215,6 +215,26 @@ class SQLiteDB(AbstractDB):
|
|
|
215
215
|
LOG.error(f"Failed to add client to SQLite: {e}")
|
|
216
216
|
return False
|
|
217
217
|
|
|
218
|
+
def update_last_seen(self, api_key: str, seen_at: float) -> bool:
|
|
219
|
+
"""Atomically advance ``last_seen`` for the matching API key."""
|
|
220
|
+
try:
|
|
221
|
+
with self._write_lock, self.conn:
|
|
222
|
+
cursor = self.conn.execute(
|
|
223
|
+
"""
|
|
224
|
+
UPDATE clients
|
|
225
|
+
SET last_seen = CASE
|
|
226
|
+
WHEN last_seen IS NULL OR last_seen < ? THEN ?
|
|
227
|
+
ELSE last_seen
|
|
228
|
+
END
|
|
229
|
+
WHERE api_key = ?
|
|
230
|
+
""",
|
|
231
|
+
(seen_at, seen_at, api_key),
|
|
232
|
+
)
|
|
233
|
+
return cursor.rowcount > 0
|
|
234
|
+
except sqlite3.Error as e:
|
|
235
|
+
LOG.error(f"Failed to update last_seen in SQLite: {e}")
|
|
236
|
+
return False
|
|
237
|
+
|
|
218
238
|
def search_by_value(self, key: str, val: Union[str, bool, int, float]) -> List[Client]:
|
|
219
239
|
"""
|
|
220
240
|
Search for clients by a specific key-value pair in the SQLite database.
|
{hivemind_sqlite_database-0.4.0a4 → hivemind_sqlite_database-0.4.0a5}/tests/test_sqlitedb.py
RENAMED
|
@@ -189,6 +189,22 @@ class TestSQLiteDBSearchByValue(unittest.TestCase):
|
|
|
189
189
|
self.assertEqual(results, [])
|
|
190
190
|
|
|
191
191
|
|
|
192
|
+
class TestSQLiteDBLastSeen(unittest.TestCase):
|
|
193
|
+
def test_update_last_seen_never_moves_timestamp_backward(self):
|
|
194
|
+
db = make_db()
|
|
195
|
+
db.add_item(make_client(1, "key", last_seen=200.0))
|
|
196
|
+
|
|
197
|
+
self.assertTrue(db.update_last_seen("key", 100.0))
|
|
198
|
+
self.assertEqual(db.search_by_value("api_key", "key")[0].last_seen, 200.0)
|
|
199
|
+
|
|
200
|
+
self.assertTrue(db.update_last_seen("key", 300.0))
|
|
201
|
+
self.assertEqual(db.search_by_value("api_key", "key")[0].last_seen, 300.0)
|
|
202
|
+
|
|
203
|
+
def test_update_last_seen_returns_false_for_missing_key(self):
|
|
204
|
+
db = make_db()
|
|
205
|
+
self.assertFalse(db.update_last_seen("missing", 100.0))
|
|
206
|
+
|
|
207
|
+
|
|
192
208
|
class TestSQLiteDBIter(unittest.TestCase):
|
|
193
209
|
def test_iter_yields_all_rows(self):
|
|
194
210
|
db = make_db()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|