Fixed adding regular tags.
[zzz-floof.git] / floof / lib / tags.py
index d2adafc..0984982 100644 (file)
@@ -3,14 +3,14 @@ import elixir
 from dbhelpers import find_or_create
 import re
 
-from pylons import c
-
-def parse(search_string):
+def parse(search_string, me):
     """Parses a search query, and returns a query object on Art.
 
     Queries can contain:
     - Regular tags: foo
     - User relations: by:kalu, of:eevee, for:ootachi
+    - User relations relative to some user: by:me
+      Note that this necessitates a `me` parameter.
 
     Later:
     - Negative versions of anything above: -by:eevee, -dongs
@@ -28,11 +28,12 @@ def parse(search_string):
             # This is a special tag; at the moment, by/for/of to indicate
             # related users
             prefix, tag = tag.split(':', 1)
-            if tag == 'me':
-                tag = c.user.name
 
-            # XXX what to do if this fails?  abort?  return empty query?
-            target_user = User.get_by(name=tag)
+            if tag == 'me':
+                target_user = me
+            else:
+                # XXX what to do if this fails?  abort?  return empty query?
+                target_user = User.get_by(name=tag)
 
             if prefix == 'by':
                 rel = ArtUserType.BY
@@ -57,7 +58,7 @@ def parse(search_string):
 
     return q
 
-def add_tags(art, tag_string, user):
+def add_tags(art, tag_string, adding_user, me):
     """Takes a string that looks like a tag query, and effectively modifies the
     art's tags to match it.
     """
@@ -98,7 +99,10 @@ def add_tags(art, tag_string, user):
 
         # Do work!
         if prefix:
-            target_user = User.get_by(name=tag_text)
+            if tag_text == 'me':
+                target_user = me
+            else:
+                target_user = User.get_by(name=tag_text)
 
             # Special tag; at the moment, just a relationship
             if prefix == 'by':
@@ -114,20 +118,20 @@ def add_tags(art, tag_string, user):
 
             else:
                 # XXX this will die for nonassociations
-                user_assoc = ArtUser.get_by(art=art, **user_assoc_data)
+                user_assoc = ArtUser.get_by(**user_assoc_data)
                 user_assoc.delete()
 
         else:
             # Regular tag
             if add:
                 tag = find_or_create(TagText, text=tag_text)
-                find_or_create(Tag, art=art, tagger=user, tagtext=tag)
+                find_or_create(Tag, art=art, tagger=adding_user, tagtext=tag)
 
             else:
                 tag = TagText.get_by(text=tag_text)
                 if tag:
                     # XXX this will die
-                    tag_assoc = Tag.get_by(art=art, tagger=user, tagtext=tag)
+                    tag_assoc = Tag.get_by(art=art, tagger=adding_user, tagtext=tag)
                     tag_assoc.delete()
 
     elixir.session.commit()