• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

allura


Commit MetaInfo

修订版3bd73827e847f98752873cca3b28c093137a920f (tree)
时间2010-05-22 03:09:10
作者Rick Copeland <rcopeland@geek...>
CommiterRick Copeland

Log Message

[#425] - Fix more 500 errors, fix semantics of contextmanager, trap exceptions in sidebar_menu()

更改概述

差异

--- a/pyforge/pyforge/ext/admin/admin_main.py
+++ b/pyforge/pyforge/ext/admin/admin_main.py
@@ -1,4 +1,5 @@
11 import difflib
2+import logging
23 from pprint import pformat
34 from collections import defaultdict
45 from mimetypes import guess_type
@@ -20,6 +21,8 @@ from pyforge import model as M
2021 from pyforge.lib.security import require, has_project_access
2122 from pyforge.lib.widgets import form_fields as ffw
2223
24+log = logging.getLogger(__name__)
25+
2326 class W:
2427 markdown_editor = ffw.MarkdownEdit()
2528 label_edit = ffw.LabelEdit()
@@ -70,6 +73,7 @@ class AdminApp(Application):
7073 self.templates = pkg_resources.resource_filename('pyforge.ext.admin', 'templates')
7174 self.sitemap = [ SitemapEntry('Admin','.')]
7275
76+ @h.exceptionless([], log)
7377 def sidebar_menu(self):
7478 admin_url = c.project.url()+'admin/'
7579 links = [SitemapEntry('Project'),
@@ -121,7 +125,8 @@ class ProjectAdminController(object):
121125 def overview(self):
122126 c.markdown_editor = W.markdown_editor
123127 c.label_edit = W.label_edit
124- return dict(categories=M.ProjectCategory.query.find(dict(parent_id=None)).sort('label').all())
128+ categories = M.ProjectCategory.query.find(dict(parent_id=None)).sort('label').all()
129+ return dict(categories=categories)
125130
126131 @without_trailing_slash
127132 @expose('pyforge.ext.admin.templates.project_tools')
--- a/pyforge/pyforge/ext/project_home/project_main.py
+++ b/pyforge/pyforge/ext/project_home/project_main.py
@@ -44,6 +44,7 @@ class ProjectHomeApp(Application):
4444 return [
4545 SitemapEntry('Home', '.') ]
4646
47+ @h.exceptionless([], log)
4748 def sidebar_menu(self):
4849 return [ SitemapEntry('Configure', 'configuration')]
4950
--- a/pyforge/pyforge/ext/sfx/sfx_main.py
+++ b/pyforge/pyforge/ext/sfx/sfx_main.py
@@ -135,8 +135,10 @@ def fake_pylons_context(request):
135135 pylons.c._push_object(MagicalC(EmptyClass(), environ))
136136 pylons.g._push_object(Globals())
137137 pylons.request._push_object(request)
138- yield
139- pylons.c._pop_object()
140- pylons.g._pop_object()
141- pylons.request._pop_object()
138+ try:
139+ yield
140+ finally:
141+ pylons.c._pop_object()
142+ pylons.g._pop_object()
143+ pylons.request._pop_object()
142144
--- a/pyforge/pyforge/ext/user_profile/user_main.py
+++ b/pyforge/pyforge/ext/user_profile/user_main.py
@@ -44,6 +44,7 @@ class UserProfileApp(Application):
4444 menu_id = 'User'
4545 return []
4646
47+ @h.exceptionless([], log)
4748 def sidebar_menu(self):
4849 return [ SitemapEntry('Preferences', '/auth/prefs/')]
4950
--- a/pyforge/pyforge/lib/custom_middleware.py
+++ b/pyforge/pyforge/lib/custom_middleware.py
@@ -172,9 +172,11 @@ def fake_pylons_context(request):
172172 pylons.c._push_object(MagicalC(EmptyClass(), environ))
173173 pylons.g._push_object(Globals())
174174 pylons.request._push_object(request)
175- yield
176- pylons.c._pop_object()
177- pylons.g._pop_object()
178- pylons.request._pop_object()
175+ try:
176+ yield
177+ finally:
178+ pylons.c._pop_object()
179+ pylons.g._pop_object()
180+ pylons.request._pop_object()
179181
180182 on_import()
--- a/pyforge/pyforge/lib/helpers.py
+++ b/pyforge/pyforge/lib/helpers.py
@@ -77,11 +77,14 @@ def push_config(obj, **kw):
7777 except AttributeError:
7878 new_attrs.append(k)
7979 setattr(obj, k, v)
80- yield obj
81- for k,v in saved_attrs.iteritems():
82- setattr(obj, k, v)
83- for k in new_attrs:
84- delattr(obj, k)
80+ try:
81+ yield obj
82+ finally:
83+ for k,v in saved_attrs.iteritems():
84+ setattr(obj, k, v)
85+ for k in new_attrs:
86+ delattr(obj, k)
87+
8588
8689 def mixin_reactors(cls, module, prefix=None):
8790 'attach the reactor-decorated functions in module to the given class'
@@ -117,15 +120,17 @@ def push_context(project_id, mount_point=None, app_config_id=None):
117120 project = getattr(c, 'project', ())
118121 app = getattr(c, 'app', ())
119122 set_context(project_id, mount_point, app_config_id)
120- yield
121- if project == ():
122- del c.project
123- else:
124- c.project = project
125- if app == ():
126- del c.app
127- else:
128- c.app = app
123+ try:
124+ yield
125+ finally:
126+ if project == ():
127+ del c.project
128+ else:
129+ c.project = project
130+ if app == ():
131+ del c.app
132+ else:
133+ c.app = app
129134
130135 def encode_keys(d):
131136 '''Encodes the unicode keys of d, making the result
--- a/pyforge/pyforge/model/project.py
+++ b/pyforge/pyforge/model/project.py
@@ -221,6 +221,7 @@ class Project(MappedClass):
221221 labels = FieldProperty([str])
222222 last_updated = FieldProperty(datetime, if_missing=None)
223223
224+ @h.exceptionless([], log)
224225 def sidebar_menu(self):
225226 from pyforge.app import SitemapEntry
226227 result = []
--- a/pyforge/pyforge/pastetemplates/forgeapp/+package+/main.py_tmpl
+++ b/pyforge/pyforge/pastetemplates/forgeapp/+package+/main.py_tmpl
@@ -52,6 +52,7 @@ class {{egg}}App(Application):
5252 return [
5353 SitemapEntry(menu_id, '.')[self.sidebar_menu()] ]
5454
55+ @h.exceptionless([], log)
5556 def sidebar_menu(self):
5657 return [
5758 SitemapEntry('Home', '.'),