Last active
February 28, 2016 20:36
-
-
Save stevepiercy/72fdba095587d77096ce to your computer and use it in GitHub Desktop.
if user requests to add_page that already exists, redirect to edit_page
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cgi | |
import re | |
from docutils.core import publish_parts | |
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(route_name='view_wiki') | |
def view_wiki(request): | |
next_url = request.route_url('view_page', pagename='FrontPage') | |
return HTTPFound(location=next_url) | |
@view_config(route_name='view_page', renderer='../templates/view.jinja2', | |
permission='view') | |
def view_page(request): | |
page = request.context.page | |
def add_link(match): | |
word = match.group(1) | |
exists = request.dbsession.query(Page).filter_by(name=word).all() | |
if exists: | |
view_url = request.route_url('view_page', pagename=word) | |
return '<a href="%s">%s</a>' % (view_url, cgi.escape(word)) | |
else: | |
add_url = request.route_url('add_page', pagename=word) | |
return '<a href="%s">%s</a>' % (add_url, cgi.escape(word)) | |
content = publish_parts(page.data, writer_name='html')['html_body'] | |
content = wikiwords.sub(add_link, content) | |
edit_url = request.route_url('edit_page', pagename=page.name) | |
return dict(page=page, content=content, edit_url=edit_url) | |
@view_config(route_name='edit_page', renderer='../templates/edit.jinja2', | |
permission='edit') | |
def edit_page(request): | |
page = request.context.page | |
if 'form.submitted' in request.params: | |
page.data = request.params['body'] | |
next_url = request.route_url('view_page', pagename=page.name) | |
return HTTPFound(location=next_url) | |
return dict( | |
pagename=page.name, | |
pagedata=page.data, | |
save_url=request.route_url('edit_page', pagename=page.name), | |
) | |
@view_config(route_name='add_page', renderer='../templates/edit.jinja2', | |
permission='create') | |
def add_page(request): | |
pagename = request.context.pagename | |
if request.dbsession.query(Page).filter_by(name=pagename).count() > 0: | |
next_url = request.route_url('edit_page', pagename=pagename) | |
return HTTPFound(location=next_url) | |
if 'form.submitted' in request.params: | |
body = request.params['body'] | |
page = Page(name=pagename, data=body) | |
page.creator = request.user | |
request.dbsession.add(page) | |
next_url = request.route_url('view_page', pagename=pagename) | |
return HTTPFound(location=next_url) | |
save_url = request.route_url('add_page', pagename=pagename) | |
return dict(pagename=pagename, pagedata='', save_url=save_url) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment