Coverage for benefits / urls.py: 74%
30 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-22 19:08 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-22 19:08 +0000
1"""
2benefits URL Configuration
4The `urlpatterns` list routes URLs to views. For more information please see:
5 https://docs.djangoproject.com/en/5.0/topics/http/urls/
6"""
8import logging
9import re
11from django.conf import settings
12from django.contrib import admin
13from django.http import HttpResponse
14from django.urls import include, path, re_path
15from django.views.static import serve
17from .core.admin.views import BenefitsPasswordResetView, BenefitsPasswordResetDoneView, BenefitsPasswordResetConfirmView
19logger = logging.getLogger(__name__)
21handler400 = "benefits.core.views.bad_request"
22handler403 = "benefits.core.views.bad_request"
23handler404 = "benefits.core.views.page_not_found"
24handler500 = "benefits.core.views.server_error"
26urlpatterns = [
27 path("", include("benefits.core.urls")),
28 path("eligibility/", include("benefits.eligibility.urls")),
29 path("enrollment/", include("benefits.enrollment.urls")),
30 path("i18n/", include("django.conf.urls.i18n")),
31 path("oauth/", include("benefits.oauth.urls")),
32 path("in_person/", include("benefits.in_person.urls")),
33 path("littlepay/", include("benefits.enrollment_littlepay.urls")),
34 path("switchio/", include("benefits.enrollment_switchio.urls")),
35]
37if settings.RUNTIME_ENVIRONMENT() == settings.RUNTIME_ENVS.LOCAL: 37 ↛ 48line 37 didn't jump to line 48 because the condition on line 37 was always true
38 # serve user-uploaded media files
39 #
40 # the helper function `django.conf.urls.static.static` mentioned in
41 # https://docs.djangoproject.com/en/5.1/howto/static-files/#serving-files-uploaded-by-a-user-during-development
42 # only works when settings.DEBUG = True, so here we add the URL pattern ourselves so it works regardless of DEBUG.
43 prefix = settings.MEDIA_URL
44 urlpatterns.extend(
45 [re_path(r"^%s(?P<path>.*)$" % re.escape(prefix.lstrip("/")), serve, {"document_root": settings.MEDIA_ROOT})]
46 )
48if settings.DEBUG: 48 ↛ 52line 48 didn't jump to line 52 because the condition on line 48 was never true
49 # based on
50 # https://docs.sentry.io/platforms/python/guides/django/#verify
52 def trigger_error(request):
53 raise RuntimeError("Test error")
55 urlpatterns.append(path("testerror/", trigger_error))
57 # simple route to read a pre-defined "secret"
58 # this "secret" does not contain sensitive information
59 # and is only configured in the dev environment for testing/debugging
61 def test_secret(request):
62 from benefits.secrets import get_secret_by_name
64 return HttpResponse(get_secret_by_name("testsecret"))
66 urlpatterns.append(path("testsecret/", test_secret))
68logger.debug("Register admin urls")
69password_reset_patterns = [
70 path(
71 "admin/password_reset/",
72 BenefitsPasswordResetView.as_view(extra_context={"site_header": admin.site.site_header}),
73 name="admin_password_reset",
74 ),
75 path(
76 "admin/password_reset/done/",
77 BenefitsPasswordResetDoneView.as_view(extra_context={"site_header": admin.site.site_header}),
78 name="password_reset_done",
79 ),
80 path(
81 "admin/password_reset/<uidb64>/<token>/",
82 BenefitsPasswordResetConfirmView.as_view(extra_context={"site_header": admin.site.site_header}),
83 name="password_reset_confirm",
84 ),
85]
86urlpatterns.extend(password_reset_patterns)
87urlpatterns.append(path("admin/", admin.site.urls))
88urlpatterns.append(path("google_sso/", include("django_google_sso.urls", namespace="django_google_sso")))