[Sqlalchemy-commits] [1337] zblog/trunk/components: did a basic 0.2 conversion, using no threadlocal
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-04-25 23:48:22
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[1337] zblog/trunk/components: did a basic 0.2 conversion, using no threadlocals</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1337</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-04-25 18:48:01 -0500 (Tue, 25 Apr 2006)</dd> </dl> <h3>Log Message</h3> <pre>did a basic 0.2 conversion, using no threadlocals</pre> <h3>Modified Paths</h3> <ul> <li><a href="#zblogtrunkcomponentsdatamyc">zblog/trunk/components/data.myc</a></li> <li><a href="#zblogtrunklibzblogcontroller__init__py">zblog/trunk/lib/zblog/controller/__init__.py</a></li> <li><a href="#zblogtrunklibzblogcontrollerblogcommentspy">zblog/trunk/lib/zblog/controller/blog/comments.py</a></li> <li><a href="#zblogtrunklibzblogcontrollerblogindexpy">zblog/trunk/lib/zblog/controller/blog/index.py</a></li> <li><a href="#zblogtrunklibzblogcontrollerbootstrappy">zblog/trunk/lib/zblog/controller/bootstrap.py</a></li> <li><a href="#zblogtrunklibzblogcontrollerfrontpy">zblog/trunk/lib/zblog/controller/front.py</a></li> <li><a href="#zblogtrunklibzblogcontrollerloginpy">zblog/trunk/lib/zblog/controller/login.py</a></li> <li><a href="#zblogtrunklibzblogcontrollermanageblogpy">zblog/trunk/lib/zblog/controller/manage/blog.py</a></li> <li><a href="#zblogtrunklibzblogcontrollermanageuserpy">zblog/trunk/lib/zblog/controller/manage/user.py</a></li> <li><a href="#zblogtrunklibzblogdatabase__init__py">zblog/trunk/lib/zblog/database/__init__.py</a></li> <li><a href="#zblogtrunklibzblogdatabasemapperspy">zblog/trunk/lib/zblog/database/mappers.py</a></li> <li><a href="#zblogtrunklibzblogdatabasetablespy">zblog/trunk/lib/zblog/database/tables.py</a></li> <li><a href="#zblogtrunklibzblogdomainactionspy">zblog/trunk/lib/zblog/domain/actions.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="zblogtrunkcomponentsdatamyc"></a> <div class="modfile"><h4>Modified: zblog/trunk/components/data.myc (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/components/data.myc 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/components/data.myc 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -5,6 +5,7 @@ </span><span class="cx"> </span><span class="cx"> <%global> </span><span class="cx"> from zblog.domain.blog import * </span><ins>+ from zblog.database.mappers import query </ins><span class="cx"> </%global> </span><span class="cx"> </span><span class="cx"> <%method bloglist> </span><span class="lines">@@ -14,9 +15,9 @@ </span><span class="cx"> </%args> </span><span class="cx"> <%init> </span><span class="cx"> if user is not None: </span><del>- blogs = Blog.mapper.select_by(owner_id=user.id) </del><ins>+ blogs = query(Blog).select_by(owner_id=user.id) </ins><span class="cx"> else: </span><del>- blogs = Blog.mapper.select() </del><ins>+ blogs = query(Blog).select() </ins><span class="cx"> if not m.has_content(): </span><span class="cx"> return blogs </span><span class="cx"> </%init> </span><span class="lines">@@ -43,7 +44,7 @@ </span><span class="cx"> keyword=False </span><span class="cx"> </%args> </span><span class="cx"> <%init> </span><del>- posts = Post.mapper.select_by(blog_id=blog.id, keyword=keyword) </del><ins>+ posts = query(Post).select_by(blog_id=blog.id, keyword=keyword) </ins><span class="cx"> if not m.has_content(): </span><span class="cx"> return posts </span><span class="cx"> </%init> </span></span></pre></div> <a id="zblogtrunklibzblogcontroller__init__py"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/controller/__init__.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/controller/__init__.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/controller/__init__.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -2,7 +2,7 @@ </span><span class="cx"> </span><span class="cx"> __all__ = ['Controller', 'access_control'] </span><span class="cx"> </span><del>-from sqlalchemy import * </del><ins>+import zblog.database.mappers </ins><span class="cx"> </span><span class="cx"> class Controller(object): </span><span class="cx"> def template(self, m, template, **kwargs): </span><span class="lines">@@ -10,9 +10,10 @@ </span><span class="cx"> def get_user(self, m): </span><span class="cx"> s = m.get_session() </span><span class="cx"> u = s.get('user', None) </span><del>- # import_instance assures that the user deserialized from the session - # is properly present in the current thread's unit of work context. - return objectstore.import_instance(u) </del><ins>+ if u is not None: + return zblog.database.mappers.session().merge(u) + else: + return None </ins><span class="cx"> </span><span class="cx"> </span><span class="cx"> </span></span></pre></div> <a id="zblogtrunklibzblogcontrollerblogcommentspy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/controller/blog/comments.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/controller/blog/comments.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/controller/blog/comments.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -15,7 +15,7 @@ </span><span class="cx"> else: </span><span class="cx"> m.abort(404) </span><span class="cx"> </span><del>- post = Post.mapper.get(post_id) </del><ins>+ post = mapper.query(Post).get(post_id) </ins><span class="cx"> if post is None: </span><span class="cx"> m.abort(404) </span><span class="cx"> </span><span class="lines">@@ -31,7 +31,7 @@ </span><span class="cx"> else: </span><span class="cx"> m.abort(404) </span><span class="cx"> </span><del>- comment = Comment.mapper.get(comment_id) </del><ins>+ comment = mapper.query(Comment).get(comment_id) </ins><span class="cx"> if comment is None: </span><span class="cx"> m.abort(404) </span><span class="cx"> </span><span class="lines">@@ -41,12 +41,12 @@ </span><span class="cx"> @access_control(action=actions.CreateComment()) </span><span class="cx"> def post(self, m, ARGS, post_id, parent_comment_id, confirm=False, preview=False): </span><span class="cx"> """posts a comment, or provides a preview display.""" </span><del>- post = Post.mapper.get(post_id) </del><ins>+ post = mapper.query(Post).get(post_id) </ins><span class="cx"> if post is None: </span><span class="cx"> m.abort(404) </span><span class="cx"> </span><span class="cx"> if parent_comment_id: </span><del>- parentcomment = Comment.mapper.get(parent_comment_id) </del><ins>+ parentcomment = mapper.query(Comment).get(parent_comment_id) </ins><span class="cx"> else: </span><span class="cx"> parentcomment = None </span><span class="cx"> form = self.commentform(m, ARGS, post, comment=parentcomment) </span><span class="lines">@@ -58,9 +58,9 @@ </span><span class="cx"> comment = self.createcomment(m, post, form, parentcomment) </span><span class="cx"> self.template(m, '/blog/postcomment.myt', post=post, form=form, comment=parentcomment, preview=comment) </span><span class="cx"> return </span><del>- mapper.begin() </del><span class="cx"> comment = self.createcomment(m, post, form, parentcomment) </span><del>- mapper.commit() </del><ins>+ mapper.session().save(comment) + mapper.flush() </ins><span class="cx"> form = self.commentform(m, ARGS, post, comment) </span><span class="cx"> form.append_success("Comment posted!") </span><span class="cx"> self.template(m, '/blog/postcomment.myt', post=post, comment=comment, form=form) </span></span></pre></div> <a id="zblogtrunklibzblogcontrollerblogindexpy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/controller/blog/index.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/controller/blog/index.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/controller/blog/index.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -20,7 +20,7 @@ </span><span class="cx"> else: </span><span class="cx"> m.abort(404) </span><span class="cx"> </span><del>- blog = Blog.mapper.get(blog_id) </del><ins>+ blog = mapper.query(Blog).get(blog_id) </ins><span class="cx"> if blog is None: </span><span class="cx"> m.abort(404) </span><span class="cx"> </span><span class="lines">@@ -29,12 +29,12 @@ </span><span class="cx"> @access_control(action=actions.CreatePost()) </span><span class="cx"> def post(self, m, ARGS, blog_id, post_id=None, preview=False): </span><span class="cx"> """submits a post, or previews it.""" </span><del>- blog = Blog.mapper.get(blog_id) </del><ins>+ blog = mapper.query(Blog).get(blog_id) </ins><span class="cx"> form = self.postform(m, ARGS) </span><span class="cx"> form.set_request(ARGS, validate=True) </span><span class="cx"> </span><span class="cx"> if post_id: </span><del>- post = Post.mapper.get(post_id) </del><ins>+ post = mapper.query(Post).get(post_id) </ins><span class="cx"> if post is None: </span><span class="cx"> form.append_error("no post found for id '%s'" % post_id) </span><span class="cx"> self.template(m, '/blog/index.myt', blog=blog, loadcomponent='/blog/forms.myt:postform', form=form) </span><span class="lines">@@ -52,11 +52,12 @@ </span><span class="cx"> self.reflect_to(m, form, preview, blog) </span><span class="cx"> self.template(m, '/blog/index.myt', blog=blog, loadcomponent='/blog/forms.myt:postform', form=form, preview=preview, post=post) </span><span class="cx"> else: </span><del>- mapper.begin() </del><ins>+ sess = mapper.session() </ins><span class="cx"> if post is None: </span><span class="cx"> post = Post() </span><ins>+ sess.save(post) </ins><span class="cx"> self.reflect_to(m, form, post, blog) </span><del>- mapper.commit() </del><ins>+ mapper.flush() </ins><span class="cx"> if not post_id: </span><span class="cx"> form.append_success("Post added") </span><span class="cx"> else: </span><span class="lines">@@ -71,9 +72,10 @@ </span><span class="cx"> for keyword in form['topic_keywords'].value.split(' '): </span><span class="cx"> if not keyword: </span><span class="cx"> continue </span><del>- topic = Topic.mapper.get_by(keyword=keyword) </del><ins>+ topic = mapper.query(Topic).get_by(keyword=keyword) </ins><span class="cx"> if topic is None: </span><span class="cx"> topic = Topic(keyword=keyword, description=keyword) </span><ins>+ mapper.session().save(topic) </ins><span class="cx"> post.topics.append(TopicAssociation(post=post, topic=topic, is_primary=False)) </span><span class="cx"> </span><span class="cx"> print repr([(t, t.post, t.topic) for t in post.topics.records.keys()]) </span><span class="lines">@@ -88,14 +90,14 @@ </span><span class="cx"> @access_control(action=actions.CreatePost()) </span><span class="cx"> def new_post(self, m, ARGS, blog_id): </span><span class="cx"> """provides a blank "submit a post" screen""" </span><del>- blog = Blog.mapper.get(blog_id) </del><ins>+ blog = mapper.query(Blog).get(blog_id) </ins><span class="cx"> form = self.postform(m, ARGS) </span><span class="cx"> self.template(m, '/blog/index.myt', loadcomponent='/blog/forms.myt:postform', form=form, blog=blog) </span><span class="cx"> </span><span class="cx"> @access_control(action=actions.EditPost()) </span><span class="cx"> def ajax_edit_post(self, m, ARGS, post_id): </span><span class="cx"> """produces an "edit post" screen, given the id of the post""" </span><del>- post = Post.mapper.get(post_id) </del><ins>+ post = mapper.query(Post).get(post_id) </ins><span class="cx"> form = self.postform(m, ARGS) </span><span class="cx"> self.reflect_from(form, post) </span><span class="cx"> m.comp('/blog/forms.myt:postform', form=form, blog=post.blog, post=post) </span><span class="lines">@@ -103,15 +105,14 @@ </span><span class="cx"> @access_control(action=actions.EditPost()) </span><span class="cx"> def ajax_delete_post(self, m, ARGS, post_id, confirm=False): </span><span class="cx"> """deletes a post, given its ID.""" </span><del>- post = Post.mapper.get(post_id) </del><ins>+ post = mapper.query(Post).get(post_id) </ins><span class="cx"> blog = post.blog </span><span class="cx"> if not confirm: </span><span class="cx"> m.comp('/blog/forms.myt:delete_confirm', post=post) </span><span class="cx"> return </span><span class="cx"> form = self.postform(m, ARGS) </span><del>- mapper.begin() - mapper.delete(post) - mapper.commit() </del><ins>+ mapper.session().delete(post) + mapper.flush() </ins><span class="cx"> form.append_success("Post deleted") </span><span class="cx"> m.comp('/blog/index.myt:postlist', blog=blog, form=form) </span><span class="cx"> </span><span class="lines">@@ -125,7 +126,7 @@ </span><span class="cx"> m.abort(404) </span><span class="cx"> </span><span class="cx"> #post = Post.mapper.options(nodefer('body')).get(post_id) </span><del>- post = Post.mapper.get(post_id) </del><ins>+ post = mapper.query(Post).get(post_id) </ins><span class="cx"> if post is None: </span><span class="cx"> m.abort(404) </span><span class="cx"> </span></span></pre></div> <a id="zblogtrunklibzblogcontrollerbootstrappy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/controller/bootstrap.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/controller/bootstrap.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/controller/bootstrap.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -38,6 +38,7 @@ </span><span class="cx"> connect = zblog.database.test_connection(dbtype, kwargs) </span><span class="cx"> error = None </span><span class="cx"> except Exception, e: </span><ins>+ raise </ins><span class="cx"> error = e </span><span class="cx"> m.comp('/bootstrap/index.myt:dboptions', dbtype=dbtype, form=self.form(ARGS), connected=(error is None), error=error) </span><span class="cx"> </span><span class="lines">@@ -59,7 +60,7 @@ </span><span class="cx"> dbform.description = desc['description'] </span><span class="cx"> f['dbtype'].value=dbtype </span><span class="cx"> for field in desc['arguments']: </span><del>- if dbtype == 'sqlite' and field[0] == 'filename': </del><ins>+ if dbtype == 'sqlite' and field[0] == 'host': </ins><span class="cx"> default = './data/zblog.db' </span><span class="cx"> else: </span><span class="cx"> default = field[2] </span><span class="lines">@@ -107,6 +108,7 @@ </span><span class="cx"> zblog.reset_config() </span><span class="cx"> os.remove(m.interpreter.attributes['config_file']) </span><span class="cx"> error = True </span><ins>+ raise </ins><span class="cx"> </span><span class="cx"> return (logger.getvalue(), error) </span><span class="cx"> </span></span></pre></div> <a id="zblogtrunklibzblogcontrollerfrontpy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/controller/front.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/controller/front.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/controller/front.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -41,12 +41,15 @@ </span><span class="cx"> m.abort(404) </span><span class="cx"> return </span><span class="cx"> </span><del>- user = self.get_user(m) - login = getattr(controller.component_source.callable_, 'login', False) - if login and user is None: - login = m.fetch_component('/login/', resolver_context="frontcontroller", enable_dhandler=True) - m.subexec(login) - return </del><ins>+ if not zblog.need_config: + user = self.get_user(m) + login = getattr(controller.component_source.callable_, 'login', False) + if login and user is None: + login = m.fetch_component('/login/', resolver_context="frontcontroller", enable_dhandler=True) + m.subexec(login) + return + else: + user = None </ins><span class="cx"> </span><span class="cx"> action = getattr(controller.component_source.callable_, 'action', None) </span><span class="cx"> if action is not None: </span></span></pre></div> <a id="zblogtrunklibzblogcontrollerloginpy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/controller/login.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/controller/login.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/controller/login.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -24,7 +24,7 @@ </span><span class="cx"> f = self.form() </span><span class="cx"> f.set_request(ARGS) </span><span class="cx"> </span><del>- u = User.mapper.get_by(name=f['username'].display) </del><ins>+ u = mapper.query(User).get_by(name=f['username'].display) </ins><span class="cx"> if u is None or not u.checkpw(f['password'].display): </span><span class="cx"> u = None </span><span class="cx"> if u is not None: </span><span class="lines">@@ -62,7 +62,7 @@ </span><span class="cx"> form.append_error("Passwords do not match") </span><span class="cx"> form.isvalid=False </span><span class="cx"> </span><del>- existing = User.mapper.get_by(name=form['name'].value) </del><ins>+ existing = mapper.query(User).get_by(name=form['name'].value) </ins><span class="cx"> if existing is not None: </span><span class="cx"> form['name'].append_error("Username '%s' already exists" % form['name'].value) </span><span class="cx"> form.isvalid=False </span><span class="lines">@@ -71,11 +71,12 @@ </span><span class="cx"> self.template(m, '/register.myt', form=form) </span><span class="cx"> return </span><span class="cx"> </span><del>- mapper.begin() </del><ins>+ sess = mapper.session() </ins><span class="cx"> user = User() </span><span class="cx"> form.reflect_to(user) </span><span class="cx"> user.group=zblog.domain.user.user </span><del>- mapper.commit() </del><ins>+ sess.save(user) + sess.flush() </ins><span class="cx"> form = self.form() </span><span class="cx"> form.append_success("Thanks for registering, %s!" % (user.name)) </span><span class="cx"> self.template(m, '/login.myt', form=form) </span></span></pre></div> <a id="zblogtrunklibzblogcontrollermanageblogpy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/controller/manage/blog.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/controller/manage/blog.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/controller/manage/blog.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -12,7 +12,7 @@ </span><span class="cx"> if form is None: </span><span class="cx"> form = self.form(m) </span><span class="cx"> if blog_id: </span><del>- blog = Blog.mapper.get(blog_id) </del><ins>+ blog = mapper.query(Blog).get(blog_id) </ins><span class="cx"> form.reflect_from(blog) </span><span class="cx"> m.comp('/admin/blog.myt:blogedit', form=form) </span><span class="cx"> </span><span class="lines">@@ -29,24 +29,23 @@ </span><span class="cx"> self.ajax_editblog(m, ARGS, form=form, blog_id=blog_id) </span><span class="cx"> return </span><span class="cx"> </span><del>- owner = User.mapper.get_by(name=form['owner_name'].value) </del><ins>+ owner = mapper.query(User).get_by(name=form['owner_name'].value) </ins><span class="cx"> if owner is None: </span><span class="cx"> form.append_error("Could not locate user %s" % form['owner_name'].value) </span><span class="cx"> self.ajax_editblog(m, ARGS, form=form, blog_id=blog_id) </span><span class="cx"> return </span><span class="cx"> </span><del>- mapper.begin() - </del><span class="cx"> if blog_id: </span><span class="cx"> created = False </span><del>- blog = Blog.mapper.get(blog_id) </del><ins>+ blog = mapper.query(Blog).get(blog_id) </ins><span class="cx"> else: </span><span class="cx"> created = True </span><span class="cx"> blog = Blog() </span><ins>+ mapper.session().save(blog) </ins><span class="cx"> </span><span class="cx"> form.reflect_to(blog) </span><span class="cx"> blog.owner = owner </span><del>- mapper.commit() </del><ins>+ mapper.flush() </ins><span class="cx"> form.append_success("Blog '%s' %s" % (blog.name, created and 'created' or 'updated')) </span><span class="cx"> form.reflect_from(blog) </span><span class="cx"> m.comp('/admin/blog.myt:blogedit', form=form) </span><span class="lines">@@ -54,7 +53,7 @@ </span><span class="cx"> @access_control(login=True, action=actions.EditBlog()) </span><span class="cx"> def delete_blog(self, m, ARGS, blog_id=None, confirm=False): </span><span class="cx"> form= self.form(m) </span><del>- blog = Blog.mapper.get(blog_id) </del><ins>+ blog = mapper.query(Blog).get(blog_id) </ins><span class="cx"> if blog is None: </span><span class="cx"> form.append_error("No blog found for id '%s'" % blog_id) </span><span class="cx"> self.ajax_editblog(m, ARGS, form=form) </span><span class="lines">@@ -65,9 +64,8 @@ </span><span class="cx"> return </span><span class="cx"> </span><span class="cx"> name = blog.name </span><del>- mapper.begin() </del><span class="cx"> mapper.delete(blog) </span><del>- mapper.commit() </del><ins>+ mapper.flush() </ins><span class="cx"> form.append_success("Blog '%s' deleted" % name) </span><span class="cx"> form.clear() </span><span class="cx"> m.comp('/admin/blog.myt:blogedit', form=form) </span></span></pre></div> <a id="zblogtrunklibzblogcontrollermanageuserpy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/controller/manage/user.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/controller/manage/user.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/controller/manage/user.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -12,7 +12,7 @@ </span><span class="cx"> if form is None: </span><span class="cx"> form = self.form(m) </span><span class="cx"> if username is not None: </span><del>- user = User.mapper.get_by(name=username) </del><ins>+ user = mapper.query(User).get_by(name=username) </ins><span class="cx"> if user is not None: </span><span class="cx"> form.reflect_from(user) </span><span class="cx"> form['password_set'].required = False </span><span class="lines">@@ -35,7 +35,7 @@ </span><span class="cx"> form.append_error("Passwords do not match") </span><span class="cx"> </span><span class="cx"> if not user_id: </span><del>- existing = User.mapper.get_by(name=form['name'].value) </del><ins>+ existing = mapper.query(User).get_by(name=form['name'].value) </ins><span class="cx"> if existing is not None: </span><span class="cx"> form['name'].append_error("Username '%s' already exists" % form['name'].value) </span><span class="cx"> </span><span class="lines">@@ -43,16 +43,15 @@ </span><span class="cx"> self.ajax_edituser(m, ARGS, form=form) </span><span class="cx"> return </span><span class="cx"> </span><del>- mapper.begin() </del><span class="cx"> if user_id: </span><span class="cx"> created = False </span><del>- user = User.mapper.get(user_id) </del><ins>+ user = mapper.query(User).get(user_id) </ins><span class="cx"> else: </span><span class="cx"> created = True </span><span class="cx"> user = User() </span><del>- </del><ins>+ mapper.session().save(user) </ins><span class="cx"> form.reflect_to(user) </span><del>- mapper.commit() </del><ins>+ mapper.flush() </ins><span class="cx"> form.append_success("User '%s' %s" % (user.name, created and 'created' or 'updated')) </span><span class="cx"> form.reflect_from(user) </span><span class="cx"> m.comp('/admin/user.myt:userform', form=form) </span><span class="lines">@@ -60,7 +59,7 @@ </span><span class="cx"> @access_control(login=True, action=actions.AdminUsers()) </span><span class="cx"> def delete_user(self, m, ARGS, user_id, confirm=False): </span><span class="cx"> form = self.form(m) </span><del>- user = User.mapper.get(user_id) </del><ins>+ user = mapper.query(User).get(user_id) </ins><span class="cx"> if user is None: </span><span class="cx"> form.append_error("Userid %d not found" % user_id) </span><span class="cx"> self.ajax_edituser(m, ARGS, form=form) </span><span class="lines">@@ -70,9 +69,8 @@ </span><span class="cx"> m.comp('/admin/user.myt:delete_confirm', user=user) </span><span class="cx"> return </span><span class="cx"> name = user.name </span><del>- mapper.begin() - mapper.delete(user) - mapper.commit() </del><ins>+ mapper.session().delete(user) + mapper.flush() </ins><span class="cx"> form.append_success("User '%s' deleted" % name) </span><span class="cx"> form.clear() </span><span class="cx"> m.comp('/admin/user.myt:userform', form=form) </span></span></pre></div> <a id="zblogtrunklibzblogdatabase__init__py"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/database/__init__.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/database/__init__.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/database/__init__.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -1,6 +1,7 @@ </span><span class="cx"> """global database stuff. includes functions for finding out about database drivers, as well as the global SQLEngine used by the application.""" </span><span class="cx"> import zblog </span><span class="cx"> import sqlalchemy.engine </span><ins>+import sqlalchemy.engine.url as url </ins><span class="cx"> import sys </span><span class="cx"> </span><span class="cx"> def dbtypes(): </span><span class="lines">@@ -19,14 +20,17 @@ </span><span class="cx"> def test_connection(name, kwargs): </span><span class="cx"> """given a SQLEngine name and keyword arguments, creates a connection, or </span><span class="cx"> propigates whatever exceptions occur.""" </span><del>- e = sqlalchemy.engine.create_engine(name, kwargs) - e.connection() </del><ins>+ u = url.URL(name, **kwargs) + e = sqlalchemy.engine.create_engine(u) + e.connect() </ins><span class="cx"> </span><span class="cx"> def init_engine(): </span><span class="cx"> global engine </span><span class="cx"> conf = zblog.config['database'].copy() </span><span class="cx"> driver = conf.pop('driver') </span><del>- engine = sqlalchemy.engine.create_engine(driver, conf, echo=conf.pop('echo', False)) </del><ins>+ echo=conf.pop('echo', False) + u = url.URL(driver, **conf) + engine = sqlalchemy.engine.create_engine(u, echo=echo) </ins><span class="cx"> # load mapper module to intialize mapper attributes on domain classes </span><span class="cx"> __import__('zblog.database.mappers') </span><span class="cx"> </span><span class="lines">@@ -36,17 +40,17 @@ </span><span class="cx"> def init_database(admin_username, admin_password, logger): </span><span class="cx"> """creates database tables and inserts administrative user upon installation.""" </span><span class="cx"> import zblog.database.tables </span><del>- if zblog.database.tables.db != engine: - reload(zblog.database.tables) </del><span class="cx"> e = engine.echo </span><span class="cx"> engine.echo=True </span><span class="cx"> engine.logger=logger </span><span class="cx"> zblog.database.tables.create_tables() </span><span class="cx"> import zblog.domain.user as user </span><span class="cx"> import zblog.database.mappers as mapper </span><ins>+ mapper.start_session() </ins><span class="cx"> mapper.begin() </span><span class="cx"> try: </span><span class="cx"> u = user.User(admin_username, 'Administrator', admin_password, user.administrator) </span><ins>+ mapper.session().save(u) </ins><span class="cx"> mapper.commit() </span><span class="cx"> finally: </span><span class="cx"> engine.echo = e </span></span></pre></div> <a id="zblogtrunklibzblogdatabasemapperspy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/database/mappers.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/database/mappers.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/database/mappers.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -1,5 +1,6 @@ </span><span class="cx"> """mapper.py - defines mappers for domain objects, mapping operations""" </span><span class="cx"> </span><ins>+import zblog.database </ins><span class="cx"> import zblog.database.tables as tables </span><span class="cx"> import zblog.domain.user as user </span><span class="cx"> from zblog.domain.blog import * </span><span class="lines">@@ -102,8 +103,8 @@ </span><span class="cx"> uses a mapper that does not lazy load replies or parents, and instead </span><span class="cx"> organizes comments into a hierarchical tree when the result is produced. </span><span class="cx"> """ </span><del>- mapper = Comment.mapper.options(noload('replies'), noload('parent')) - comments = mapper.select_by(post_id=post.id) </del><ins>+ q = query(Comment).options(noload('replies'), noload('parent')) + comments = q.select_by(post_id=post.id) </ins><span class="cx"> result = [] </span><span class="cx"> d = {} </span><span class="cx"> for c in comments: </span><span class="lines">@@ -119,31 +120,18 @@ </span><span class="cx"> </span><span class="cx"> Comment.find_by_post = staticmethod(find_by_post) </span><span class="cx"> </span><del>-# define a bunch of convenience methods on the objectstore. </del><ins>+trans = util.ThreadLocal() </ins><span class="cx"> </span><span class="cx"> def start_session(): </span><del>- """clears the objectstore, so that when a new user request is handled, all data will be - loaded from the database completely, and anything left over from the previous session - is removed. Clearing the objectstore is a thread-local operation.""" - objectstore.clear() - -# keep track of transaction token in a thread local. -# this is a compatibility hack since SQLAlchemy recently -# changed its begin/commit style to return this tranasctional token -# and the code is not keeping track of it, so we track it here -# within our own begin/commit -trans = util.ThreadLocal() </del><ins>+ """creates a new session for the start of a request.""" + trans.session = create_session(bind_to=zblog.database.engine) </ins><span class="cx"> </span><del>-def begin(): - """begins a transaction with the objectstore.""" - trans.t = objectstore.begin() </del><ins>+def session(): + return trans.session + +def query(class_): + return trans.session.query(class_) </ins><span class="cx"> </span><del>-def commit(): - """commits a transaction with the objectstore. everything modified since the last - begin() is updated in the database.""" - print "\n\n------------------------------\n\n" - trans.t.commit() </del><ins>+def flush(): + trans.session.flush() </ins><span class="cx"> </span><del>-def delete(*obj): - """marks an object (or objects) to be deleted upon the next commit().""" - objectstore.delete(*obj) </del></span></pre></div> <a id="zblogtrunklibzblogdatabasetablespy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/database/tables.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/database/tables.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/database/tables.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -1,10 +1,10 @@ </span><span class="cx"> from sqlalchemy import * </span><ins>+import zblog.database </ins><span class="cx"> </span><del>-from zblog.database import engine as db - </del><ins>+metadata = MetaData() </ins><span class="cx"> """application table metadata objects are described here.""" </span><span class="cx"> </span><del>-users = Table('users', db, </del><ins>+users = Table('users', metadata, </ins><span class="cx"> Column('user_id', Integer, primary_key=True), </span><span class="cx"> Column('user_name', String(30), nullable=False), </span><span class="cx"> Column('fullname', String(100), nullable=False), </span><span class="lines">@@ -12,14 +12,14 @@ </span><span class="cx"> Column('groupname', String(20), nullable=False), </span><span class="cx"> ) </span><span class="cx"> </span><del>-blogs = Table('blogs', db, </del><ins>+blogs = Table('blogs', metadata, </ins><span class="cx"> Column('blog_id', Integer, primary_key=True), </span><span class="cx"> Column('owner_id', Integer, ForeignKey('users.user_id'), nullable=False), </span><span class="cx"> Column('name', String(100), nullable=False), </span><span class="cx"> Column('description', String(500)) </span><span class="cx"> ) </span><span class="cx"> </span><del>-posts = Table('posts', db, </del><ins>+posts = Table('posts', metadata, </ins><span class="cx"> Column('post_id', Integer, primary_key=True), </span><span class="cx"> Column('blog_id', Integer, ForeignKey('blogs.blog_id'), nullable=False), </span><span class="cx"> Column('user_id', Integer, ForeignKey('users.user_id'), nullable=False), </span><span class="lines">@@ -29,19 +29,19 @@ </span><span class="cx"> Column('body', String), </span><span class="cx"> ) </span><span class="cx"> </span><del>-topics = Table('topics', db, </del><ins>+topics = Table('topics', metadata, </ins><span class="cx"> Column('topic_id', Integer, primary_key=True), </span><span class="cx"> Column('keyword', String(50), nullable=False), </span><span class="cx"> Column('description', String(500)) </span><span class="cx"> ) </span><span class="cx"> </span><del>-topic_xref = Table('topic_post_xref', db, </del><ins>+topic_xref = Table('topic_post_xref', metadata, </ins><span class="cx"> Column('topic_id', Integer, ForeignKey('topics.topic_id'), nullable=False), </span><span class="cx"> Column('is_primary', Boolean, nullable=False), </span><span class="cx"> Column('post_id', Integer, ForeignKey('posts.post_id'), nullable=False) </span><span class="cx"> ) </span><span class="cx"> </span><del>-comments = Table('comments', db, </del><ins>+comments = Table('comments', metadata, </ins><span class="cx"> Column('comment_id', Integer, primary_key=True), </span><span class="cx"> Column('user_id', Integer, ForeignKey('users.user_id'), nullable=False), </span><span class="cx"> Column('post_id', Integer, ForeignKey('posts.post_id'), nullable=False), </span><span class="lines">@@ -54,9 +54,5 @@ </span><span class="cx"> def create_tables(): </span><span class="cx"> """creates all application tables, used when the application is run for the </span><span class="cx"> first time.""" </span><del>- users.create() - blogs.create() - posts.create() - topics.create() - topic_xref.create() - comments.create() </del><span class="cx">\ No newline at end of file </span><ins>+ db = zblog.database.engine + metadata.create_all(engine=db) </ins></span></pre></div> <a id="zblogtrunklibzblogdomainactionspy"></a> <div class="modfile"><h4>Modified: zblog/trunk/lib/zblog/domain/actions.py (1336 => 1337)</h4> <pre class="diff"><span> <span class="info">--- zblog/trunk/lib/zblog/domain/actions.py 2006-04-25 05:44:11 UTC (rev 1336) +++ zblog/trunk/lib/zblog/domain/actions.py 2006-04-25 23:48:01 UTC (rev 1337) </span><span class="lines">@@ -6,8 +6,8 @@ </span><span class="cx"> import re, string </span><span class="cx"> import zblog </span><span class="cx"> from zblog.domain.blog import * </span><ins>+import zblog.database.mappers as mapper </ins><span class="cx"> </span><del>- </del><span class="cx"> actions = {} </span><span class="cx"> class ActionSingleton(type): </span><span class="cx"> def __call__(self): </span><span class="lines">@@ -56,7 +56,7 @@ </span><span class="cx"> if user is None: </span><span class="cx"> return False </span><span class="cx"> if blog_id and not user.is_administrator(): </span><del>- blog = Blog.mapper.get(blog_id) </del><ins>+ blog = mapper.query(Blog).get(blog_id) </ins><span class="cx"> if blog is None: </span><span class="cx"> return False </span><span class="cx"> return user.id==blog.owner.id </span><span class="lines">@@ -68,7 +68,7 @@ </span><span class="cx"> if user is None: </span><span class="cx"> return False </span><span class="cx"> if blog is None: </span><del>- blog = Blog.mapper.get(blog_id) </del><ins>+ blog = mapper.query(Blog).get(blog_id) </ins><span class="cx"> if blog is None: </span><span class="cx"> return False </span><span class="cx"> return blog.owner.id==user.id or user.is_administrator() </span><span class="lines">@@ -78,7 +78,7 @@ </span><span class="cx"> if user is None: </span><span class="cx"> return False </span><span class="cx"> if post is None: </span><del>- post = Post.mapper.get(post_id) </del><ins>+ post = mapper.query(Post).get(post_id) </ins><span class="cx"> if post is None: </span><span class="cx"> return False </span><span class="cx"> return post.user.id==user.id or user.is_administrator() or user.id==post.blog.owner.id </span></span></pre> </div> </div> </body> </html> |