o 0iҧ @s ddlZddlZddlZddlmZddlmZddlmZ ddlm Z ddlm Z e dZ e e dBZe d Zee BZee d Zee d Zee d Be d Zee BZee d BZee BZee dZddhZeeBZddZddZddZedejejBZ Gddde!Z"Gddde"Z#Gddde"Z$Gddde"Z%Gd d!d!e"Z&Gd"d#d#e#Z'Gd$d%d%e"Z(Gd&d'd'e"Z)Gd(d)d)e"Z*Gd*d+d+e"Z+Gd,d-d-e+Z,Gd.d/d/e#Z-Gd0d1d1e"Z.Gd2d3d3e"Z/Gd4d5d5e"Z0Gd6d7d7e"Z1Gd8d9d9e"Z2Gd:d;d;e"Z3Gdd?d?e"Z5Gd@dAdAe"Z6GdBdCdCe"Z7GdDdEdEe"Z8GdFdGdGe"Z9GdHdIdIe"Z:GdJdKdKe"Z;GdLdMdMe"ZGdRdSdSe"Z?GdTdUdUe"Z@GdVdWdWe"ZAGdXdYdYe"ZBGdZd[d[eBZCGd\d]d]e"ZDGd^d_d_e"ZEGd`dadae"ZFGdbdcdce"ZGGdddedee"ZHGdfdgdgeHZIGdhdidieHZJGdjdkdke"ZKGdldmdme"ZLGdndodoe"ZMGdpdqdqeMZNGdrdsdseNZOGdtdudue"ZPGdvdwdweQZRGdxdydyeRZSGdzd{d{eRZTGd|d}d}eSZUGd~dde jVZWeTd dZXeTddZYeTddZZed[d\e j]Z^ed[e_d\ej`ZaedjbZced[e_d\ej`Zded[e_d\ej`Zeed[e_d\ej`ZfddZgddZhddZidddZjddZkddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZddÄZddńZddDŽZddɄZdd˄Zdd̈́ZddτZddфZddӄZddՄZddׄZddلZddۄZdd݄Zdd߄ZddZddZddZddZddZddZddZddZddZddZddZddZddZddZddZdS)N) hexdigits) itemgetter)_encoded_words)errors)utilsz (z ()<>@,:;.\"[].z."(z/?=z*'%%  cCs t|ddddS)N\\\"z\"strreplacevaluerA/opt/alt/python310/lib64/python3.10/email/_header_value_parser.pymake_quoted_pairscsrcCs" t|ddddddS)Nr r r\()\)rrrrrmake_parenthesis_pairshsrcCst|}d|dS)Nr)r)rZescapedrrr quote_stringns rz =\? # literal =? [^?]* # charset \? # literal ? [qQbB] # literal 'q' or 'b', case insensitive \? # literal ? .*? # encoded word \?= # literal ?= cseZdZdZdZdZfddZddZfddZe d d Z e d d Z d dZ e ddZ e ddZddZdddZdddZdddZZS) TokenListNTcstj|i|g|_dSN)super__init__defects)selfargskw __class__rrrs zTokenList.__init__cCddd|DS)Ncs|]}t|VqdSrr.0xrrr z$TokenList.__str__..joinr!rrr__str__zTokenList.__str__cd|jjtSNz{}({})formatr%__name__r__repr__r1r$rrr9s zTokenList.__repr__cCr&)Nr'css|] }|jr|jVqdSrrr*rrrr-sz"TokenList.value..r/r1rrrrzTokenList.valuecCstdd|D|jS)Ncs|]}|jVqdSr) all_defectsr*rrrr-z(TokenList.all_defects..)sumr r1rrrr<szTokenList.all_defectscCs |dSNr)startswith_fwsr1rrrr@ zTokenList.startswith_fwscCs tdd|DS)Ncsr;r) as_ew_allowed)r+partrrrr-r=z*TokenList.as_ew_allowed..)allr1rrrrBszTokenList.as_ew_allowedcCsg}|D]}||jq|Sr)extendcomments)r!rFtokenrrrrFszTokenList.commentscCs t||dS)Npolicy)_refold_parse_treer!rIrrrfoldrAzTokenList.foldr'cCst|j|ddS)Nindent)printppstrr!rNrrrpprintr3zTokenList.pprintcCsd|j|dS)Nr rM)r0_pprQrrrrPszTokenList.ppstrccs|d||jj|jV|D]}t|ds|d|Vq||dEdHq|jr3d|j}nd}d||VdS)Nz{}{}/{}(rSz* !! invalid element in token list: {!r}z z Defects: {}r'z{}){})r7r%r8 token_typehasattrrSr )r!rNrGZextrarrrrSs  z TokenList._ppr')r8 __module__ __qualname__rTsyntactic_breakew_combine_allowedrr2r9propertyrr<r@rBrFrLrRrPrS __classcell__rrr$rrs(        rc@s$eZdZeddZeddZdS)WhiteSpaceTokenListcCdSN rr1rrrrzWhiteSpaceTokenList.valuecCdd|DS)NcSg|] }|jdkr|jqS)comment)rTcontentr*rrr z0WhiteSpaceTokenList.comments..rr1rrrrFzWhiteSpaceTokenList.commentsN)r8rWrXr[rrFrrrrr]s  r]c@eZdZdZdS)UnstructuredTokenList unstructuredNr8rWrXrTrrrrrjrjc@ri)PhrasephraseNrlrrrrrnrmrnc@ri)WordZwordNrlrrrrrprmrpc@ri)CFWSListcfwsNrlrrrrrqrmrqc@ri)AtomatomNrlrrrrrsrmrsc@eZdZdZdZdS)TokenrGFN)r8rWrXrTZ encode_as_ewrrrrrvrvc@seZdZdZdZdZdZdS) EncodedWord encoded-wordN)r8rWrXrTctecharsetlangrrrrrx rxc@4eZdZdZeddZeddZeddZdS) QuotedString quoted-stringcC"|D] }|jdkr|jSqdSNbare-quoted-stringrTrr!r,rrrre   zQuotedString.contentcCs>g}|D]}|jdkr|t|q||jqd|S)Nrr')rTappendrrr0)r!resr,rrr quoted_values   zQuotedString.quoted_valuecCrrrr!rGrrrstripped_valuerzQuotedString.stripped_valueN)r8rWrXrTr[rerrrrrrrs   rc@s$eZdZdZddZeddZdS)BareQuotedStringrcCstddd|DS)Nr'csr(rr)r*rrrr-r.z+BareQuotedString.__str__..)rr0r1rrrr2szBareQuotedString.__str__cCr&)Nr'csr(rr)r*rrrr-r.z)BareQuotedString.value..r/r1rrrrr:zBareQuotedString.valueN)r8rWrXrTr2r[rrrrrr s rc@s8eZdZdZddZddZeddZedd Zd S) Commentrdcs(dtdgfddDdgggS)Nr'rcsg|]}|qSr)quoter*r1rrrfsz#Comment.__str__..r)r0r>r1rr1rr2szComment.__str__cCs2|jdkr t|St|ddddddS)Nrdr r rrrr)rTrr)r!rrrrr"s z Comment.quotecCr&)Nr'csr(rr)r*rrrr-+r.z"Comment.content..r/r1rrrre)r:zComment.contentcCs|jgSr)rer1rrrrF-szComment.commentsN) r8rWrXrTr2rr[rerFrrrrrs rc@r~) AddressListz address-listcCrb)NcSg|] }|jdkr|qS)addressrTr*rrrrf7z)AddressList.addresses..rr1rrr addresses5rhzAddressList.addressescCtdd|DgS)Ncs |] }|jdkr|jVqdSrNrT mailboxesr*rrrr-;  z(AddressList.mailboxes..r>r1rrrr9 zAddressList.mailboxescCr)NcsrrrT all_mailboxesr*rrrr-@rz,AddressList.all_mailboxes..rr1rrrr>rzAddressList.all_mailboxesN)r8rWrXrTr[rrrrrrrr1s  rc@r~) AddressrcC|djdkr |djSdS)NrgrouprT display_namer1rrrrH zAddress.display_namecCs4|djdkr |dgS|djdkrgS|djSNrmailboxinvalid-mailboxrr1rrrrMs   zAddress.mailboxescCs:|djdkr |dgS|djdkr|dgS|djSrrr1rrrrUs    zAddress.all_mailboxesN)r8rWrXrTr[rrrrrrrrDs  rc@(eZdZdZeddZeddZdS) MailboxList mailbox-listcCrb)NcSr)rrr*rrrrfcrz)MailboxList.mailboxes..rr1rrrrarhzMailboxList.mailboxescCrb)NcSsg|] }|jdvr|qS))rrrr*rrrrfgs z-MailboxList.all_mailboxes..rr1rrrrerhzMailboxList.all_mailboxesNr8rWrXrTr[rrrrrrr]s  rc@r) GroupList group-listcC |r |djdkr gS|djSNrrrr1rrrro zGroupList.mailboxescCrrrr1rrrrurzGroupList.all_mailboxesNrrrrrrks  rc@r~) GrouprcC|djdkr gS|djSNrrr1rrrr zGroup.mailboxescCrrrr1rrrrrzGroup.all_mailboxescC |djSr?)rr1rrrr zGroup.display_nameN)r8rWrXrTr[rrrrrrrr|s  rc@LeZdZdZeddZeddZeddZedd Zed d Z d S) NameAddr name-addrcCst|dkrdS|djSNr)lenrr1rrrr  zNameAddr.display_namecCrN local_partr1rrrrrzNameAddr.local_partcCrrdomainr1rrrrrzNameAddr.domaincCrr)router1rrrrrzNameAddr.routecCrr addr_specr1rrrrrzNameAddr.addr_specN r8rWrXrTr[rrrrrrrrrrs    rc@s@eZdZdZeddZeddZeddZedd Zd S) AngleAddrz angle-addrcCrN addr-spec)rTrrrrrrrzAngleAddr.local_partcCrrrTrrrrrrrzAngleAddr.domaincCr)N obs-route)rTdomainsrrrrrrzAngleAddr.routecCs<|D]}|jdkr|jr|jSt|j|jSqdS)Nrz<>)rTrrrrrrrrs  zAngleAddr.addr_specN) r8rWrXrTr[rrrrrrrrrs   rc@eZdZdZeddZdS)ObsRoutercCrb)NcSrcrrr*rrrrfrgz$ObsRoute.domains..rr1rrrrrhzObsRoute.domainsN)r8rWrXrTr[rrrrrrrc@r) MailboxrcCrNrrrr1rrrrrzMailbox.display_namecCrr?rr1rrrrrzMailbox.local_partcCrr?rr1rrrrrzMailbox.domaincCrr)rTrr1rrrrrz Mailbox.routecCrr?rr1rrrrrzMailbox.addr_specNrrrrrrs    rc@s,eZdZdZeddZeZZZZ dS)InvalidMailboxrcCdSrrr1rrrrrazInvalidMailbox.display_nameNrrrrrrs  rcs(eZdZdZdZefddZZS)DomainrFcdtjSNr'r0rrsplitr1r$rrrz Domain.domain)r8rWrXrTrBr[rr\rrr$rrs rc@ri)DotAtomdot-atomNrlrrrrrrmrc@ru) DotAtomTextz dot-atom-textTNr8rWrXrTrBrrrrr rwrc@ru) NoFoldLiteralzno-fold-literalFNrrrrrrrwrc@sDeZdZdZdZeddZeddZeddZed d Z d S) AddrSpecrFcCrr?rr1rrrrrzAddrSpec.local_partcCst|dkrdS|djS)Nr)rrr1rrrrrzAddrSpec.domaincCs<t|dkr |djS|dj|dj|djS)Nrrrr)rrrstriplstripr1rrrr$s  &zAddrSpec.valuecCsLt|j}t|t|tkrt|j}n|j}|jdur$|d|jS|S)N@)setrr DOT_ATOM_ENDSrr)r!ZnamesetZlprrrr*s   zAddrSpec.addr_specN) r8rWrXrTrBr[rrrrrrrrrs   rc@ru) ObsLocalPartzobs-local-partFNrrrrrr6rcs4eZdZdZdZeddZefddZZS) DisplayNamez display-nameFcCst|}t|dkr |jS|djdkr|dn|ddjdkr/t|ddd|d<|djdkr=||jS|ddjdkrRt|ddd|d<|jS)Nrrrrr)rrrrTpop)r!rrrrrAs  zDisplayName.display_namecsd}|jrd}n |D] }|jdkrd}q t|dkrM|rMd}}|djdks0|ddjdkr2d}|djdksB|ddjdkrDd}|t|j|StjS) NFTrrr'rrr`r)r rTrrrrr)r!rr,ZpreZpostr$rrrRs   zDisplayName.value) r8rWrXrTrZr[rrr\rrr$rr<s rc@s,eZdZdZdZeddZeddZdS) LocalPartz local-partFcCs"|djdkr |djS|djS)Nrr)rTrrr1rrrrks  zLocalPart.valuecCstg}t}d}|dtgD]J}|jdkrq|r.|jdkr.|djdkr.t|dd|d<t|t}|rM|jdkrM|djdkrM|t|ddn|||d}|}qt|dd}|jS)NFrrrdotrr)DOTrTr isinstancerr)r!rZlastZ last_is_tltokZis_tlrrrrrs$   zLocalPart.local_partN)r8rWrXrTrBr[rrrrrrrfs rcs4eZdZdZdZefddZeddZZS) DomainLiteralzdomain-literalFcrrrr1r$rrrrzDomainLiteral.domaincCr)NptextrrrrriprzDomainLiteral.ip) r8rWrXrTrBr[rrr\rrr$rrsrc@seZdZdZdZdZdS) MIMEVersionz mime-versionN)r8rWrXrTmajorminorrrrrrsrc@s4eZdZdZdZdZdZeddZeddZ dS) Parameter parameterFus-asciicCs|jr|djSdSr) sectionednumberr1rrrsection_numberszParameter.section_numbercCsf|D].}|jdkr|jS|jdkr0|D]}|jdkr/|D]}|jdkr.|jSqqqdS)Nrrrr')rTrrrrr param_values     zParameter.param_valueN) r8rWrXrTrextendedr{r[rrrrrrrs rc@ri)InvalidParameterinvalid-parameterNrlrrrrrsrc@r) Attribute attributecCs$|D] }|jdr|jSqdS)Nattrtext)rTendswithrrrrrrs   zAttribute.stripped_valueNr8rWrXrTr[rrrrrrrrc@seZdZdZdZdS)SectionsectionN)r8rWrXrTrrrrrrrrc@r)ValuercCs2|d}|jdkr |d}|jdr|jS|jS)Nrrrr)rrzextended-attribute)rTrrrrrrrrs zValue.stripped_valueNrrrrrrrrc@s(eZdZdZdZeddZddZdS)MimeParametersmime-parametersFc csi}|D]*}|jdsq|djdkrq|dj}||vr%g||<|||j|fq|D]\}}t|tdd}|dd}|j }|j smt |dkrm|dddkrm|ddj t d|dd}g}d}|D]n\} } | |kr| j s| j t dqs| j t d|d7}| j} | j rztj| } Wntytjj| d d } Yn(wz| |d } Wnttfy| d d } Ynwt| r| j t || qsd |} || fVq4dS)Nrrr)keyrz.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingzlatin-1)encodingsurrogateescaperr')rTrrstriprritemssortedrr{rrr rInvalidHeaderDefectrurllibparseZunquote_to_bytesUnicodeEncodeErrorZunquotedecode LookupErrorr_has_surrogatesUndecodableBytesDefectr0) r!paramsrGnamepartsZ first_paramr{Z value_partsirparamrrrrrsh           zMimeParameters.paramscCsTg}|jD]\}}|r|d|t|q||qd|}|r(d|SdS)N{}={}z; r`r')rrr7rr0)r!rrrrrrr2,s  zMimeParameters.__str__N)r8rWrXrTrYr[rr2rrrrr s   Er c@r)ParameterizedHeaderValueFcCs&t|D] }|jdkr|jSqiS)Nr )reversedrTrrrrrr=s   zParameterizedHeaderValue.paramsN)r8rWrXrYr[rrrrrr7src@seZdZdZdZdZdZdS) ContentTypez content-typeFtextZplainN)r8rWrXrTrBmaintypesubtyperrrrr!Er}r!c@seZdZdZdZdZdS)ContentDispositionzcontent-dispositionFN)r8rWrXrTrBcontent_dispositionrrrrr%Lr%c@seZdZdZdZdZdS)ContentTransferEncodingzcontent-transfer-encodingFZ7bitN)r8rWrXrTrBrzrrrrr(Rr'r(c@ru) HeaderLabelz header-labelFNrrrrrr)Xrwr)c@seZdZdZdZddZdS)MsgIDzmsg-idFcCst||jSr)rlineseprKrrrrLarhz MsgID.foldN)r8rWrXrTrBrLrrrrr*]s r*c@ri) MessageIDz message-idNrlrrrrr,frmr,c@ri)InvalidMessageIDzinvalid-message-idNrlrrrrr-jrmr-c@ri)HeaderheaderNrlrrrrr.nrmr.csreZdZdZdZdZfddZfddZddZe dd Z dfd d Z d dZ e ddZ ddZZS)TerminalTcst||}||_g|_|Sr)r__new__rTr )clsrrTr!r$rrr1|szTerminal.__new__cr4r5r6r1r$rrr9szTerminal.__repr__cCst|jjd|jdS)N/)rOr%r8rTr1rrrrRszTerminal.pprintcCs t|jSr)listr r1rrrr<rzTerminal.all_defectsr'c s6d||jj|jt|jsdgSd|jgS)Nz {}{}/{}({}){}r'z {})r7r%r8rTrr9r rQr$rrrSs z Terminal._ppcCrrrr1rrrpop_trailing_wsrazTerminal.pop_trailing_wscCsgSrrr1rrrrFrazTerminal.commentscCst||jfSr)rrTr1rrr__getnewargs__szTerminal.__getnewargs__rV)r8rWrXrBrZrYr1r9rRr[r<rSr5rFr6r\rrr$rr0vs     r0c@ eZdZeddZddZdS)WhiteSpaceTerminalcCr^r_rr1rrrrrazWhiteSpaceTerminal.valuecCs|o|dtvSr?WSPr1rrrr@sz!WhiteSpaceTerminal.startswith_fwsNr8rWrXr[rr@rrrrr8  r8c@r7) ValueTerminalcCs|Srrr1rrrrrazValueTerminal.valuecCr^)NFrr1rrrr@zValueTerminal.startswith_fwsNr;rrrrr=r<r=c@r7)EWWhiteSpaceTerminalcCr^rrr1rrrrrazEWWhiteSpaceTerminal.valuecCr^rrr1rrrr2r>zEWWhiteSpaceTerminal.__str__N)r8rWrXr[rr2rrrrr?r<r?c@s eZdZdS)_InvalidEwErrorN)r8rWrXrrrrr@sr@r,list-separatorrzroute-component-markerz([{}]+)r'z[^{}]+z[\x00-\x20\x7F]cCsD t|}|r|jt|t|r |jtddSdS)Nz*Non-ASCII characters found in header token)_non_printable_finderr rrZNonPrintableDefectrrr)xtextZnon_printablesrrr_validate_xtexts   rEcCs t|d^}}g}d}d}tt|D]&}||dkr&|r#d}d}nd}q|r+d}n|||vr3n |||q|d}d|d||dg||fS)NrFr Tr') _wsp_splitterrangerrr0)rendcharsZfragment remainderZvcharsescapehad_qpposrrr_get_ptext_to_endcharss&  $rMcCs0 |}t|dt|t|d}||fS)Nfws)rr8r)rZnewvaluerNrrrget_fwssrOvtextc Cs t}|dstd||dddd^}}||ddkr-td|d|}t|dkrY|dtvrY|dtvrY| ddkrY|dd^}}|d|}t|dkrj|j t d ||_ d|}ztd|d\}}} } Wnttfytd |j w||_| |_|j | |r|dtvrt|\} }| | qt|d^} }t| |} t| | | d|}|s|r|dtvr|j t d ||fS) N=?z"expected encoded word but found {}rz?=rr'r?zwhitespace inside encoded wordz!encoded word format invalid: '{}'z.missing trailing whitespace after encoded-word)rx startswithrHeaderParseErrorr7rr0rrcountr rrrz_ewr ValueErrorKeyErrorr@r{r|rEr:rOrFr=rE)rZ terminal_typeZewrrIZremstrrestr"r{r|r rGcharsrPrrrget_encoded_wordsd                 r[cCsB t}|r|dtvrt|\}}||qd}|druz t|d\}}Wnty3d}YnBtjy<Yn9wd}t |dkrW|dj dkrW|j t dd}|rot |d kro|d j d krot |dd|d<||qt|d ^}}|rt|r|d^}}t|d}t|||d |}|s|S) NrTrQZutextFrrNz&missing whitespace before encoded wordrryr')rjr:rOrrSr[r@rrTrrTr rr?rFrfc2047_matchersearch partitionr=rEr0)rrkrGvalid_ewZhave_wsrrIrPrrrget_unstructuredOsN           )racC, t|d\}}}t|d}t|||fS)Nz()r)rMr8rErr_rrr get_qp_ctexts  recCrb)Nrr)rMr=rErcrrr get_qcontents  rfcCP t|}|std||}|t|d}t|d}t|||fS)Nzexpected atext but found '{}'atext)_non_atom_end_matcherrrTr7rrr=rE)rmrhrrr get_atexts rkcCsp |ddkrtd|t}|dd}|r+|ddkr+t|\}}|||r|ddkr|dtvr@t|\}}nT|dddkrd}zt|\}}|j t dd }Wntjymt|\}}Ynw|rt |dkr|d j d kr|d j d krt |d d |d <nt|\}}|||r|ddks3|s|j t d||fS||ddfS)Nrrzexpected '"' but found '{}'rrrQFz!encoded word inside quoted stringTrrNr\ryz"end of header inside quoted string)rrTr7rrfrr:rOr[r rrrTr?)rZbare_quoted_stringrGr`rrrget_bare_quoted_stringsP          rlcCs |r|ddkrtd|t}|dd}|rO|ddkrO|dtvr/t|\}}n|ddkr           rzc Csn t}d}|dtvrt|\}}|std|zt|\}}Wn-tjyQzt|\}}WntjyN|ddkrI|dtvrIt }YnwYnw|dur]|g|dd<| ||r|ddksp|dtvrt t ||\}}|j dkr|j tdn |j td||d<z |jdW||fSty|j tdY||fSw) Nrz"expected local-part but found '{}'r invalid-obs-local-partzzangle-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) rrnrorrrTr7r=r rrrry)rZ angle_addrrGrrrget_angle_addrsZ               rcCs> t}t|\}}||dd|jdd|_||fSr)rrzrEr )rrrGrrrget_display_names  rcCs t}d}|dtvrt|\}}|std||ddkrT|dtvr0td|t|\}}|s@td||durO|g|ddd<d}||t |\}}|dure|g|dd<||||fS)Nrz!expected name-addr but found '{}'r) rrnrorrTr7rxrrr)rZ name_addrrvrGrrr get_name_addrs8        rc Cs t}zt|\}}Wn#tjy/zt|\}}Wntjy,td|wYnwtdd|jDr=d|_| |||fS)Nzexpected mailbox but found '{}'cs|] }t|tjVqdSr)rrrr*rrrr-zget_mailbox..r) rrrrTrr7anyr<rTr)rrrGrrr get_mailboxs( rcCst t}|r6|d|vr6|dtvr#|t|dd|dd}n t|\}}|||r6|d|vs ||fS)Nrrr)rrxrr=rz)rrHZinvalid_mailboxrGrrrget_invalid_mailbox    rcCs t}|r|ddkrz t|\}}||Wntjyd}|dtvrgt|\}}|r7|ddvrF|||jtdnQt |d\}}|durX|g|dd<|||jt dn0|ddkrw|jtdn t |d\}}|dur|g|dd<|||jt dYnw|r|ddvr|d}d|_ t |d\}}| ||jt d|r|ddkr|t |d d}|r|ddks ||fS) Nr;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listrArrr)rrrrrTrnror ryrrrTrEr)rZ mailbox_listrGrvrrrrget_mailbox_list.s`                )rcCs t}|s|jtd||fSd}|rF|dtvrFt|\}}|s7|jtd||||fS|ddkrF||||fSt|\}}t|j dkrn|dur\||| ||jt d||fS|dury|g|dd<||||fS)Nzend of header before group-listrzend of header in group-listrzgroup-list with empty entries) rr rrrrnrorrrrEry)rZ group_listrvrGrrrget_group_listgs@           rcCs t}t|\}}|r|ddkrtd||||tdd|dd}|rE|ddkrE|tdd||ddfSt|\}}|||s\|jt dn|ddkrjtd ||tdd|dd}|r|dt vrt |\}}||||fS) Nrrz8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorrrzgroup-terminatorzend of header in groupz)expected ';' at end of group but found {}) rrrrTr7rr=rr rrnro)rrrGrrr get_groups:          rc Csr t}zt|\}}Wn#tjy/zt|\}}Wntjy,td|wYnw||||fS)Nzexpected address but found '{}')rrrrTrr7r)rrrGrrr get_addresss  rc Cs t}|rz t|\}}||Wntjy}zd}|dtvret|\}}|r2|ddkrA|||jtdnWt |d\}}|durS|g|dd<|t |g|jt dn3|ddkru|jtdn#t |d\}}|dur|g|dd<|t |g|jt dWYd}~nd}~ww|r|ddkr|dd}d|_ t |d\}}| ||jt d|r|tdd|d d}|s||fS) NrrAz"address-list entry with no contentzinvalid address in address-listzempty element in address-listrrrBr)rrrrrTrnror ryrrrrTrEr=)rZ address_listrGerrrvrrrrget_address_lists`              )rcCs t}|std||ddkrtd||tdd|dd}t|\}}|||r=|ddkrEtd||tdd ||ddfS) Nz'expected no-fold-literal but found '{}'rrz;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startrrz9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)rrrTr7rr=r)rZno_fold_literalrGrrrget_no_fold_literals,    rcCsr t}|r|dtvrt|\}}|||r|ddkr'td||tdd|dd}zt|\}}Wn,tjyizt |\}}|j t dWntjyftd|wYnw|||rw|ddkr|j t d |r|dd kr|td d |dd}||fS|tdd |dd}zt|\}}WnHtjyzt |\}}Wn5tjy}z(zt|\}}|j t d Wntjytd|wWYd}~nd}~wwYnw|||r|dd kr|dd}n |j t d|td d |r5|dtvr5t|\}}||||fS)Nrrzexpected msg-id but found '{}'z msg-id-startrzobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'rzmsg-id with no id-rightrz msg-id-endrzobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)r*rnrorrrTr7r=rsr}r ryrrr)rZmsg_idrGerrr get_msg_ids                  rc Cs t}z t|\}}||Wn(tjy9}zt|}t|}|jtd |WYd}~|Sd}~ww|rH|jtd ||S)NzInvalid msg-id: {!r}zUnexpected {!r}) r,rrrrTrar-r rr7)rZ message_idrGZexrrrparse_message_idYs&  rcCs t}|s|jtd|S|dtvr-t|\}}|||s-|jtdd}|rW|ddkrW|dtvrW||d7}|dd}|rW|ddkrW|dtvs=|sp|jtd ||t |dn t ||_ |t |d |r|dtvrt|\}}|||r|ddkr|j dur|jtd |r|t |d|S|t dd |dd}|r|dtvrt|\}}|||s|j dur|jtd |Sd}|r|dtvr||d7}|dd}|r|dtvs|s |jtd ||t |dn t ||_ |t |d |rB|dtvrBt|\}}|||rV|jtd |t |d|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr'rrz1Expected MIME major version number but found {!r}rDdigitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)rr rrHeaderMissingRequiredValuernroisdigitrr7r=intrr)rZ mime_versionrGrrrrparse_mime_versionus                          rcCst t}|r6|ddkr6|dtvr#|t|dd|dd}n t|\}}|||r6|ddks ||fS)Nrrrr)rrxrr=rz)rZinvalid_parameterrGrrrget_invalid_parameterrrcCrg)Nzexpected ttext but found '{}'ttext)_non_token_end_matcherrrTr7rrr=rE)rrjrrrr get_ttext rcC t}|r|dtvrt|\}}|||r'|dtvr'td|t|\}}|||rE|dtvrEt|\}}||||fSNrzexpected token but found '{}') rvrnror TOKEN_ENDSrrTr7r)rZmtokenrGrrr get_token      rcCrg)Nz expected attrtext but found {!r}r)_non_attribute_end_matcherrrTr7rrr=rErrjrrrr get_attrtextrrcCrr) rrnrorATTRIBUTE_ENDSrrTr7rrrrGrrr get_attribute rrcCrg)Nz)expected extended attrtext but found {!r}extended-attrtext)#_non_extended_attribute_end_matcherrrTr7rrr=rErrrrget_extended_attrtext s rcCrr) rrnrorEXTENDED_ATTRIBUTE_ENDSrrTr7rrrrrget_extended_attribute1 s      rcCs t}|r |ddkrtd||tdd|dd}|r*|ds2td|d}|rP|drP||d7}|dd}|rP|ds<|ddkrc|dkrc|jtd t ||_ |t|d ||fS) Nr*zExpected section but found {}zsection-markerrz$Expected section number but found {}r'0z'section number has an invalid leading 0r) rrrTr7rr=rr rrr)rrrrrr get_sectionG s0     rcCs t}|s tdd}|dtvrt|\}}|s#td||ddkr0t|\}}nt|\}}|durA|g|dd<||||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r) rrrTrnror7rprr)rvrvrGrrr get_valuee s$      rc Csz t}t|\}}|||r|ddkr'|jtd|||fS|ddkrfzt|\}}d|_||Wn tj yGYnw|sOt d|ddkrf|t dd|dd}d|_ |dd krqt d |t d d |dd}d}|r|dt vrt |\}}||d}|}|j r|r|dd krt|\}}|j}d }|jdkr|r|ddkrd}n#t|\}} | r| ddkrd}nzt|\}} WnYn| sd}|r |jtd|||D]} | jdkr g| dd<| }nq|}n d}|jtd|r%|ddkr%d}nt|\}}|j r5|jdkrX|r?|ddkrO|||durK|}||fS|jtd|ss|jtd|||durr||fSnw|dur|D] } | jdkrnqz| jdk|| | j|_|ddkrt d||t dd|dd}|r|ddkrt|\}}|||j|_|r|ddkrt d||t dd|dd}|dur't} |r$|dtvrt|\}}n|dd krt d d}|dd}nt|\}}| ||s| }nt|\}}|||dur9|}||fS)Nrrz)Parameter contains name ({}) but no valuerTzIncomplete parameterzextended-parameter-markerr=zParameter not followed by '='parameter-separatorrF'z5Quoted string value for extended parameter is invalidrzZParameter 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 delimitersrrz=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)rrrr rrr7rrrTr=rrnrorprrrrrTrrr{r|rr:rOrf) rrrGrvrIZappendtoZqstringZ inner_valueZ semi_validrYtrrrr get_parameter{ s                                           rc Csn t}|rz t|\}}||Wnitjy|}z\d}|dtvr*t|\}}|s9|||WYd}~S|ddkrR|durH|||jtdn t |\}}|ra|g|dd<|||jtd |WYd}~nd}~ww|r|ddkr|d}d|_ t |\}}| ||jtd ||r|t dd|d d}|s|S) Nrrzparameter entry with no contentzinvalid parameter {!r}rrz)parameter with invalid trailing text {!r}rr)r rrrrTrnror rrr7rTrEr=)rZmime_parametersrGrrvrrrrparse_mime_parameters sR               $rcCs |r3|ddkr3|dtvr |t|dd|dd}n t|\}}|||r3|ddks |s7dS|tdd|t|dddS)Nrrrrr)rxrr=rzr)Z tokenlistrrGrrr_find_mime_parameters= s   rc Cs t}d}|s|jtd|Szt|\}}Wntjy8|jtd|t |||YSw|||rF|ddkrX|jtd|rVt |||S|j |_ |tdd|dd}zt|\}}Wntjy|jtd |t |||YSw|||j |_|s|S|dd kr|jtd ||` |`t |||S|td d |t|dd|S) NFz"Missing content type specificationz(Expected content maintype but found {!r}rr3zInvalid content typezcontent-type-separatorrz'Expected content subtype but found {!r}rz. unknown-8bitTr rHrr~rrrcSsg|] }tt|dqSr)r=rr+prrrrf7 sz&_refold_parse_tree..rdrcSs(g|]}|jdkrtt|dn|qSr)rTr=rrrrrrf= s  r)Zmax_line_lengthsysmaxsizeutf8r0r4rrrT SPECIALSNL isdisjointNLSETr~rrr<_fold_mime_parametersrBrYrLrr+rrrU _fold_as_ewrZr@r=insertr0)Z parse_treerImaxlenr rlast_ewrZ want_encodingZend_ew_not_allowedrrCtstrr{Z encoded_partnewlineZnewpartsrrrrJ s                     lrJcCs |dur|rtt|d|d|}|dd||d<|dtvrF|d}|dd}t|d|kr>|t||d|7<d}|dtvrX|d}|dd}|durbt|dn|}|dkrjdn|} t| d} | d|kr}td|r|t|d} | | } | dkr|d q}|d| } tj | | d }t|| }|dkr| dd} tj | | d }t|| }|dks|d|7<|t| d}|r|d t|d}|s|d|7<|r|SdS) Nrrrr'rrz3max_line_length is too small to fit an encoded wordr`)r{) rrar:rrrrrTrVr~)Z to_encoderrrrZr{Z leading_wspZ trailing_wspZ new_last_ewZ encode_as chrome_lenZremaining_spaceZ text_spaceZto_encode_wordZ encoded_wordZexcessrrrrU sZ               rc Cs |jD]\}}|dds|dd7<|}d}z ||d}Wnty=d}t|r9d}d}nd}Ynw|rQtjj |d |d } d ||| } nd |t |} t |dt | d |krr|dd| |d<qt | d|kr| d| qd} |d} |rt |t t| dt | } || dkrd}|| d}} |d|}tjj |d |d } t | |krn|d 8}q| d || | | d } | d 7} ||d}|r|dd7<|sqdS)NrrstrictFTrr rr')Zsaferz {}*={}''{}rrr`rrz''rNz {}*{}*={}{})rrrr~rrrrrrr7rrrr)rCrrr rrr{Z error_handlerZencoding_requiredZ encoded_valuerrZ extra_chromerZ splitpointZmaxcharspartialrrrr sp        r)rP)rerrstringroperatorrZemailrrVrrrr:rnrurqrrxZ TSPECIALSrZ ASPECIALSrrrrrrrcompileVERBOSE MULTILINEr]r4rr]rjrnrprqrsrvrxrrrrrrrrrrrrrrrrrrrrrrrrrrrrr rr!r%r(r)r*r,r-r.rr0r8r=r?rTr@rrrr7r0rrFrJmatchrifindallrCrrrrErMrOr[rarerfrkrlrmrorprrrsrtrwrzrr}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrJrrrrrrsHE           C  "   !*$ V +        1C+ "&'/'&).9%7ED49/{ A