X-Git-Url: http://git.veekun.com/zzz-floof.git/blobdiff_plain/83db05b7c671b4736dc83393b8ff4e90943a9793..453a7ca3b9d5e7093f843b883db58f9beb1b3aa8:/floof/lib/tags.py diff --git a/floof/lib/tags.py b/floof/lib/tags.py index 134ba6f..0984982 100644 --- a/floof/lib/tags.py +++ b/floof/lib/tags.py @@ -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. """ @@ -99,7 +100,7 @@ def add_tags(art, tag_string, user): # Do work! if prefix: if tag_text == 'me': - target_user = c.user + target_user = me else: target_user = User.get_by(name=tag_text) @@ -117,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()