o
    Zh                  
   @  s   d Z ddlmZ ddlZddlZddlZddlmZ ddlmZ ddlm	Z	 er2ddl
mZ edZe	d	ZG d
d deZejejejejejejejejejd	ZG dd dZe ZejZdddZdS )z1create errno-specific classes for IO or os calls.    )annotationsN)Callable)TYPE_CHECKING)TypeVar)	ParamSpecPRc                   @  s    e Zd ZdddZdddZdS )	Errorreturnstrc              
   C  s*   d | jj| jj| jjdtt| jS )Nz{}.{} {!r}: {}  )	format	__class__
__module____name____doc__joinmapr   args)self r   H/var/www/html/lang_env/lib/python3.10/site-packages/_pytest/_py/error.py__repr__   s   zError.__repr__c                 C  s"   d | jjdtt| j}|S )Nz[{}]: {}r   )r   r   r   r   r   r   r   )r   sr   r   r   __str__   s
   zError.__str__N)r
   r   )r   r   __qualname__r   r   r   r   r   r   r	      s    
	r	   )	                     i     c                   @  s<   e Zd ZU dZi Zded< ddd	ZdddZdddZdS )
ErrorMakerzlazily provides Exception classes for each possible POSIX errno
    (as defined per the 'errno' module).  All such instances
    subclass EnvironmentError.
    zdict[int, type[Error]]_errno2classnamer   r
   type[Error]c                 C  s8   |d dkr
t |tt|}| |}t| || |S )Nr   _)AttributeErrorgetattrerrno_geterrnoclasssetattr)r   r&   enoclsr   r   r   __getattr__<   s   

zErrorMaker.__getattr__r.   intc              
   C  s\   z| j | W S  ty-   tj|d|f }t|tfdt|d}|| j |< | Y S w )NzUnknownErrno%dzpy.error)r   r   )	r%   KeyErrorr+   	errorcodegettyper	   osstrerror)r   r.   ZclsnameZerrorclsr   r   r   r,   D   s   
zErrorMaker._geterrnoclassfuncCallable[P, R]r   P.argskwargsP.kwargsr   c                 O  s   d}z||i |W S  t y     tyL } z/t|ds |j}tjdkr:z	| t| }W n ty9   |w | |}||j	 |d}~ww )z;Call a function and raise an errno-exception if applicable.Tr+   win32N)
r	   OSErrorhasattrr+   sysplatformr,   _winerrnomapr2   r   )r   r8   r   r;   Z__tracebackhide__valuer+   r/   r   r   r   checked_callQ   s&   


zErrorMaker.checked_callN)r&   r   r
   r'   )r.   r1   r
   r'   )r8   r9   r   r:   r;   r<   r
   r   )	r   r   r   r   r%   __annotations__r0   r,   rD   r   r   r   r   r$   4   s   
 

r$   attrr   r
   r'   c                 C  s
   t t| S )N)r*   _error_maker)rF   r   r   r   r0   n   s   
r0   )rF   r   r
   r'   )r   
__future__r   r+   r6   r@   typingr   r   r   typing_extensionsr   r   r   EnvironmentErrorr	   ENOENTEEXISTZEXDEVZEBUSYENOTDIREACCESrB   r$   rG   rD   r0   r   r   r   r   <module>   s6    6