3 \. @sdddddddddd d d g Zd d lZdZdZdZeeZdZeddZdZdZ eee eZ dddZ d d l Z d dlmZGdddeZGdd d edZGdd d Zd S) ascii_lettersascii_lowercaseascii_uppercasecapwordsdigits hexdigits octdigits printable punctuation whitespace FormatterTemplateNz ZabcdefghijklmnopqrstuvwxyzZABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789ZabcdefZABCDEFZ01234567z !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~cCs|pdjdd|j|DS)N css|]}|jVqdS)N) capitalize).0xr/usr/lib64/python3.6/string.py 0szcapwords..)joinsplit)sseprrrr%s )ChainMapcs eZdZdZfddZZS)_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 ) csXtt|j|||d|kr$|j}ntjtj|j|jd}tj||j tj B|_dS)Npattern)Zdelimid) superr__init__r_reescape delimiter idpatterncompileflagsVERBOSE)clsnamebasesZdctr) __class__rrrAs  z_TemplateMetaclass.__init__)__name__ __module__ __qualname__rr __classcell__rr)r*rr7src@s:eZdZdZdZejZddZddZ ddZ d d Z d S) r $z(?-i:[_a-zA-Z][_a-zA-Z0-9]*)cCs ||_dS)N)template)selfr0rrrrXszTemplate.__init__cCsd|jd}|jd|jdd}|s.d}d}n"|tdj|dd}t|}td||fdS)NinvalidT)keependsz.Invalid placeholder in string: line %d, col %d)startr0 splitlineslenr ValueError)r1moilinescolnolinenorrr_invalid]s zTemplate._invalidcsl|s td|^}t|dkr(td|s2|n|rFt||dn|dfdd}jj|jS)Nz>descriptor 'substitute' of 'Template' object needs an argumentr4zToo many positional argumentsr csd|jdp|jd}|dk r(t|S|jddk r<jS|jddk rTj|tdjdS)Nnamedbracedescapedr2z#Unrecognized named group in pattern)groupstrr"r@r:r)r;rA)mappingr1rrconvertws  z$Template.substitute..convert) TypeErrorr9 _ChainMaprsubr0)argskwsrGr)rFr1r substituteis  zTemplate.substitutecsl|s td|^}t|dkr(td|s2|n|rFt||dn|dfdd}jj|jS)NzCdescriptor 'safe_substitute' of 'Template' object needs an argumentr4zToo many positional argumentsr c s||jdp|jd}|dk rBy t|Stk r@|jSX|jddk rVjS|jddk rl|jStdjdS)NrArBrCr2z#Unrecognized named group in pattern)rDrEKeyErrorr"r:r)r;rA)rFr1rrrGs  z)Template.safe_substitute..convert)rHr9rIrrJr0)rKrLrGr)rFr1rsafe_substitutes  zTemplate.safe_substituteN) r+r,r-r"r#r IGNORECASEr%rr@rMrOrrrrr Ms ) metaclassc@sVeZdZddZddZdddZdd Zd d Zd d ZddZ ddZ ddZ dS)r c Osz|s td|^}}y |^}}WnJtk rjd|kr\|jd}ddl}|jdtddn tddYnX|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')rHr:popwarningswarnDeprecationWarningvformat)rKkwargsr1rRrVrrrformats    zFormatter.formatcCs.t}|j||||d\}}|j||||S)NrS)set_vformatcheck_unused_args)r1rRrKrZ used_argsresult_rrrrYszFormatter.vformatr c Cs|dkrtdg}x|j|D]\}} } } |r:|j|| dk r | dkrl|dkrZtdt|} |d7}n| jr|rtdd}|j| ||\} } |j| |j| | } |j| ||||d|d\} }|j|j | | q Wdj ||fS)Nr zMax string recursion exceededr5FzJcannot switch from manual field specification to automatic field numberingr4)auto_arg_index) r:parseappendrEisdigit get_fieldadd convert_fieldr] format_fieldr)r1rRrKrZr_Zrecursion_depthrbr`Z literal_text field_name format_spec conversionobjZarg_usedrrrr]s4     zFormatter._vformatcCst|tr||S||SdS)N) isinstanceint)r1keyrKrZrrr get_values zFormatter.get_valuecCsdS)Nr)r1r_rKrZrrrr^szFormatter.check_unused_argscCs t||S)N)r[)r1valuerkrrrriszFormatter.format_fieldcCsN|dkr |S|dkrt|S|dkr,t|S|dkrs$     `