opt
/
alt
/
python35
/
lib64
/
python3.5
/
site-packages
/
aiohttp
➕ New
📤 Upload
✎ Editing:
payload_streamer.py
← Back
""" Payload implemenation for coroutines as data provider. As a simple case, you can upload data from file:: @aiohttp.streamer async def file_sender(writer, file_name=None): with open(file_name, 'rb') as f: chunk = f.read(2**16) while chunk: await writer.write(chunk) chunk = f.read(2**16) Then you can use `file_sender` like this: async with session.post('http://httpbin.org/post', data=file_sender(file_name='huge_file')) as resp: print(await resp.text()) ..note:: Coroutine must accept `writer` as first argument """ import asyncio from .payload import Payload, payload_type __all__ = ('streamer',) class _stream_wrapper: def __init__(self, coro, args, kwargs): self.coro = asyncio.coroutine(coro) self.args = args self.kwargs = kwargs async def __call__(self, writer): await self.coro(writer, *self.args, **self.kwargs) class streamer: def __init__(self, coro): self.coro = coro def __call__(self, *args, **kwargs): return _stream_wrapper(self.coro, args, kwargs) @payload_type(_stream_wrapper) class StreamWrapperPayload(Payload): async def write(self, writer): await self._value(writer) @payload_type(streamer) class StreamPayload(StreamWrapperPayload): def __init__(self, value, *args, **kwargs): super().__init__(value(), *args, **kwargs) async def write(self, writer): await self._value(writer)
💾 Save Changes
Cancel
📤 Upload File
×
Select File
Upload
Cancel
➕ Create New
×
Type
📄 File
📁 Folder
Name
Create
Cancel
✎ Rename Item
×
Current Name
New Name
Rename
Cancel
🔐 Change Permissions
×
Target File
Permission (e.g., 0755, 0644)
0755
0644
0777
Apply
Cancel