Viewing File: /opt/alt/python35/lib64/python3.5/email/__pycache__/_header_value_parser.cpython-35.opt-2.pyc



]O@sddlZddlZddlmZddlmZddlmZddlm	Z
ddlmZddlmZe
dZee
d	BZe
d
ZeeBZee
dZee
dZee
d
Be
dZeeBZee
dBZeeBZee
dZddZGdddZGdddeZGdddeZGdddeZGdddeZGdddeZ GdddeZ!Gd d!d!eZ"Gd"d#d#eZ#Gd$d%d%eZ$Gd&d'd'eZ%Gd(d)d)e%Z&Gd*d+d+eZ'Gd,d-d-eZ(Gd.d/d/eZ)Gd0d1d1eZ*Gd2d3d3eZ+Gd4d5d5eZ,Gd6d7d7eZ-Gd8d9d9eZ.Gd:d;d;eZ/Gd<d=d=eZ0Gd>d?d?eZ1Gd@dAdAeZ2GdBdCdCeZ3GdDdEdEeZ4GdFdGdGeZ5GdHdIdIeZ6GdJdKdKeZ7GdLdMdMeZ8GdNdOdOeZ9GdPdQdQeZ:GdRdSdSeZ;GdTdUdUe;Z<GdVdWdWeZ=GdXdYdYeZ>GdZd[d[eZ?Gd\d]d]eZ@Gd^d_d_eZAGd`dadaeAZBGdbdcdceAZCGdddedeeZDGdfdgdgeZEGdhdidieZFGdjdkdkeGZHGdldmdmeHZIGdndodoeHZJGdpdqdqeIZKeJddrZLeJdsdtZMeJdudvZNejOdwjPdxjQejRZSejOdyjPdxjQejTdzd{jTd|d}jUZVejOd~jWZXejOdyjPdxjQejTdzd{jTd|d}jUZYejOdyjPdxjQejTdzd{jTd|d}jUZZejOdyjPdxjQejTdzd{jTd|d}jUZ[ddZ\ddZ]ddZ^ddZ_ddZ`ddZaddZbddZcddZdddZeddZfddZgddZhddZiddZjddZkddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZdS)N)	hexdigits)OrderedDict)
itemgetter)_encoded_words)errors)utilsz 	(z
()<>@,:;.\"[].z."(z/?=z*'%%cCs*dt|jddjdddS)N"\z\\z\")strreplace)valuer9/opt/alt/python35/lib64/python3.5/_header_value_parser.pyquote_string`src@s[eZdZddZddZddZddZd	d
Zddd
ZdS)_FoldedcCsC||_||_d|_d|_d|_g|_g|_dS)NrT)maxlenpolicylastlenstickyspace	firstlinedonecurrent)selfrrrrr__init__is						z_Folded.__init__cCsC|jj|j|jj|jj|jjd|_dS)Nr)rextendrappendrlinesepclearr)rrrrnewliners
z_Folded.newlinecCs|jr|jdS)N)rr!)rrrrfinalizexs	z_Folded.finalizecCsdj|jS)N)joinr)rrrr__str__|sz_Folded.__str__cCs|jj|dS)N)rr)rstokenrrrrsz_Folded.appendNcCs|dkrt|}t|}|jdk	r+t|j}|j|||jkr|jj|j|j|7_|jj||j|7_d|_d|_dS|jr
|j	}|dk	r|jt|7_|t|7}|j
|dS|r|d|jkr|j|}d|koG|knr||}|jj|jd||j|d|_|}|j|jj|j|jj||||_d|_d|_dS|js|j|jj|j|jj|d|_d|_dS|j||jkrd|jj||j|7_dS||jkr|j|jj|||_dSdS)NFTr)r
lenrrrrrrhas_fwspop_leading_fws_foldr!)rtokenr&lZstickyspace_lenwsmarginZtrimrrrappend_if_fitssf			




			
		
	z_Folded.append_if_fits)	__name__
__module____qualname__rr!r"r%rr0rrrrrgs	rcs-eZdZdZfddZddZfddZedd	Zed
dZ	edd
Z
ddZddZddZ
eddZddZeddZddZddZddZd d!Zd"d#d$Zd"d%d&Zd"d'd(ZS))	TokenListNcs tj||g|_dS)N)superrdefects)rargskw)	__class__rrrszTokenList.__init__cCsdjdd|DS)Nr#css|]}t|VqdS)N)r
).0xrrr	<genexpr>sz$TokenList.__str__.<locals>.<genexpr>)r$)rrrrr%szTokenList.__str__csdj|jjtjS)Nz{}({}))formatr9r1r5__repr__)r)r9rrr>szTokenList.__repr__cCsdjdd|DS)Nr#css!|]}|jr|jVqdS)N)r)r:r;rrrr<sz"TokenList.value.<locals>.<genexpr>)r$)rrrrrszTokenList.valuecCstdd|D|jS)Ncss|]}|jVqdS)N)all_defects)r:r;rrrr<sz(TokenList.all_defects.<locals>.<genexpr>)sumr6)rrrrr?szTokenList.all_defectsccs|j}g}x|D]|}|jr_|r_t|dkrJ|dn	||V|j|j}|j||r||V|g}qW|rt|dkr|dn	||VdS)Nr'r)r9startswith_fwsr(r pop_trailing_wsr)rklassthisr,Zend_wsrrrpartss	
'


zTokenList.partscCs|djS)Nr)rA)rrrrrA
szTokenList.startswith_fwscCs.|djdkr |jdS|djS)Nrfws)
token_typepopr*)rrrrr*
s
zTokenList.pop_leading_fwscCs.|djdkr |jdS|djS)Nr'cfwsrJrJ)rGrHrB)rrrrrBs
zTokenList.pop_trailing_wscCs"x|D]}|jrdSqWdS)NTF)r))rpartrrrr)s
	zTokenList.has_fwscCs|djS)Nr)has_leading_comment)rrrrrLszTokenList.has_leading_commentcCs+g}x|D]}|j|jq
W|S)N)rcomments)rrMr,rrrrM!s
zTokenList.commentscCsE|jptd}t||}|j||jt|S)Nz+inf)Zmax_line_lengthfloatrr+r"r
)rrrfoldedrrrfold(s


zTokenList.foldcCsg}|j}|r%|j||djdkrG|jdnd}|jtjt|||j|dj|S)Nr'rFr#rJrJ)r*rrGrH_ewencoder
r$)rcharsetresr.Ztrailerrrras_encoded_word0s
(
zTokenList.as_encoded_wordcCs=g}x'|D]}|j|j||q
Wdj|S)Nr#)r
cte_encoder$)rrSrrTrKrrrrV<s
zTokenList.cte_encodecCs>|jjrdnd}x|jD]}t|}t|}yt|j|Wn^tk
rtdd|jDrd}nd}|j	||j}t|}YnX|j
||rq"|j}|dk	rt||_|j
|rq"|j
r|j|q"|j||jq"WdS)Nzutf-8asciicss!|]}t|tjVqdS)N)
isinstancerUndecodableBytesDefect)r:r;rrrr<Jsz"TokenList._fold.<locals>.<genexpr>zunknown-8bit)rutf8rEr
r(rRUnicodeEncodeErroranyr?rVr0r*rr)r+rr!)rrOencodingrKtstrtlenrSr.rrrr+Bs2
		

zTokenList._foldr#cCs#tdj|jdddS)N
indentr#)printr$_pp)rrarrrpprintcszTokenList.pprintcCsdj|jddS)Nr`rar#)r$rc)rrarrrppstrfszTokenList.ppstrccsdj||jj|jVxH|D]@}t|dsN|dj|Vq$|j|dEdHq$W|jrdj|j}nd}dj||VdS)Nz{}{}/{}(rcz*    !! invalid element in token list: {!r}z    z Defects: {}r#z{}){})r=r9r1rGhasattrrcr6)rrar,extrarrrrcis	
		z
TokenList._pp)r1r2r3rGrr%r>propertyrr?rErAr*rBr)rLrMrPrUrVr+rdrercrr)r9rr4s(+!r4c@s4eZdZeddZeddZdS)WhiteSpaceTokenListcCsdS)N r)rrrrr}szWhiteSpaceTokenList.valuecCsdd|DS)NcSs(g|]}|jdkr|jqS)comment)rGcontent)r:r;rrr
<listcomp>s	z0WhiteSpaceTokenList.comments.<locals>.<listcomp>r)rrrrrMszWhiteSpaceTokenList.commentsN)r1r2r3rhrrMrrrrri{sric@s.eZdZdZddZddZdS)UnstructuredTokenListunstructuredc
Cs)d}|jjrdnd}x|jD]}t|}d}yt|j|Wntk
rgtdd|jDrd}nd}|dk	rNtdj	|j
|d|gj|}tdd|j
d|D}	t|}
t
|
}|	||jkrN|j
|d=|j|
|	||_w(|j|}d	}YnX|j||r|r(t
|j
d
}q(|s|r|j|q(|j}|dk	rt||_|j|rq(|jr|j|q(|j||jd}q(WdS)Nzutf-8rWFcss!|]}t|tjVqdS)N)rXrrY)r:r;rrrr<sz.UnstructuredTokenList._fold.<locals>.<genexpr>zunknown-8bitr#css|]}t|VqdS)N)r()r:r;rrrr<sTr')rrZrEr
rRr[r\r?get_unstructuredr$rrUr@r(rrrr0Z_fold_as_ewr*rr)r+r!)
rrOlast_ewr]rKr^is_ewrSchunkZ
oldlastlenschunklchunkr.rrrr+sV
	/&


	


zUnstructuredTokenList._foldcCsg}d}x|D]}t|}y|jd|j|Wqtk
r|dkr|j|j||t|}n<tdj||d|g}|j|j|YqXqWdj|S)Nzus-asciir#)	r
rRrr[rVr(rpr$rU)rrSrrTrqrKsparttlrrrrVs


&z UnstructuredTokenList.cte_encodeN)r1r2r3rGr+rVrrrrrns5rnc@s.eZdZdZddZddZdS)PhrasephrasecCsad}|jjrdnd}x<|jD]1}t|}t|}d}yt|j|Wntk
rtdd|jDrd}nd}|dk	r|j	r|dj
dkr|jr|jd}	nd	}	xCt
|D]5\}
}|j
d
krt|dd||
<qWtd	j|j|d|gj|}t|}
t|
}|||jkr|j|d=|j|
tdd|jD|_w(|j|}t|}d}YnX|j||rL|r+|jr+t|jd}q(|jsC|j
d
kr(d}q(|j|q(WdS)Nzutf-8rWFcss!|]}t|tjVqdS)N)rXrrY)r:r;rrrr<szPhrase._fold.<locals>.<genexpr>zunknown-8bitr'rIr#zbare-quoted-stringcss|]}t|VqdS)N)r()r:r;rrrr<sTz
quoted-stringrJrJ)rrZrEr
r(rRr[r\r?rLrGrMrH	enumeraternrpr$rrUrrr@rr0r+)rrOrqr]rKr^r_Zhas_ewrS	remainderir,rsrtrurrrr+sN
	/
zPhrase._foldcCsg}d}d}x}|D]u}t|}y|jd|j|Wntk
rhd}|dkr|jst|}|j|j||n|jsd|d	jdkr|jr|j	d
}nd}xCt
|D]5\}	}
|
jdkrt|
dd||	<qWtdj
||d|g}|j|g||d<YnX|js|r|jdkrd}qWdj
|S)NFzus-asciiTr'rIr#zbare-quoted-stringz
quoted-stringrJrJ)r
rRrr[rMr(rVrLrGrHrzrnrpr$rU)rrSrrTrqrrrKrvr{r|r,rwrrrrVs4


	&!
zPhrase.cte_encodeN)r1r2r3rGr+rVrrrrrxs?rxc@seZdZdZdS)WordZwordN)r1r2r3rGrrrrr}1sr}c@s"eZdZdZddZdS)CFWSListrIcCs
t|jS)N)boolrM)rrrrrL:szCFWSList.has_leading_commentN)r1r2r3rGrLrrrrr~6sr~c@seZdZdZdS)AtomatomN)r1r2r3rGrrrrr>src@seZdZdZdS)Tokenr,N)r1r2r3rGrrrrrCsrc@s:eZdZdZdZdZdZeddZdS)EncodedWordzencoded-wordNcCs3|jdk	r|jStjt||jdS)N)cterQrRr
rS)rrrrencodedOszEncodedWord.encoded)	r1r2r3rGrrSlangrhrrrrrrHs
rc@sLeZdZdZeddZeddZeddZdS)	QuotedStringz
quoted-stringcCs+x$|D]}|jdkr|jSqWdS)Nzbare-quoted-string)rGr)rr;rrrrl[s
zQuotedString.contentcCsYg}xC|D];}|jdkr8|jt|q
|j|jq
Wdj|S)Nzbare-quoted-stringr#)rGrr
rr$)rrTr;rrrquoted_valueas
zQuotedString.quoted_valuecCs+x$|D]}|jdkr|jSqWdS)Nzbare-quoted-string)rGr)rr,rrrstripped_valueks
zQuotedString.stripped_valueN)r1r2r3rGrhrlrrrrrrrWs
rc@s4eZdZdZddZeddZdS)BareQuotedStringzbare-quoted-stringcCs tdjdd|DS)Nr#css|]}t|VqdS)N)r
)r:r;rrrr<wsz+BareQuotedString.__str__.<locals>.<genexpr>)rr$)rrrrr%vszBareQuotedString.__str__cCsdjdd|DS)Nr#css|]}t|VqdS)N)r
)r:r;rrrr<{sz)BareQuotedString.value.<locals>.<genexpr>)r$)rrrrryszBareQuotedString.valueN)r1r2r3rGr%rhrrrrrrrsrc@sReZdZdZddZddZeddZedd	Zd
S)Commentrkcs8djtdgfddDdgggS)Nr#rcsg|]}j|qSr)quote)r:r;)rrrrms	z#Comment.__str__.<locals>.<listcomp>))r$r@)rr)rrr%s
		zComment.__str__cCsG|jdkrt|St|jddjddjddS)Nrkrz\\rz\(rz\))rGr
