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:
parent
4da6c6b36e
commit
365c5c6641
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue