
    g	                         d Z ddlZddlZdZ G d dej
                        Z G d dej                        Z G d d	e      Zd
ej                  fdZ
y)zSocket file object.    Ni @  c                       e Zd ZdZd Zd Zy)BufferedWriterz-Faux file object attached to a socket object.c                    | j                          t        |t              rt        d      | j                  5  | j
                  j                  |       | j                          t        |      cddd       S # 1 sw Y   yxY w)zWrite bytes to buffer.z can't write str to binary streamN)	_checkClosed
isinstancestr	TypeError_write_lock
_write_bufextend_flush_unlockedlen)selfbs     %/opt/Tautulli/lib/cheroot/makefile.pywritezBufferedWriter.write   sg    a>?? 	OO""1%  "q6	 	 	s   6A88Bc                 .   | j                  d       | j                  rL	 | j                  j                  t	        | j                              }| j                  d |= | j                  rKy y # t
        j                  $ r}|j                  }Y d }~Bd }~ww xY w)Nzflush of closed file)r   r   rawr   bytesioBlockingIOErrorcharacters_written)r   nes      r   r   zBufferedWriter._flush_unlocked   sx    01oo) HHNN5#9: # oo
 %% )(()s   .A+ +B>BBN)__name__
__module____qualname____doc__r   r        r   r   r      s    7		$r    r   c                   L     e Zd ZdZdej
                  f fd	Z fdZd Z xZ	S )StreamReaderzSocket stream reader.rc                 \    t         |   t        j                  ||      |       d| _        y)z Initialize socket stream reader.r   N)super__init__socketSocketIO
bytes_readr   sockmodebufsize	__class__s       r   r&   zStreamReader.__init__*   s$    t4g>r    c                 b    t        |   |i |}| xj                  t        |      z  c_        |S )zCapture bytes read.)r%   readr)   r   )r   argskwargsvalr.   s       r   r0   zStreamReader.read/   s-    glD+F+3s8#
r    c                 F    t        | j                        | j                  kD  S )z.Return true if there is buffered data to read.)r   	_read_buf	_read_pos)r   s    r   has_datazStreamReader.has_data5   s    4>>"T^^33r    )
r   r   r   r   r   DEFAULT_BUFFER_SIZEr&   r0   r7   __classcell__r.   s   @r   r"   r"   '   s     "%r/E/E 
4r    r"   c                   F     e Zd ZdZdej
                  f fd	Z fdZ xZS )StreamWriterzSocket stream writer.wc                 \    t         |   t        j                  ||      |       d| _        y)z Initialize socket stream writer.r   N)r%   r&   r'   r(   bytes_writtenr*   s       r   r&   zStreamWriter.__init__=   s%    t4g>r    c                 j    t        |   |g|i |}| xj                  t        |      z  c_        |S )zCapture bytes written.)r%   r   r?   r   )r   r3   r1   r2   resr.   s        r   r   zStreamWriter.writeB   s5    gmC1$1&1c#h&
r    )	r   r   r   r   r   r8   r&   r   r9   r:   s   @r   r<   r<   :   s     "%r/E/E 
 r    r<   r#   c                 6    d|v rt         nt        } || ||      S )z(File object attached to a socket object.r#   )r"   r<   )r+   r,   r-   clss       r   MakeFilerD   I   s    +,<CtT7##r    )r   r'   _pyior   SOCK_WRITE_BLOCKSIZEr   BufferedReaderr"   r<   r8   rD   r   r    r   <module>rH      sZ        $R&& $442$$ 4&>  R%;%; $r    