a
     ÑOc@  ã                   @   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 )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Ú	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   úO/var/www/html/gsl.tools/lib/python3.9/site-packages/aiohttp/payload_streamer.pyÚ__init__$   s    z_stream_wrapper.__init__©Úwriterr   c                 Ã   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   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                   @   s   e Zd Zeddœdd„ZdS )ÚStreamWrapperPayloadNr   c                 Ã   s   |   |¡I d H  d S r   ©Ú_valuer   r   r   r   ÚwriteA   s    zStreamWrapperPayload.write)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|ƒ g|¢R i |¤Ž d S r   )Úsuperr   )r   r*   r   r   ©Ú	__class__r   r   r   G   s    zStreamPayload.__init__r   c                 Ã   s   |   |¡I d H  d S r   r&   r   r   r   r   r(   J   s    zStreamPayload.write)r   r   r   r   r   r   r(   Ú__classcell__r   r   r,   r   r)   E   s   r)   )Ú__doc__r   r"   Útypingr   r   r   r   r   Úabcr   Úpayloadr	   r
   Ú__all__r   r   r%   r)   r   r   r   r   Ú<module>   s   