r)rrrrrrs

z
Comment.quotecCsdjdd|DS)Nr#css|]}t|VqdS)N)r
)r:r;rrrr<sz"Comment.content.<locals>.<genexpr>)r$)rrrrrlszComment.contentcCs
|jgS)N)rl)rrrrrMszComment.commentsN)	r1r2r3rGr%rrhrlrMrrrrr~s
rc@sLeZdZdZeddZeddZeddZdS)	AddressListzaddress-listcCsdd|DS)NcSs%g|]}|jdkr|qS)address)rG)r:r;rrrrms	z)AddressList.addresses.<locals>.<listcomp>r)rrrr	addressesszAddressList.addressescCstdd|DgS)Ncss'|]}|jdkr|jVqdS)rN)rG	mailboxes)r:r;rrrr<sz(AddressList.mailboxes.<locals>.<genexpr>)r@)rrrrrszAddressList.mailboxescCstdd|DgS)Ncss'|]}|jdkr|jVqdS)rN)rG
all_mailboxes)r:r;rrrr<sz,AddressList.all_mailboxes.<locals>.<genexpr>)r@)rrrrrszAddressList.all_mailboxesN)r1r2r3rGrhrrrrrrrrsrc@sLeZdZdZeddZeddZeddZdS)	AddressrcCs"|djdkr|djSdS)Nrgroup)rGdisplay_name)rrrrrszAddress.display_namecCs@|djdkr|dgS|djdkr5gS|djS)Nrmailboxzinvalid-mailbox)rGr)rrrrrs
zAddress.mailboxescCsG|djdkr|dgS|djdkr<|dgS|djS)Nrrzinvalid-mailbox)rGr)rrrrrs
zAddress.all_mailboxesN)r1r2r3rGrhrrrrrrrrsrc@s:eZdZdZeddZeddZdS)MailboxListzmailbox-listcCsdd|DS)NcSs%g|]}|jdkr|qS)r)rG)r:r;rrrrms	z)MailboxList.mailboxes.<locals>.<listcomp>r)rrrrrszMailboxList.mailboxescCsdd|DS)NcSs%g|]}|jdkr|qS)rinvalid-mailbox)rr)rG)r:r;rrrrms	z-MailboxList.all_mailboxes.<locals>.<listcomp>r)rrrrrszMailboxList.all_mailboxesN)r1r2r3rGrhrrrrrrrsrc@s:eZdZdZeddZeddZdS)	GroupListz
group-listcCs)|s|djdkrgS|djS)Nrzmailbox-list)rGr)rrrrrszGroupList.mailboxescCs)|s|djdkrgS|djS)Nrzmailbox-list)rGr)rrrrrszGroupList.all_mailboxesN)r1r2r3rGrhrrrrrrrsrc@sLeZdZdZeddZeddZeddZdS)	GrouprcCs"|djdkrgS|djS)Nz
group-list)rGr)rrrrrszGroup.mailboxescCs"|djdkrgS|djS)Nrz
group-list)rGr)rrrrrszGroup.all_mailboxescCs|djS)Nr)r)rrrrrszGroup.display_nameN)r1r2r3rGrhrrrrrrrrsrc@speZdZdZeddZeddZeddZedd	Zed
dZ	dS)
NameAddrz	name-addrcCs!t|dkrdS|djS)Nr'r)r(r)rrrrrszNameAddr.display_namecCs|djS)Nr'rJ)
local_part)rrrrrszNameAddr.local_partcCs|djS)Nr'rJ)domain)rrrrrszNameAddr.domaincCs|djS)Nr'rJ)route)rrrrr
szNameAddr.routecCs|djS)Nr'rJ)	addr_spec)rrrrrszNameAddr.addr_specN)
r1r2r3rGrhrrrrrrrrrrsrc@s^eZdZdZeddZeddZeddZedd	Zd
S)	AngleAddrz
angle-addrcCs+x$|D]}|jdkr|jSqWdS)Nz	addr-spec)rGr)rr;rrrrs
zAngleAddr.local_partcCs+x$|D]}|jdkr|jSqWdS)Nz	addr-spec)rGr)rr;rrrrs
zAngleAddr.domaincCs+x$|D]}|jdkr|jSqWdS)Nz	obs-route)rGdomains)rr;rrrr#s
zAngleAddr.routecCs/x(|D]}|jdkr|jSqWdSdS)Nz	addr-specz<>)rGr)rr;rrrr)s
zAngleAddr.addr_specN)	r1r2r3rGrhrrrrrrrrrs
rc@s(eZdZdZeddZdS)ObsRoutez	obs-routecCsdd|DS)NcSs(g|]}|jdkr|jqS)r)rGr)r:r;rrrrm8s	z$ObsRoute.domains.<locals>.<listcomp>r)rrrrr6szObsRoute.domainsN)r1r2r3rGrhrrrrrr2src@speZdZdZeddZeddZeddZedd	Zed
dZ	dS)
MailboxrcCs"|djdkr|djSdS)Nrz	name-addr)rGr)rrrrr?szMailbox.display_namecCs|djS)Nr)r)rrrrrDszMailbox.local_partcCs|djS)Nr)r)rrrrrHszMailbox.domaincCs"|djdkr|djSdS)Nrz	name-addr)rGr)rrrrrLsz
Mailbox.routecCs|djS)Nr)r)rrrrrQszMailbox.addr_specN)
r1r2r3rGrhrrrrrrrrrr;src@s:eZdZdZeddZeZZZZ	dS)InvalidMailboxzinvalid-mailboxcCsdS)Nr)rrrrrZszInvalidMailbox.display_nameN)
r1r2r3rGrhrrrrrrrrrrVsrcs.eZdZdZefddZS)DomainrcsdjtjjS)Nr#)r$r5rsplit)r)r9rrresz
Domain.domain)r1r2r3rGrhrrr)r9rrasrc@seZdZdZdS)DotAtomzdot-atomN)r1r2r3rGrrrrrjsrc@seZdZdZdS)DotAtomTextz
dot-atom-textN)r1r2r3rGrrrrrosrc@s^eZdZdZeddZeddZeddZedd	Zd
S)AddrSpecz	addr-speccCs|djS)Nr)r)rrrrrxszAddrSpec.local_partcCs!t|dkrdS|djS)Nr'rJ)r(r)rrrrr|szAddrSpec.domaincCsJt|dkr|djS|djj|dj|djjS)Nrrr'r)r(rrstriplstrip)rrrrrszAddrSpec.valuecCsht|j}t|t|tkr=t|j}n	|j}|jdk	rd|d|jS|S)N@)setrr(
DOT_ATOM_ENDSrr)rZnamesetZlprrrrs	zAddrSpec.addr_specN)	r1r2r3rGrhrrrrrrrrrts
rc@seZdZdZdS)ObsLocalPartzobs-local-partN)r1r2r3rGrrrrrsrcs@eZdZdZeddZefddZS)DisplayNamezdisplay-namecCst|}|djdkr/|jdn5|ddjdkrdt|ddd|d<|djdkr|jn5|ddjdkrt|ddd|d	<|jS)
NrrIr'rJrJrJrJrJrJ)r4rGrHr)rrTrrrrs
zDisplayName.display_namecsd}|jrd}n&x#|D]}|jdkrd}qW|rd}}|djdksx|ddjdkr~d}|d	jdks|d
djdkrd}|t|j|StjSdS)NFTz
quoted-stringr#rrIrjr'rJrJrJ)r6rGrrr5r)rrr;preZpost)r9rrrs		


