Internal scope correlation ID, refs #703

This commit is contained in:
Simon Willison 2020-06-01 08:47:16 -07:00
commit 6690d6bf7f

View file

@ -10,6 +10,7 @@ import sys
import threading
import traceback
import urllib.parse
import uuid
from concurrent import futures
from pathlib import Path
@ -856,13 +857,15 @@ class DatasetteRouter(AsgiRouter):
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 @@ class DatasetteRouter(AsgiRouter):
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