
    ~_	                         d Z ddlZddlZddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZmZmZmZ ddlmZ  ej&                  d      Z G d	 d
e      Z G d de      Z e       Zy)z&Defines any IO utilities used by isort    N)contextmanager)BytesIOStringIOTextIOWrapper)Path)CallableIterator
NamedTupleTextIOUnion)UnsupportedEncodings.   ^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)c                       e Zd ZU eed<   eed<   eed<   ededeg e	f   fd       Z
edededd fd	       Zed
        Zed        Zeedeeef   ded    fd              Zy)Filestreampathencodingfilenamereadlinec                 d    	 t        j                  |      d   S # t        $ r t        |       w xY w)Nr   )tokenizedetect_encoding	Exceptionr   )r   r   s     */usr/lib/python3/dist-packages/isort/io.pyr   zFile.detect_encoding   s7    	0++H5a88 	0%h//	0s    /contentsreturnc                     t         j                  |t        | j                  d            j                        }t        t        |       t        |      j                         |      S )Nzutf-8)r   r   )r   r   r   encoder   r   r   resolve)r   r   r   s      r   from_contentszFile.from_contents   sJ    '''(//':R2S2\2\]HX&T(^-C-C-EPXYY    c                 L    | j                   j                  j                  d      S )N.)r   suffixlstrip)selfs    r   	extensionzFile.extension   s    yy&&s++r    c                     t        | d      }	 t        j                  | |j                        }|j	                  d       t        ||dd      }d|_        |S # t        $ r |j                           w xY w)z`Open a file in read only mode using the encoding detected by
        detect_encoding().
        rbr   T )line_bufferingnewliner)	openr   r   r   seekr   moder   close)r   bufferr   texts       r   _openz
File._open#   sn    
 h%	++HfooFHKKN $PRSDDIK 	LLN	s   AA A2c              #      K   t        |       j                         }d }	 t        j                  |      }t        |||j                         ||j                          y y # ||j                          w w xY ww)N)r   r   r   )r   r   r   r3   r   r0   )r   	file_pathr   s      r   readz	File.read3   sm      N**,		ZZ	*Ff9vOO! "v! "s   A:/A" A:"A77A:N)__name__
__module____qualname__r   __annotations__r   strstaticmethodr   bytesr   r   propertyr&   r3   r   r   r	   r6    r    r   r   r      s    N
JM0# 0"e)1D 0 0 Z Zs Zv Z Z , ,   uS$Y' HV,<   r    r   c                       e Zd Zd Zy)_EmptyIOc                      y )Nr?   )r%   argskwargss      r   writez_EmptyIO.writeA   s    r    N)r7   r8   r9   rE   r?   r    r   rA   rA   @   s    r    rA   )__doc__rer   
contextlibr   ior   r   r   pathlibr   typingr   r	   r
   r   r   isort.exceptionsr   compile_ENCODING_PATTERNr   rA   Emptyr?   r    r   <module>rP      sW    , 	  % / /  @ @ 0BJJQR /: /dx 
 	
r    