a לiS@sgdZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z ddl m Z dZdZed Zed ejZed Zed ZGd ddZGdddeZdZGdddeZeeejdZdeZejZdS)) GeneratorDecodedGeneratorBytesGeneratorN)deepcopy)StringIOBytesIO)_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@seZdZd&ddddZddZd'dd Zd d Zd d ZddZddZ ddZ ddZ ddZ ddZ e ZddZddZddZd d!Zed(d"d#Zed$d%ZdS))rNpolicycCs6|dur|durdn|j}||_||_||_||_dS)NT) mangle_from__fp _mangle_from_ maxheaderlenr )selfoutfprrr r'/usr/lib64/python3.9/email/generator.py__init__'s zGenerator.__init__cCs|j|dSN)rwritersrrrrGszGenerator.writeFcCs|jdur|jn|j}|dur*|j|d}|jdurB|j|jd}|j|_||j|_d|_||j|_|j}|j}zX||_||_|r| }|sdt t }| ||j| |W||_||_n||_||_0dS)N)linesepZmax_line_lengthz From nobody )r clonerr_NL_encode _encoded_NLZ_EMPTY_encoded_EMPTYZ get_unixfromtimectimer_write)rmsgunixfromrr Zold_gen_policyZold_msg_policyZufromrrrflattenKs0   zGenerator.flattencCs|j||jd|jdSNr ) __class__rr )rfprrrr|s zGenerator.clonecCstSr)rrrrr _new_bufferszGenerator._new_buffercCs|Srrrrrrr szGenerator._encodecCsT|sdSt|}|ddD]}||||jq|drP||ddS)N)NLCREsplitrr)rlineslinerrr _write_liness  zGenerator._write_linescCs|j}z2d|_||_}||W||_|j}|`n||_|j}|`0|rt|}|ddurt|d|d<n|d|d|d|dt|dd}|dur||n|||j | dS)Ncontent-transfer-encodingrContent-Transfer-Encoding content-type_write_headers) r _munge_cter- _dispatchrgetZreplace_headergetattrr8rgetvalue)rr&ZoldfpZsfpZ munge_ctemethrrrr%s,    zGenerator._writecCst|}|}t||fdd}t|d|d}|durh|dd}t|d|d}|durh|j}||dS)N-r Z_handle_)get_content_maintypeget_content_subtype UNDERSCOREjoinreplacer< _writeBody)rr&mainsubZspecificr>Zgenericrrrr:s zGenerator._dispatchcCs|D]p\}}|j||}|jjrn|jj}||jjsPtd|d|t| |rntd|| |q| |j dSNz folded header does not end with z: z folded header contains newline: ) raw_itemsr Zfoldverify_generated_headersrendswithr NEWLINE_WITHOUT_FWSPsearch removesuffixrrrr&hvZfoldedrrrrr8s zGenerator._write_headerscCs|}|durdSt|ts.tdt|t|jr~|d}|dur~t|}|d=| |||}|d|df|_ |j rt d|}||dS)Nzstring payload expected: %scharsetr4r6>From ) get_payload isinstancestr TypeErrortyper_payloadZ get_paramrZ set_payloadr9rfcrerGr3)rr&payloadrRrrr _handle_texts$     zGenerator._handle_textc Csg}|}|durg}n(t|tr2||dSt|tsB|g}|D]6}|}||}|j|d|jd| | qF| }|s|j |}||}|||jdur|jrtd|j} n|j} || ||j|d||j|r|j|d|D],} ||jd||j|j| q||jd|d|j|jdur|jrtd|j} n|j} || dS)NFr'rrSz--r)rTrUrVrlistr-rr(rappendr=Z get_boundaryr!rC_make_boundaryZ set_boundarypreamblerrZrGr3rpopepilogue) rr&ZmsgtextsZsubpartspartrgboundaryZalltextraZ body_partrcrrr_handle_multipartsJ           zGenerator._handle_multipartcCs6|j}|jdd|_z||W||_n||_0dS)Nrr)r rrg)rr&prrr_handle_multipart_signedHs  z"Generator._handle_multipart_signedcCsg}|D]t}|}||}|j|d|jd|}||j}|rv|d|jkrv| |j |ddq | |q |j |j |dS)NFr]r.) rTr-rr(rr=r0r!r"r_rCrr)rr&Zblocksrdrretextr1rrr_handle_message_delivery_statusSs    z)Generator._handle_message_delivery_statuscCs^|}||}|j}t|trD|j|dd|jd|}n | |}|j |dS)NrFr]) r-rrYrUr^r(rTrr=r rr)rr&rrer[rrr_handle_messagehs    zGenerator._handle_messagecCsvttj}dt|d}|dur(|S|}d}|dt|dtj}| |sXqr|dt |}|d7}q0|S)Nz===============z==rz^--z(--)?$.r7) random randrangesysmaxsize_fmt _compile_rereescape MULTILINErMrV)clsrjtokenrfbZcounterZcrerrrr`s   zGenerator._make_boundarycCs t||Sr)rtcompilerwrflagsrrrrsszGenerator._compile_re)NN)FN)N)__name__ __module__ __qualname__rrr(rr-r r3r%r:r8r\rErgrirkrl classmethodr`rsrrrrrs,   1':  rcsLeZdZddZddZddZddZfd d ZeZe d d Z Z S) rcCs|j|dddS)Nasciisurrogateescape)rrencoderrrrrszBytesGenerator.writecCstSr)rr,rrrr-szBytesGenerator._new_buffercCs |dSNr)rrrrrr szBytesGenerator._encodecCs|D]r\}}|j||}|jjrn|jj}||sPtd|d|t | |rntd||j |q| |j dSrH)rIr Z fold_binaryrJrrrKr NEWLINE_WITHOUT_FWSP_BYTESrMrNrrrrOrrrr8s  zBytesGenerator._write_headerscs\|jdurdSt|jrH|jjdksH|jr:td|j|_||jntt | |dS)NZ7bitrS) rYrr Zcte_typerrZrGr3superrr\)rr&r*rrr\s zBytesGenerator._handle_textcCst|d|Sr)rtrzrr{rrrrsszBytesGenerator._compile_re) r}r~rrr-r r8r\rErrs __classcell__rrrrrs  rzD[Non-text (%(type)s) part of message omitted, filename %(filename)s]c@s$eZdZdddddZddZdS)rNr cCs.tj|||||d|dur$t|_n||_dSr))rr_FMTrr)rrrrfmtr rrrrs  zDecodedGenerator.__init__c Cs|D]v}|}|dkr2t|jdd|dq|dkrs.      }<;