[Repoze-checkins] r1643 - in repoze.shootout/trunk: . repoze/shootout

Chris McDonough chrism at agendaless.com
Fri Aug 22 01:08:01 EDT 2008


Author: Chris McDonough <chrism at agendaless.com>
Date: Fri Aug 22 01:08:01 2008
New Revision: 1643

Log:
Use automatic transaction management; save the idea before trying to redirect.


Modified:
   repoze.shootout/trunk/repoze/shootout/models.py
   repoze.shootout/trunk/repoze/shootout/views.py
   repoze.shootout/trunk/setup.py
   repoze.shootout/trunk/shootout.ini

Modified: repoze.shootout/trunk/repoze/shootout/models.py
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/models.py	(original)
+++ repoze.shootout/trunk/repoze/shootout/models.py	Fri Aug 22 01:08:01 2008
@@ -1,6 +1,10 @@
 from zope.interface import implements
 from zope.interface import Interface
 
+from zope.sqlalchemy import ZopeTransactionExtension
+
+from repoze.bfg.interfaces import IRoutesContext
+
 from repoze.bfg.security import Allow
 from repoze.bfg.security import Everyone
 from repoze.bfg.security import Authenticated
@@ -27,10 +31,11 @@
 
 from repoze.shootout.config import DB_STRING
 
-DBSession = scoped_session(sessionmaker(autoflush=True, autocommit=False))
+DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
 
 def connection_factory():
-    return DBSession.connection().connection.connection
+    session = DBSession()
+    return session.connection().connection.connection
 
 def make_authenticator_plugin():
     query = "SELECT username,password FROM users where username = :login;"

Modified: repoze.shootout/trunk/repoze/shootout/views.py
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/views.py	(original)
+++ repoze.shootout/trunk/repoze/shootout/views.py	Fri Aug 22 01:08:01 2008
@@ -25,10 +25,11 @@
 def main_view(context, request):
     params = request.params
     message = params.get('message','')
