from __future__ import absolute_import from werkzeug.routing import BaseConverter from i2p2www import app from i2p2www.helpers import LazyView ####################### # Custom URL converters class LangConverter(BaseConverter): def __init__(self, url_map): super(LangConverter, self).__init__(url_map) self.regex = '(?:[a-z]{2})(-[a-z]{2})?' def to_python(self, value): parts = value.split('-') if len(parts) == 2: return parts[0] + '_' + parts[1].upper() return value def to_url(self, value): parts = value.split('_') if len(parts) == 2: return parts[0] + '-' + parts[1].lower() return value app.url_map.converters['lang'] = LangConverter ###### # URLs lazy_views = {} def url(url_rule, import_name, **options): if import_name in lazy_views: view = lazy_views[import_name] else: view = LazyView('i2p2www.' + import_name) lazy_views[import_name] = view app.add_url_rule(url_rule, view_func=view, **options) url('/', 'views.main_index') url('//', 'views.site_show', defaults={'page': 'index'}) url('//', 'views.site_show') url('/spec', 'spec.views.spec_index') url('/spec/', 'spec.views.spec_show') url('/spec/.txt', 'spec.views.spec_show_txt') url('/spec/proposals', 'spec.views.proposal_index') url('/spec/proposals/', 'spec.views.proposal_number') url('/spec/proposals/', 'spec.views.proposal_show') url('/spec/proposals/.txt', 'spec.views.proposal_show_txt') url('//papers/', 'anonbib.views.papers_list') url('//papers/bibtex', 'anonbib.views.papers_bibtex') url('//papers/by-', 'anonbib.views.papers_list') url('//papers/tag//', 'anonbib.views.papers_list') url('//papers/tag//bibtex', 'anonbib.views.papers_bibtex') url('//papers/tag//by-', 'anonbib.views.papers_list') url('//blog/', 'blog.views.blog_index', defaults={'page': 1}) url('//blog/page/', 'blog.views.blog_index') url('//blog/category/', 'blog.views.blog_index', defaults={'page': 1}) url('//blog/category//page/', 'blog.views.blog_index') url('//blog/post/', 'blog.views.blog_post') url('//feed/blog/rss', 'blog.views.blog_rss') url('//feed/blog/atom', 'blog.views.blog_atom') url('//feed/blog/category//atom', 'blog.views.blog_atom') url('/b/', 'blog.views.blog_post_shortlink') url('//meetings/', 'meetings.views.meetings_index', defaults={'page': 1}) url('//meetings/page/', 'meetings.views.meetings_index') url('//meetings/', 'meetings.views.meetings_show') url('//meetings/.log', 'meetings.views.meetings_show_log') url('//meetings/.rst', 'meetings.views.meetings_show_rst') url('//feed/meetings/atom', 'meetings.views.meetings_atom') url('//browser', 'browser.browser_frontpage') url('//browser/intro', 'browser.browser_intro') url('//browser/faq', 'browser.browser_faq') url('//browser/known_issues', 'browser.browser_known_issues') url('//browser/troubleshooting', 'browser.browser_troubleshooting') url('//browser/releasenotes', 'browser.browser_releasenotes') url('//browser/roadmap', 'browser.browser_roadmap') url('//browser/updating', 'browser.browser_updating') url('//browser/download', 'browser.browser_download') url('//browser/donate', 'browser.browser_donate') url('//browser/develop', 'browser.browser_develop') url('//download', 'downloads.downloads_list') url('//download/debian', 'downloads.downloads_debian') url('//download/docker', 'downloads.downloads_docker') url('//download/windows', 'downloads.downloads_windows') url('//download/macos', 'downloads.downloads_macos') url('//download/easyinstall', 'downloads.downloads_easyinstall') url('//download/nsis', 'downloads.downloads_easyinstall') url('//download/firefox', 'downloads.downloads_firefox') url('//download/config', 'downloads.downloads_config') url('//download/lab', 'downloads.downloads_lab') url('//download/mac', 'downloads.downloads_mac') url('//download///mirrors', 'downloads.downloads_select') url('//download///any//download', 'downloads.downloads_redirect', defaults={'protocol': None, 'domain': None}) url('//download////any//download', 'downloads.downloads_redirect', defaults={'domain': None}) url('//download//////download', 'downloads.downloads_redirect') url('/meeting', 'legacy.legacy_meeting') url('/meeting.html', 'legacy.legacy_meeting') url('/status---', 'legacy.legacy_status') url('/status---.html', 'legacy.legacy_status') url('/release-_', 'legacy.legacy_release') url('/release-_.html', 'legacy.legacy_release') url('/release-/', 'legacy.legacy_release') url('/release-.html', 'legacy.legacy_release') url('/_', 'legacy.legacy_show') url('/_.html', 'legacy.legacy_show') url('//', 'legacy.legacy_show') url('/.html', 'legacy.legacy_show') url('/.txt', 'legacy.legacy_show') url('/hosts.txt', 'views.hosts') url('/robots.txt', 'views.robots') url('/favicon.ico', 'views.favicon') url('/googleadcf8b9c9f4ff24f.html', 'views.google') url('/BingSiteAuth.xml', 'views.bing') url('/sitemap_index.xml', 'sitemap.render_sitemap_index') url('//sitemap.xml', 'sitemap.render_sitemap')