urls.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. # Copyright 2013 The Distro Tracker Developers
  2. # See the COPYRIGHT file at the top-level directory of this distribution and
  3. # at http://deb.li/DTAuthors
  4. #
  5. # This file is part of Distro Tracker. It is subject to the license terms
  6. # in the LICENSE file found in the top-level directory of this
  7. # distribution and at http://deb.li/DTLicense. No part of Distro Tracker,
  8. # including this file, may be copied, modified, propagated, or distributed
  9. # except according to the terms contained in the LICENSE file.
  10. """The URL routes for the Distro Tracker project."""
  11. from __future__ import unicode_literals
  12. import importlib
  13. from django.conf.urls import include, url
  14. from django.conf import settings
  15. from django.shortcuts import redirect
  16. from django.views.generic import TemplateView
  17. from distro_tracker.core.views import legacy_package_url_redirect
  18. from distro_tracker.core.views import legacy_rss_redirect
  19. from distro_tracker.core.views import news_page
  20. from distro_tracker.core.views import package_page
  21. from distro_tracker.core.views import package_page_redirect
  22. from distro_tracker.core.views import PackageSearchView, PackageAutocompleteView
  23. from distro_tracker.core.views import OpenSearchDescription
  24. from distro_tracker.core.views import ActionItemJsonView, ActionItemView
  25. from distro_tracker.core.views import KeywordsView
  26. from distro_tracker.core.views import CreateTeamView
  27. from distro_tracker.core.views import TeamDetailsView
  28. from distro_tracker.core.views import DeleteTeamView
  29. from distro_tracker.core.views import UpdateTeamView
  30. from distro_tracker.core.views import AddPackageToTeamView
  31. from distro_tracker.core.views import RemovePackageFromTeamView
  32. from distro_tracker.core.views import JoinTeamView
  33. from distro_tracker.core.views import LeaveTeamView
  34. from distro_tracker.core.views import TeamListView
  35. from distro_tracker.core.views import ManageTeamMembers
  36. from distro_tracker.core.views import RemoveTeamMember
  37. from distro_tracker.core.views import AddTeamMember
  38. from distro_tracker.core.views import ConfirmMembershipView
  39. from distro_tracker.core.views import SetMuteTeamView
  40. from distro_tracker.core.views import SetMembershipKeywords
  41. from distro_tracker.core.views import EditMembershipView
  42. from distro_tracker.core.views import IndexView
  43. from distro_tracker.core.views import PackageNews
  44. from distro_tracker.core.news_feed import PackageNewsFeed
  45. from distro_tracker.accounts.views import ConfirmAddAccountEmail
  46. from distro_tracker.accounts.views import LoginView
  47. from distro_tracker.accounts.views import AccountMergeFinalize
  48. from distro_tracker.accounts.views import RegisterUser
  49. from distro_tracker.accounts.views import ManageAccountEmailsView
  50. from distro_tracker.accounts.views import ForgotPasswordView
  51. from distro_tracker.accounts.views import ResetPasswordView
  52. from distro_tracker.accounts.views import RegistrationConfirmation
  53. from distro_tracker.accounts.views import AccountProfile
  54. from distro_tracker.accounts.views import SubscriptionsView
  55. from distro_tracker.accounts.views import UserEmailsView
  56. from distro_tracker.accounts.views import SubscribeUserToPackageView
  57. from distro_tracker.accounts.views import LogoutView
  58. from distro_tracker.accounts.views import UnsubscribeUserView
  59. from distro_tracker.accounts.views import UnsubscribeAllView
  60. from distro_tracker.accounts.views import ChooseSubscriptionEmailView
  61. from distro_tracker.accounts.views import ChangePersonalInfoView
  62. from distro_tracker.accounts.views import PasswordChangeView
  63. from distro_tracker.accounts.views import ModifyKeywordsView
  64. from distro_tracker.accounts.views import AccountMergeConfirmView
  65. from distro_tracker.accounts.views import AccountMergeConfirmedView
  66. from django.contrib import admin
  67. admin.autodiscover()
  68. urlpatterns = [
  69. # Redirects for the old PTS package page URLs
  70. url(r'^(?P<package_hash>(lib)?.)/(?P<package_name>(\1).+)\.html$',
  71. legacy_package_url_redirect),
  72. # Permanent redirect for the old RSS URL
  73. url(r'^(?P<package_hash>(lib)?.)/(?P<package_name>(\1).+)'
  74. '/news\.rss20\.xml$',
  75. legacy_rss_redirect),
  76. url(r'^search$', PackageSearchView.as_view(),
  77. name='dtracker-package-search'),
  78. url(r'^search.xml$', OpenSearchDescription.as_view(),
  79. name='dtracker-opensearch-description'),
  80. url(r'^favicon.ico$',
  81. lambda r: redirect(settings.STATIC_URL + 'favicon.ico'),
  82. name='dtracker-favicon'),
  83. url(r'^api/package/search/autocomplete$', PackageAutocompleteView.as_view(),
  84. name='dtracker-api-package-autocomplete'),
  85. url(r'^api/action-items/(?P<item_pk>\d+)$', ActionItemJsonView.as_view(),
  86. name='dtracker-api-action-item'),
  87. url(r'^api/keywords/$', KeywordsView.as_view(),
  88. name='dtracker-api-keywords'),
  89. url(r'^admin/', include(admin.site.urls)),
  90. url(r'^news/(?P<news_id>\d+)$', news_page,
  91. name='dtracker-news-page'),
  92. url(r'^action-items/(?P<item_pk>\d+)$', ActionItemView.as_view(),
  93. name='dtracker-action-item'),
  94. url(r'^$', IndexView.as_view(), name='dtracker-index'),
  95. # Account related URLs
  96. url(r'^accounts/register/$', RegisterUser.as_view(),
  97. name='dtracker-accounts-register'),
  98. url(r'^accounts/\+reset-password/\+success/$',
  99. TemplateView.as_view(
  100. template_name='accounts/password-reset-success.html'),
  101. name='dtracker-accounts-password-reset-success'),
  102. url(r'^accounts/\+reset-password/(?P<confirmation_key>.+)/$',
  103. ResetPasswordView.as_view(),
  104. name='dtracker-accounts-reset-password'),
  105. url(r'^accounts/\+forgot-password/$', ForgotPasswordView.as_view(),
  106. name='dtracker-accounts-forgot-password'),
  107. url(r'^accounts/register/success/$',
  108. TemplateView.as_view(template_name='accounts/success.html'),
  109. name='dtracker-accounts-register-success'),
  110. url(r'^accounts/\+manage-emails/$', ManageAccountEmailsView.as_view(),
  111. name='dtracker-accounts-manage-emails'),
  112. url(r'^accounts/\+confirm-new-email/(?P<confirmation_key>.+)/$',
  113. ConfirmAddAccountEmail.as_view(),
  114. name='dtracker-accounts-confirm-add-email'),
  115. url(r'^accounts/\+merge-accounts/confirm/$',
  116. AccountMergeConfirmView.as_view(),
  117. name='dtracker-accounts-merge-confirmation'),
  118. url(r'^accounts/\+merge-accounts/confirmed/$',
  119. AccountMergeConfirmedView.as_view(),
  120. name='dtracker-accounts-merge-confirmed'),
  121. url(r'^accounts/\+merge-accounts/finalize/(?P<confirmation_key>.+)/$',
  122. AccountMergeFinalize.as_view(),
  123. name='dtracker-accounts-merge-finalize'),
  124. url(r'^accounts/\+merge-accounts/finalized/$',
  125. TemplateView.as_view(
  126. template_name='accounts/accounts-merge-finalized.html'),
  127. name='dtracker-accounts-merge-finalized'),
  128. url(r'^accounts/confirm/(?P<confirmation_key>[^/]+)$',
  129. RegistrationConfirmation.as_view(),
  130. name='dtracker-accounts-confirm-registration'),
  131. url(r'^accounts/profile/$',
  132. AccountProfile.as_view(),
  133. name='dtracker-accounts-profile'),
  134. url(r'^accounts/subscriptions/$',
  135. SubscriptionsView.as_view(),
  136. name='dtracker-accounts-subscriptions'),
  137. url(r'^accounts/profile/subscriptions/choose-subscription-email/$',
  138. ChooseSubscriptionEmailView.as_view(),
  139. name='dtracker-accounts-choose-email'),
  140. url(r'^accounts/login/$', LoginView.as_view(),
  141. name='dtracker-accounts-login'),
  142. url(r'^accounts/logout/$', LogoutView.as_view(),
  143. name='dtracker-accounts-logout'),
  144. url(r'^accounts/profile/modify/$', ChangePersonalInfoView.as_view(),
  145. name='dtracker-accounts-profile-modify'),
  146. url(r'^accounts/profile/password-change/$', PasswordChangeView.as_view(),
  147. name='dtracker-accounts-profile-password-change'),
  148. url(r'^api/accounts/profile/emails/$', UserEmailsView.as_view(),
  149. name='dtracker-api-accounts-emails'),
  150. url(r'^api/accounts/profile/subscribe/$',
  151. SubscribeUserToPackageView.as_view(),
  152. name='dtracker-api-accounts-subscribe'),
  153. url(r'^api/accounts/profile/unsubscribe/$', UnsubscribeUserView.as_view(),
  154. name='dtracker-api-accounts-unsubscribe'),
  155. url(r'^api/accounts/profile/unsubscribe-all/$',
  156. UnsubscribeAllView.as_view(),
  157. name='dtracker-api-accounts-unsubscribe-all'),
  158. url(r'^api/accounts/profile/keywords/$', ModifyKeywordsView.as_view(),
  159. name='dtracker-api-accounts-profile-keywords'),
  160. url(r'^accounts/profile/keywords', ModifyKeywordsView.as_view(),
  161. name='dtracker-accounts-profile-keywords'),
  162. # Team-related URLs
  163. url(r'^teams/\+create/$', CreateTeamView.as_view(),
  164. name='dtracker-teams-create'),
  165. url(r'^teams/(?P<slug>.+)/\+delete/$', DeleteTeamView.as_view(),
  166. name='dtracker-team-delete'),
  167. url(r'^teams/\+delete-success/$',
  168. TemplateView.as_view(template_name='core/team-deleted.html'),
  169. name='dtracker-team-deleted'),
  170. url(r'^teams/(?P<slug>.+)/\+update/$', UpdateTeamView.as_view(),
  171. name='dtracker-team-update'),
  172. url(r'^teams/(?P<slug>.+)/\+add-package/$', AddPackageToTeamView.as_view(),
  173. name='dtracker-team-add-package'),
  174. url(r'^teams/(?P<slug>.+)/\+remove-package/$',
  175. RemovePackageFromTeamView.as_view(),
  176. name='dtracker-team-remove-package'),
  177. url(r'^teams/(?P<slug>.+)/\+join/$', JoinTeamView.as_view(),
  178. name='dtracker-team-join'),
  179. url(r'^teams/(?P<slug>.+)/\+leave/$', LeaveTeamView.as_view(),
  180. name='dtracker-team-leave'),
  181. url(r'^teams/(?P<slug>.+)/\+add-member/$', AddTeamMember.as_view(),
  182. name='dtracker-team-add-member'),
  183. url(r'^teams/(?P<slug>.+)/\+remove-member/$', RemoveTeamMember.as_view(),
  184. name='dtracker-team-remove-member'),
  185. url(r'^teams/(?P<slug>.+)/\+manage/$', ManageTeamMembers.as_view(),
  186. name='dtracker-team-manage'),
  187. url(r'^teams/$', TeamListView.as_view(),
  188. name='dtracker-team-list'),
  189. url(r'^teams/\+confirm/(?P<confirmation_key>.+)/$',
  190. ConfirmMembershipView.as_view(),
  191. name='dtracker-team-confirm-membership'),
  192. url(r'^teams/(?P<slug>.+)/\+mute/$', SetMuteTeamView.as_view(action='mute'),
  193. name='dtracker-team-mute'),
  194. url(r'^teams/(?P<slug>.+)/\+unmute/$',
  195. SetMuteTeamView.as_view(action='unmute'),
  196. name='dtracker-team-unmute'),
  197. url(r'^teams/(?P<slug>.+)/\+set-keywords/$',
  198. SetMembershipKeywords.as_view(),
  199. name='dtracker-team-set-keywords'),
  200. url(r'^teams/(?P<slug>.+)/\+manage-membership/$',
  201. EditMembershipView.as_view(),
  202. name='dtracker-team-manage-membership'),
  203. url(r'^teams/(?P<slug>.+?)/$', TeamDetailsView.as_view(),
  204. name='dtracker-team-page'),
  205. # Package news page
  206. url(r'^pkg/(?P<package_name>.+)/news/', PackageNews.as_view(),
  207. name='dtracker-package-news'),
  208. # Dedicated package page
  209. url(r'^pkg/(?P<package_name>[^/]+)/?$', package_page,
  210. name='dtracker-package-page'),
  211. # RSS news feed
  212. url(r'^pkg/(?P<package_name>.+)/rss$', PackageNewsFeed(),
  213. name='dtracker-package-rss-news-feed'),
  214. # Uncomment the admin/doc line below to enable admin documentation:
  215. # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
  216. ]
  217. for app in settings.INSTALLED_APPS:
  218. try:
  219. urlmodule = importlib.import_module(app + '.tracker_urls')
  220. if hasattr(urlmodule, 'urlpatterns'):
  221. urlpatterns += urlmodule.urlpatterns
  222. except ImportError:
  223. pass
  224. urlpatterns += [
  225. # The package page view catch all. It must be listed *after* the admin
  226. # URL so that the admin URL is not interpreted as a package named "admin".
  227. url(r'^(?P<package_name>[^/]+)/?$', package_page_redirect,
  228. name='dtracker-package-page-redirect'),
  229. ]
  230. if settings.DJANGO_EMAIL_ACCOUNTS_USE_CAPTCHA:
  231. import captcha.urls
  232. urlpatterns += [
  233. url(r'^captcha/', include(captcha.urls)),
  234. ]
  235. if settings.DEBUG:
  236. import django.views.static
  237. urlpatterns = [
  238. url(r'^media/(?P<path>.*)$', django.views.static.serve,
  239. {'document_root': settings.MEDIA_ROOT}),
  240. url(r'^static/(?P<path>.*)$', django.views.static.serve,
  241. {'document_root': settings.STATIC_ROOT}),
  242. ] + urlpatterns