-    hitpct = DBSession.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.hit_percentage.desc()).all()[:10]
-    top = DBSession.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.hits.desc()).all()[:10]
-    bottom = DBSession.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.misses.desc()).all()[:10]
-    last10 = DBSession.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.idea_id.desc()).all()[:10]
+    session = DBSession()
+    hitpct = session.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.hit_percentage.desc()).all()[:10]
+    top = session.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.hits.desc()).all()[:10]
+    bottom = session.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.misses.desc()).all()[:10]
+    last10 = session.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.idea_id.desc()).all()[:10]
     toplists=[
               {'title':'Latest shots','items':last10},
               {'title':'Most hits','items':top},
@@ -50,10 +51,11 @@
     response = webob.Response()
     params = request.params
     target = params.get('target')
-    idea = DBSession.query(Idea).filter(Idea.idea_id==target).one()
+    session = DBSession()
+    idea = session.query(Idea).filter(Idea.idea_id==target).one()
     voter_username = authenticated_userid(request)
-    voter = DBSession.query(User).filter(User.username==voter_username).one()
-    poster = DBSession.query(User).filter(User.user_id==idea.author).one()
+    voter = session.query(User).filter(User.username==voter_username).one()
+    poster = session.query(User).filter(User.user_id==idea.author).one()
     if params.get('form.vote_hit'):
         vote='hit'
         idea.hits=idea.hits+1
@@ -65,8 +67,7 @@
         poster.misses=poster.misses+1
         voter.delivered_misses=voter.delivered_misses+1
     response.set_cookie("%s.%s.%s" % (COOKIE_VOTED,idea.idea_id,voter_username), vote)
-    DBSession.flush()
-    DBSession.commit()
+    session.flush()
     url = "%s/ideas/%s" % (app_url,idea.idea_id)
     response.status = '301 Moved Permanently'
     response.headers['Location'] = url
@@ -88,6 +89,7 @@
         text = params.get('text')
         tags = params.get('tags')
         schema = AddIdea()
+        session = DBSession()
         try:
             form = schema.to_python(params)
         except formencode.validators.Invalid, why:
@@ -95,27 +97,28 @@
             url = "%s/idea_add?message=%s" % (app_url,message)
         else:
             author_id = authenticated_userid(request)
-            author = DBSession.query(User).filter(User.username==author_id).one().user_id
+            author = session.query(User).filter(User.username==author_id).one().user_id
             idea = Idea(target=target, author=author, title=title, text=text)
+            session.save(idea)
             tags = tags.replace(';',' ').replace(',',' ')
             tags = [tag.lower() for tag in tags.split()]
             tags = set(tags)
             if '' in tags:
                 tags.remove('')
             for tagname in tags:
-                existent = DBSession.query(Tag).filter(Tag.name==tagname).all()
+                existent = session.query(Tag).filter(Tag.name==tagname).all()
                 if not existent:
                     tag = Tag(name=tagname)
+                    session.save(tag)
                     idea.tags.append(tag)
                 else:
                     idea.tags.append(existent[0])
-            DBSession.commit()
             url = "%s/ideas/%s" % (app_url,idea.idea_id)
         return HTTPFound(location=url)
     target = params.get('target', None)
     kind = 'idea'
     if target is not None:
-        target = DBSession.query(Idea).join('users').filter(Idea.idea_id==target).one()
+        target = session.query(Idea).join('users').filter(Idea.idea_id==target).one()
         kind = 'comment'
     return render_template_to_response('templates/idea_add.pt',
                                        app_url=app_url,
@@ -148,6 +151,7 @@
         name = params.get('name', None)
         email = params.get('email', None)
         schema = Registration()
+        session = DBSession()
         try:
             form = schema.to_python(params)
         except formencode.validators.Invalid, why:
@@ -156,8 +160,7 @@
         else:
             password='{SHA}%s' % sha.new(password).hexdigest()
             user = User(username=username, password=password, name=name, email=email)
-            DBSession.save(user)
-            DBSession.commit()
+            session.save(user)
             url = "%s?message=%s" % (app_url,message)
         return HTTPFound(location=url)
     return render_template_to_response('templates/user_add.pt',
@@ -170,7 +173,8 @@
 
 def user_view(context, request):
     app_url = request.application_url
-    user = DBSession.query(User).filter(User.username==context.user).one()
+    session = DBSession()
+    user = session.query(User).filter(User.username==context.user).one()
     return render_template_to_response('templates/user.pt',
                                        user=user,
                                        toolbar=toolbar_view(context,request),
@@ -180,12 +184,13 @@
                                        app_url=app_url)
 
 def idea_view(context, request):
-    idea = DBSession.query(Idea).filter(Idea.idea_id==context.idea).one()
-    poster = DBSession.query(User).filter(User.user_id==idea.author).one()
+    session = DBSession()
+    idea = session.query(Idea).filter(Idea.idea_id==context.idea).one()
+    poster = session.query(User).filter(User.user_id==idea.author).one()
     viewer_username = authenticated_userid(request)
     idea_cookie = '%s.%s.%s' % (COOKIE_VOTED,idea.idea_id,viewer_username)
     voted = request.cookies.get(idea_cookie, None)
-    comments = DBSession.query(Idea).filter(Idea.target==context.idea).all()
+    comments = session.query(Idea).filter(Idea.target==context.idea).all()
     return render_template_to_response('templates/idea.pt',
                                        app_url=request.application_url,
                                        toolbar=toolbar_view(context,request),
@@ -199,7 +204,8 @@
                                        idea=idea)
 
 def tag_view(context, request):
-    ideas = DBSession.query(Idea).filter(Idea.tags.any(name=context.tag)).all()
+    session = DBSession()
+    ideas = session.query(Idea).filter(Idea.tags.any(name=context.tag)).all()
     return render_template_to_response('templates/tag.pt',
                                        tag=context.tag,
                                        app_url=request.application_url,
@@ -238,13 +244,15 @@
                            loggedin=loggedin)
 
 def latest_view(context, request):
-    latest = DBSession.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.idea_id.desc()).all()[:10]
+    session = DBSession()
+    latest = session.query(Idea).join('users').filter(Idea.target==None).order_by(Idea.idea_id.desc()).all()[:10]
     return render_template('templates/latest.pt',
                            app_url=request.application_url,
                            latest=latest)
 
 def cloud_view(context, request):
-    tag_counts = DBSession.query(Tag.name, func.count('*')).join(IdeaTag).group_by(Tag.name).all()
+    session = DBSession()
+    tag_counts = session.query(Tag.name, func.count('*')).join(IdeaTag).group_by(Tag.name).all()
     total = sum([tag[1] for tag in tag_counts])
     totalcounts = []
     for tag in tag_counts:

Modified: repoze.shootout/trunk/setup.py
==============================================================================
--- repoze.shootout/trunk/setup.py	(original)
+++ repoze.shootout/trunk/setup.py	Fri Aug 22 01:08:01 2008
@@ -15,6 +15,8 @@
     'repoze.who',
     'Deliverance',
     'SQLAlchemy',
+    'zope.sqlalchemy',
+    'repoze.tm2',
     ]
 import sys
 

Modified: repoze.shootout/trunk/shootout.ini
==============================================================================
--- repoze.shootout/trunk/shootout.ini	(original)
+++ repoze.shootout/trunk/shootout.ini	Fri Aug 22 01:08:01 2008
@@ -17,6 +17,7 @@
 
 [pipeline:main]
 pipeline = deliverance
+           egg:repoze.tm2#tm
            who
            shootout
 
@@ -24,4 +25,4 @@
 use = egg:PasteScript#cherrypy
 host = 0.0.0.0
 port = 5430
-numthreads = 4
+numthreads = 1


More information about the Repoze-checkins mailing list