merged in my branch 'resources', which is not aptly named anymore since it no longer...
authorNick Retallack <nickretallack@gmil.com>
Wed, 7 Oct 2009 06:25:16 +0000 (23:25 -0700)
committerNick Retallack <nickretallack@gmil.com>
Wed, 7 Oct 2009 06:25:16 +0000 (23:25 -0700)
1  2 
floof/controllers/art.py
floof/controllers/tag.py

diff --combined floof/controllers/art.py
@@@ -1,14 -1,17 +1,17 @@@
  import logging
  
  from pylons import request, response, session, tmpl_context as c, h
- from pylons.controllers.util import abort, redirect_to
+ from pylons.controllers.util import abort, redirect
+ from pylons import url
  from floof.lib.base import BaseController, render
  
  log = logging.getLogger(__name__)
  
  import elixir
- from floof.model.art import Art
+ from floof.model.art import Art, Rating
+ from sqlalchemy.exceptions import IntegrityError
  
  class ArtController(BaseController):
      def __before__(self, id=None):
          return render("/art/new.mako")
  
      # TODO: login required
-     def upload(self):
-         Art(uploaded_by=c.user, **request.params)
-         elixir.session.commit()
-         redirect_to(controller="main", action="index")
+     def create(self):
+         c.art = Art(uploader=c.user, **request.params)
+         try:
+             elixir.session.commit()
+             redirect(url('show_art', id=c.art.id))
+         except IntegrityError:
+             # hurr, there must be a better way to do this but I am lazy right now
+             hash = c.art.hash
+             elixir.session.rollback()
+             duplicate_art = Art.get_by(hash=hash)
+             h.flash("We already have that one.")
+             redirect(url('show_art', id=duplicate_art.id))
  
      def show(self, id):
          # c.art = h.get_object_or_404(Art, id=id)
              c.your_score = c.art.user_score(c.user)
          return render("/art/show.mako")
          
-     # TODO: login required
-     # also, require post
-     def tag(self, id):
-         # c.art = h.get_object_or_404(Art, id=id)
-         c.art.add_tags(request.params.get("tags",""), c.user)
-         elixir.session.commit()
-         redirect_to('show_art', id=c.art.id)
-     
 -    # # TODO: login required
 -    # def tag(self, id):
 -    #     # c.art = h.get_object_or_404(Art, id=id)
 -    #     c.art.add_tags(request.params["tags"], c.user)
 -    #     elixir.session.commit()
 -    #     redirect_to('show_art', id=c.art.id)
 -    # 
++
      # TODO: login required
      def rate(self, id):
          # c.art = h.get_object_or_404(Art, id=id)
-         c.art.rate(request.params["score"], c.user)
+         score = request.params.get("score")
+         if score and score.isnumeric():
+             score = int(score)
+         else:
+             score = Rating.reverse_options.get(score)
+         
+         c.art.rate(score, c.user)
          elixir.session.commit()
-         redirect_to('show_art', id=c.art.id)
+             
+         redirect(url('show_art', id=c.art.id))
diff --combined floof/controllers/tag.py
@@@ -1,20 -1,29 +1,29 @@@
  import logging
  
- from pylons import request, response, session, tmpl_context as c
- from pylons.controllers.util import abort, redirect_to
+ from pylons import request, response, session, tmpl_context as c, h
+ from pylons.controllers.util import abort, redirect
  
  from floof.lib.base import BaseController, render
+ from pylons import url
  
  log = logging.getLogger(__name__)
  
  import elixir
- from floof.model.art import Tag
+ from floof.model.art import Art, Tag
  
  class TagController(BaseController):
  
-     def delete(self, id):
-         tag = Tag.get(id)
-         if tag:
-             elixir.session.delete(tag)
-             elixir.session.commit()
-         redirect_to(request.referrer)
+     # TODO: login required
+     def delete(self, art_id, id):
+         tag = h.get_object_or_404(Tag, id=id)
+         elixir.session.delete(tag)
+         elixir.session.commit()
+         redirect(url('show_art', id=art_id))
+         
+     # TODO: login required
+     def create(self, art_id):
+         c.art = h.get_object_or_404(Art, id=art_id)
 -        c.art.add_tags(request.params["tags"], c.user)
++        c.art.add_tags(request.params.get("tags",""), c.user)
+         elixir.session.commit()
+         redirect(url('show_art', id=c.art.id))