diff --git a/datasette/app.py b/datasette/app.py index b8a5e23d38..8df8daa766 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -10,6 +10,7 @@ import threading import traceback import urllib.parse +import uuid from concurrent import futures from pathlib import Path @@ -856,13 +857,15 @@ async def route_path(self, scope, receive, send, path): base_url = self.ds.config("base_url") if base_url != "/" and path.startswith(base_url): path = "/" + path[len(base_url) :] + # Add a correlation ID + scope_modifications = {"correlation_id": str(uuid.uuid4())} # Apply force_https_urls, if set if ( self.ds.config("force_https_urls") and scope["type"] == "http" and scope.get("scheme") != "https" ): - scope = dict(scope, scheme="https") + scope_modifications["scheme"] = "https" # Handle authentication actor = None for actor in pm.hook.actor_from_request( @@ -874,7 +877,10 @@ async def route_path(self, scope, receive, send, path): actor = await actor if actor: break - return await super().route_path(dict(scope, actor=actor), receive, send, path) + scope_modifications["actor"] = actor + return await super().route_path( + dict(scope, **scope_modifications), receive, send, path + ) async def handle_404(self, scope, receive, send, exception=None): # If URL has a trailing slash, redirect to URL without it