Skip to content

Instantly share code, notes, and snippets.

@stevepiercy
Last active February 28, 2016 20:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stevepiercy/72fdba095587d77096ce to your computer and use it in GitHub Desktop.
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
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