o
    RÊÆh'  ã                   @   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                   @   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   úe/var/www/html/HyperOracle/crypto_trader/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   r   r   r   Ú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   3   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   2   s    r   c                   @   s   e Zd Zdeddfdd„ZdS )ÚStreamWrapperPayloadr   r   Nc                 Ã   ó   �|   |¡I d H  d S r   ©Ú_valuer   r   r   r   ÚwriteA   ó   €zStreamWrapperPayload.write)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   r+   r   r   ©Ú	__class__r   r   r   G   s    zStreamPayload.__init__r   c                 Ã   r%   r   r&   r   r   r   r   r(   J   r)   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    