from django.contrib import admin from django.urls import path, include from django.conf import settings from django.conf.urls.static import static from django.views.static import serve from accounts import views as accounts_views from django.views.generic import TemplateView from .views import HomeView, SearchView from . import views from autocomplete import urls as autocomplete_urls import os # Import API documentation views try: from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView, SpectacularRedocView HAS_SPECTACULAR = True except ImportError: HAS_SPECTACULAR = False # Import enhanced health check views try: from core.views.health_views import HealthCheckAPIView, PerformanceMetricsView, SimpleHealthView HAS_HEALTH_VIEWS = True except ImportError: HAS_HEALTH_VIEWS = False urlpatterns = [ path("admin/", admin.site.urls), # Main app URLs path("", HomeView.as_view(), name="home"), # Autocomplete URLs (must be before other URLs) path("ac/", autocomplete_urls), # API Documentation URLs path("api/schema/", SpectacularAPIView.as_view(), name="schema") if HAS_SPECTACULAR else path("", lambda r: None), path("api/docs/", SpectacularSwaggerView.as_view(url_name="schema"), name="swagger-ui") if HAS_SPECTACULAR else path("", lambda r: None), path("api/redoc/", SpectacularRedocView.as_view(url_name="schema"), name="redoc") if HAS_SPECTACULAR else path("", lambda r: None), # Health Check URLs path("health/", include("health_check.urls")), path("health/api/", HealthCheckAPIView.as_view(), name="health-api") if HAS_HEALTH_VIEWS else path("", lambda r: None), path("health/simple/", SimpleHealthView.as_view(), name="health-simple") if HAS_HEALTH_VIEWS else path("", lambda r: None), path("health/metrics/", PerformanceMetricsView.as_view(), name="health-metrics") if HAS_HEALTH_VIEWS else path("", lambda r: None), # API URLs (before app URLs to avoid conflicts) path("api/v1/", include("parks.api.urls", namespace="parks_api")), path("api/v1/", include("rides.api.urls", namespace="rides_api")), path("api/v1/map/", include("core.urls.map_urls", namespace="map_api")), # Map API URLs # Parks and Rides URLs path("parks/", include("parks.urls", namespace="parks")), # Global rides URLs path("rides/", include("rides.urls", namespace="rides")), # Operators URLs path("operators/", include("parks.urls", namespace="operators")), # Other URLs path("photos/", include("media.urls", namespace="photos")), # Add photos URLs path("search/", include("core.urls.search", namespace="search")), path("maps/", include("core.urls.maps", namespace="maps")), # Map HTML views path( "terms/", TemplateView.as_view(template_name="pages/terms.html"), name="terms" ), path( "privacy/", TemplateView.as_view(template_name="pages/privacy.html"), name="privacy", ), # Custom authentication URLs first (to override allauth defaults) path("accounts/", include("accounts.urls")), # Default allauth URLs (for social auth and other features) path("accounts/", include("allauth.urls")), path( "accounts/email-required/", accounts_views.email_required, name="email_required" ), # User profile URLs path( "user//", accounts_views.ProfileView.as_view(), name="user_profile", ), path( "profile//", accounts_views.ProfileView.as_view(), name="profile" ), path("settings/", accounts_views.SettingsView.as_view(), name="settings"), # Redirect /user/ to the user's profile if logged in path("user/", accounts_views.user_redirect_view, name="user_redirect"), # Moderation URLs - placed after other URLs but before static/media serving path("moderation/", include("moderation.urls", namespace="moderation")), path( "env-settings/", views***REMOVED***ironment_and_settings_view, name="environment_and_settings", ), ] # Serve static files in development if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # Development monitoring URLs try: import debug_toolbar urlpatterns = [ path('__debug__/', include(debug_toolbar.urls)), ] + urlpatterns except ImportError: pass try: import silk urlpatterns += [path('silk/', include('silk.urls', namespace='silk'))] except ImportError: pass # Serve test coverage reports in development coverage_dir = os.path.join(settings.BASE_DIR, 'tests', 'coverage_html') if os.path.exists(coverage_dir): urlpatterns += [ path('coverage/', serve, { 'document_root': coverage_dir, 'path': 'index.html' }), path('coverage/', serve, { 'document_root': coverage_dir, }), ] handler404 = "thrillwiki.views.handler404" handler500 = "thrillwiki.views.handler500"