[Django] #35082: AsyncRequestFactory doesn't pass REMOTE_ADDR when set

27 views
Skip to first unread message

Django

unread,
Jan 2, 2024, 9:11:54 PM1/2/24
to django-...@googlegroups.com
#35082: AsyncRequestFactory doesn't pass REMOTE_ADDR when set
---------------------------------------------+------------------------
Reporter: alex | Owner: nobody
Type: Bug | Status: new
Component: Testing framework | Version: 5.0
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
---------------------------------------------+------------------------
I can describe this bug easily with an example:


{{{
from django.test import RequestFactory, AsyncRequestFactory
factory = RequestFactory()
afactory = AsyncRequestFactory()
request = factory.get("/customer/details", REMOTE_ADDR="127.0.1.1")
assert request.META["REMOTE_ADDR"] == "127.0.1.1"
request = afactory.get("/customer/details", REMOTE_ADDR="127.0.1.1")
# will fail
assert request.META["REMOTE_ADDR"] == "127.0.1.1"
}}}

I think there are some other variables also affected. I tested it only
with django 5.0.

--
Ticket URL: <https://code.djangoproject.com/ticket/35082>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Jan 2, 2024, 9:12:32 PM1/2/24
to django-...@googlegroups.com
#35082: AsyncRequestFactory doesn't pass REMOTE_ADDR when set
-----------------------------------+--------------------------------------

Reporter: alex | Owner: nobody
Type: Bug | Status: new
Component: Testing framework | Version: 5.0
Severity: Normal | Resolution:

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-----------------------------------+--------------------------------------

Comment (by alex):

Workaround: often it is enough to use RequestFactory even it is incorrect

--
Ticket URL: <https://code.djangoproject.com/ticket/35082#comment:1>

Django

unread,
Jan 2, 2024, 11:38:29 PM1/2/24
to django-...@googlegroups.com
#35082: AsyncRequestFactory doesn't pass REMOTE_ADDR when set
-----------------------------------+--------------------------------------
Reporter: alex | Owner: nobody
Type: Bug | Status: closed

Component: Testing framework | Version: 5.0
Severity: Normal | Resolution: invalid

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-----------------------------------+--------------------------------------
Changes (by Mariusz Felisiak):

* status: new => closed
* resolution: => invalid


Comment:

According to the [https://asgi.readthedocs.io/en/latest/specs/main.html
ASGI spec], `REMOTE_ADDR` is based on the `client` in the connection
scope, so you can override it with:
{{{#!python
>>> afactory = AsyncRequestFactory(client=("127.0.1.1", "88"))
>>> request = afactory.get("/somewhere")
>>> request.META["REMOTE_ADDR"]
"127.0.1.1"
}}}

If you're having trouble understanding how Django works, see
TicketClosingReasons/UseSupportChannels for ways to get help.

--
Ticket URL: <https://code.djangoproject.com/ticket/35082#comment:2>

Reply all
Reply to author
Forward
0 new messages