3 \N@sdddgZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z dZ d Z ejd Zejd ejZGd ddZGd ddeZdZGdddeZeeejdZdeZejZdS) GeneratorDecodedGeneratorBytesGeneratorN)deepcopy)StringIOBytesIO)_has_surrogates_ z \r\n|\r|\nz^From c@seZdZd&ddddZddZd'dd Zd d Zd d ZddZddZ ddZ ddZ ddZ ddZ e ZddZddZddZd d!Zed(d"d#Zed$d%ZdS))rN)policycCs6|dkr|dkrdn|j}||_||_||_||_dS)NT) mangle_from__fp _mangle_from_ maxheaderlenr )selfoutfpr rr r'/usr/lib64/python3.6/email/generator.py__init__$s zGenerator.__init__cCs|jj|dS)N)r write)rsrrrrDszGenerator.writeFc Cs|jdkr|jn|j}|dk r*|j|d}|jdk rB|j|jd}|j|_|j|j|_d|_|j|j|_|j}|j}zL||_||_|r|j }|sdt j t j }|j ||j|j |Wd||_||_XdS)N)linesep)max_line_lengthz From nobody )r clonerr_NL_encode _encoded_NLZ_EMPTY_encoded_EMPTYZ get_unixfromtimeZctimer_write)rmsgunixfromrr Zold_gen_policyZold_msg_policyZufromrrrflattenHs,  zGenerator.flattencCs|j||jd|jdS)N)r ) __class__rr )rfprrrryszGenerator.clonecCstS)N)r)rrrr _new_bufferszGenerator._new_buffercCs|S)Nr)rrrrrrszGenerator._encodecCsX|sdStj|}x*|ddD]}|j||j|jq W|drT|j|ddS)Nr(r()NLCREsplitrr)rlineslinerrr _write_liness  zGenerator._write_linesc Cs|j}z"d|_|j|_}|j|Wd||_|j}|`X|rht|}|jd|d|jd|dt|dd}|dkr|j|n|||jj|j dS)Nzcontent-transfer-encodingrz content-typer'_write_headers) r _munge_cter& _dispatchrZreplace_headergetattrr.rgetvalue)rr!ZoldfpZsfpZ munge_ctemethrrrr s"   zGenerator._writecCst|j}|j}tj||fjdd}t|d|d}|dkrh|jdd}t|d|d}|dkrh|j}||dS)N-r Z_handle_)get_content_maintypeget_content_subtype UNDERSCOREjoinreplacer1 _writeBody)rr!mainsubZspecificr3Zgenericrrrr0s zGenerator._dispatchcCs:x(|jD]\}}|j|jj||q W|j|jdS)N) raw_itemsrr Zfoldr)rr!hvrrrr.szGenerator._write_headerscCs|j}|dkrdSt|ts.tdt|t|jr~|jd}|dk r~t|}|d=|j |||j}|d|df|_ |j rt j d|}|j|dS)Nzstring payload expected: %scharsetzcontent-transfer-encodingz content-typez>From ) get_payload isinstancestr TypeErrortyper_payloadZ get_paramrZ set_payloadr/rfcrer<r-)rr!payloadr@rrr _handle_texts"      zGenerator._handle_textc Csg}|j}|dkrg}n(t|tr2|j|dSt|tsB|g}x>|D]6}|j}|j|}|j|d|jd|j |j qHW|j }|s|j j |}|j|}|j||jdk r|jrtjd|j} n|j} |j| |j|j|jd||j|r|jj|jdx4|D],} |j|jd||j|jj| qW|j|jd|d|j|jdk r|jrtjd|j} n|j} |j| dS)NF)r"rz>From z--r)rArBrCrlistr&rr#rappendr2Z get_boundaryrr8_make_boundaryZ set_boundarypreamblerrGr<r-r popepilogue) rr!ZmsgtextsZsubpartspartrgboundaryZalltextrMZ body_partrOrrr_handle_multipartsJ             zGenerator._handle_multipartc Cs0|j}|jdd|_z|j|Wd||_XdS)Nr)r)r rrS)rr!prrr_handle_multipart_signed8s z"Generator._handle_multipart_signedcCsg}x|jD]t}|j}|j|}|j|d|jd|j}|j|j}|rx|d|jkrx|j |jj |ddq|j |qW|j j |jj |dS)NF)r"rr'r(r() rAr&rr#rr2r*rrrKr8r r)rr!ZblocksrPrrQtextr+rrr_handle_message_delivery_statusCs  z)Generator._handle_message_delivery_statuscCs^|j}|j|}|j}t|trD|j|jdd|jd|j}n |j |}|j j |dS)NrF)r"r) r&rrFrBrJr#rArr2rr r)rr!rrQrHrrr_handle_messageXs    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 randrangesysmaxsize_fmt _compile_rereescape MULTILINEsearchrC)clsrVtokenrRbZcounterZcrerrrrLqs   zGenerator._make_boundarycCs tj||S)N)racompile)rerflagsrrrr`szGenerator._compile_re)NN)FN)N)__name__ __module__ __qualname__rrr#rr&rr-r r0r.rIr:rSrUrWrX classmethodrLr`rrrrrs(  1# :  csLeZdZddZddZddZddZfd d ZeZe d d Z Z S) rcCs|jj|jdddS)Nasciisurrogateescape)r rencode)rrrrrrszBytesGenerator.writecCstS)N)r)rrrrr&szBytesGenerator._new_buffercCs |jdS)Nrn)rp)rrrrrrszBytesGenerator._encodecCs<x*|jD]\}}|jj|jj||q W|j|jdS)N)r=r rr Z fold_binaryr)rr!r>r?rrrr.szBytesGenerator._write_headerscs^|jdkrdSt|jrJ|jjdk rJ|jrFrom ) rFrr Zcte_typerrGr<r-superrrI)rr!)r$rrrIs zBytesGenerator._handle_textcCstj|jd|S)Nrn)rarhrp)rerrirrrr`szBytesGenerator._compile_re) rjrkrlrr&rr.rIr:rmr` __classcell__rr)r$rrs  zD[Non-text (%(type)s) part of message omitted, filename %(filename)s]c@s$eZdZdddddZddZdS)rN)r cCs.tj|||||d|dkr$t|_n||_dS)N)r )rr_FMTr_)rrr rZfmtr rrrrs  zDecodedGenerator.__init__c Csx|jD]v}|j}|dkr4t|jdd|dq |dkr>q t|j|j|j|j|jd|jdd|jd d d |dq WdS) NrVF)decode)fileZ multipartz [no filename]zContent-Descriptionz[no description]zContent-Transfer-Encodingz [no encoding])rEmaintypesubtypefilenameZ descriptionencoding) walkr5printrAr_Zget_content_typer6 get_filenameget)rr!rPrvrrrr0s  zDecodedGenerator._dispatch)NNN)rjrkrlrr0rrrrrsr'z%%0%dd)__all__rar]rr\copyriorrZ email.utilsrr7NLrhr)rcrGrrrsrlenreprr^Z_widthr_rLrrrrs(    p3;