3 öLÖj×Sã@sèdddgZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z ddl m Z d Zd Zejd ƒZejd ejƒZejd ƒZejdƒZGdd„dƒZGdd„deƒZdZGdd„deƒZeeejdƒƒZdeZejZdS)Ú GeneratorÚDecodedGeneratorÚBytesGeneratoréN)Údeepcopy)ÚStringIOÚBytesIO)Ú_has_surrogates)ÚHeaderWriteErrorÚ_Ú z \r\n|\r|\nz^From z\r\n[^ \t]|\r[^ \n\t]|\n[^ \t]s\r\n[^ \t]|\r[^ \n\t]|\n[^ \t]c@s¬eZdZd&ddœdd„Zdd„Zd'dd „Zd d „Zd d „Zdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z e Zdd„Zdd„Zdd„Zd d!„Zed(d"d#„ƒZed$d%„ƒZdS))rN)ÚpolicycCs6|dkr|dkrdn|j}||_||_||_||_dS)NT)Ú mangle_from_Ú_fpÚ _mangle_from_Ú maxheaderlenr )ÚselfÚoutfpr rr ©rú'/usr/lib64/python3.6/email/generator.pyÚ__init__'s zGenerator.__init__cCs|jj|ƒdS)N)rÚwrite)rÚsrrrrGszGenerator.writeFc CsØ|jdkr|jn|j}|dk r*|j|d�}|jdk rB|j|jd�}|j|_|j|jƒ|_d|_|j|jƒ|_|j}|j}zL||_||_|r¸|j ƒ}|s¨dt j t j ƒƒ}|j ||jƒ|j |ƒWd||_||_XdS)N)Úlinesep)Úmax_line_lengthÚz From nobody )r ÚclonerrÚ_NLÚ_encodeÚ _encoded_NLZ_EMPTYÚ_encoded_EMPTYZ get_unixfromÚtimeZctimerÚ_write)rÚmsgÚunixfromrr Zold_gen_policyZold_msg_policyZufromrrrÚflattenKs,  zGenerator.flattencCs|j||jd|jd�S)N)r )Ú __class__rr )rÚfprrrr|szGenerator.clonecCstƒS)N)r)rrrrÚ _new_buffer�szGenerator._new_buffercCs|S)Nr)rrrrrr”szGenerator._encodecCsX|sdStj|ƒ}x*|dd…D]}|j|ƒ|j|jƒq W|drT|j|dƒdS)Nééÿÿÿÿr)r))ÚNLCREÚsplitrr)rÚlinesÚlinerrrÚ _write_lines˜s  zGenerator._write_linesc Cs¤|j}z"d|_|jƒ|_}|j|ƒWd||_|j}|`X|rht|ƒ}|jd|dƒ|jd|dƒt|ddƒ}|dkrˆ|j|ƒn||ƒ|jj|j ƒƒdS)Nzcontent-transfer-encodingrz content-typer(Ú_write_headers) rÚ _munge_cter'Ú _dispatchrZreplace_headerÚgetattrr/rÚgetvalue)rr"ZoldfpZsfpZ munge_cteÚmethrrrr!¨s"   zGenerator._writecCst|jƒ}|jƒ}tj||fƒjddƒ}t|d|dƒ}|dkrh|jddƒ}t|d|dƒ}|dkrh|j}||ƒdS)Nú-r Z_handle_)Úget_content_maintypeÚget_content_subtypeÚ UNDERSCOREÚjoinÚreplacer2Ú _writeBody)rr"ÚmainÚsubZspecificr4Zgenericrrrr1Ës zGenerator._dispatchcCs¨x–|jƒD]Š\}}|jj||ƒ}|jjrŠ|jj}|j|jjƒsRtd|›d|›�ƒ‚|}|j|ƒrr|dt|ƒ …}tj |ƒrŠtd|›�ƒ‚|j |ƒq W|j |j ƒdS)Nz folded header does not end with z: z folded header contains newline: ) Ú raw_itemsr ZfoldÚverify_generated_headersrÚendswithr ÚlenÚNEWLINE_WITHOUT_FWSPÚsearchrr)rr"ÚhÚvÚfoldedrÚfolded_no_lineseprrrr/ßs   zGenerator._write_headerscCsž|jƒ}|dkrdSt|tƒs.tdt|ƒƒ‚t|jƒr~|jdƒ}|dk r~t|ƒ}|d=|j ||ƒ|jƒ}|d|df|_ |j r�t j d|ƒ}|j|ƒdS)Nzstring payload expected: %sÚcharsetzcontent-transfer-encodingz content-typez>From )Ú get_payloadÚ isinstanceÚstrÚ TypeErrorÚtyperÚ_payloadZ get_paramrZ set_payloadr0rÚfcrer=r.)rr"ÚpayloadrHrrrÚ _handle_textõs"      zGenerator._handle_textc Cs¢g}|jƒ}|dkrg}n(t|tƒr2|j|ƒdSt|tƒsB|g}x>|D]6}|jƒ}|j|ƒ}|j|d|jd�|j |j ƒƒqHW|j ƒ}|s®|j j |ƒ}|j|ƒ}|j|ƒ|jdk rê|jrÎtjd|jƒ} n|j} |j| ƒ|j|jƒ|jd||jƒ|�r|jj|jdƒƒx4|D],} |j|jd||jƒ|jj| ƒ�qW|j|jd|d|jƒ|jdk �rž|j�rŽtjd|jƒ} n|j} |j| ƒdS)NF)r#rz>From z--r)rIrJrKrÚlistr'rr$rÚappendr3Z get_boundaryrr9Ú_make_boundaryZ set_boundaryÚpreamblerrOr=r.rÚpopÚepilogue) rr"ZmsgtextsZsubpartsÚpartrÚgÚboundaryZalltextrUZ body_partrWrrrÚ_handle_multipart sJ             zGenerator._handle_multipartc Cs0|j}|jdd�|_z|j|ƒWd||_XdS)Nr)r)r rr[)rr"ÚprrrÚ_handle_multipart_signedGs z"Generator._handle_multipart_signedcCsžg}x€|jƒD]t}|jƒ}|j|ƒ}|j|d|jd�|jƒ}|j|jƒ}|rx|d|jkrx|j |jj |dd…ƒƒq|j |ƒqW|j j |jj |ƒƒdS)NF)r#rr(r)r)) rIr'rr$rr3r+rrrSr9rr)rr"ZblocksrXrrYÚtextr,rrrÚ_handle_message_delivery_statusRs  z)Generator._handle_message_delivery_statuscCs^|jƒ}|j|ƒ}|j}t|tƒrD|j|jdƒd|jd�|jƒ}n |j |ƒ}|j j |ƒdS)NrF)r#r) r'rrNrJrRr$rIrr3rrr)rr"rrYrPrrrÚ_handle_messagegs    zGenerator._handle_messagecCsztjtjƒ}d t|d}|dkr(|S|}d}xD|jdtj|ƒdtjƒ}|j |ƒsZP|dt |ƒ}|d7}q2W|S) Nú=éz==rz^--z(--)?$Ú.r(z===============) ÚrandomZ randrangeÚsysÚmaxsizeÚ_fmtÚ _compile_reÚreÚescapeÚ MULTILINErCrK)Úclsr^ÚtokenrZÚbZcounterZcrerrrrT€s   zGenerator._make_boundarycCs tj||ƒS)N)riÚcompile)rlrÚflagsrrrrh’szGenerator._compile_re)NN)FN)N)Ú__name__Ú __module__Ú __qualname__rrr$rr'rr.r!r1r/rQr;r[r]r_r`Ú classmethodrTrhrrrrrs(  1#:  csLeZdZdd„Zdd„Zdd„Zdd„Z‡fd d „ZeZe d d „ƒZ ‡Z S) rcCs|jj|jddƒƒdS)NÚasciiÚsurrogateescape)rrÚencode)rrrrrr¤szBytesGenerator.writecCstƒS)N)r)rrrrr'§szBytesGenerator._new_buffercCs |jdƒS)Nru)rw)rrrrrrªszBytesGenerator._encodecCsªx˜|jƒD]Œ\}}|jj||ƒ}|jjrŠ|jjjƒ}|j|ƒsRtd|›d|›�ƒ‚|}|j|ƒrr|dt|ƒ …}t j |ƒrŠtd|›�ƒ‚|j j |ƒq W|j |j ƒdS)Nz folded header does not end with z: z folded header contains newline: )r>r Z fold_binaryr?rrwr@r rAÚNEWLINE_WITHOUT_FWSP_BYTESrCrrr)rr"rDrErFrrGrrrr/­s     zBytesGenerator._write_headerscs^|jdkrdSt|jƒrJ|jjdk rJ|jrFrom ) rNrr Zcte_typerrOr=r.ÚsuperrrQ)rr")r%rrrQÁs zBytesGenerator._handle_textcCstj|jdƒ|ƒS)Nru)rirorw)rlrrprrrrhÐszBytesGenerator._compile_re) rqrrrsrr'rr/rQr;rtrhÚ __classcell__rr)r%rr—s  zD[Non-text (%(type)s) part of message omitted, filename %(filename)s]c@s$eZdZdddœdd„Zdd„ZdS)rN)r cCs.tj|||||d�|dkr$t|_n||_dS)N)r )rrÚ_FMTrg)rrr rZfmtr rrrrÞs  zDecodedGenerator.__init__c Csˆx‚|jƒD]v}|jƒ}|dkr4t|jdd�|d�q |dkr>q t|j|jƒ|jƒ|jƒ|jdƒ|jddƒ|jd d ƒd œ|d�q WdS) Nr^F)Údecode)ÚfileZ multipartz [no filename]zContent-Descriptionz[no description]zContent-Transfer-Encodingz [no encoding])rMÚmaintypeÚsubtypeÚfilenameZ descriptionÚencoding) Úwalkr6ÚprintrIrgZget_content_typer7Ú get_filenameÚget)rr"rXr~rrrr1üs  zDecodedGenerator._dispatch)NNN)rqrrrsrr1rrrrrØsr(z%%0%dd) Ú__all__rirer rdÚcopyrÚiorrZ email.utilsrZ email.errorsr r8ÚNLror*rkrOrBrxrrr{rrAÚreprrfZ_widthrgrTrrrrÚs.       |?;