o
    .ji                     @  s   U 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Z
dZded	< d
d
d
d
d
ddddddddZd
dddZd ddZd!ddZd"ddZd#ddZdS )$z>Internal resolution helpers for :mod:`urllib3.contrib.anytls`.    )annotationsN)
ModuleType)TupleURLLIB3_FUTURE_SSL_BACKEND)rtlsutlssslzTuple[str, ...]_DEFAULT_ORDERr   r   r   )r   rustlszaws-lcaws_lcawslcr   	boringsslz
boring-ssl
boring_sslr   stdlib
stdlib_sslvalue
str | Nonereturn	list[str]c                 C  sl   g }| r&|    }|tv r|t|  n|r&tjd| dt ddd tD ]}||vr3|| q(|S )zBuild the ordered list of backends to attempt.

    The user-requested backend (if any) is tried first, then the remaining
    defaults in the default order, de-duplicated.
    zUnknown value z for environment variable zI; falling back to default backend resolution order (rtls -> utls -> ssl).   )
stacklevel)striplower
_TOKEN_MAPappendwarningswarnENV_VARr	   )r   ordertokenname r!   [/home/thesage/.local/lib/python3.10/site-packages/urllib3_future/contrib/anytls/_backend.py_parse_pref(   s"   
r#   r    strModuleType | Nonec                 C  s8   zt t|  W S  ty   Y d S  ty   Y d S w )N)	importlibimport_module_IMPORT_NAMEImportError	Exception)r    r!   r!   r"   _try_importC   s   r+   backendtype | Nonec                 C  s   | dv rzt | }t|ddW S  ty   Y dS w zt d}t|dd}|dur.|W S W n	 ty8   Y nw z	ddlm} |W S  tyL   Y dS w )zBest-effort import of the Certificate type used for peer-cert chain
    extraction. rtls/utls expose it directly; for stdlib ssl, fall back to the
    private ``_ssl.Certificate`` (used by ``backend/hface.py``).
    )r   r   CertificateN_sslr   )r.   )r&   r'   getattrr)   _cffi_ssl._stdssl.certificater.   )r,   modr/   certr.   r!   r!   r"   _load_certificateN   s,   

r4   ?tuple[ModuleType | None, ModuleType | None, str, object | None]c                  C  s   zt d} W n ty   d} Y nw ttjt}d}d}|D ]}t|}|dur1|}|} nq!|du r<d| ddfS t	|}|| ||fS )z;Resolve and return (ssl, stdlib_ssl, BACKEND, Certificate).r   Nnone)
r&   r'   r)   r#   osenvirongetr   r+   r4   )r   r   chosen_name
chosen_modr    r2   certificater!   r!   r"   _resolvej   s&   r=   )r   r   r   r   )r    r$   r   r%   )r,   r$   r   r-   )r   r5   )__doc__
__future__r   r&   r7   r   typesr   typingr   r   r	   __annotations__r   r(   r#   r+   r4   r=   r!   r!   r!   r"   <module>   s<    