**zDisplayName.value)r1r2r3rGrhrrrr)r9rrsrc@s:eZdZdZeddZeddZdS)	LocalPartz
local-partcCs-|djdkr|djS|djSdS)Nrz
quoted-string)rGrr)rrrrrszLocalPart.valuecCstg}t}d}x|dtgD]}|jdkr?q'|r|jdkr|djdkrt|dd|d<t|t}|r|jdkr|djdkr|jt|ddn
|j||d	}|}q'Wt|dd
}|jS)NFrrIdotr'rJrJrJrJrJ)DOTrGr4rXrr)rrTZlastZ
last_is_tltokZis_tlrrrrs$	 


zLocalPart.local_partN)r1r2r3rGrhrrrrrrrsrcs@eZdZdZefddZeddZS)
DomainLiteralzdomain-literalcsdjtjjS)Nr#)r$r5rr)r)r9rrrszDomainLiteral.domaincCs+x$|D]}|jdkr|jSqWdS)Nptext)rGr)rr;rrrips
zDomainLiteral.ip)r1r2r3rGrhrrrr)r9rrsrc@s"eZdZdZdZdZdS)MIMEVersionzmime-versionN)r1r2r3rGmajorminorrrrrrsrc@sLeZdZdZdZdZdZeddZeddZ	dS)		Parameter	parameterFzus-asciicCs|jr|djSdS)Nr'r)	sectionednumber)rrrrsection_numberszParameter.section_numbercCsxz|D]r}|jdkr#|jS|jdkrxD|D]<}|jdkr9x$|D]}|jdkrU|jSqUWq9WqWdS)Nrz
quoted-stringzbare-quoted-stringr#)rGr)rr,rrrparam_values


zParameter.param_valueN)
r1r2r3rGrextendedrSrhrrrrrrrsrc@seZdZdZdS)InvalidParameterzinvalid-parameterN)r1r2r3rGrrrrrsrc@s(eZdZdZeddZdS)	Attribute	attributecCs.x'|D]}|jjdr|jSqWdS)Nattrtext)rGendswithr)rr,rrrrs
zAttribute.stripped_valueN)r1r2r3rGrhrrrrrrsrc@seZdZdZdZdS)SectionsectionN)r1r2r3rGrrrrrr$src@s(eZdZdZeddZdS)ValuercCsC|d}|jdkr#|d}|jjdr<|jS|jS)NrrIr'
quoted-stringrextended-attribute)rrr)rGrrr)rr,rrrr.s

		zValue.stripped_valueN)r1r2r3rGrhrrrrrr*src@s4eZdZdZeddZddZdS)MimeParameterszmime-parametersccst}x||D]t}|jjds+q|djdkrAq|djj}||krjg||<||j|j|fqWx|jD]\}}t|dt	d}|dd}|j
}|jr1t|dkr1|dddkr1|ddj
jtjd|dd}g}d}x/|D]'\}	}
|	|kr|
js|
j
jtjdqDn|
j
jtjd|d7}|
j}|
jr^ytjj|}Wn*tk
rtjj|d	d
}YncXy|j|d}Wn$tk
r8|jdd}YnXtj|r^|
j
jtj|j|qDWd
j|}||fVqWdS)Nrrrkeyr'z.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingr]zlatin-1surrogateescapezus-asciir#)rrGrrstriprritemssortedrrSrr(r6rInvalidHeaderDefectrurllibparseZunquote_to_bytesr[unquotedecodeLookupErrorr_has_surrogatesrYr$)rparamsr,namerEZfirst_paramrSZvalue_partsr|rparamrrrrr=sZ	

	
	


		

