o
     JAfF)                     @   s   	 g d Z ddlZdZdZdZee ZdZed d Zd	Zd
Z	ee e	 e Z
dddZddlZddlmZ i ZG dd dZe  G dd dZdS ))ascii_lettersascii_lowercaseascii_uppercasecapwordsdigits	hexdigits	octdigits	printablepunctuation
whitespace	FormatterTemplate    Nz 	
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789ZabcdefZABCDEF01234567z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~c                 C   s    	 |pd dd | |D S )N c                 s   s    | ]}|  V  qd S N)
capitalize).0x r   /usr/lib/python3.10/string.py	<genexpr>0   s    zcapwords.<locals>.<genexpr>)joinsplit)ssepr   r   r   r   %   s   
r   )ChainMapc                       sX   e Zd Z	 dZdZdZejZ fddZ	dd Z
dd	 Zefd
dZefddZ  ZS )r   $z(?a:[_a-z][_a-z0-9]*)Nc              	      sr   t    d| jv r| j}nt| j}| j}| jp| j}d| d| d| d| d	}t	|| j
tjB | _d S )Npatternz
            z(?:
              (?P<escaped>zC)  |   # Escape sequence of two delimiters
              (?P<named>zJ)       |   # delimiter and a Python identifier
              {(?P<braced>z)} |   # delimiter and a braced identifier
              (?P<invalid>)             # Other ill-formed delimiter exprs
            )
            )super__init_subclass____dict__r    _reescape	delimiter	idpatternbraceidpatterncompileflagsVERBOSE)clsr    delimidbid	__class__r   r   r"   E   s    

zTemplate.__init_subclass__c                 C   s
   || _ d S r   )template)selfr2   r   r   r   __init__W      
zTemplate.__init__c                 C   s`   | d}| jd | jdd}|sd}d}n|td|d d  }t|}td||f )NinvalidT)keepends    z.Invalid placeholder in string: line %d, col %d)startr2   
splitlineslenr   
ValueError)r3   moilinescolnolinenor   r   r   _invalid\   s   
zTemplate._invalidc                   :    t u r| n|rt|   fdd}j|jS )Nc                    s`   |  dp	|  d}|d urt | S |  dd urjS |  dd ur*|  tdjNnamedbracedescapedr6   z#Unrecognized named group in pattern)groupstrr&   rD   r>   r    r?   rG   mappingr3   r   r   convertn   s   
z$Template.substitute.<locals>.convert_sentinel_dict	_ChainMapr    subr2   r3   rN   kwsrO   r   rM   r   
substituteh   s   
zTemplate.substitutec                   rE   )Nc                    s|   |  dp	|  d}|d ur#zt | W S  ty"   |    Y S w |  dd ur-jS |  dd ur8|   S tdjrF   )rJ   rK   KeyErrorr&   r>   r    rL   rM   r   r   rO      s   z)Template.safe_substitute.<locals>.convertrP   rT   r   rM   r   safe_substitute{   s   
zTemplate.safe_substitute)__name__
__module____qualname__r&   r'   r(   r$   
IGNORECASEr*   r"   r4   rD   rQ   rV   rX   __classcell__r   r   r0   r   r   9   s    r   c                   @   sX   e Zd Zdd Zdd Z	dddZdd	 Zd
d Zdd Zdd Z	dd Z
dd ZdS )r   c                O   s   |  |||S r   )vformat)r3   format_stringargskwargsr   r   r   format   s   zFormatter.formatc                 C   s.   t  }| ||||d\}}| ||| |S )N   )set_vformatcheck_unused_args)r3   r_   r`   ra   	used_argsresult_r   r   r   r^      s   zFormatter.vformatr   c              	   C   s   |dk rt dg }| |D ]^\}}	}
}|r|| |	d urm|	dkr5|du r,t dt|}	|d7 }n|	 rA|r?t dd}| |	||\}}|| | ||}| j|
||||d |d\}
}|| 	||
 qd
||fS )Nr   zMax string recursion exceededr9   FzJcannot switch from manual field specification to automatic field numberingr8   )auto_arg_index)r>   parseappendrK   isdigit	get_fieldaddconvert_fieldre   format_fieldr   )r3   r_   r`   ra   rg   recursion_depthrj   rh   literal_text
field_nameformat_spec
conversionobjarg_usedr   r   r   re      s8   



zFormatter._vformatc                 C   s   t |tr	|| S || S r   )
isinstanceint)r3   keyr`   ra   r   r   r   	get_value   s   
zFormatter.get_valuec                 C   s   d S r   r   )r3   rg   r`   ra   r   r   r   rf      s   zFormatter.check_unused_argsc                 C   s
   t ||S r   )rb   )r3   valueru   r   r   r   rq      r5   zFormatter.format_fieldc                 C   sJ   |d u r|S |dkrt |S |dkrt|S |dkrt|S td|)Nr   raz"Unknown conversion specifier {0!s})rK   reprasciir>   rb   )r3   r}   rv   r   r   r   rp      s   zFormatter.convert_fieldc                 C   s
   t |S r   )_stringformatter_parser)r3   r_   r   r   r   rk     r5   zFormatter.parsec           	      C   sJ   t |\}}| |||}|D ]\}}|rt||}q|| }q||fS r   )r   formatter_field_name_splitr|   getattr)	r3   rt   r`   ra   firstrestrw   is_attrr@   r   r   r   rn     s   
zFormatter.get_fieldN)r   )rY   rZ   r[   rb   r^   re   r|   rf   rq   rp   rk   rn   r   r   r   r   r      s    
6	r   r   )__all__r   r
   r   r   r   r   r   r   r	   r   r   rer$   collectionsr   rR   rQ   r   r"   r   r   r   r   r   <module>   s&    
Y