wce'dZddlZddlZddlmZmZmZmZmZddl m Z ddl m Z m Z dZGdd ZGd d Ze eGd d e Ze eGddeZy)am Payload implementation 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)streamercXeZdZdededfdeedfdeeefddfdZ de ddfd Z y) _stream_wrappercoro.NargskwargsreturncTtj||_||_||_yN)types coroutinerrr)selfrrrs :/usr/lib/python3/dist-packages/aiohttp/payload_streamer.py__init__z_stream_wrapper.__init__$s" OOD)   writerctK|j|g|ji|jd{y7wr)rrrrrs r__call__z_stream_wrapper.__call__.s,dii::dkk:::s .868) __name__ __module__ __qualname__rrrrrstrrr rrrrr#s_sIdO+,CHoS#X   ;%9;d;rrc@eZdZdededfddfdZdededefdZy) r r.NrcJtjdtd||_y)Nz5@streamer is deprecated, use async generators instead) stacklevel)warningswarnDeprecationWarningr)rrs rrzstreamer.__init__3s  C   rrrc0t|j||Sr)rr)rrrs rrzstreamer.__call__;styy$77r) rr r!rrrrrrr#rrr r 2s=Xc9T?&:;8c8S8_8rr ceZdZdeddfdZy)StreamWrapperPayloadrrNcBK|j|d{y7wr_valuers rwritezStreamWrapperPayload.writeAkk&!!! )rr r!r r1r#rrr-r-?s""6"4"rr-c@eZdZdedededdffd ZdeddfdZxZS) StreamPayloadvaluerrrNc6t||g|i|yr)superr)rr6rr __class__s rrzStreamPayload.__init__Gs 24262rrcBK|j|d{y7wrr/rs rr1zStreamPayload.writeJr2r3)rr r!rrr r1 __classcell__)r9s@rr5r5Es83c3#333""6"4"rr5)__doc__rr(typingrrrrrabcr payloadr r __all__rr r-r5r#rrrAsx0 88%*  ; ; 8 8o"7"" h"(""r