Skip to content

fix(asgi): Stop duplicating scope["root_path"] in URLs#6579

Draft
alexander-alderman-webb wants to merge 15 commits into
masterfrom
webb/asgi/double-mount-prefix
Draft

fix(asgi): Stop duplicating scope["root_path"] in URLs#6579
alexander-alderman-webb wants to merge 15 commits into
masterfrom
webb/asgi/double-mount-prefix

Conversation

@alexander-alderman-webb

@alexander-alderman-webb alexander-alderman-webb commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Description

Add the path_includes_root_path boolean parameter to _get_url() and related functions.

If the parameter is True (the default), scope["path"] is considered to include scope["root_path"], where scope is the ASGI scope. Otherwise, the existing behavior that prepends scope["root_path"] when forming the url is preserved.

Add tests to each ASGI-based integration. Some are compliant with the ASGI spec in which scope["path"] includes scope["root_path"], while others are not. In particular, Starlite, LiterStar and old versions of Starlette and Quart are not compliant with the spec. In these cases, path_includes_root_path=False is set.

Issues

Closes #6577

Reminders

Comment thread sentry_sdk/integrations/_asgi_common.py
@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Codecov Results 📊

90267 passed | ❌ 24 failed | ⏭️ 6124 skipped | Total: 96415 | Pass Rate: 93.62% | Execution Time: 334m 48s

📊 Comparison with Base Branch

Metric Change
Total Tests 📉 -1109
Passed Tests 📉 -1121
Failed Tests 📈 +24
Skipped Tests 📉 -12

➕ New Tests (24)

