o
    .jS                     @  s   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	 d dl
mZ ddlmZ d	d
lmZmZ G dd dedZG dd dZdS )    )annotationsN)ABCMeta)	b64encode)Any)parse_qs   )	parse_url   )BaseResolverProtocolResolverc                   @  s    e Zd Ze		ddddZdS )ResolverFactoryNprotocolr   	specifier
str | Noneimplementationkwargsr   returnr
   c              
     s   t dd }d| jdd }|r |d|dd  7 } d u r&dnd  d}zt|| d	}W n tyP } zt|  | d
| d|d }~ww t	
| fdd}	|	sft|  | d|	 d }
|
di |S )N.r   -_z._ z (w/ specifier "z") z.contrib.resolverz#cannot be loaded. Tried to import 'z1'. Did you specify a non-existent implementation?c                   s0   t | tot| to d u r| jd u p | jkS N)
isinstancetype
issubclassr
   r   )er    ^/home/thesage/.local/lib/python3.10/site-packages/urllib3_future/contrib/resolver/factories.py<lambda>+   s
   

z%ResolverFactory.new.<locals>.<lambda>zrcannot be loaded. No compatible implementation available. Make sure your implementation inherit from BaseResolver.r	   r   )__name__splitvaluereplacelower	importlibimport_moduleImportErrorNotImplementedErrorinspect
getmemberspop)r   r   r   r   package_namemodule_exprspe_msgresolver_moduler   implementationsimplementation_targetr   r   r   new   s6   

zResolverFactory.new)NN)
r   r   r   r   r   r   r   r   r   r
   )r    
__module____qualname__staticmethodr2   r   r   r   r   r      s
    r   )	metaclassc                   @  sP   e Zd ZdZ				d!d"ddZd#ddZd$ddZd%ddZed&dd Z	dS )'ResolverDescriptionz1Describe how a BaseResolver must be instantiated.Nr   r   r   r   r   serverport
int | Nonehost_patternsstrr   
typing.Anyr   Nonec                 O  s.   || _ || _|| _|| _|| _|| _|| _d S r   )r   r   r   r8   r9   r;   r   )selfr   r   r   r8   r9   r;   r   r   r   r   __init__D   s   

zResolverDescription.__init__keyr"   c                 C  s   || j |< d S r   r   )r?   rA   r"   r   r   r   __setitem__V   s   zResolverDescription.__setitem__itemboolc                 C  s
   || j v S r   rB   )r?   rD   r   r   r   __contains__Y   s   
z ResolverDescription.__contains__r
   c                 C  sV   i | j }| jr| j|d< | jr| j|d< | jr| j|d< tj| j| j| jfi |S )Nr8   r9   patterns)	r   r8   r9   r;   r   r2   r   r   r   )r?   r   r   r   r   r2   \   s   



zResolverDescription.newurlc                 C  s  t | }|j}|d u rtdd }d }d|v r#t| dd\}}t|}i }|jr1|j|d< |jrot	 |d< d|jv re|jd\}}|
d}|
d}dt| d|    |d d	< n
d
|j |d d	< |jr]t|j}	|	D ]}
|	|
 sqz|
 }t|	|
 trt|	|
 dkr|
dkrtdg }|	|
 D ]}d|v r||d q|| q||v rt|| tr|| | n|||  |||< qz|||< qz|	|
 d  
d}|
dkr|}qzd|v r|d}||v rt|| tr|| | n|||  qz|||< qzd }|dv r*|dkr'dnd}n'| r4t|}n|ddkrQ|ddkrQ|dd rQt|}|d u rX|n|||< qzg }d|v rzt|d trs|d dn|d }|d= t||||j|jg|R i |S )Nz#Given DNS url is missing a protocol+r	   pathheaders:z'"zBasic AuthorizationzBearer r   z,Only one implementation can be passed to URL,r   r   )falsetruerP   TFr    hosts)r   scheme
ValueErrortupler$   r!   r   rJ   authdictstripr   encodedecodequeryr   r   listlenextendappendisdigitintcountindexr#   floatr<   r7   hostr9   )rH   
parsed_urlschemar   r   r   r   usernamepassword
parameters	parameterparameter_insensiblevaluesr   r"   list_of_valuesvalue_convertedr;   r   r   r   from_urlm   s   












zResolverDescription.from_url)NNNN)r   r   r   r   r   r   r8   r   r9   r:   r;   r<   r   r=   r   r>   )rA   r<   r"   r=   r   r>   )rD   r<   r   rE   )r   r
   )rH   r<   r   r7   )
r    r3   r4   __doc__r@   rC   rF   r2   r5   rp   r   r   r   r   r7   A   s    


r7   )
__future__r   r%   r)   typingabcr   base64r   r   urllib.parser   utilr   	protocolsr
   r   r   r7   r   r   r   r   <module>   s    2