zMimeParameters.paramscCsvg}xL|jD]A\}}|rD|jdj|t|q|j|qWdj|}|rrd|SdS)Nz{}={}z; rjr#)rrr=rr$)rrrrrrrr%s"zMimeParameters.__str__N)r1r2r3rGrhrr%rrrrr9sFrc@s4eZdZeddZeddZdS)ParameterizedHeaderValuecCs1x*t|D]}|jdkr
|jSq
WiS)Nzmime-parameters)reversedrGr)rr,rrrrszParameterizedHeaderValue.paramscCsB|r5|djdkr5t|dd|dSt|jS)Nr'zmime-parametersrJrJrJ)rGr4rE)rrrrrEszParameterizedHeaderValue.partsN)r1r2r3rhrrErrrrrsrc@s"eZdZdZdZdZdS)ContentTypezcontent-typetextZplainN)r1r2r3rGmaintypesubtyperrrrrsrc@seZdZdZdZdS)ContentDispositionzcontent-dispositionN)r1r2r3rGcontent_dispositionrrrrrsrc@seZdZdZdZdS)ContentTransferEncodingzcontent-transfer-encodingZ7bitN)r1r2r3rGrrrrrrsrc@seZdZdZdS)HeaderLabelzheader-labelN)r1r2r3rGrrrrrsrc@s"eZdZdZddZdS)HeaderheadercCs|jt|jdt|jd|_|djdkrZt|jdnd|_|jd}|rtd|j	|dS)NrrIr#zMalformed Header token list)
rr
rHr(rrrGr
ValueErrorr+)rrOrestrrrr+s1zHeader._foldN)r1r2r3rGr+rrrrrsrcseZdZfddZfddZeddZdfdd	Zd
dZdd
Z	ddZ
eddZddZddZ
S)Terminalcs+tj||}||_g|_|S)N)r5__new__rGr6)clsrrGr)r9rrrs		zTerminal.__new__csdj|jjtjS)Nz{}({}))r=r9r1r5r>)r)r9rrr>szTerminal.__repr__cCs
t|jS)N)listr6)rrrrr?szTerminal.all_defectsr#csIdj||jj|jtj|js3dndj|jgS)Nz
{}{}/{}({}){}r#z {})r=r9r1rGr5r>r6)rra)r9rrrcs	zTerminal._ppcCsJt|}y|jd|SWn"tk
rEtj||SYnXdS)Nzus-ascii)r
rRr[rQ)rrSrrrrrrVs

zTerminal.cte_encodecCsdS)Nr)rrrrrBszTerminal.pop_trailing_wscCsdS)Nr)rrrrr*szTerminal.pop_leading_fwscCsgS)Nr)rrrrrMszTerminal.commentscCsdS)NFr)rrrrrLszTerminal.has_leading_commentcCst||jfS)N)r
rG)rrrr__getnewargs__szTerminal.__getnewargs__)r1r2r3rr>rhr?rcrVrBr*rMrLrrr)r9rrs	rc@s4eZdZeddZddZdZdS)WhiteSpaceTerminalcCsdS)Nrjr)rrrrrszWhiteSpaceTerminal.valuecCsdS)NTr)rrrrrA
sz!WhiteSpaceTerminal.startswith_fwsTN)r1r2r3rhrrAr)rrrrrsrc@s@eZdZeddZddZdZddZdS)	
ValueTerminalcCs|S)Nr)rrrrrszValueTerminal.valuecCsdS)NFr)rrrrrAszValueTerminal.startswith_fwsFcCstjt||S)N)rQrRr
)rrSrrrrUszValueTerminal.as_encoded_wordN)r1r2r3rhrrAr)rUrrrrrsrc@sFeZdZeddZeddZddZdZdS)	EWWhiteSpaceTerminalcCsdS)Nr#r)rrrrr!szEWWhiteSpaceTerminal.valuecCs|ddS)Nr)rrrrr%szEWWhiteSpaceTerminal.encodedcCsdS)Nr#r)rrrrr%)szEWWhiteSpaceTerminal.__str__TN)r1r2r3rhrrr%r)rrrrrsrr,zlist-separatorrzroute-component-markerz([{}]+)r#z[^{}]+rz\\]z\]z[\x00-\x20\x7F]cCsWt|}|r+|jjtj|tj|rS|jjtjddS)Nz*Non-ASCII characters found in header token)_non_printable_finderr6rrZNonPrintableDefectrrrY)xtextZnon_printablesrrr_validate_xtextWsrcCst|d^}}g}d}d}xtt|D]e}||dkrn|red}d}n	d}q:|r}d}n|||krP|j||q:W|d}dj|dj||dg||fS)Nr'FrTr#)
_wsp_splitterranger(rr$)rendcharsZfragmentr{Zvcharsescapehad_qpposrrr_get_ptext_to_endcharsas$			
rcCs?|j}t|dt|t|d}||fS)NrF)rrr()rZnewvaluerFrrrget_fwss)rc
Cs<t}|jds0tjdj||ddjdd^}}||ddkrtjdj|dj|}t|dkr|dtkr|dtkr|jdd^}}|d|}t|jdkr|j	j
tjd||_dj|}y't
jd|d\}}}}	Wn-tk
rtjd	j|jYnX||_||_|j	j|	x|r1|dtkrt|\}
}|j
|
qt|d^}}t|d
}t||j
|dj|}qW||fS)Nz=?z"expected encoded word but found {}rz?=r'r#rzwhitespace inside encoded wordz!encoded word format invalid: '{}'vtext)r
startswithrHeaderParseErrorr=rr$r(rr6rrrrQrrrSrrWSPrrrr)
rZewrr{ZremstrrrrSrr6r,charsrrrrget_encoded_wordsH	"2
	'
			


rcCsot}x_|rj|dtkrDt|\}}|j|q|jdryt|\}}Wntjk
rYnXd}t|dkr|dj	dkr|j
jtjdd}|r
t|dkr
|d
j	d	kr
t|dd|d<|j|qt
|d^}}t|d
}t||j|dj|}qW|S)Nrz=?Tr'rFz&missing whitespace before encoded wordFrzencoded-wordrr#rJrJrJ)rnrrrrrrrr(rGr6rrrrrr$)rror,Zhave_wsrr{rrrrrps:		




rpcCs;t|d\}}}t|d}t|||fS)Nz()r)rrr)rr_rrrget_qp_ctexts
r
cCs;t|d\}}}t|d}t|||fS)Nrr)rrr)rrr	rrrget_qcontents

rcCsot|}|s*tjdj||j}|t|d}t|d}t|||fS)Nzexpected atext but found '{}'atext)_non_atom_end_matcherrrr=rr(rr)rmrrrr	get_atext
s
rcCsQ|ddkr(tjdj|t}|dd}x|r|ddkr|dtkrt|\}}n|dddkry/t|\}}|jjtj	dWqtjk
rt
|\}}YqXnt
|\}}|j|qDW|s=|jjtj	d||fS||ddfS)	Nrrzexpected '"' but found '{}'r'rz=?z!encoded word inside quoted stringz"end of header inside quoted string)rrr=rrrrr6rrr)rZbare_quoted_stringr,rrrget_bare_quoted_strings,	

