a
    a                     @   s   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 ddlmZ ed	Zed
dG dd dZG dd deZe ZdS )z&Defines any IO utilities used by isort    N)contextmanager)BytesIOStringIOTextIOWrapper)Path)AnyCallableIteratorTextIOUnion)	dataclass)UnsupportedEncodings.   ^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)T)frozenc                   @   s   e Zd ZU eed< eed< eed< eeeef e	g e
f edddZeeed ddd	Zeed
ddZeeeef edddZeeeeef ed  dddZdS )Filestreampathencoding)filenamereadlinereturnc                 C   s0   zt |d W S  ty*   t| Y n0 d S )Nr   )tokenizedetect_encoding	Exceptionr   )r   r    r   'lib/python3.9/site-packages/isort/io.pyr      s    zFile.detect_encoding)contentsr   r   c                 C   s2   t |t| dj}t t| t| |dS )Nzutf-8r   r   r   )r   r   r   encoder   r   r   resolve)r   r   r   r   r   r   from_contents   s    zFile.from_contents)r   c                 C   s   | j jdS )N.)r   suffixlstrip)selfr   r   r   	extension#   s    zFile.extension)r   r   c                 C   s`   t | d}z4t| |j}|d t||ddd}d|_|W S  tyZ   |   Y n0 dS )z`Open a file in read only mode using the encoding detected by
        detect_encoding().
        rbr   T )line_bufferingnewlinerN)	openr   r   r   seekr   moder   close)r   bufferr   textr   r   r   _open'   s    

z
File._openc                 c   sX   t |  }d }z0t|}t|||jdV  W |d urT|  n|d urR|  0 d S )Nr   )r   r   r   r0   r   r-   )r   Z	file_pathr   r   r   r   read7   s    

z	File.readN)__name__
__module____qualname__r
   __annotations__r   strstaticmethodr   r   bytesr   r   propertyr$   r   r0   r   r	   r1   r   r   r   r   r      s   
$r   c                   @   s   e Zd ZeeddddZdS )_EmptyION)argskwargsr   c                 O   s   d S )Nr   )r#   r;   r<   r   r   r   writeE   s    z_EmptyIO.write)r2   r3   r4   r   r=   r   r   r   r   r:   D   s   r:   )__doc__rer   
contextlibr   ior   r   r   pathlibr   typingr   r   r	   r
   r   Zisort._futurer   Zisort.exceptionsr   compileZ_ENCODING_PATTERNr   r:   ZEmptyr   r   r   r   <module>   s   
4