summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-07-14 20:46:19 +0000
committerChris McDonough <chrism@agendaless.com>2008-07-14 20:46:19 +0000
commit4ba8c2852312cc9e7d82c0c4ceb09d370e21ddf8 (patch)
tree1697ebf6a64fca05d63952feb1059bbe42a833c4
parent4bbd6a3d08c64471e23adaf6e566709e0ceaf480 (diff)
downloadpyramid-4ba8c2852312cc9e7d82c0c4ceb09d370e21ddf8.tar.gz
pyramid-4ba8c2852312cc9e7d82c0c4ceb09d370e21ddf8.tar.bz2
pyramid-4ba8c2852312cc9e7d82c0c4ceb09d370e21ddf8.zip
Really allow views to be functions.
-rw-r--r--repoze/bfg/sampleapp/configure.zcml2
-rw-r--r--repoze/bfg/sampleapp/templates/blog_entry.pt2
-rw-r--r--repoze/bfg/sampleapp/templates/blog_entry_add.pt8
-rw-r--r--repoze/bfg/sampleapp/views.py8
-rw-r--r--repoze/bfg/wsgiadapter.py12
5 files changed, 21 insertions, 11 deletions
diff --git a/repoze/bfg/sampleapp/configure.zcml b/repoze/bfg/sampleapp/configure.zcml
index e026a12f2..374a93090 100644
--- a/repoze/bfg/sampleapp/configure.zcml
+++ b/repoze/bfg/sampleapp/configure.zcml
@@ -18,7 +18,7 @@
permission="repoze.view"
/>
- <!-- the add template for a BlogEntry -->
+ <!-- the add view for a BlogEntry -->
<bfg:view
for=".models.IBlog"
factory=".views.blog_entry_add_view"
diff --git a/repoze/bfg/sampleapp/templates/blog_entry.pt b/repoze/bfg/sampleapp/templates/blog_entry.pt
index 830876525..6614e4950 100644
--- a/repoze/bfg/sampleapp/templates/blog_entry.pt
+++ b/repoze/bfg/sampleapp/templates/blog_entry.pt
@@ -6,7 +6,7 @@
<p><a href="..">Up</a></p>
<h1>${title}</h1>
<p>by ${author}</p>
- <div tal:content="structure info.body"></div>
+ <div tal:content="structure body"></div>
</div>
</body>
</html>
diff --git a/repoze/bfg/sampleapp/templates/blog_entry_add.pt b/repoze/bfg/sampleapp/templates/blog_entry_add.pt
index 101163b44..f06042c03 100644
--- a/repoze/bfg/sampleapp/templates/blog_entry_add.pt
+++ b/repoze/bfg/sampleapp/templates/blog_entry_add.pt
@@ -9,16 +9,16 @@
<table border="0">
<tr>
<th>Title</th>
- <td><input type="text" name="title"/>${title}</td>
+ <td><input type="text" name="title" tal:attributes="value title"/></td>
</tr>
<tr>
<th>Author</th>
- <td><input type="text" name="author"/>${author}</td>
+ <td><input type="text" name="author" tal:attributes="value author"/></td>
</tr>
<tr>
<th>Body</th>
- <td><textarea name="body" rows="10" cols="80"> ${body}</textarea
- ></td>
+ <td><textarea name="body" rows="10" cols="80" tal:content="body"
+ ></textarea></td>
</tr>
<tr>
<td><input type="submit" name="form.submitted" value="Add"/></td>
diff --git a/repoze/bfg/sampleapp/views.py b/repoze/bfg/sampleapp/views.py
index ba68317f4..23e0cf020 100644
--- a/repoze/bfg/sampleapp/views.py
+++ b/repoze/bfg/sampleapp/views.py
@@ -22,8 +22,8 @@ def blog_default_view(context, request):
}
)
- return render_template('templates/blog.pt', name=context.__name__,
- entries=entrydata)
+ return render_template('templates/blog.pt', name=context.__name__,
+ entries=entrydata)
def blog_entry_default_view(context, request):
info = {
@@ -67,8 +67,8 @@ def blog_entry_add_view(context, request):
new_entry = BlogEntry(name, title, body, author)
context[name] = new_entry
return HTTPFound(location='/')
- else:
- return render_template('templates/blog_entry_add.pt', **info)
+
+ return render_template('templates/blog_entry_add.pt', **info)
def contents_view(context, request):
return render_template('templates/contents.pt', context=context)
diff --git a/repoze/bfg/wsgiadapter.py b/repoze/bfg/wsgiadapter.py
index 16effe1a5..9b35c6aa2 100644
--- a/repoze/bfg/wsgiadapter.py
+++ b/repoze/bfg/wsgiadapter.py
@@ -15,6 +15,13 @@ class IViewSecurityPolicy(Interface):
otherwise it should return a WSGI application representing an
unauthorized view"""
+def isResponse(ob):
+ if ( hasattr(ob, 'app_iter') and hasattr(ob, 'headerlist') and
+ hasattr(ob, 'status') ):
+ if ( hasattr(ob.app_iter, '__iter__') and
+ hasattr(ob.headerlist, '__iter__') ):
+ return True
+
class NaiveWSGIViewAdapter:
classProvides(IWSGIApplicationFactory)
implements(IWSGIApplication)
@@ -44,7 +51,10 @@ class NaiveWSGIViewAdapter:
'start_response':start_response,
}
- response = mapply(view, positional = (), keyword = kwdict)
+ if isResponse(view):
+ response = view
+ else:
+ response = mapply(view, positional = (), keyword = kwdict)
if not catch_response:
catch_response = (response.status, response.headerlist)
start_response(*catch_response)