rcCs
|r.|ddkr.tjdj|t}|dd}x|r|ddkr|dtkrt|\}}n7|ddkrt|\}}nt|\}}|j|qJW|s|j	jtj
d||fS||ddfS)Nrrzexpected '(' but found '{}'r'rzend of header inside comment)rrr=rrrget_commentr
rr6r)rrkr,rrrr<s"	

rcCstt}x^|ri|dtkri|dtkrGt|\}}nt|\}}|j|qW||fS)Nr)r~CFWS_LEADERrrrr)rrIr,rrrget_cfwsUs	rcCst}|r>|dtkr>t|\}}|j|t|\}}|j||r|dtkrt|\}}|j|||fS)Nr)rrrrr)rZ
quoted_stringr,rrrget_quoted_stringbs	


rcCst}|r>|dtkr>t|\}}|j||rl|dtkrltjdj||jdryt	|\}}Wqtjk
rt
|\}}YqXnt
|\}}|j||r|dtkrt|\}}|j|||fS)Nrzexpected atom but found '{}'z=?)rrrr	ATOM_ENDSrrr=rrr)rrr,rrrget_atomts$	


rcCst}|s |dtkr8tjdj|xl|r|dtkrt|\}}|j||r;|ddkr;|jt|dd}q;W|dtkrtjdjd|||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'r	r'z4expected atom at end of dot-atom-text but found '{}'rJ)rrrrr=rrr)rZ
dot_atom_textr,rrrget_dot_atom_texts	

rcCst}|dtkr8t|\}}|j||jdryt|\}}Wqtjk
rt|\}}YqXnt|\}}|j||r|dtkrt|\}}|j|||fS)Nrz=?)	rrrrrrrrr)rZdot_atomr,rrrget_dot_atoms	


rcCs|dtkr%t|\}}nd}|ddkrPt|\}}n=|dtkr{tjdj|nt|\}}|dk	r|g|dd<||fS)Nrrz1Expected 'atom' or 'quoted-string' but found '{}')rrrSPECIALSrrr=r)rleaderr,rrrget_wordsrcCsIt}y#t|\}}|j|Wn.tjk
r\|jjtjdYnXx|r>|dtkr>|ddkr|jt|jjtj	d|dd}q`yt|\}}WnVtjk
r-|dt
kr&t|\}}|jjtj	dnYnX|j|q`W||fS)Nzphrase does not start with wordrr	zperiod in 'phrase'r'zcomment found without atom)rxrrrrr6rPHRASE_ENDSrObsoleteHeaderDefectrr)rryr,rrr
get_phrases.	


rcCst}d}|dtkr1t|\}}|sOtjdj|yt|\}}Wnotjk
ryt|\}}WnAtjk
r|ddkr|dtkrt	}YnXYnX|dk	r|g|dd<|j
||r|ddks)|dtkrtt||\}}|j
dkrp|jj
tjdn|jj
tjd||d<y|jjdWn+tk
r|jj
tjdYnX||fS)	Nrz"expected local-part but found '{}'rzinvalid-obs-local-partz<local-part is not dot-atom, quoted-string, or obs-local-partz,local-part is not a dot-atom (contains CFWS)rWz)local-part contains non-ASCII characters))rrrrrr=rrrr4rget_obs_local_partr
rGr6rrrrRr[ZNonASCIILocalPartDefect)rrrr,obs_local_partrrrget_local_partsB	 
&



r!cCsHt}d}xv|r|ddks8|dtkr|ddkr|rg|jjtjd|jtd}|dd}qn\|ddkr|jt|dd|dd}|jjtjd	d}q|r|djd
kr|jjtjdyt	|\}}d}Wn:tj
k
rv|dtkr`t|\}}YnX|j|qW|djd
ks|djdkr|djd
kr|jjtjd
|djd
ks|djdkr,|djd
kr,|jjtjd|jr>d|_||fS)NFrrr	zinvalid repeated '.'Tr'zmisplaced-specialz/'\' character outside of quoted-string/ccontentrzmissing '.' between wordsrIz!Invalid leading '.' in local partrz"Invalid trailing '.' in local partzinvalid-obs-local-partrJrJrJr)
rrr6rrrrrrGrrrr)rr Zlast_non_ws_was_dotr,rrrr'sV	)







		rcCsZt|d\}}}t|d}|rF|jjtjdt|||fS)Nz[]rz(quoted printable found in domain-literal)rrr6rrrr)rrrrrr	get_dtextVs

r"cCs:|r
dS|jtjd|jtdddS)NFz"end of input inside domain-literalrzdomain-literal-endT)rrrr)rdomain_literalrrr_check_for_early_dl_endjs
r$cCst}|dtkr8t|\}}|j||sMtjd|ddkrutjdj||dd}t||r||fS|jtdd|dt	krt
|\}}|j|t|\}}|j|t||r||fS|dt	krJt
|\}}|j|t||rc||fS|ddkrtjdj||jtdd	|dd}|r|dtkrt|\}}|j|||fS)
Nrzexpected domain-literal[z6expected '[' at start of domain-literal but found '{}'r'zdomain-literal-startrz4expected ']' at end of domain-literal but found '{}'zdomain-literal-end)rrrrrrr=r$rrrr")rr#r,rrrget_domain_literalrsD	







r&cCst}d}|dtkr1t|\}}|sOtjdj||ddkrt|\}}|dk	r|g|dd<|j|||fSyt|\}}Wn'tjk
rt	|\}}YnX|r|ddkrtjd|dk	r+|g|dd<|j||r|ddkr|j
jtjd|djdkr|d|dd<xP|r|ddkr|jt
t	|d	d\}}|j|qW||fS)
Nrzexpected domain but found '{}'r%rzInvalid Domainr	z(domain is not a dot-atom (contains CFWS)zdot-atomr')rrrrrr=r&rrrr6rrGr)rrrr,rrr
get_domains@	




r'cCst}t|\}}|j||s?|ddkrb|jjtjd||fS|jtddt|dd\}}|j|||fS)Nrrz"add-spec local part with no domainzaddress-at-symbolr')rr!rr6rrrr')rrr,rrr
get_addr_specs	



r(cCst}x|r|ddks2|dtkr|dtkrdt|\}}|j|q|ddkr|jt|dd}qW|s|ddkrtjdj||jtt	|dd\}}|j|x|r|ddkr|jt|dd}|s7P|dtkrft|\}}|j||ddkr|jtt	|dd\}}|j|qW|stjd|ddkrtjdj||jt
dd	||ddfS)
Nrrr'rz(expected obs-route domain but found '{}'z%end of header while parsing obs-route:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker)rrrr
ListSeparatorrrr=RouteComponentMarkerr'r)rZ	obs_router,rrr
get_obs_routesB	)





r,cCs6t}|dtkr8t|\}}|j||sO|ddkrgtjdj||jtdd|dd}|ddkr|jtdd|jjtj	d|dd}||fSyt
|\}}Wntjk
ry/t|\}}|jjtjd	Wn-tjk
rmtjd
j|YnX|j|t
|\}}YnX|j||r|ddkr|dd}n|jjtj	d|jtdd|r,|dtkr,t|\}}|j|||fS)Nr<z"expected angle-addr but found '{}'zangle-addr-startr'>zangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr)
rrrrrrr=rr6rr(r,r)rZ
angle_addrr,rrrget_angle_addrsJ	






r/cCsRt}t|\}}|j|dd|jdd|_||fS)N)rrrr6)rrr,rrrget_display_name&s
	r0cCs5t}d}|dtkrOt|\}}|sOtjdj||ddkr|dtkrtjdj|t|\}}|stjdj||dk	r|g|ddd<d}|j|t	|\}}|dk	r|g|dd<|j|||fS)Nrz!expected name-addr but found '{}'r-)
rrrrrr=rr0rr/)rZ	name_addrrr,rrr
get_name_addr5s0	

r1cCst}yt|\}}Wn[tjk
r|yt|\}}Wn-tjk
rwtjdj|YnXYnXtdd|jDrd|_|j	|||fS)Nzexpected mailbox but found '{}'css!|]}t|tjVqdS)N)rXrr)r:r;rrrr<bszget_mailbox.<locals>.<genexpr>zinvalid-mailbox)
rr1rrr(r=r\r?rGr)rrr,rrrget_mailboxSs		
r2cCst}xv|r|d|kr|dtkr_|jt|dd|dd}qt|\}}|j|qW||fS)Nrzmisplaced-specialr')rrrrr)rrZinvalid_mailboxr,rrrget_invalid_mailboxhs	
r3cCsMt}x7|rB|ddkrBy#t|\}}|j|Wn`tjk
rd}|dtkrt|\}}|s|ddkr|j||jjtjdqt	|d\}}|dk	r|g|dd<|j||jjtj
dn|ddkrI|jjtjdnZt	|d\}}|dk	r}|g|dd<|j||jjtj
dYnX|r|ddkr|d	}d|_t	|d\}}|j||jjtj
d|r|ddkr|jt
|dd}qW||fS)
Nr;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listrr'zinvalid-mailboxrJ)rr2rrrrrr6rr3rrGrr*)rZmailbox_listr,rrrrrget_mailbox_listzsN	






	


r5cCsct}|s2|jjtjd||fSd}|r|dtkrt|\}}|s|jjtjd|j|||fS|ddkr|j|||fSt|\}}t|j	dkr-|dk	r|j||j
||jjtjd||fS|dk	rL|g|dd<|j|||fS)Nzend of header before group-listrzend of header in group-listr4zgroup-list with empty entries)rr6rrrrrr5r(rrr)rZ
group_listrr,rrrget_group_lists8	











r6cCst}t|\}}|s2|ddkrJtjdj||j||jtdd|dd}|r|ddkr|jtdd||ddfSt|\}}|j||s|jjtj	d|ddkr#tjd	j||jtdd|dd}|r~|dt
kr~t|\}}|j|||fS)
Nrr)z8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorr'r4zgroup-terminatorzend of header in groupz)expected ';' at end of group but found {})rr0rrr=rrr6r6rrr)rrr,rrr	get_groups2	



r7cCst}yt|\}}Wn[tjk
r|yt|\}}Wn-tjk
rwtjdj|YnXYnX|j|||fS)Nzexpected address but found '{}')rr7rrr2r=r)rrr,rrrget_addresss	
r8cCs_t}xI|rTy#t|\}}|j|Wntjk
r}zbd}|dtkrt|\}}|s|ddkr|j||jjtjdqt	|d\}}|dk	r|g|dd<|jt
|g|jjtjdn|ddkrG|jjtjdnct	|d\}}|dk	r{|g|dd<|jt
|g|jjtjdWYdd}~XnX|r%|ddkr%|d	d}d|_t	|d\}}|j
||jjtjd|r|jtdd|dd}qW||fS)
Nrrz"address-list entry with no contentzinvalid address in address-listzempty element in address-listr'zinvalid-mailboxzlist-separatorrJ)rr8rrrrrr6rr3rrrGrr)rZaddress_listr,errrrrrrget_address_list	sN
		



	

r:cCsst}|s,|jjtjd|S|dtkrzt|\}}|j||sz|jjtjdd}xH|r|ddkr|dtkr||d7}|dd}qW|js|jjtjdj	||jt
|dn%t||_|jt
|d	|rl|dtkrlt|\}}|j||s|ddkr|jdk	r|jjtjd
|r|jt
|d|S|jt
dd|dd}|r&|dtkr&t|\}}|j||sX|jdk	rT|jjtjd
|Sd}x8|r|dtkr||d7}|dd}qaW|js|jjtjdj	||jt
|dn%t||_
|jt
|d	|r:|dtkr:t|\}}|j||ro|jjtjd
|jt
|d|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr#r	r'z1Expected MIME major version number but found {!r}rdigitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)rr6rrHeaderMissingRequiredValuerrisdigitrr=rintrr)rZmime_versionr,r;rrrparse_mime_versionQ	sv	


)





r?cCst}xv|r|ddkr|dtkr_|jt|dd|dd}qt|\}}|j|qW||fS)Nrr4zmisplaced-specialr')rrrrr)rZinvalid_parameterr,rrrget_invalid_parameter	s	
r@cCsot|}|s*tjdj||j}|t|d}t|d}t|||fS)Nzexpected ttext but found '{}'ttext)_non_token_end_matcherrrr=rr(rr)rrrArrr	get_ttext	s	
rCcCst}|r>|dtkr>t|\}}|j||rl|dtkrltjdj|t|\}}|j||r|dtkrt|\}}|j|||fS)Nrzexpected token but found '{}')	rrrr
TOKEN_ENDSrrr=rC)rZmtokenr,rrr	get_token	s		


rEcCsot|}|s*tjdj||j}|t|d}t|d}t|||fS)Nz expected attrtext but found {!r}r)_non_attribute_end_matcherrrr=rr(rr)rrrrrrget_attrtext	s	
rGcCst}|r>|dtkr>t|\}}|j||rl|dtkrltjdj|t|\}}|j||r|dtkrt|\}}|j|||fS)Nrzexpected token but found '{}')	rrrrATTRIBUTE_ENDSrrr=rG)rrr,rrr
get_attribute	s		


