Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reuse Request's body buffer for call_next in BaseHTTPMiddleware #1692
Reuse Request's body buffer for call_next in BaseHTTPMiddleware #1692
Changes from 1 commit
ec38227
a3ba02c
96d5b49
f913447
84c84f0
b4d5a79
fcc9fa9
9162cb3
1e60d98
68efb83
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't need to be here, does it? Can it be in the same place it was instantiated before, or am I missing something?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The next line references this. It, maybe, can be moved to where it was before but at the very least it will need a new variable name like
outer_request
to differentiate it from therequest: Request
on line 95. It makes more sense to just move it up here, there is no harm in that.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this change is needed? The
_CachedRequest
doesn't change the value ofself._stream_consumed
. 🤔There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test
test_read_request_stream_in_dispatch_after_app_calls_body
fails without this logic.Hmm... Why the
more_body
doesn't matter? Like, not considering theBaseHTTPMiddleware
, why themore_body
doesn't matter to exit?Hmmm... If we receive 2 chunks of body, how this works? It doesn't look like we have a test that covers standalone
Request
with multiple chunks. 🤔There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or am I missing something?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We really should have tests for
Request
as a standalone thing since it is a standalone thing in the public API and... I've been encouraging people to use it e.g. in ASGI middleware.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We do, we just don't cover what I mention
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll add it. If you already prototyped it out in your head or on paper please comment it here and save me a few min haha.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't recall how to do it from the TestClient's POV, but I thought about sending a stream with 2 chunks. Maybe you can use httpx directly if you can't do it with the TestClient.
I guess that would be enough to break this logic here, since the value of stream_consumed will not change
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok yes, you were right, I did have a bug, good catch. I still need to modify
Request
a bit, I added a couple of tests to explain why. TLDR is we were marking the stream as consumed as soon as you callstream()
but in reality you can call stream, get one message and then call steam again before it is consumed. Let me know if it's clear now.