X-Git-Url: http://git.veekun.com/zzz-floof.git/blobdiff_plain/db4c5f0b56d22815ecc31754271797b2401c9458..HEAD:/floof/lib/tags.py diff --git a/floof/lib/tags.py b/floof/lib/tags.py index 104fe65..0984982 100644 --- a/floof/lib/tags.py +++ b/floof/lib/tags.py @@ -1,11 +1,16 @@ from floof.model import Art, ArtUser, ArtUserType, Tag, TagText, User +import elixir +from dbhelpers import find_or_create +import re -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 @@ -24,8 +29,11 @@ def parse(search_string): # related users prefix, tag = tag.split(':', 1) - # 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 @@ -50,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. """ @@ -91,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': @@ -107,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()