PageRenderTime 64ms CodeModel.GetById 36ms RepoModel.GetById 0ms app.codeStats 0ms

/docs/tutorials/wiki2/src/views/tutorial/views.py

http://github.com/Pylons/pyramid
Python | 73 lines | 64 code | 8 blank | 1 comment | 4 complexity | d877fb77f01acdf54f05f149c80e6da8 MD5 | raw file
  1. import re
  2. from docutils.core import publish_parts
  3. from pyramid.httpexceptions import (
  4. HTTPFound,
  5. HTTPNotFound,
  6. )
  7. from pyramid.view import view_config
  8. from .models import (
  9. DBSession,
  10. Page,
  11. )
  12. # regular expression used to find WikiWords
  13. wikiwords = re.compile(r"\b([A-Z]\w+[A-Z]+\w+)")
  14. @view_config(route_name='view_wiki')
  15. def view_wiki(request):
  16. return HTTPFound(location = request.route_url('view_page',
  17. pagename='FrontPage'))
  18. @view_config(route_name='view_page', renderer='templates/view.pt')
  19. def view_page(request):
  20. pagename = request.matchdict['pagename']
  21. session = DBSession()
  22. page = session.query(Page).filter_by(name=pagename).first()
  23. if page is None:
  24. return HTTPNotFound('No such page')
  25. def check(match):
  26. word = match.group(1)
  27. exists = session.query(Page).filter_by(name=word).all()
  28. if exists:
  29. view_url = request.route_url('view_page', pagename=word)
  30. return '<a href="%s">%s</a>' % (view_url, word)
  31. else:
  32. add_url = request.route_url('add_page', pagename=word)
  33. return '<a href="%s">%s</a>' % (add_url, word)
  34. content = publish_parts(page.data, writer_name='html')['html_body']
  35. content = wikiwords.sub(check, content)
  36. edit_url = request.route_url('edit_page', pagename=pagename)
  37. return dict(page=page, content=content, edit_url=edit_url)
  38. @view_config(route_name='add_page', renderer='templates/edit.pt')
  39. def add_page(request):
  40. name = request.matchdict['pagename']
  41. if 'form.submitted' in request.params:
  42. session = DBSession()
  43. body = request.params['body']
  44. page = Page(name, body)
  45. session.add(page)
  46. return HTTPFound(location = request.route_url('view_page',
  47. pagename=name))
  48. save_url = request.route_url('add_page', pagename=name)
  49. page = Page('', '')
  50. return dict(page=page, save_url=save_url)
  51. @view_config(route_name='edit_page', renderer='templates/edit.pt')
  52. def edit_page(request):
  53. name = request.matchdict['pagename']
  54. session = DBSession()
  55. page = session.query(Page).filter_by(name=name).one()
  56. if 'form.submitted' in request.params:
  57. page.data = request.params['body']
  58. session.add(page)
  59. return HTTPFound(location = request.route_url('view_page',
  60. pagename=name))
  61. return dict(
  62. page=page,
  63. save_url = request.route_url('edit_page', pagename=name),
  64. )