bg'dZddlZddlZddlmZmZmZmZmZddl m Z ddl m Z m Z dZGdd ZGd d Ze eGd d e Ze eGddeZdS)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)streamercreZdZdededfdeedfdeeefddfdZ de ddfd Z dS) _stream_wrappercoro.NargskwargsreturncTtj||_||_||_dSN)types coroutinerrr)selfrrrs O/opt/cloudlinux/venv/lib64/python3.11/site-packages/aiohttp/payload_streamer.py__init__z_stream_wrapper.__init__$s' OD))   writercLK|j|g|jRi|jd{VdSr)rrrrrs r__call__z_stream_wrapper.__call__.sDdi::::dk:::::::::::r) __name__ __module__ __qualname__rrrrrstrrr rrrrr#ssIdO+,CHoS#X   ;%9;d;;;;;;rrcNeZdZdededfddfdZdededefdZdS) r r.NrcLtjdtd||_dS)Nz5@streamer is deprecated, use async generators instead) stacklevel)warningswarnDeprecationWarningr)rrs rrzstreamer.__init__3s1 C      rrrc.t|j||Sr)rr)rrrs rrzstreamer.__call__;sty$777r) rr r!rrrrrrr#rrr r 2smXc9T?&:;8c8S8_888888rr ceZdZdeddfdZdS)StreamWrapperPayloadrrNc@K||d{VdSr_valuers rwritezStreamWrapperPayload.writeA0kk&!!!!!!!!!!!r)rr r!r r1r#rrr-r-?s7""6"4""""""rr-c@eZdZdedededdffd ZdeddfdZxZS) StreamPayloadvaluerrrNcRtj|g|Ri|dSr)superr)rr5rr __class__s rrzStreamPayload.__init__Gs624222622222rrc@K||d{VdSrr/rs rr1zStreamPayload.writeJr2r)rr r!rrr r1 __classcell__)r8s@rr4r4Es|3c3#33333333""6"4""""""""rr4)__doc__rr(typingrrrrrabcr payloadr r __all__rr r-r4r#rrr@sY0 88888888888888%%%%%%********  ; ; ; ; ; ; ; ; 8 8 8 8 8 8 8 8o"""""7""" h"""""("""""r