[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