Merge branch 'tags' into search
authorNick Retallack <nickretallack@gmil.com>
Sun, 4 Oct 2009 20:20:41 +0000 (13:20 -0700)
committerNick Retallack <nickretallack@gmil.com>
Sun, 4 Oct 2009 20:20:41 +0000 (13:20 -0700)
1  2 
floof/model/art.py

diff --combined floof/model/art.py
@@@ -6,13 -6,16 +6,14 @@@
  
  # from elixir import Entity, Field, Integer, Unicode
  from elixir import *
+ import elixir
  
  from pylons import config
  
  from floof.lib.file_storage import get_path, save_file
 -
  from floof.lib.dbhelpers import find_or_create
  
  
 -
  class Art(Entity):
      title = Field(Unicode(120))
      original_filename = Field(Unicode(120))
  
  
      def add_tags(self, tags, user):
-         for tag in tags.split():
-             if len(tag) > 50:
-                 raise "Long Tag!" # can we handle this more gracefully?
-             # sqlite seems happy to store strings much longer than the supplied limit...
-             # elixir should really have its own find_or_create.
-             tagtext = find_or_create(TagText, text=tag)
-             tag     = find_or_create(Tag, art=self, tagger=user, tagtext=tagtext)
+         for text in tags.split():
+             if text[0] == '-':
+                 # Nega-tags
+                 tagtext = TagText.get_by(text=text[1:])
+                 if tagtext:
+                     tag = Tag.get_by(art=self, tagger=user, tagtext=tagtext)
+                     if tag:
+                         elixir.session.delete(tag)
+             else: 
+                 if len(text) > 50:
+                     raise "Long Tag!" # can we handle this more gracefully?
+                 # sqlite seems happy to store strings much longer than the supplied limit...
+                 # elixir should really have its own find_or_create.
+                 tagtext = find_or_create(TagText, text=text)
+                 tag     = find_or_create(Tag, art=self, tagger=user, tagtext=tagtext)
  
  
      def __unicode__(self):
@@@ -57,7 -71,7 +69,7 @@@
  
  
  class Tag(Entity):
 -    # look into how ondelete works.  It just sets a database property.
 +    # look into how ondelete works.  This just sets a database property.
      art = ManyToOne('Art', ondelete='cascade')
      tagger = ManyToOne('User')
      tagtext = ManyToOne('TagText')