Quellcode durchsuchen

Tags should also be per-user

Getty Ritter vor 5 Jahren
Ursprung
Commit
abcb914c9c
2 geänderte Dateien mit 14 neuen und 9 gelöschten Zeilen
  1. 5 3
      lc/model.py
  2. 9 6
      tests/model.py

+ 5 - 3
lc/model.py

@@ -56,20 +56,22 @@ class Tag(Model):
     '''
     name = peewee.TextField()
     parent = peewee.ForeignKeyField('self', null=True, backref='children')
+    user = peewee.ForeignKeyField(User, backref='tags')
 
     @staticmethod
-    def find_tag(tag_name: str):
-        if (t := Tag.get_or_none(Tag.name == tag_name)):
+    def find_tag(user: User, tag_name: str):
+        if (t := Tag.get_or_none(name=tag_name, user=user)):
             return t
 
         parent = None
         if '/' in tag_name:
             parent_name = tag_name[:tag_name.rindex('/')]
-            parent = Tag.find_tag(parent_name)
+            parent = Tag.find_tag(user, parent_name)
 
         return Tag.create(
             name=tag_name,
             parent=parent,
+            user=user,
         )
 
 

+ 9 - 6
tests/model.py

@@ -24,19 +24,20 @@ class TestDB:
 
     def test_find_tag(self):
         tag_name = 'food'
-        t = m.Tag.find_tag(tag_name)
+        u = m.User.create(name='gdritter')
+        t = m.Tag.find_tag(u, tag_name)
 
         # we should be able to find the tag with the given name
-        named_tags = m.Tag.select(m.Tag.name == tag_name)
+        named_tags = m.Tag.select(m.Tag.user == u and m.Tag.name == tag_name)
         assert len(named_tags) == 1
 
         # subsequent calls to find_tag should return the same db row
-        t2 = m.Tag.find_tag(tag_name)
+        t2 = m.Tag.find_tag(u, tag_name)
         assert t.id == t2.id
 
     def test_find_hierarchy(self):
-        tag_name = 'food/bread/rye'
-        t = m.Tag.find_tag(tag_name)
+        u = m.User.create(name='gdritter')
+        t = m.Tag.find_tag(u, 'food/bread/rye')
 
         # this should have created three DB rows: for 'food', for
         # 'food/bread', and for 'food/bread/rye':
@@ -49,7 +50,9 @@ class TestDB:
 
         # creating a new hierarchical tag with a shared prefix should
         # only create the new child tag
-        t2 = m.Tag.find_tag('food/bread/baguette')
+        t2 = m.Tag.find_tag(u, 'food/bread/baguette')
+        print([t.name for t in m.Tag.select()])
+
         assert len(m.Tag.select()) == 4
         # it should share the same parent tags
         assert t2.parent.id == t.parent.id