B `6@sdZddlZddlZddlmZmZmZmZmZddl m Z ddl m Z m Z dZGdd d ZGd d d Ze eGd d d e Ze eGdddeZdS)al 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 N)Any AwaitableCallableDictTuple)AbstractStreamWriter)Payload payload_type)streamerc@sLeZdZededfeedfeeefddddZ e ddddZ dS) _stream_wrapper.N)coroargskwargsreturncCst||_||_||_dS)N)types coroutiner rr)selfr rrrs/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/aiohttp/payload_streamer.py__init__#s z_stream_wrapper.__init__)writerrcs |j|f|j|jIdHdS)N)r rr)rrrrr__call__-sz_stream_wrapper.__call__) __name__ __module__ __qualname__rrrrrstrrrrrrrrr "s   r c@s:eZdZededfddddZeeedddZdS) r .N)r rcCstjdtdd||_dS)Nz5@streamer is deprecated, use async generators instead) stacklevel)warningswarnDeprecationWarningr )rr rrrr2s zstreamer.__init__)rrrcOst|j||S)N)r r )rrrrrrr:szstreamer.__call__) rrrrrrrr rrrrrr 1sr c@seZdZeddddZdS)StreamWrapperPayloadN)rrcs||IdHdS)N)_value)rrrrrwrite@szStreamWrapperPayload.write)rrrrr$rrrrr">sr"cs8eZdZeeeddfdd ZeddddZZS) StreamPayloadN)valuerrrcstj|f||dS)N)superr)rr&rr) __class__rrrFszStreamPayload.__init__)rrcs||IdHdS)N)r#)rrrrrr$IszStreamPayload.write)rrrrrrr$ __classcell__rr)r(rr%Dsr%)__doc__rrtypingrrrrrabcrpayloadr r __all__r r r"r%rrrrs