-
-
Notifications
You must be signed in to change notification settings - Fork 980
Open
Labels
enhancementNew feature or requestNew feature or request
Description
We ought to support the following cases.
Raw upload content from an async file interface:
import httpx
import trio
async def main():
async with httpx.AsyncClient() as client:
async with await trio.open_file(...) as f:
client.post("https://www.example.com", content=f)
trio.run(main)Multipart file upload from an async file interface:
import httpx
import trio
async def main():
async with httpx.AsyncClient() as client:
async with await trio.open_file(...) as f:
client.post("https://www.example.com", file={"upload": f})
trio.run(main)We probably want to ensure that we're supporting both trio, anyio (Which have the same interfaces), and perhaps also `aiofiles. So eg, also supporting the following...
# Supporting the same as above but using `asyncio`, with `anyio` for the file operations.
import anyio
import asyncio
import httpx
async def main():
async with httpx.AsyncClient() as client:
async with await anyio.open_file(...) as f:
client.post("https://www.example.com", content=f)
asyncio.run(main())The content=... case is a little simpler than the data=... case, since it really just need an async variant of peek_filelike_length, and a minor update to the ._content.encode_content() function.
Also fiddly is what the type annotations ought to look like.
senpos, mattyweb, ediskandarov-cur, Mayst0731, daBrado and 13 more
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request