-
-
Notifications
You must be signed in to change notification settings - Fork 2k
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
Introduce session.make_request()
API
#2019
Comments
I like it |
+1 |
+1, it would be nice for my use-case (essentially, app sometimes behaves like a proxy server, so it is forced to use streaming APIs) |
This was referenced Oct 4, 2017
asvetlov
changed the title
[idea] Introduce
Introduce Nov 1, 2017
session.make_request()
APIsession.make_request()
API
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Now we support request payload streaming in a bit reverse way: we could pass a generator as
data
parameter toclient.request()
but it makes things harder because of Reverse of Control. Handling back pressure and errors in generator are complicated.Also sometimes people should pass semi-supported custom
request_class
for calculating custom headers etc.Last Trailer headers support #1652 also requires some kind of callback -- which is not elegant at least.
I suggest adding new
client.make_request(url, params, headers, ...)
method.The method returns
ClientStreamRequest
object.The request is not started at moment of creation but has headers prepared.
User could modify them without subclassing.
The request has
.connect()
coroutine for connection negotiation (it works with proxies implicitly).After connection established user calls
.send_headers()
coro, later.write()
coro several times maybe,.send_trailers()
if needed and.write_eof()
.ClientStreamRequest
API should be pretty much close toweb.StreamResponse
.All existing client API should be built around
ClientStreamRequest
calls.I pretty sure this is viable approach that might make non-trivial usages much simpler than now.
The text was updated successfully, but these errors were encountered: