/kai/config/routing.py

https://bitbucket.org/bbangert/kai/ · Python · 128 lines · 118 code · 4 blank · 6 comment · 1 complexity · b73924d0476d9d3b93ab9ddaf2e1d27a MD5 · raw file

  1. """Routes configuration
  2. The more specific and detailed routes should be defined first so they
  3. may take precedent over the more generic routes. For more information
  4. refer to the routes manual at http://routes.groovie.org/docs/
  5. """
  6. from routes import Mapper
  7. wiki = 'http://wiki.pylonshq.com'
  8. def article_expand(kwargs):
  9. if 'article' not in kwargs:
  10. return kwargs
  11. article = kwargs.pop('article')
  12. kwargs['year'] = article.published.year
  13. kwargs['month'] = article.published.month
  14. kwargs['slug'] = article.slug
  15. return kwargs
  16. def make_map(config):
  17. """Create, configure and return the routes Mapper"""
  18. version = config['pylons.app_globals'].current_version
  19. globs = config['pylons.app_globals']
  20. static_host = config['cdn.uri']
  21. map = Mapper(directory=config['pylons.paths']['controllers'],
  22. always_scan=config['debug'])
  23. map.minimization = False
  24. # The ErrorController route (handles 404/500 error pages); it should
  25. # likely stay at the top, ensuring it can always be resolved
  26. map.connect('/error/{action}', controller='error')
  27. map.connect('/error/{action}/{id}', controller='error')
  28. # Toppcloud sync
  29. map.connect('/sync_app', controller='home', action='sync')
  30. # Home url's
  31. map.connect('home', '/', controller='home', action='index')
  32. map.connect('/robots.txt', controller='home', action='robots')
  33. map.connect('features', '/features', controller='home', action='features')
  34. map.connect('history', '/history', controller='home', action='history')
  35. map.connect('search', '/search', controller='home', action='search')
  36. map.connect('community', '/community', controller='home', action='community')
  37. # Blog url's
  38. map.connect('article_archives', '/articles/archives/{year:\d+}/{month:\d+}/{slug}',
  39. controller='articles', action='archives', _filter=article_expand)
  40. map.resource('article', 'articles')
  41. # Code url's
  42. # map.connect('buildbot', '/buildbot/{action}', controller='buildbot')
  43. # Doc url's
  44. map.connect('doc_upload', '/docs/upload', controller='docs', action='upload')
  45. map.connect('doc_upload_image', '/docs/upload_image', controller='docs', action='upload_image')
  46. map.connect('doc_delete', '/docs/delete_revision/{project}/{version}', controller='docs', action='delete_revision')
  47. map.redirect('/docs/{version}', '/docs/en/{version}/')
  48. map.connect('doc_home', '/docs/{language}/{version}/', controller='docs', action='view', url='index', language='en',
  49. version=globs.doc_version)
  50. map.connect('doc_view', '/docs/{language}/{version}/{url:.*}', controller='docs', action='view', language='en',
  51. version=globs.doc_version)
  52. map.connect('wiki', 'http://wiki.pylonshq.com/', _static=True)
  53. map.connect('download', '/download/{version}', controller='download',
  54. action='index', version=globs.doc_version)
  55. map.connect('download', '/download/{version}/*file', controller='download',
  56. action='index', version=globs.doc_version)
  57. map.connect('/download', controller='download', action='index', version=globs.current_version)
  58. map.connect('/download/', controller='download', action='index', version=globs.current_version)
  59. map.connect('cdocs', '%s/display/pylonsdocs/{page}' % wiki, _static=True)
  60. # Accounts
  61. map.connect('account_login', '/accounts/login', controller='accounts', action='login')
  62. map.connect('account_login', '/accounts/login', controller='accounts', action='login')
  63. map.connect('account_register', '/accounts/register', controller='accounts', action='register')
  64. map.connect('account_logout', '/accounts/logout', controller='accounts', action='logout')
  65. map.connect('verify_email', '/accounts/verify_email/{token}', controller='accounts', action='verify_email')
  66. map.connect('forgot_password', '/accounts/forgot_password', controller='accounts', action='forgot_password')
  67. map.connect('reset_password', '/accounts/reset_password/{token}', controller='accounts', action='change_password')
  68. # OpenID URL's
  69. map.connect('openid_associate', '/accounts/openid/associate', controller='accounts', action='openid_associate')
  70. map.connect('openid_register', '/accounts/openid/register', controller='accounts', action='openid_register')
  71. map.connect('openid_login', '/accounts/openid/login', controller='consumer', action='login')
  72. map.connect('openid_process', '/accounts/openid/process', controller='consumer', action='process')
  73. map.connect('openid_create', '/accounts/openid/create', controller='consumer', action='create')
  74. # Snippets
  75. map.connect('preview_snippet', '/snippets/preview', controller='snippets', action='preview', conditions=dict(method='POST'))
  76. map.connect('snippet_author', '/snippets/by_author/{id}', controller='snippets', action='by_author')
  77. map.connect('snippet_tag', '/snippets/by_tag/{tag}', controller='snippets', action='by_tag')
  78. map.connect('snippet_tagcloud', '/snippets/tagcloud', controller='snippets', action='tagcloud')
  79. map.resource('snippet', 'snippets', collection={'preview':'POST'})
  80. # Pastebin
  81. map.connect('pasties_tagcloud', '/pasties/tagcloud', controller='pasties', action='tagcloud')
  82. map.connect('formatted_pasties_tag', '/pasties/by_tag/{tag}.{format:(atom|rss)}', controller='pasties', action='index')
  83. map.redirect('/pastetags/{tag}', '/pasties/by_tag/{tag}')
  84. map.connect('pasties_tag', '/pasties/by_tag/{tag}', controller='pasties', action='index')
  85. map.connect('pasties_author', '/pasties/by_author/{author}', controller='pasties', action='by_author')
  86. map.resource('paste', 'pasties', member={'download':'GET'})
  87. # Resources
  88. map.resource('traceback', 'tracebacks', member={'reown':'GET'})
  89. # Comments
  90. map.connect('preview_comment', '/comment/preview', controller='comments', action='preview', conditions=dict(method='POST'))
  91. map.connect('post_comment', '/comment/{doc_id}', controller='comments', action='create', conditions=dict(method='POST'))
  92. map.connect('delete_comment', '/comment/{id}', controller='comments', action='delete', conditions=dict(method='DELETE'))
  93. map.resource('comment', 'comments')
  94. # External Links
  95. map.connect('sqlalchemy', 'http://sqlalchemy.org/', _static=True)
  96. map.connect('sqlobject', 'http://www.sqlobject.org/', _static=True)
  97. map.connect('python-couchdb', 'http://code.google.com/p/couchdb-python/', _static=True)
  98. map.connect('formalchemy', 'http://code.google.com/p/formalchemy/', _static=True)
  99. map.connect('mako', 'http://www.makotemplates.org/', _static=True)
  100. map.connect('genshi', 'http://genshi.edgewall.org/', _static=True)
  101. map.connect('jinja2', 'http://jinja.pocoo.org/', _static=True)
  102. map.connect('pylons_book', 'http://pylonsbook.com/', _static=True)
  103. map.connect('/{controller}/{action}')
  104. map.connect('/{controller}/{action}/{id}')
  105. return map