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
# 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
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.
"""
# 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':
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: