lib: Give TagStores item-related functions

For accessing tags by name, iterating over the collected tags, and
finding the number of tags.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-06-21 14:29:04 -04:00
parent 4da6c6b36e
commit 365c5c6641
2 changed files with 39 additions and 0 deletions

View File

@ -10,6 +10,10 @@ class TagStore:
self.Added = publisher.Publisher()
self.Removed = publisher.Publisher()
def __getitem__(self, name):
with self.lock:
return self.store.get(name)
def __getstate__(self):
with self.lock:
return { "store" : self.store }
@ -23,6 +27,16 @@ class TagStore:
self.Added.publish(t)
return t
def __len__(self):
with self.lock:
return len(self.store)
def __setstate__(self, state):
self.store = state["store"]
self.lock = threading.Lock()
self.Added = publisher.Publisher()
self.Removed = publisher.Publisher()
def __setstate__(self, state):
self.store = state["store"]
self.lock = threading.Lock()
@ -54,3 +68,8 @@ class TagStore:
self.store.clear()
self.Added.reset()
self.Removed.reset()
def tags(self):
with self.lock:
for (name, tag) in self.store.items():
yield tag

View File

@ -61,6 +61,26 @@ class TestTagStore(unittest.TestCase):
store.remove(tag)
self.assertNotIn("test", store.store.keys())
def test_tag_store_items(self):
store = tagstore.TagStore()
self.assertEqual(len(store), 0)
tag1 = store.add("test1", 1)
tag2 = store.add("test2", 2)
tag3 = store.add("test3", 3)
self.assertEqual(len(store), 3)
self.assertEqual( store["test1"], tag1)
self.assertEqual( store["test2"], tag2)
self.assertEqual( store["test3"], tag3)
self.assertIsNone(store["test4"])
result = [ tag for tag in store.tags() ]
self.assertEqual(len(result), 3)
self.assertIn(tag1, result)
self.assertIn(tag2, result)
self.assertIn(tag3, result)
def test_tag_store_reset(self):
store = tagstore.TagStore()
tag = store.add("test", 1)