U
    ;g                     @   s   d Z ddlZddlZddlmZmZmZmZ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)Any	AwaitableCallableDictTuple   )AbstractStreamWriter)Payloadpayload_type)streamerc                   @   sL   e Zd Zeded f eedf eeef ddddZ	e
ddddZdS )	_stream_wrapper.N)coroargskwargsreturnc                 C   s   t || _|| _|| _d S N)types	coroutiner   r   r   )selfr   r   r    r   X/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/payload_streamer.py__init__$   s    z_stream_wrapper.__init__writerr   c                    s    | j |f| j| 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   r   r   r   strr   r   r   r   r   r   r   r   #   s   


r   c                   @   s:   e Zd Zeded f ddddZeeedddZdS )	r   .N)r   r   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   3   s    zstreamer.__init__)r   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   2   s   r   c                   @   s0   e Zd ZeddddZd
eeeddd	ZdS )StreamWrapperPayloadNr   c                    s   |  |I d H  d S r   _valuer   r   r   r   writeA   s    zStreamWrapperPayload.writeutf-8strict)encodingerrorsr   c                 C   s   t dd S )NzUnable to decode.)	TypeError)r   r+   r,   r   r   r   decodeD   s    zStreamWrapperPayload.decode)r)   r*   )r   r   r   r   r(   r   r.   r   r   r   r   r%   ?   s   r%   c                       s8   e Zd Zeeedd fddZeddddZ  ZS )StreamPayloadN)valuer   r   r   c                    s   t  j| f|| d S r   )superr   )r   r0   r   r   	__class__r   r   r   J   s    zStreamPayload.__init__r   c                    s   |  |I d H  d S r   r&   r   r   r   r   r(   M   s    zStreamPayload.write)r   r   r   r   r   r   r(   __classcell__r   r   r2   r   r/   H   s   r/   )__doc__r   r"   typingr   r   r   r   r   abcr   payloadr	   r
   __all__r   r   r%   r/   r   r   r   r   <module>   s   