View new tests
  • test_request_url[True-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[True-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application0]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing
  • test_request_url[False-application1]
    • File: tests.integrations.django.asgi.test_asgi
    • Status: ❌ Failing

❌ Failed Tests

test_request_url[True-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.10-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.10-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.10-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.10-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.11-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.11-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.11-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.11-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.12-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.12-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.12-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.12-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.6-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.6-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.6-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.6-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.8-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.8-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.8-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.8-django-v4.2.30
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.9-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[True-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.9-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1093: in test_request_url
    assert server_span["attributes"]["url.full"] == ("/root/nomessage")
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application0]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.9-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

test_request_url[False-application1]

File: tests.integrations.django.asgi.test_asgi
Suite: py3.9-django-v3.2.25
Error: AssertionError: assert '/root/root/nomessage' == '/root/nomessage' - /root/nomessage + /root/root/nomessage ? +++++

Stack Trace
tests/integrations/django/asgi/test_asgi.py:1101: in test_request_url
    assert event["request"]["url"] == "/root/nomessage"
E   AssertionError: assert '/root/root/nomessage' == '/root/nomessage'
E     
E     - /root/nomessage
E     + /root/root/nomessage
E     ? +++++

✅ Patch coverage is 100.00%. Project has 2411 uncovered lines.
✅ Project coverage is 89.85%. Comparing base (base) to head (head).

Files with missing lines (1)
File Patch % Lines
sentry_sdk/integrations/quart.py 100.00% ⚠️ 1 partials
Coverage diff
@@            Coverage Diff             @@
##          main       #PR       +/-##
==========================================
+ Coverage    89.85%    89.85%        —%
==========================================
  Files          192       192         —
  Lines        23758     23762        +4
  Branches      8204      8204         —
==========================================
+ Hits         21347     21351        +4
- Misses        2411      2411         —
- Partials      1344      1346        +2

Generated by Codecov Action

Comment thread tests/integrations/starlette/test_starlette.py
Comment thread tests/integrations/starlite/test_starlite.py Outdated
Comment thread tests/integrations/litestar/test_litestar.py Outdated
Comment thread sentry_sdk/integrations/asgi.py
Comment thread tests/integrations/django/asgi/test_asgi.py
@alexander-alderman-webb alexander-alderman-webb changed the title fix(asgi): Stop duplicating root_path in URLs fix(asgi): Stop duplicating scope["root_path"] in URLs Jun 19, 2026
Comment thread sentry_sdk/integrations/quart.py
@alexander-alderman-webb alexander-alderman-webb marked this pull request as ready for review June 19, 2026 12:51
@alexander-alderman-webb alexander-alderman-webb requested a review from a team as a code owner June 19, 2026 12:51
Comment thread sentry_sdk/integrations/quart.py
Comment thread sentry_sdk/integrations/quart.py

@wahajahmed010 wahajahmed010 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: #6579

Summary: Clean fix for ASGI URL duplication when scope["root_path"] is already included in scope["path"]. The approach is sound — thread a path_includes_root_path boolean through the URL construction pipeline.

✅ What works well

  • Backward compatible — default is True, preserving existing behavior for frameworks that don't include root_path in path
  • Framework-specific handling — correctly version-gated for Starlette (>=0.33), Quart (>=0.19), and hardcoded for Litestar/Starlite
  • Test coverage — all 6 integrations tested (Django ASGI, FastAPI, Litestar, Quart, Starlette, Starlite), both span streaming and static lifecycle modes
  • Clean threading — parameter flows through _get_url_get_request_data_get_request_attributes_get_transaction_name_and_source_get_segment_name_and_source

⚠️ Potential issues

  1. Django ASGI test — The test sets comm.scope["root_path"] = "/root" but Django defaults to path_includes_root_path=True. Does Django ASGI actually include root_path in path? If not, this test might pass but produce incorrect URLs in production. Worth verifying Django's ASGI behavior.
  2. No test for path_includes_root_path=False — The Starlette/FastAPI tests only exercise the True path (Starlette >= 0.33). The old behavior (False) has no dedicated test.
  3. Edge case: empty path — When path_includes_root_path=True and scope["path"] is empty, the URL would be just scheme+host with no path. Unlikely but worth noting.

Verdict

Solid PR. The core logic is correct and well-structured. The main risk is the Django default assumption — worth double-checking before merging.

Comment thread sentry_sdk/integrations/asgi.py

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a96d284. Configure here.

# From Django 5.1 onwards, ASGI request.path is taken directly from scope["path"] without prepending scope["root_path"].
# Assume that scope["path"] includes scope["root_path"] for these versions, as otherwise request.path is also incorrect.
# https://github.com/django/django/commit/bcd255cd5ca0a1e686d276cca71f45ec400d84a2
path_includes_root_path=DJANGO_VERSION >= (5, 1),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Channels middleware missing path flag

Medium Severity

The Channels (<3) SentryAsgiMiddleware still relies on the new default path_includes_root_path=True, while the main Django ASGI handler sets it from DJANGO_VERSION. On Django before 5.1, mounted root_path can be omitted from reported request URLs and span attributes.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a96d284. Configure here.

Comment thread sentry_sdk/integrations/asgi.py
@alexander-alderman-webb alexander-alderman-webb marked this pull request as draft June 23, 2026 08:32
# From Django 5.1 onwards, ASGI request.path is taken directly from scope["path"] without prepending scope["root_path"].
# Assume that scope["path"] includes scope["root_path"] for these versions, as otherwise request.path is also incorrect.
# https://github.com/django/django/commit/bcd255cd5ca0a1e686d276cca71f45ec400d84a2
path_includes_root_path=DJANGO_VERSION >= (5, 1),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test_request_url fails on Django < 5.1 due to incorrect root_path setup

The new test_request_url test sets scope["path"] = "/root/nomessage" with scope["root_path"] = "/root" (path already includes root_path), but only skips for Django < 3.0. On Django < 5.1, path_includes_root_path=False causes the URL to be constructed as root_path + path = "/root/root/nomessage", which will fail the assertion == "/root/nomessage". Consider adding @pytest.mark.skipif(django.VERSION < (5, 1), ...) or adding a separate test case for the pre-5.1 path format.

Evidence
  • Line 103 sets path_includes_root_path=DJANGO_VERSION >= (5, 1), so Django < 5.1 gets False.
  • _get_url with path_includes_root_path=False constructs URL as root_path + path (/root + /root/nomessage = /root/root/nomessage).
  • tests/integrations/django/asgi/test_asgi.py:1078 sets comm.scope["root_path"] = "/root" with request path /root/nomessage — a Django 5.1+ style where path already contains root_path.
  • The test asserts url.full == "/root/nomessage" but has no skipif django.VERSION < (5, 1) guard, only skipif django.VERSION < (3, 0).
  • Test would fail on Django 3.x–4.x where the code path produces /root/root/nomessage.
Also found at 1 additional location
  • tests/integrations/django/asgi/test_asgi.py:1093-1101

Identified by Warden code-review · GNZ-9Q4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ASGI integration doubles the mount prefix in request.url for Starlette Mounted sub-apps (root_path + path)

3 participants