U e5däNã@sÈdddgZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z dZ d Z e d ¡Ze d ej¡ZGd d„dƒZGd d„deƒZdZGdd„deƒZeeejdƒƒZdeZejZdS)Ú GeneratorÚDecodedGeneratorÚBytesGeneratoréN)Údeepcopy)ÚStringIOÚBytesIO)Ú_has_surrogatesÚ_Ú z \r\n|\r|\nz^From 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.8/email/generator.pyÚ__init__$s zGenerator.__init__cCs|j |¡dS©N)rÚwrite©rÚsrrrrDszGenerator.writeFcCsØ|jdkr|jn|j}|dk r*|j|d}|jdk rB|j|jd}|j|_| |j¡|_d|_| |j¡|_|j}|j}zL||_||_|r¸|  ¡}|s¨dt   t   ¡¡}|  ||j¡|  |¡W5||_||_XdS)N)Úlinesep©Zmax_line_lengthÚz From nobody )r ÚclonerrÚ_NLÚ_encodeÚ _encoded_NLZ_EMPTYÚ_encoded_EMPTYZ get_unixfromÚtimeÚctimerÚ_write)rÚmsgÚunixfromrr Zold_gen_policyZold_msg_policyZufromrrrÚflattenHs,  zGenerator.flattencCs|j||jd|jdS©Nr )Ú __class__rr )rÚfprrrrys ýzGenerator.clonecCstƒSr)r©rrrrÚ _new_bufferszGenerator._new_buffercCs|Srrrrrrr‘szGenerator._encodecCsT|sdSt |¡}|dd…D]}| |¡| |j¡q|drP| |d¡dS)Néÿÿÿÿ)ÚNLCREÚsplitrr)rÚlinesÚlinerrrÚ _write_lines•s  zGenerator._write_linescCsÀ|j}z"d|_| ¡|_}| |¡W5||_|j}|`X|r„t|ƒ}| d¡dkrd|d|d<n| d|d¡| d|d¡t|ddƒ}|dkr¤| |¡n||ƒ|j  |  ¡¡dS)Núcontent-transfer-encodingrúContent-Transfer-Encodingú content-typeéÚ_write_headers) rÚ _munge_cter,Ú _dispatchrÚgetZreplace_headerÚgetattrr7rÚgetvalue)rr%ZoldfpZ munge_cteZsfpÚmethrrrr$¥s&   zGenerator._writecCst| ¡}| ¡}t ||f¡ dd¡}t|d|dƒ}|dkrh| dd¡}t|d|dƒ}|dkrh|j}||ƒdS)Nú-r Z_handle_)Úget_content_maintypeÚget_content_subtypeÚ UNDERSCOREÚjoinÚreplacer;Ú _writeBody)rr%ÚmainÚsubZspecificr=Zgenericrrrr9Ìs zGenerator._dispatchcCs6| ¡D]\}}| |j ||¡¡q| |j¡dSr)Ú raw_itemsrr Zfoldr©rr%ÚhÚvrrrr7àszGenerator._write_headerscCsž| ¡}|dkrdSt|tƒs.tdt|ƒƒ‚t|jƒr~| d¡}|dk r~t|ƒ}|d=|  ||¡| ¡}|d|df|_ |j rt   d|¡}| |¡dS)Nzstring payload expected: %sÚcharsetr3r5ú>From )Ú get_payloadÚ isinstanceÚstrÚ TypeErrorÚtyperÚ_payloadZ get_paramrZ set_payloadr8rÚfcrerFr2)rr%ÚpayloadrKrrrÚ _handle_textês$    ÿ zGenerator._handle_textc Csšg}| ¡}|dkrg}n(t|tƒr2| |¡dSt|tƒsB|g}|D]6}| ¡}| |¡}|j|d|jd|  |  ¡¡qF|  ¡}|sª|j   |¡}| |¡}| |¡|jdk ræ|jrÊt d|j¡} n|j} | | ¡| |j¡| d||j¡|r|j | d¡¡|D],} | |jd||j¡|j | ¡q| |jd|d|j¡|jdk r–|jr†t d|j¡} n|j} | | ¡dS)NF©r&rrLz--r)rMrNrOrÚlistr,rr'rÚappendr<Z get_boundaryr rBÚ_make_boundaryZ set_boundaryÚpreamblerrSrFr2rÚpopÚepilogue) rr%ZmsgtextsZsubpartsÚpartrÚgÚboundaryZalltextrZZ body_partr\rrrÚ_handle_multipartsJ           zGenerator._handle_multipartcCs0|j}|jdd|_z| |¡W5||_XdS)Nrr)r rr`)rr%ÚprrrÚ_handle_multipart_signed<s z"Generator._handle_multipart_signedcCsšg}| ¡D]t}| ¡}| |¡}|j|d|jd| ¡}| |j¡}|rv|d|jkrv|  |j  |dd…¡¡q |  |¡q |j   |j  |¡¡dS)NFrVr-) rMr,rr'rr<r/r r!rXrBrr)rr%Zblocksr]rr^Útextr0rrrÚ_handle_message_delivery_statusGs    z)Generator._handle_message_delivery_statuscCs^| ¡}| |¡}|j}t|tƒrD|j| d¡d|jd| ¡}n |  |¡}|j   |¡dS)NrFrV) r,rrRrNrWr'rMrr<rrr)rr%rr^rTrrrÚ_handle_message\s    zGenerator._handle_messagecCsvt tj¡}dt|d}|dkr(|S|}d}| dt |¡dtj¡}|  |¡sXqr|dt |ƒ}|d7}q0|S)Nz===============z==rz^--z(--)?$Ú.r6) ÚrandomZ randrangeÚsysÚmaxsizeÚ_fmtÚ _compile_reÚreÚescapeÚ MULTILINEÚsearchrO)ÚclsrcÚtokenr_ÚbZcounterZcrerrrrYus   zGenerator._make_boundarycCs t ||¡Sr)rlÚcompile©rprÚflagsrrrrk‡szGenerator._compile_re)NN)FN)N)Ú__name__Ú __module__Ú __qualname__rrr'rr,rr2r$r9r7rUrDr`rbrdreÚ classmethodrYrkrrrrrs, ÿ  1' :  csLeZdZdd„Zdd„Zdd„Zdd„Z‡fd d „ZeZe d d „ƒZ ‡Z S) rcCs|j | dd¡¡dS)NÚasciiÚsurrogateescape)rrÚencoderrrrr™szBytesGenerator.writecCstƒSr)rr+rrrr,œszBytesGenerator._new_buffercCs | d¡S©Nrz)r|rrrrrŸszBytesGenerator._encodecCs8| ¡D]\}}|j |j ||¡¡q| |j¡dSr)rGrrr Z fold_binaryrrHrrrr7¢szBytesGenerator._write_headerscs\|jdkrdSt|jƒrH|jjdksH|jr:t d|j¡|_| |j¡ntt |ƒ  |¡dS)NZ7bitrL) rRrr Zcte_typerrSrFr2ÚsuperrrU)rr%©r)rrrUªs zBytesGenerator._handle_textcCst | d¡|¡Sr})rlrsr|rtrrrrk¹szBytesGenerator._compile_re) rvrwrxrr,rr7rUrDryrkÚ __classcell__rrrrrŒs  zD[Non-text (%(type)s) part of message omitted, filename %(filename)s]c@s$eZdZdddœdd„Zdd„ZdS)rNr cCs.tj|||||d|dkr$t|_n||_dSr()rrÚ_FMTrj)rrr rZfmtr rrrrÇs  ÿzDecodedGenerator.__init__c Cs„| ¡D]v}| ¡}|dkr2t|jdd|dq|dkrs(    t3;