U
    ÁùÌ^!  ã                   @   sR   d dl mZ d dlmZmZ ddlmZmZ dd„ Zdd„ Z	d	d
„ Z
ddd„ZdS )é    ©Úunpack)ÚBytesIOÚbé   )ÚdumpsÚloadsc                 C   s   t d| ƒd S )Nz<ir   r   )Údata© r
   ú</var/www/rag/env/lib/python3.8/site-packages/bson/network.pyÚ	_bintoint	   s    r   c                 C   s   t |ƒ}|  |¡ dS )z-
        Atomically send a BSON message.
    N)r   Úsendall)ÚselfÚobjr	   r
   r
   r   Úsendobj   s    r   c                 C   sN   |   d¡}|dkrdS t| ¡ ƒ}|   |d |¡}|dkr>dS t| ¡ ƒ}|S )zÑ
        Atomic read of a BSON message.

        This function either returns a dict, None, or raises a socket error.

        If the return value is None, it means the socket is closed by the other side.
    é   N)Ú	recvbytesr   Úgetvaluer   )r   Úsock_bufZmessage_lengthÚretvalr
   r
   r   Úrecvobj   s    
r   Nc                 C   sn   |dkrt ƒ }d}||k rj|  t|| dƒ¡}t|ƒ}t|ƒtkrJt|ƒ}|dk rVdS ||7 }| |¡ q|S )a  
        Atomic read of bytes_needed bytes.

        This function either returns exactly the nmber of bytes requested in a
        StringIO buffer, None, or raises a socket error.

        If the return value is None, it means the socket is closed by the other side.
    Nr   i €  r   )r   ÚrecvÚminÚlenÚtypeÚstrr   Úwrite)r   Zbytes_neededr   Zbytes_countÚchunkÚ
part_countr
   r
   r   r   *   s    	r   )N)Ústructr   Úsixr   r   Ú r   r   r   r   r   r   r
   r
   r
   r   Ú<module>   s   