summaryrefslogtreecommitdiff
path: root/docs/tutorials/wiki/src
diff options
context:
space:
mode:
Diffstat (limited to 'docs/tutorials/wiki/src')
-rw-r--r--docs/tutorials/wiki/src/views/tutorial/views/__init__.py0
-rw-r--r--docs/tutorials/wiki/src/views/tutorial/views/default.py60
-rw-r--r--docs/tutorials/wiki/src/views/tutorial/views/notfound.py7
3 files changed, 67 insertions, 0 deletions
diff --git a/docs/tutorials/wiki/src/views/tutorial/views/__init__.py b/docs/tutorials/wiki/src/views/tutorial/views/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/docs/tutorials/wiki/src/views/tutorial/views/__init__.py
diff --git a/docs/tutorials/wiki/src/views/tutorial/views/default.py b/docs/tutorials/wiki/src/views/tutorial/views/default.py
new file mode 100644
index 000000000..dfc42c96a
--- /dev/null
+++ b/docs/tutorials/wiki/src/views/tutorial/views/default.py
@@ -0,0 +1,60 @@
+from docutils.core import publish_parts
+import re
+
+from pyramid.httpexceptions import HTTPFound
+from pyramid.view import view_config
+
+from .models import Page
+
+# regular expression used to find WikiWords
+wikiwords = re.compile(r"\b([A-Z]\w+[A-Z]+\w+)")
+
+@view_config(context='.models.Wiki')
+def view_wiki(context, request):
+ return HTTPFound(location=request.resource_url(context, 'FrontPage'))
+
+@view_config(context='.models.Page', renderer='templates/view.pt')
+def view_page(context, request):
+ wiki = context.__parent__
+
+ def check(match):
+ word = match.group(1)
+ if word in wiki:
+ page = wiki[word]
+ view_url = request.resource_url(page)
+ return '<a href="%s">%s</a>' % (view_url, word)
+ else:
+ add_url = request.application_url + '/add_page/' + word
+ return '<a href="%s">%s</a>' % (add_url, word)
+
+ content = publish_parts(context.data, writer_name='html')['html_body']
+ content = wikiwords.sub(check, content)
+ edit_url = request.resource_url(context, 'edit_page')
+ return dict(page=context, content=content, edit_url=edit_url)
+
+@view_config(name='add_page', context='.models.Wiki',
+ renderer='templates/edit.pt')
+def add_page(context, request):
+ pagename = request.subpath[0]
+ if 'form.submitted' in request.params:
+ body = request.params['body']
+ page = Page(body)
+ page.__name__ = pagename
+ page.__parent__ = context
+ context[pagename] = page
+ return HTTPFound(location=request.resource_url(page))
+ save_url = request.resource_url(context, 'add_page', pagename)
+ page = Page('')
+ page.__name__ = pagename
+ page.__parent__ = context
+ return dict(page=page, save_url=save_url)
+
+@view_config(name='edit_page', context='.models.Page',
+ renderer='templates/edit.pt')
+def edit_page(context, request):
+ if 'form.submitted' in request.params:
+ context.data = request.params['body']
+ return HTTPFound(location=request.resource_url(context))
+
+ return dict(page=context,
+ save_url=request.resource_url(context, 'edit_page'))
diff --git a/docs/tutorials/wiki/src/views/tutorial/views/notfound.py b/docs/tutorials/wiki/src/views/tutorial/views/notfound.py
new file mode 100644
index 000000000..728791d0a
--- /dev/null
+++ b/docs/tutorials/wiki/src/views/tutorial/views/notfound.py
@@ -0,0 +1,7 @@
+from pyramid.view import notfound_view_config
+
+
+@notfound_view_config(renderer='../templates/404.pt')
+def notfound_view(request):
+ request.response.status = 404
+ return {}