rIcCsot|}|s*tjdj||j}|t|d}t|d}t|||fS)Nz)expected extended attrtext but found {!r}zextended-attrtext)#_non_extended_attribute_end_matcherrrr=rr(rr)rrrrrrget_extended_attrtext	s
rKcCst}|r>|dtkr>t|\}}|j||rl|dtkrltjdj|t|\}}|j||r|dtkrt|\}}|j|||fS)Nrzexpected token but found '{}')	rrrrEXTENDED_ATTRIBUTE_ENDSrrr=rK)rrr,rrrget_extended_attribute
s	


rMcCs3t}|s |ddkr8tjdj||jtdd|dd}|sv|djrtjdj|d}x8|r|djr||d7}|dd}qW|ddkr|dkr|jjtjd	t	||_
|jt|d
||fS)Nr*zExpected section but found {}zsection-markerr'z$Expected section number but found {}r#0z&section numberhas an invalid leading 0r;)rrrr=rrr=r6ZInvalidHeaderErrorr>r)rrr;rrrget_section#
s$		rPcCst}|stjdd}|dtkrFt|\}}|sdtjdj||ddkrt|\}}nt|\}}|dk	r|g|dd<|j|||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r)	rrrrrr=rrMr)rvrr,rrr	get_valueA
s 	
rRcCst}t|\}}|j||s?|ddkrk|jjtjdj|||fS|ddkry,t|\}}d|_|j|Wntj	k
rYnX|stj	d|ddkr|jt
dd|dd}d|_|dd	kr2tj	d
|jt
d	d|dd}d}|r|dtkrt
|\}}|j|d}|}|jr|r|ddkrt|\}}|j}d
}|jdkr>|r
|ddkr
d}qkt|\}}	|	rk|	ddkrkd}n-yt|\}}	WnYn
X|	skd}|r|jjtjd|j|x4|D],}
|
jdkrg|
dd<|
}PqW|}nd}|jjtjd|r|ddkrd}nt|\}}|js@|jdkr|sW|ddkr|j||dk	rv|}||fS|jjtjd|s|jjtjd|j||dkr||fSn7|dk	r1x|D]}
|
jdkrPqW|
jdk|j|
|
j|_|ddkrYtj	dj||jt
dd|dd}|r|ddkrt|\}}|j||j|_|s|ddkrtj	dj||jt
dd|dd}|dk	rt}x|r|dtkrXt|\}}nD|ddkrt
dd}|dd}nt|\}}|j|q-W|}nt|\}}|j||dk	r|}||fS)Nrr4z)Parameter contains name ({}) but no valuerNTzIncomplete parameterzextended-parameter-markerr'=zParameter not followed by '='zparameter-separatorrF'z5Quoted string value for extended parameter is invalidzbare-quoted-stringzZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimiterszextended-attrtextrz=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231 delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)rrIrr6rrr=rPrrrrrrrrrrGrKrGrRrrSrrrrr)rrr,rr{ZappendtoZqstringZinner_valueZ
semi_validrtrQrrr
get_parameterW
s	


		
			


	
	









			
rVcCst}x|ry#t|\}}|j|Wntjk
r=}zd}|dtkrut|\}}|s|j||S|ddkr|dk	r|j||jjtjdnZt	|\}}|r|g|dd<|j||jjtjdj
|WYdd}~XnX|r|ddkr|d	}d|_t	|\}}|j||jjtjdj
||r|jt
dd|dd}qW|S)
Nrr4zparameter entry with no contentzinvalid parameter {!r}r'zinvalid-parameterz)parameter with invalid trailing text {!r}zparameter-separatorrJ)rrVrrrrrr6rr@r=rGrr)rZmime_parametersr,r9rrrrrparse_mime_parameters
sD
		



&
	
rWcCsxv|rx|ddkrx|dtkrV|jt|dd|dd}qt|\}}|j|qW|sdS|jtdd|jt|dddS)Nrr4zmisplaced-specialr'zparameter-separator)rrrrrW)Z	tokenlistrr,rrr_find_mime_parameterssrXcCs;t}d}|s2|jjtjd|Syt|\}}WnHtjk
r|jjtjdj|t	|||SYnX|j||s|ddkr|jjtjd|rt	|||S|j
jj|_
|jtdd|dd}yt|\}}WnHtjk
r|jjtjd	j|t	|||SYnX|j||j
jj|_|s|S|dd
kr|jjtjdj||`
|`t	|||S|jtd
d|jt|dd|S)
NFz"Missing content type specificationz(Expected content maintype but found {!r}r/zInvalid content typezcontent-type-separatorr'z'Expected content subtype but found {!r}r4z<Only parameters are valid after content type, but found {!r}zparameter-separator)rr6rrr<rErrr=rXrrlowerrrrrW)rZctypeZrecoverr,rrrparse_content_type_header)sX	

	



	


r[c
Cs6t}|s,|jjtjd|Syt|\}}WnHtjk
r|jjtjdj|t	|||SYnX|j||j
jj|_
|s|S|ddkr|jjtjdj|t	|||S|jtdd|jt|dd|S)NzMissing content dispositionz+Expected content disposition but found {!r}rr4zCOnly parameters are valid after content disposition, but found {!r}zparameter-separatorr')rr6rrr<rErrr=rXrrrZrrrW)rZdisp_headerr,rrr parse_content_disposition_headerbs2	

	


r\cCs1t}|s,|jjtjd|Syt|\}}Wn7tjk
r{|jjtjdj|Yn&X|j||j	j
j|_|s|Sx|r,|jjtjd|dt
kr
|jt|dd|dd}qt|\}}|j|qW|S)Nz!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingrzmisplaced-specialr')rr6rrr<rErrr=rrrZrrrr)rZ
cte_headerr,rrr&parse_content_transfer_encoding_headers.	

	
r])rerstringrcollectionsroperatorrZemailrrQrrrrrrrrrZ	TSPECIALSrDZ	ASPECIALSrHrLrrrr4rirnrxr}r~rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
rrrrrr*r+compiler=r$rrrmatchr
findallrrBrFrJrrrrrpr
rrrrrrrrrrrr!rr"r$r&r'r(r,r/r0r1r2r3r5r6r7r8r:r?r@rCrErGrIrKrMrPrRrVrWrXr[r\r]rrrr<module>Fs


TK`		 '#
U3$000!
*8
&'/'&).9%>D49
Back to Directory File Manager