
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    'â7`6  ã                   @   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   úK/opt/alt/python38/lib64/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   2   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   1   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   Úwrite@   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|ƒ f|ž|Ž d S r   )Úsuperr   )r   r*   r   r   ©Ú	__class__r   r   r   F   s    zStreamPayload.__init__r   c                 Ã   s   |   |¡I d H  d S r   r&   r   r   r   r   r(   I   s    zStreamPayload.write)r   r   r   r   r   r   r(   Ú__classcell__r   r   r,   r   r)   D   s   r)   )Ú__doc__r   r"   Útypingr   r   r   r   r   Úabcr   Úpayloadr	   r
   Ú__all__r   r   r%   r)   r   r   r   r   Ú<module>   s   