o
    m=8j                     @   s   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ dZG d	d
 d
ZG dd dZeeG dd deZeeG dd deZdS )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)	AwaitableCallable)Any   )AbstractStreamWriter)Payloadpayload_type)streamerc                   @   sT   e Zd Zdeded f deedf deeef ddfddZ	d	e
ddfd
dZdS )_stream_wrappercoro.Nargskwargsreturnc                 C   s   t || _|| _|| _d S N)types	coroutiner   r   r   )selfr   r   r    r   _/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/aiohttp/payload_streamer.py__init__%   s   
z_stream_wrapper.__init__writerc                    s(   | j |g| jR i | jI d H  d S r   )r   r   r   r   r   r   r   r   __call__/   s   &z_stream_wrapper.__call__)__name__
__module____qualname__r   r   tupler   dictstrr   r   r   r   r   r   r   r
   $   s    



r
   c                   @   s@   e Zd Zdeded f ddfddZdededefd	d
ZdS )r	   r   .Nr   c                 C   s   t jdtdd || _d S )Nz5@streamer is deprecated, use async generators instead   )
stacklevel)warningswarnDeprecationWarningr   )r   r   r   r   r   r   4   s   
zstreamer.__init__r   r   c                 O   s   t | j||S r   )r
   r   )r   r   r   r   r   r   r   <   s   zstreamer.__call__)	r   r   r   r   r   r   r   r
   r   r   r   r   r   r	   3   s    r	   c                   @   s6   e Zd ZdeddfddZdded	edefd
dZdS )StreamWrapperPayloadr   r   Nc                       |  |I d H  d S r   _valuer   r   r   r   writeB      zStreamWrapperPayload.writeutf-8strictencodingerrorsc                 C   s   t d)NzUnable to decode.)	TypeError)r   r,   r-   r   r   r   decodeE   s   zStreamWrapperPayload.decode)r*   r+   )r   r   r   r   r(   r   r/   r   r   r   r   r$   @   s    r$   c                       s@   e Zd Zdedededdf fddZdeddfd	d
Z  ZS )StreamPayloadvaluer   r   r   Nc                    s    t  j| g|R i | d S r   )superr   )r   r1   r   r   	__class__r   r   r   K   s    zStreamPayload.__init__r   c                    r%   r   r&   r   r   r   r   r(   N   r)   zStreamPayload.write)r   r   r   r   r   r   r(   __classcell__r   r   r3   r   r0   I   s    r0   )__doc__r   r!   collections.abcr   r   typingr   abcr   payloadr   r   __all__r
   r	   r$   r0   r   r   r   r   <module>   s    