3
\. � @ s� d ddddddddd d
dgZ dd
lZdZdZdZee ZdZed d ZdZdZ ee e e Z
ddd�Zdd
lZ
ddlmZ G dd� de�ZG dd� ded�ZG dd
� d
�Zd
S )�
ascii_letters�ascii_lowercase�ascii_uppercase�capwords�digits� hexdigits� octdigits� printable�punctuation�
whitespace� Formatter�Template� Nz
ZabcdefghijklmnopqrstuvwxyzZABCDEFGHIJKLMNOPQRSTUVWXYZ�
0123456789ZabcdefZABCDEFZ01234567z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~c C s |pdj dd� | j|�D ��S )N� c s s | ]}|j � V qd S )N)�
capitalize)�.0�x� r �/usr/lib64/python3.6/string.py� 0 s zcapwords..)�join�split)�s�sepr r r r % s )�ChainMapc s e Zd ZdZ� fdd�Z� ZS )�_TemplateMetaclassa/
%(delim)s(?:
(?P%(delim)s) | # Escape sequence of two delimiters
(?P%(id)s) | # delimiter and a Python identifier
{(?P%(id)s)} | # delimiter and a braced identifier
(?P) # Other ill-formed delimiter exprs
)
c sX t t| �j|||� d|kr$| j}ntjtj| j�| jd� }tj|| j tj
B �| _d S )N�pattern)Zdelim�id)�superr �__init__r �_re�escape� delimiter� idpattern�compile�flags�VERBOSE)�cls�name�basesZdctr )� __class__r r r A s
z_TemplateMetaclass.__init__)�__name__�
__module__�__qualname__r r �
__classcell__r r )r* r r 7 s r c @ s: e Zd ZdZdZejZdd� Zdd� Z dd� Z
d d
� ZdS )r �$z(?-i:[_a-zA-Z][_a-zA-Z0-9]*)c C s
|| _ d S )N)�template)�selfr0 r r r r X s zTemplate.__init__c C sd |j d�}| jd |� jdd�}|s.d}d}n"|tdj|d d� �� }t|�}td||f ��d S )N�invalidT)�keepends� � z.Invalid placeholder in string: line %d, col %d�����)�startr0 �
splitlines�lenr �
ValueError)r1 �mo�i�lines�colno�linenor r r �_invalid] s
zTemplate._invalidc sl | st d��| ^�} t| �dkr(t d��| s2|� n|rFt|| d �� n| d � � �fdd�}�jj|�j�S )Nz>descriptor 'substitute' of 'Template' object needs an argumentr4 zToo many positional argumentsr
c sd | j d�p| j d�}|d k r(t� | �S | j d�d k r<�jS | j d�d k rT�j| � td�j��d S )N�named�braced�escapedr2 z#Unrecognized named group in pattern)�group�strr" r@ r: r )r; rA )�mappingr1 r r �convertw s
z$Template.substitute..convert)� TypeErrorr9 � _ChainMapr �subr0 )�args�kwsrG r )rF r1 r �
substitutei s zTemplate.substitutec sl | st d��| ^�} t| �dkr(t d��| s2|� n|rFt|| d �� n| d � � �fdd�}�jj|�j�S )NzCdescriptor 'safe_substitute' of 'Template' object needs an argumentr4 zToo many positional argumentsr
c s| | j d�p| j d�}|d k rByt� | �S tk
r@ | j � S X | j d�d k rV�jS | j d�d k rl| j � S td�j��d S )NrA rB rC r2 z#Unrecognized named group in pattern)rD rE �KeyErrorr" r: r )r; rA )rF r1 r r rG � s
z)Template.safe_substitute..convert)rH r9 rI r rJ r0 )rK rL rG r )rF r1 r �safe_substitute� s
zTemplate.safe_substituteN)r+ r, r- r" r# r �
IGNORECASEr% r r@ rM rO r r r r r M s )� metaclassc @ sV e Zd Zdd� Zdd� Zddd�Zdd � Zd
d� Zdd
� Zdd� Z dd� Z
dd� ZdS )r c O sz | st d��| ^}} y| ^}} W nJ tk
rj d|kr\|jd�}dd l}|jdtdd� n
t d�d �Y nX |j|| |�S )Nz;descriptor 'format' of 'Formatter' object needs an argument�
format_stringr
z9Passing 'format_string' as keyword argument is deprecated� )�
stacklevelz@format() missing 1 required positional argument: 'format_string')rH r: �pop�warnings�warn�DeprecationWarning�vformat)rK �kwargsr1 rR rV r r r �format� s
zFormatter.formatc C s. t � }| j||||d�\}}| j|||� |S )NrS )�set�_vformat�check_unused_args)r1 rR rK rZ � used_args�result�_r r r rY � s zFormatter.vformatr
c C s� |dk rt d��g }x�| j|�D ]�\}} }
}|r:|j|� | d k r | dkrl|dkrZt d��t|�} |d7 }n| j� r�|r�t d��d}| j| ||�\}}
|j|
� | j||�}| j|
||||d |d�\}
}|j| j ||
�� q W dj
|�|fS )Nr
zMax string recursion exceededr5 FzJcannot switch from manual field specification to automatic field numberingr4 )�auto_arg_index)r: �parse�appendrE �isdigit� get_field�add�
convert_fieldr] �format_fieldr )r1 rR rK rZ r_ Zrecursion_depthrb r` Zliteral_text�
field_name�format_spec�
conversion�objZarg_usedr r r r] � s4
zFormatter._vformatc C s t |t�r|| S || S d S )N)�
isinstance�int)r1 �keyrK rZ r r r � get_value� s
zFormatter.get_valuec C s d S )Nr )r1 r_ rK rZ r r r r^ s zFormatter.check_unused_argsc C s
t ||�S )N)r[ )r1 �valuerk r r r ri s zFormatter.format_fieldc C sN |d kr|S |dkrt |�S |dkr,t|�S |dkr