3 \!X�@s^ddlZddlZddlZddlZddlZddlZyddlmZWn e k r`ddl mZYnXej d4krzddl m ZndZddlZddlmZmZmZmZdddhZeed �r�ejej�ejej�d5ZeZd7dd�ZGdd�d�ZGdd�d�Zy ejZWn(ek �r*Gdd�de e!�ZYnXGdd�dej"d�Z#ej#j$e#�Gdd�de#�Z%ej%j$e%�ddl&m'Z'e%j$e'�Gdd�de#�Z(ej(j$e(�Gdd�de(�Z)Gd d!�d!e(�Z*Gd"d#�d#e)�Z+Gd$d%�d%e)�Z,Gd&d'�d'e(�Z-Gd(d)�d)e,e+�Z.Gd*d+�d+e%�Z'Gd,d-�d-e#�Z/ej/j$e/�Gd.d/�d/ej0�Z1Gd0d1�d1e/�Z2Gd2d3�d3e2�Z3dS)8�N)� allocate_lock�win32�cygwin)�setmode)�__all__�SEEK_SET�SEEK_CUR�SEEK_END��� SEEK_HOLE�i�rTcCs~t|t�stj|�}t|tttf�s0td|��t|t�sFtd|��t|t�s\td|��|dk r|t|t� r|td|��|dk r�t|t� r�td|��t|�}|td�s�t|�t|�kr�t d|��d|k} d|k} d |k} d |k} d |k} d |k}d |k}d|k�rH| �s&| �s&| �s&| �r.t d��ddl }|j dt d�d} |�r\|�r\t d��| | | | dk�rzt d��| �p�| �p�| �p�| �s�t d��|�r�|dk �r�t d��|�r�|dk �r�t d��|�r�|dk �r�t d��t || �r�d�p�d| �rd�pd| �rd �pd| �r d �p"d| �r0d �p2d||d�}|}�yd}|dk�sh|dk�rp|j��rpd!}d}|dk�r�t}ytj|j��j}Wnttfk �r�YnX|dk�r�|}|dk�r�t d��|dk�r�|�r�|St d��| �r�t||�}n<| �s| �s| �rt||�}n| �r,t||�}n t d |��|}|�rF|St|||||�}|}||_|S|j��YnXdS)"Nzinvalid file: %rzinvalid mode: %rzinvalid buffering: %rzinvalid encoding: %rzinvalid errors: %rzaxrwb+tU�xr�w�a�+�t�b�Uz4mode U cannot be combined with 'x', 'w', 'a', or '+'rz'U' mode is deprecatedr Tz'can't have text and binary mode at oncer z)can't have read/write/append mode at oncez/must have exactly one of read/write/append modez-binary mode doesn't take an encoding argumentz+binary mode doesn't take an errors argumentz+binary mode doesn't take a newline argument�)�openerFzinvalid buffering sizezcan't have unbuffered text I/Ozunknown mode: %r�����)� isinstance�int�os�fspath�str�bytes� TypeError�set�len� ValueError�warnings�warn�DeprecationWarning�FileIO�isatty�DEFAULT_BUFFER_SIZE�fstat�fileno� st_blksize�OSError�AttributeError�BufferedRandom�BufferedWriter�BufferedReader� TextIOWrapper�mode�close)�filer2� buffering�encoding�errors�newline�closefdrZmodesZcreatingZreadingZwritingZ appendingZupdating�textZbinaryr#�raw�result�line_bufferingZbs�buffer�r?�/usr/lib64/python3.6/_pyio.py�open(s�{            >         rAc@seZdZdd�ZdS)� DocDescriptorcCs dtjS)Nz\open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True) )rA�__doc__)�self�obj�typr?r?r@�__get__�szDocDescriptor.__get__N)�__name__� __module__� __qualname__rGr?r?r?r@rB�srBc@seZdZe�Zdd�ZdS)� OpenWrappercOs t||�S)N)rA)�cls�args�kwargsr?r?r@�__new__szOpenWrapper.__new__N)rHrIrJrBrCrOr?r?r?r@rKsrKc@s eZdZdS)�UnsupportedOperationN)rHrIrJr?r?r?r@rPsrPc@s�eZdZdd�Zd5dd�Zdd�Zd6d d �Zd d �Zd Zdd�Z dd�Z dd�Z d7dd�Z dd�Z d8dd�Zdd�Zd9dd�Zedd��Zd:d d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd�IOBasecCstd|jj|f��dS)Nz%s.%s() not supported)rP� __class__rH)rD�namer?r?r@� _unsupported@szIOBase._unsupportedrcCs|jd�dS)N�seek)rT)rD�pos�whencer?r?r@rUGsz IOBase.seekcCs |jdd�S)Nrr )rU)rDr?r?r@�tellWsz IOBase.tellNcCs|jd�dS)N�truncate)rT)rDrVr?r?r@rY[szIOBase.truncatecCs |j�dS)N)� _checkClosed)rDr?r?r@�flushesz IOBase.flushFc Cs |jsz |j�Wdd|_XdS)NT)�_IOBase__closedr[)rDr?r?r@r3os z IOBase.closec Csy |j�Wn YnXdS)N)r3)rDr?r?r@�__del__zs zIOBase.__del__cCsdS)NFr?)rDr?r?r@�seekable�szIOBase.seekablecCs |j�st|dkrdn|��dS)NzFile or stream is not seekable.)r^rP)rD�msgr?r?r@�_checkSeekable�szIOBase._checkSeekablecCsdS)NFr?)rDr?r?r@�readable�szIOBase.readablecCs |j�st|dkrdn|��dS)NzFile or stream is not readable.)rarP)rDr_r?r?r@�_checkReadable�szIOBase._checkReadablecCsdS)NFr?)rDr?r?r@�writable�szIOBase.writablecCs |j�st|dkrdn|��dS)NzFile or stream is not writable.)rcrP)rDr_r?r?r@�_checkWritable�szIOBase._checkWritablecCs|jS)N)r\)rDr?r?r@�closed�sz IOBase.closedcCs|jrt|dkrdn|��dS)NzI/O operation on closed file.)rer")rDr_r?r?r@rZ�szIOBase._checkClosedcCs |j�|S)N)rZ)rDr?r?r@� __enter__�szIOBase.__enter__cGs |j�dS)N)r3)rDrMr?r?r@�__exit__�szIOBase.__exit__cCs|jd�dS)Nr*)rT)rDr?r?r@r*�sz IOBase.filenocCs |j�dS)NF)rZ)rDr?r?r@r'�sz IOBase.isattyr cs�t�d�r��fdd�}ndd�}�dkr0d �nt�t�sBtd��t�}x>�dks^t|��kr��j|��}|spP||7}|jd�rJPqJWt|�S) N�peekcs>�jd�}|sdS|jd�dp&t|�}�dkr:t|��}|S)Nr � r)rh�findr!�min)Z readahead�n)rD�sizer?r@� nreadahead�s  z#IOBase.readline..nreadaheadcSsdS)Nr r?r?r?r?r@rn�sr zsize must be an integerrrir) �hasattrrrr� bytearrayr!�read�endswithr)rDrmrn�resrr?)rDrmr@�readline�s     zIOBase.readlinecCs |j�|S)N)rZ)rDr?r?r@�__iter__szIOBase.__iter__cCs|j�}|st�|S)N)rt� StopIteration)rD�liner?r?r@�__next__ szIOBase.__next__cCsR|dks|dkrt|�Sd}g}x,|D]$}|j|�|t|�7}||kr&Pq&W|S)Nr)�list�appendr!)rDZhintrl�linesrwr?r?r@� readliness   zIOBase.readlinescCs$|j�x|D]}|j|�qWdS)N)rZ�write)rDr{rwr?r?r@� writelines#s zIOBase.writelines)r)N)N)N)N)Nr)r)N)rHrIrJrTrUrXrYr[r\r3r]r^r`rarbrcrd�propertyrerZrfrgr*r'rtrurxr|r~r?r?r?r@rQs2$         % rQ)� metaclassc@s.eZdZd dd�Zdd�Zdd�Zdd �Zd S) � RawIOBaser cCsP|dkr d}|dkr|j�St|j��}|j|�}|dkr>dS||d�=t|�S)Nr rr)�readallrp� __index__�readintor)rDrmrrlr?r?r@rq9s   zRawIOBase.readcCs8t�}x|jt�}|sP||7}qW|r0t|�S|SdS)N)rprqr(r)rDrs�datar?r?r@r�Js  zRawIOBase.readallcCs|jd�dS)Nr�)rT)rDrr?r?r@r�XszRawIOBase.readintocCs|jd�dS)Nr})rT)rDrr?r?r@r}`szRawIOBase.writeNr)r)rHrIrJrqr�r�r}r?r?r?r@r�+s r�)r&c@sHeZdZddd�Zddd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dS)�BufferedIOBaseNcCs|jd�dS)Nrq)rT)rDrmr?r?r@rq~szBufferedIOBase.readcCs|jd�dS)N�read1)rT)rDrmr?r?r@r��szBufferedIOBase.read1cCs|j|dd�S)NF)r�)� _readinto)rDrr?r?r@r��s zBufferedIOBase.readintocCs|j|dd�S)NT)r�)r�)rDrr?r?r@� readinto1�s zBufferedIOBase.readinto1cCsVt|t�st|�}|jd�}|r0|jt|��}n|jt|��}t|�}||d|�<|S)N�B)r� memoryview�castr�r!rq)rDrr�r�rlr?r?r@r��s   zBufferedIOBase._readintocCs|jd�dS)Nr})rT)rDrr?r?r@r}�s zBufferedIOBase.writecCs|jd�dS)N�detach)rT)rDr?r?r@r��szBufferedIOBase.detach)N)N) rHrIrJrqr�r�r�r�r}r�r?r?r?r@r�ms    r�c@s�eZdZdd�Zd#dd�Zdd�Zd$d d �Zd d �Zd d�Zdd�Z dd�Z e dd��Z e dd��Z e dd��Ze dd��Zdd�Zdd�Zdd �Zd!d"�ZdS)%�_BufferedIOMixincCs ||_dS)N)�_raw)rDr;r?r?r@�__init__�sz_BufferedIOMixin.__init__rcCs"|jj||�}|dkrtd��|S)Nrz#seek() returned an invalid position)r;rUr,)rDrVrWZ new_positionr?r?r@rU�sz_BufferedIOMixin.seekcCs|jj�}|dkrtd��|S)Nrz#tell() returned an invalid position)r;rXr,)rDrVr?r?r@rX�s z_BufferedIOMixin.tellNcCs$|j�|dkr|j�}|jj|�S)N)r[rXr;rY)rDrVr?r?r@rY�sz_BufferedIOMixin.truncatecCs|jrtd��|jj�dS)Nzflush of closed file)rer"r;r[)rDr?r?r@r[�sz_BufferedIOMixin.flushc Cs0|jdk r,|j r,z |j�Wd|jj�XdS)N)r;rer[r3)rDr?r?r@r3s z_BufferedIOMixin.closecCs*|jdkrtd��|j�|j}d|_|S)Nzraw stream already detached)r;r"r[r�)rDr;r?r?r@r� s  z_BufferedIOMixin.detachcCs |jj�S)N)r;r^)rDr?r?r@r^sz_BufferedIOMixin.seekablecCs|jS)N)r�)rDr?r?r@r;sz_BufferedIOMixin.rawcCs|jjS)N)r;re)rDr?r?r@resz_BufferedIOMixin.closedcCs|jjS)N)r;rS)rDr?r?r@rS!sz_BufferedIOMixin.namecCs|jjS)N)r;r2)rDr?r?r@r2%sz_BufferedIOMixin.modecCstdj|jj���dS)Nz can not serialize a '{0}' object)r�formatrRrH)rDr?r?r@� __getstate__)sz_BufferedIOMixin.__getstate__c CsJ|jj}|jj}y |j}Wntk r6dj||�SXdj|||�SdS)Nz<{}.{}>z<{}.{} name={!r}>)rRrIrJrS� Exceptionr�)rD�modnameZclsnamerSr?r?r@�__repr__-s z_BufferedIOMixin.__repr__cCs |jj�S)N)r;r*)rDr?r?r@r*9sz_BufferedIOMixin.filenocCs |jj�S)N)r;r')rDr?r?r@r'<sz_BufferedIOMixin.isatty)r)N)rHrIrJr�rUrXrYr[r3r�r^rr;rerSr2r�r�r*r'r?r?r?r@r��s          r�cs�eZdZddd�Zdd�Zdd�Zdd �Z�fd d �Zd d d �Zdd�Z dd�Z d!dd�Z dd�Z d"dd�Z dd�Zdd�Zdd�Z�ZS)#�BytesIONcCs&t�}|dk r||7}||_d|_dS)Nr)rp�_buffer�_pos)rDZ initial_bytes�bufr?r?r@r�Ds zBytesIO.__init__cCs|jrtd��|jj�S)Nz__getstate__ on closed file)rer"�__dict__�copy)rDr?r?r@r�KszBytesIO.__getstate__cCs|jrtd��t|j�S)Nzgetvalue on closed file)rer"rr�)rDr?r?r@�getvaluePszBytesIO.getvaluecCs|jrtd��t|j�S)Nzgetbuffer on closed file)rer"r�r�)rDr?r?r@� getbufferWszBytesIO.getbuffercs|jj�t�j�dS)N)r��clear�superr3)rD)rRr?r@r3^s z BytesIO.closecCst|jrtd��|dkrd}|dkr,t|j�}t|j�|jkr@dStt|j�|j|�}|j|j|�}||_t|�S)Nzread from closed filer r�r)rer"r!r�r�rkr)rDrmZnewposrr?r?r@rqbs z BytesIO.readcCs |j|�S)N)rq)rDrmr?r?r@r�psz BytesIO.read1c Cs�|jrtd��t|t�r td��t|�� }|j}WdQRX|dkrFdS|j}|t|j �krzd|t|j �}|j |7_ ||j |||�<|j|7_|S)Nzwrite to closed filez can't write str to binary streamr�) rer"rrrr��nbytesr�r!r�)rDrZviewrlrVZpaddingr?r?r@r}us  z BytesIO.writercCs�|jrtd��y |jWn,tk rD}ztd�|�WYdd}~XnX|dkrl|dkrdtd|f��||_nD|dkr�td|j|�|_n(|dkr�tdt|j�|�|_ntd��|jS)Nzseek on closed filezan integer is requiredrznegative seek position %rr r zunsupported whence value) rer"r�r-rr��maxr!r�)rDrVrW�errr?r?r@rU�s  z BytesIO.seekcCs|jrtd��|jS)Nztell on closed file)rer"r�)rDr?r?r@rX�sz BytesIO.tellcCs||jrtd��|dkr|j}nNy |jWn,tk rT}ztd�|�WYdd}~XnX|dkrltd|f��|j|d�=|S)Nztruncate on closed filezan integer is requiredrznegative truncate position %r)rer"r�r�r-rr�)rDrVr�r?r?r@rY�s  zBytesIO.truncatecCs|jrtd��dS)NzI/O operation on closed file.T)rer")rDr?r?r@ra�szBytesIO.readablecCs|jrtd��dS)NzI/O operation on closed file.T)rer")rDr?r?r@rc�szBytesIO.writablecCs|jrtd��dS)NzI/O operation on closed file.T)rer")rDr?r?r@r^�szBytesIO.seekable)N)N)r)N)rHrIrJr�r�r�r�r3rqr�r}rUrXrYrarcr^� __classcell__r?r?)rRr@r�@s     r�c@sreZdZefdd�Zdd�Zdd�Zddd �Zdd d �Zdd d�Z ddd�Z dd�Z dd�Z dd�Z ddd�ZdS)r0cCsF|j�std��tj||�|dkr,td��||_|j�t�|_dS)Nz "raw" argument must be readable.rzinvalid buffer size) rar,r�r�r"� buffer_size�_reset_read_buf�Lock� _read_lock)rDr;r�r?r?r@r��s zBufferedReader.__init__cCs |jj�S)N)r;ra)rDr?r?r@ra�szBufferedReader.readablecCsd|_d|_dS)Nr�r)� _read_buf� _read_pos)rDr?r?r@r��szBufferedReader._reset_read_bufNc Cs4|dk r|dkrtd��|j� |j|�SQRXdS)Nr zinvalid number of bytes to readr)r"r��_read_unlocked)rDrmr?r?r@rq�szBufferedReader.readc Cs�d}d}|j}|j}|dks$|dkr�|j�t|jd�rj|jj�}|dkrZ||d�pXdS||d�|S||d�g}d}x2|jj�}||kr�|}P|t|�7}|j|�q~Wdj |�p�|St|�|} || kr�|j|7_||||�S||d�g}t |j |�} xB| |k�rL|jj| �}||k�r2|}P| t|�7} |j|��q Wt || �}dj |�} | |d�|_d|_| �r�| d|�S|S)Nr�r r�r)r�Nr) r�r�r�ror;r�rqr!rz�joinr�r�rk) rDrlZ nodata_valZ empty_valuesr�rV�chunkZchunksZ current_size�availZwanted�outr?r?r@r��sN            zBufferedReader._read_unlockedrc Cs|j� |j|�SQRXdS)N)r��_peek_unlocked)rDrmr?r?r@rhszBufferedReader.peekcCsrt||j�}t|j�|j}||ks,|dkrb|j|}|jj|�}|rb|j|jd�||_d|_|j|jd�S)Nr)rkr�r!r�r�r;rq)rDrlZwantZhaveZto_readZcurrentr?r?r@r�)s   zBufferedReader._peek_unlockedc CsT|dkrtd��|dkrdS|j�(|jd�|jt|t|j�|j��SQRXdS)Nrz(number of bytes to read must be positiver�r )r"r�r�r�rkr!r�r�)rDrmr?r?r@r�4s zBufferedReader.read1c Cst|t�st|�}|jdkr dS|jd�}d}|j��x�|t|�k�rtt|j�|jt|��}|r�|j|j|j|�||||�<|j|7_||7}|t|�kr�Pt|�||j kr�|j j ||d��}|s�P||7}n|o�|s�|j d�s�P|r8|r8Pq8WWdQRX|S)Nrr�r ) rr�r�r�r�r!rkr�r�r�r;r�r�)rDr�r��writtenr�rlr?r?r@r�Fs4   "   zBufferedReader._readintocCstj|�t|j�|jS)N)r�rXr!r�r�)rDr?r?r@rXtszBufferedReader.tellc CsX|tkrtd��|j�8|dkr4|t|j�|j8}tj|||�}|j�|SQRXdS)Nzinvalid whence valuer ) �valid_seek_flagsr"r�r!r�r�r�rUr�)rDrVrWr?r?r@rUwszBufferedReader.seek)N)N)r)r)r)rHrIrJr(r�rar�rqr�rhr�r�r�rXrUr?r?r?r@r0�s  4 .r0c@sTeZdZefdd�Zdd�Zdd�Zddd �Zd d �Zd d �Z dd�Z ddd�Z dS)r/cCsF|j�std��tj||�|dkr,td��||_t�|_t�|_ dS)Nz "raw" argument must be writable.rzinvalid buffer size) rcr,r�r�r"r�rp� _write_bufr�� _write_lock)rDr;r�r?r?r@r��s zBufferedWriter.__init__cCs |jj�S)N)r;rc)rDr?r?r@rc�szBufferedWriter.writablecCs�|jrtd��t|t�r td��|j��t|j�|jkr@|j �t|j�}|jj |�t|j�|}t|j�|jkr�y |j �Wnlt k r�}zPt|j�|jkr�t|j�|j}||8}|jd|j�|_t |j |j |��WYdd}~XnX|SQRXdS)Nzwrite to closed filez can't write str to binary stream)rer"rrrr�r!r�r��_flush_unlocked�extend�BlockingIOError�errno�strerror)rDrZbeforer��eZoverager?r?r@r}�s(    "zBufferedWriter.writeNc Cs8|j�(|j�|dkr"|jj�}|jj|�SQRXdS)N)r�r�r;rXrY)rDrVr?r?r@rY�s  zBufferedWriter.truncatec Cs|j�|j�WdQRXdS)N)r�r�)rDr?r?r@r[�szBufferedWriter.flushc Cs�|jrtd��xz|jr�y|jj|j�}Wntk rDtd��YnX|dkr\ttjdd��|t |j�ksr|dkrzt d��|jd|�=qWdS)Nzflush of closed filezHself.raw should implement RawIOBase: it should not raise BlockingIOErrorz)write could not complete without blockingrz*write() returned incorrect number of bytes) rer"r�r;r}r�� RuntimeErrorr�ZEAGAINr!r,)rDrlr?r?r@r��szBufferedWriter._flush_unlockedcCstj|�t|j�S)N)r�rXr!r�)rDr?r?r@rX�szBufferedWriter.tellrc Cs8|tkrtd��|j�|j�tj|||�SQRXdS)Nzinvalid whence value)r�r"r�r�r�rU)rDrVrWr?r?r@rU�s zBufferedWriter.seek)N)r) rHrIrJr(r�rcr}rYr[r�rXrUr?r?r?r@r/�s  r/c@s�eZdZefdd�Zddd�Zdd�Zdd �Zdd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zedd��ZdS)�BufferedRWPaircCs<|j�std��|j�s td��t||�|_t||�|_dS)Nz#"reader" argument must be readable.z#"writer" argument must be writable.)rar,rcr0�readerr/�writer)rDr�r�r�r?r?r@r��s  zBufferedRWPair.__init__NcCs|dkr d}|jj|�S)Nr r)r�rq)rDrmr?r?r@rq�szBufferedRWPair.readcCs |jj|�S)N)r�r�)rDrr?r?r@r��szBufferedRWPair.readintocCs |jj|�S)N)r�r})rDrr?r?r@r}szBufferedRWPair.writercCs |jj|�S)N)r�rh)rDrmr?r?r@rhszBufferedRWPair.peekcCs |jj|�S)N)r�r�)rDrmr?r?r@r�szBufferedRWPair.read1cCs |jj|�S)N)r�r�)rDrr?r?r@r� szBufferedRWPair.readinto1cCs |jj�S)N)r�ra)rDr?r?r@ra szBufferedRWPair.readablecCs |jj�S)N)r�rc)rDr?r?r@rcszBufferedRWPair.writablecCs |jj�S)N)r�r[)rDr?r?r@r[szBufferedRWPair.flushc Cs z|jj�Wd|jj�XdS)N)r�r3r�)rDr?r?r@r3szBufferedRWPair.closecCs|jj�p|jj�S)N)r�r'r�)rDr?r?r@r'szBufferedRWPair.isattycCs|jjS)N)r�re)rDr?r?r@reszBufferedRWPair.closed)N)r)rHrIrJr(r�rqr�r}rhr�r�rarcr[r3r'rrer?r?r?r@r��s   r�c@sheZdZefdd�Zddd�Zdd�Zdd d �Zdd d �Zd d�Z ddd�Z dd�Z dd�Z dd�Z dS)r.cCs(|j�tj|||�tj|||�dS)N)r`r0r�r/)rDr;r�r?r?r@r�-szBufferedRandom.__init__rcCs�|tkrtd��|j�|jrJ|j� |jj|jt|j�d�WdQRX|jj||�}|j�|j �WdQRX|dkr�t d��|S)Nzinvalid whence valuer rz seek() returned invalid position) r�r"r[r�r�r;rUr�r!r�r,)rDrVrWr?r?r@rU2s$zBufferedRandom.seekcCs|jrtj|�Stj|�SdS)N)r�r/rXr0)rDr?r?r@rXCs zBufferedRandom.tellNcCs|dkr|j�}tj||�S)N)rXr/rY)rDrVr?r?r@rYIszBufferedRandom.truncatecCs |dkr d}|j�tj||�S)Nr r)r[r0rq)rDrmr?r?r@rqOszBufferedRandom.readcCs|j�tj||�S)N)r[r0r�)rDrr?r?r@r�UszBufferedRandom.readintocCs|j�tj||�S)N)r[r0rh)rDrmr?r?r@rhYszBufferedRandom.peekcCs|j�tj||�S)N)r[r0r�)rDrmr?r?r@r�]szBufferedRandom.read1cCs|j�tj||�S)N)r[r0r�)rDrr?r?r@r�aszBufferedRandom.readinto1c CsF|jr:|j�(|jj|jt|j�d�|j�WdQRXtj||�S)Nr ) r�r�r;rUr�r!r�r/r})rDrr?r?r@r}es zBufferedRandom.write)r)N)N)r)rHrIrJr(r�rUrXrYrqr�rhr�r�r}r?r?r?r@r.$s     r.cs�eZdZd0ZdZdZdZdZdZdZ d1dd�Z dd �Z d d �Z d d �Z dd�Zd2dd�Zd3dd�Zdd�Zdd�Zdd�Zefdd�Zdd�Zd4dd�Z�fd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zed,d-��Zed.d/��Z �Z!S)5r&r FNTrc Cs |jdkr*z|jrtj|j�Wdd|_Xt|t�r�sz"FileIO.__init__..rzKMust have exactly one of create/read/write/append mode and at most one plusrTrrr�O_BINARYZ O_NOINHERIT� O_CLOEXECz'Cannot use closefd=False with file namei�zexpected integer from openerzNegative file descriptorFr+rr),�_fd�_closefdrr3r�floatrrr"rr �sum�count�_created� _writable�O_EXCL�O_CREAT� _readable�O_TRUNC� _appending�O_APPEND�O_RDWR�O_RDONLY�O_WRONLY�getattrrAr,�set_inheritabler)�stat�S_ISDIR�st_mode�IsADirectoryErrorr�ZEISDIRr�r-�_blksizer(�_setmoder�rS�lseekr ) rDr4r2r9r�fd�flagsZnoinherit_flagZowned_fdZfdfstatr?r?r@r�ws�     $                    zFileIO.__init__cCsD|jdkr@|jr@|j r@ddl}|jd|ftd|d�|j�dS)Nrzunclosed file %rr )� stacklevel�source)r�r�rer#r$�ResourceWarningr3)rDr#r?r?r@r]�s  zFileIO.__del__cCstd|jj��dS)Nzcannot serialize '%s' object)rrRrH)rDr?r?r@r��szFileIO.__getstate__c Csld|jj|jjf}|jr"d|Sy |j}Wn&tk rRd||j|j|jfSXd|||j|jfSdS)Nz%s.%sz <%s [closed]>z<%s fd=%d mode=%r closefd=%r>z<%s name=%r mode=%r closefd=%r>) rRrIrJrerSr-r�r2r�)rD� class_namerSr?r?r@r��s  zFileIO.__repr__cCs|jstd��dS)NzFile not open for reading)r�rP)rDr?r?r@rbszFileIO._checkReadablecCs|jstd��dS)NzFile not open for writing)r�rP)rDr_r?r?r@rdszFileIO._checkWritablec CsP|j�|j�|dks |dkr(|j�Sytj|j|�Stk rJdSXdS)Nr)rZrbr�rrqr�r�)rDrmr?r?r@rq sz FileIO.readcCs�|j�|j�t}y6tj|jdt�}tj|j�j}||krH||d}Wnt k r^YnXt �}xnt |�|kr�t |�}|t |t�7}|t |�}ytj |j|�}Wntk r�|r�PdSX|s�P||7}qhWt|�S)Nrr )rZrbr(rr�r�rr)�st_sizer,rpr!r�rqr�r)rD�bufsizerV�endr<rlr�r?r?r@r�s4   zFileIO.readallcCs4t|�jd�}|jt|��}t|�}||d|�<|S)Nr�)r�r�rqr!)rDr�mr�rlr?r?r@r�?s  zFileIO.readintoc Cs8|j�|j�ytj|j|�Stk r2dSXdS)N)rZrdrr}r�r�)rDrr?r?r@r}Gs z FileIO.writecCs*t|t�rtd��|j�tj|j||�S)Nzan integer is required)rr�rrZrr�r�)rDrVrWr?r?r@rUUs z FileIO.seekcCs|j�tj|jdt�S)Nr)rZrr�r�r)rDr?r?r@rXesz FileIO.tellcCs2|j�|j�|dkr |j�}tj|j|�|S)N)rZrdrXr� ftruncater�)rDrmr?r?r@rYls zFileIO.truncatec s.|js*z|jrtj|j�Wdt�j�XdS)N)rer�rr3r�r�)rD)rRr?r@r3ys z FileIO.closec CsF|j�|jdkr@y |j�Wntk r8d|_YnXd|_|jS)NFT)rZ� _seekablerXr,)rDr?r?r@r^�s   zFileIO.seekablecCs|j�|jS)N)rZr�)rDr?r?r@ra�szFileIO.readablecCs|j�|jS)N)rZr�)rDr?r?r@rc�szFileIO.writablecCs|j�|jS)N)rZr�)rDr?r?r@r*�sz FileIO.filenocCs|j�tj|j�S)N)rZrr'r�)rDr?r?r@r'�sz FileIO.isattycCs|jS)N)r�)rDr?r?r@r9�szFileIO.closefdcCsJ|jr|jrdSdSn0|jr,|jr&dSdSn|jrB|jr�Z!d?d@�Z"dKdAdB�Z#edCdD��Z$dS)Lr1iNFc Cs�|dk r&t|t� r&tdt|�f��|dkrr^r��_tellingro� _has_read1� _b2cratiorcrX� _get_encoderr) rDr>r6r7r8r=� write_throughrr_�positionr?r?r@r�ws`             zTextIOWrapper.__init__cCs�dj|jj|jj�}y |j}Wntk r2YnX|dj|�7}y |j}Wntk r`YnX|dj|�7}|dj|j�S)Nz<{}.{}z name={0!r}z mode={0!r}z encoding={0!r}>)r�rRrIrJrSr�r2r6)rDr<rSr2r?r?r@r��s    zTextIOWrapper.__repr__cCs|jS)N)r)rDr?r?r@r6�szTextIOWrapper.encodingcCs|jS)N)r)rDr?r?r@r7�szTextIOWrapper.errorscCs|jS)N)r)rDr?r?r@r=�szTextIOWrapper.line_bufferingcCs|jS)N)r�)rDr?r?r@r>�szTextIOWrapper.buffercCs|jrtd��|jS)NzI/O operation on closed file.)rer"r�)rDr?r?r@r^�szTextIOWrapper.seekablecCs |jj�S)N)r>ra)rDr?r?r@ra�szTextIOWrapper.readablecCs |jj�S)N)r>rc)rDr?r?r@rc�szTextIOWrapper.writablecCs|jj�|j|_dS)N)r>r[r�r%)rDr?r?r@r[�s zTextIOWrapper.flushc Cs0|jdk r,|j r,z |j�Wd|jj�XdS)N)r>rer[r3)rDr?r?r@r3�s zTextIOWrapper.closecCs|jjS)N)r>re)rDr?r?r@re�szTextIOWrapper.closedcCs|jjS)N)r>rS)rDr?r?r@rS�szTextIOWrapper.namecCs |jj�S)N)r>r*)rDr?r?r@r*�szTextIOWrapper.filenocCs |jj�S)N)r>r')rDr?r?r@r'�szTextIOWrapper.isattycCs�|jrtd��t|t�s(td|jj��t|�}|js<|j oBd|k}|rf|jrf|j dkrf|j d|j �}|j pr|j �}|j|�}|jj|�|j r�|s�d|kr�|j�|jd�d|_|jr�|jj�|S)Nzwrite to closed filezcan't write %s to text streamr�r�r)rer"rrrrRrHr!rrrr�r r(�encoder>r}r[�_set_decoded_charsr$r!r)rDr�ZlengthZhaslf�encoderrr?r?r@r}s&      zTextIOWrapper.writecCstj|j�}||j�|_|jS)N)r��getincrementalencoderrrr )rDZ make_encoderr?r?r@r(s  zTextIOWrapper._get_encodercCs2tj|j�}||j�}|jr(t||j�}||_|S)N)r��getincrementaldecoderrrrr�rr!)rDZ make_decoderr�r?r?r@� _get_decoders    zTextIOWrapper._get_decodercCs||_d|_dS)Nr)r"r#)rD�charsr?r?r@r,)sz TextIOWrapper._set_decoded_charscCsF|j}|dkr|j|d�}n|j|||�}|jt|�7_|S)N)r#r"r!)rDrl�offsetr1r?r?r@�_get_decoded_chars.s z TextIOWrapper._get_decoded_charscCs$|j|krtd��|j|8_dS)Nz"rewind decoded_chars out of bounds)r#�AssertionError)rDrlr?r?r@�_rewind_decoded_chars8s z#TextIOWrapper._rewind_decoded_charscCs�|jdkrtd��|jr&|jj�\}}|jr<|jj|j�}n|jj|j�}| }|jj ||�}|j |�|r�t |�t |j �|_ nd|_ |jr�|||f|_| S)Nz no decoderg)r!r"r%rr&r>r�� _CHUNK_SIZErqr�r,r!r"r'r$)rD� dec_buffer� dec_flags� input_chunk�eofZ decoded_charsr?r?r@� _read_chunk>s  zTextIOWrapper._read_chunkrcCs(||d>B|d>B|d>Bt|�d>BS)N�@����)r)rDr*r8� bytes_to_feed�need_eof� chars_to_skipr?r?r@� _pack_cookiehszTextIOWrapper._pack_cookiecCsFt|d�\}}t|d�\}}t|d�\}}t|d�\}}|||||fS)Nr r<llll)�divmod)rDZbigint�restr*r8r@rArBr?r?r@�_unpack_cookiers zTextIOWrapper._unpack_cookiecCs>|jstd��|jstd��|j�|jj�}|j}|dksF|jdkrX|j rTt d��|S|j\}}|t |�8}|j }|dkr�|j ||�S|j�}�z�t|j|�}d}x�|dk�r$|jd|f�t |j|d|���} | |k�r|j�\} } | �s| }|| 8}P|t | �8}d}q�||8}|d}q�Wd}|jd|f�||} |} |dk�rZ|j | | �Sd}d}d}x�t|t |��D]v}|d7}|t |j|||d���7}|j�\}}| �r�||k�r�| |7} ||8}|dd} }}||k�rvP�qvW|t |jddd ��7}d}||k�rtd ��|j | | |||�S|j|�XdS) Nz!underlying stream is not seekablez(telling position disabled by next() callzpending decoded textrr r�r T)r�z'can't reconstruct logical file position)r�rPr%r,r[r>rXr!r$r"r4r!r#rCrrr'rr��range)rDr*r�r8Z next_inputrBZ saved_stateZ skip_bytesZ skip_backrlr�d� start_posZ start_flagsZ bytes_fedrAZ chars_decoded�ir7r?r?r@rXysv              zTextIOWrapper.tellcCs$|j�|dkr|j�}|jj|�S)N)r[rXr>rY)rDrVr?r?r@rY�szTextIOWrapper.truncatecCs*|jdkrtd��|j�|j}d|_|S)Nzbuffer is already detached)r>r"r[r�)rDr>r?r?r@r��s  zTextIOWrapper.detachc s��fdd�}�jrtd���js(td��|dkrL|dkr@td��d}�j�}|dkr�|dkrdtd ���j��jjdd�}�jd �d�_ �j r��j j �||�|S|dkr�td |f��|dkr�td |f���j��j |�\}}}}} �jj|��jd �d�_ |dk�r(�j �r(�j j �n@�j �s<|�s<| �rh�j �pJ�j ��_ �j jd |f�|d f�_ | �r��jj|�} �j�j j| |��|| f�_ t�j�| k�r�td��| �_||�|S)Nc sHy�jp�j�}Wntk r&YnX|dkr<|jd�n|j�dS)Nr)r r(rrr)r*r-)rDr?r@�_reset_encoder�s z*TextIOWrapper.seek.._reset_encoderztell on closed filez!underlying stream is not seekabler rz#can't do nonzero cur-relative seeksr z#can't do nonzero end-relative seeksrzunsupported whence (%r)znegative seek position %rr�z#can't restore logical file position)rer"r�rPrXr[r>rUr,r$r!rrFr0rrqr�r!r"r,r#) rDZcookierWrKr*rIr8r@rArBr9r?)rDr@rU�s\         zTextIOWrapper.seekcCs�|j�|dkrd}|jp |j�}y |jWn,tk rX}ztd�|�WYdd}~XnX|dkr�|j�|j|jj �dd�}|j d�d|_ |Sd}|j|�}x6t |�|kr�| r�|j � }||j|t |��7}q�W|SdS) Nr zan integer is requiredrT)r�rFr)rbr!r0r�r-rr3r�r>rqr,r$r!r;)rDrmr�r�r<r:r?r?r@rq5 s(    zTextIOWrapper.readcCs(d|_|j�}|s$d|_|j|_t�|S)NF)r%rtr$r�rv)rDrwr?r?r@rxN szTextIOWrapper.__next__cCs�|jrtd��|dkrd }nt|t�s.td��|j�}d}|jsH|j�d}}�xR|jr�|j d|�}|dkrz|d}Pnt |�}n�|j �r|j d|�}|j d|�}|d kr�|d kr�t |�}n |d}PnL|d kr�|d}Pn8||kr�|d}Pn$||dk�r |d}Pn |d}Pn&|j |j �}|dk�r>|t |j �}P|dk�r\t |�|k�r\|}Px|j ��rv|j�r^P�q^W|j�r�||j�7}qT|jd�d|_|SqTW|dk�r�||k�r�|}|jt |�|�|d|�S) Nzread from closed filer zsize must be an integerrr�r�r rrrrr)rer"rrrr3r!r0rrjr!rrr;r"r,r$r5)rDrmrw�startrV�endposZnlposZcrposr?r?r@rtW sp          zTextIOWrapper.readlinecCs|jr|jjSdS)N)r!r�)rDr?r?r@r�� szTextIOWrapper.newlines)NNNFF)N)rrrr)N)r)N)N)%rHrIrJr6r�r�rr6r7r=r>r^rarcr[r3rerSr*r'r}r(r0r,r3r5r;rCrFrXrYr�rUrqrxrtr�r?r?r?r@r1ZsF E        * c  K  Xr1csNeZdZd�fdd� Zdd�Zdd�Zed d ��Zed d ��Zd d�Z �Z S)�StringIOrr�csftt|�jt�dd|d�|dkr(d|_|dk rbt|t�sNtdjt |�j ���|j |�|j d�dS)Nzutf-8� surrogatepass)r6r7r8Fz*initial_value must be str or None, not {0}r) r�rNr�r�rrrrr�rrHr}rU)rDZ initial_valuer8)rRr?r@r�� s  zStringIO.__init__c CsL|j�|jp|j�}|j�}|j�z|j|jj�dd�S|j|�XdS)NT)r�) r[r!r0rrr�r>r�r)rDr�Z old_stater?r?r@r�� szStringIO.getvaluecCs tj|�S)N)�objectr�)rDr?r?r@r�� szStringIO.__repr__cCsdS)Nr?)rDr?r?r@r7� szStringIO.errorscCsdS)Nr?)rDr?r?r@r6� szStringIO.encodingcCs|jd�dS)Nr�)rT)rDr?r?r@r�� szStringIO.detach)rr�) rHrIrJr�r�r�rr7r6r�r�r?r?)rRr@rN� s    rN>rri r)rrNNNTN)4r�abcr�r�r��sys�_threadrr�rZ _dummy_thread�platformZmsvcrtrr��iorrrr r�ro�addr � SEEK_DATAr(r�rArBrKrPr-r,r"�ABCMetarQ�registerr��_ior&r�r�r�r0r/r�r.r�r�r�r1rNr?r?r?r@�st      T   =   g iCZIJUA U^