o
    DXîhPQ  ã                   @   sÞ   	 g d ¢Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZ dZdZe d	¡Ze d
ej¡Ze d¡ZG dd„ dƒZG dd„ deƒZdZG dd„ deƒZeeejd ƒƒZde ZejZdS ))Ú	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]c                   @   s®   e Zd Z	 d&ddœdd„Zdd„ Zd'dd	„Zd
d„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZeZdd„ Zdd„ Zdd„ Zd d!„ Zed(d"d#„ƒZed$d%„ ƒZdS ))r   N©Úpolicyc                C   s8   	 |d u r|d u rdn|j }|| _|| _|| _|| _d S )NT)Úmangle_from_Ú_fpÚ_mangle_from_Úmaxheaderlenr   )ÚselfÚoutfpr   r   r   © r   ú9/opt/python-3.10.19/usr/lib/python3.10/email/generator.pyÚ__init__&   s   
zGenerator.__init__c                 C   s   | j  |¡ d S ©N)r   Úwrite©r   Úsr   r   r   r   F   s   zGenerator.writeFc                 C   sä   	 | j d u r	|j n| j }|d ur|j|d}| jd ur"|j| jd}|j| _|  | j¡| _d| _|  | j¡| _| j }|j }z-|| _ ||_ |r]| 	¡ }|sUdt
 t
 
¡ ¡ }|  || j ¡ |  |¡ W || _ ||_ d S || _ ||_ w )N)Úlinesep©Zmax_line_lengthÚ zFrom nobody )r   Úcloner   r   Ú_NLÚ_encodeÚ_encoded_NLZ_EMPTYÚ_encoded_EMPTYZget_unixfromÚtimeÚctimer   Ú_write)r   ÚmsgÚunixfromr   r   Zold_gen_policyZold_msg_policyZufromr   r   r   ÚflattenJ   s2   

ÿzGenerator.flattenc                 C   s   	 | j || jd | jdS ©Nr   )Ú	__class__r   r   )r   Úfpr   r   r   r   {   s   ýzGenerator.clonec                 C   ó   t ƒ S r   )r   ©r   r   r   r   Ú_new_buffer   s   zGenerator._new_bufferc                 C   s   |S r   r   r   r   r   r   r    “   s   zGenerator._encodec                 C   sX   |sd S t  |¡}|d d… D ]}|  |¡ |  | j¡ q|d r*|  |d ¡ d S d S )Néÿÿÿÿ)ÚNLCREÚsplitr   r   )r   ÚlinesÚliner   r   r   Ú_write_lines—   s   

ÿzGenerator._write_linesc                 C   sÐ   | j }zd | _|  ¡  | _ }|  |¡ W || _ | j}| `n	|| _ | j}| `w |rJt|ƒ}| d¡d u r:|d |d< n| d|d ¡ | d|d ¡ t|dd ƒ}|d u rZ|  |¡ n|| ƒ | j  	| 
¡ ¡ d S )Núcontent-transfer-encodingr   úContent-Transfer-Encodingúcontent-typeé   Ú_write_headers)r   Ú
_munge_cter.   Ú	_dispatchr   ÚgetZreplace_headerÚgetattrr9   r   Úgetvalue)r   r&   ZoldfpZsfpZ	munge_cteÚmethr   r   r   r%   §   s,   þzGenerator._writec                 C   st   |  ¡ }| ¡ }t ||f¡ dd¡}t| d| d ƒ}|d u r4| dd¡}t| d| d ƒ}|d u r4| j}||ƒ d S )Nú-r
   Z_handle_)Úget_content_maintypeÚget_content_subtypeÚ
UNDERSCOREÚjoinÚreplacer=   Ú
_writeBody)r   r&   ÚmainÚsubZspecificr?   Zgenericr   r   r   r;   Î   s   zGenerator._dispatchc                 C   sŠ   |  ¡ D ]8\}}| j ||¡}| jjr7| jj}| | jj¡s(td|›d|›ƒ‚t | 	|¡¡r7td|›ƒ‚|  
|¡ q|  
| j¡ d S )Nz folded header does not end with z: z folded header contains newline: )Ú	raw_itemsr   ZfoldZverify_generated_headersr   Úendswithr	   ÚNEWLINE_WITHOUT_FWSPÚsearchÚremovesuffixr   r   )r   r&   ÚhÚvZfoldedr   r   r   r   r9   â   s   ÿÿzGenerator._write_headersc                 C   sž   |  ¡ }|d u r
d S t|tƒstdt|ƒ ƒ‚t|jƒr?| d¡}|d ur?t|ƒ}|d= | 	||¡ |  ¡ }|d |d f| _
| jrHt d|¡}|  |¡ d S )Nzstring payload expected: %sÚcharsetr5   r7   ú>From )Úget_payloadÚ
isinstanceÚstrÚ	TypeErrorÚtyper   Ú_payloadZ	get_paramr   Zset_payloadr:   r   ÚfcrerH   r4   )r   r&   ÚpayloadrP   r   r   r   Ú_handle_textõ   s$   


ÿzGenerator._handle_textc                 C   s–  g }|  ¡ }|d u rg }nt|tƒr|  |¡ d S t|tƒs!|g}|D ]}|  ¡ }|  |¡}|j|d| jd | 	| 
¡ ¡ q#| ¡ }|sU| j |¡}|  |¡}| |¡ |jd urs| jret d|j¡}	n|j}	|  |	¡ |  | j¡ |  d| | j ¡ |rˆ| j | d¡¡ |D ]}
|  | jd | | j ¡ | j |
¡ qŠ|  | jd | d | j ¡ |jd urÉ| jr¿t d|j¡}n|j}|  |¡ d S d S )NF©r'   r   rQ   z--r   )rR   rS   rT   r   Úlistr.   r   r(   r   Úappendr>   Zget_boundaryr!   rD   Ú_make_boundaryZset_boundaryÚpreambler   rX   rH   r4   r   ÚpopÚepilogue)r   r&   ZmsgtextsZsubpartsÚpartr   ÚgÚboundaryZalltextr_   Z	body_partra   r   r   r   Ú_handle_multipart  sL   








ûzGenerator._handle_multipartc                 C   s4   | j }|jdd| _ z|  |¡ W || _ d S || _ w )Nr   r   )r   r   re   )r   r&   Úpr   r   r   Ú_handle_multipart_signedG  s
   z"Generator._handle_multipart_signedc                 C   sš   g }|  ¡ D ]:}|  ¡ }|  |¡}|j|d| jd | ¡ }| | j¡}|r;|d | jkr;| 	| j 
|d d… ¡¡ q| 	|¡ q| j | j 
|¡¡ d S )NFr[   r/   )rR   r.   r   r(   r   r>   r1   r!   r"   r]   rD   r   r   )r   r&   Zblocksrb   r   rc   Útextr2   r   r   r   Ú_handle_message_delivery_statusR  s   
z)Generator._handle_message_delivery_statusc                 C   s^   |   ¡ }|  |¡}|j}t|tƒr"|j| d¡d| jd | ¡ }n|  	|¡}| j
 |¡ d S )Nr   Fr[   )r.   r   rW   rS   r\   r(   rR   r   r>   r    r   r   )r   r&   r   rc   rY   r   r   r   Ú_handle_messageg  s   




zGenerator._handle_messagec                 C   sx   t  tj¡}dt|  d }|d u r|S |}d}	 |  dt |¡ d tj¡}| 	|¡s/	 |S |d t
|ƒ }|d7 }q)	Nz===============z==r   Tz^--z(--)?$Ú.r8   )ÚrandomÚ	randrangeÚsysÚmaxsizeÚ_fmtÚ_compile_reÚreÚescapeÚ	MULTILINErL   rT   )Úclsrh   Útokenrd   ÚbZcounterZcrer   r   r   r^   €  s   
þûzGenerator._make_boundaryc                 C   s   t  ||¡S r   )rr   Úcompile©ru   r   Úflagsr   r   r   rq   ’  s   zGenerator._compile_re)NN)FNr   )Ú__name__Ú
__module__Ú__qualname__r   r   r(   r   r.   r    r4   r%   r;   r9   rZ   rF   re   rg   ri   rj   Úclassmethodr^   rq   r   r   r   r   r      s0    	ÿ 
1':r   c                       sN   e Zd Z	 dd„ Zdd„ Zdd„ Zdd„ Z‡ fd	d
„ZeZe	dd„ ƒZ
‡  ZS )r   c                 C   s   | j  | dd¡¡ d S )NÚasciiÚsurrogateescape)r   r   Úencoder   r   r   r   r   ¤  s   zBytesGenerator.writec                 C   r,   r   )r   r-   r   r   r   r.   §  s   zBytesGenerator._new_bufferc                 C   s
   |  d¡S ©Nr   )r   r   r   r   r   r    ª  s   
zBytesGenerator._encodec                 C   s8   |  ¡ D ]\}}| j | j ||¡¡ q|  | j¡ d S r   )rI   r   r   r   Zfold_binaryr   )r   r&   rN   rO   r   r   r   r9   ­  s   zBytesGenerator._write_headersc                    s^   |j d u rd S t|j ƒr%| jjdks%| jrt d|j ¡|_ |  |j ¡ d S tt	| ƒ 
|¡ d S )NZ7bitrQ   )rW   r   r   Zcte_typer   rX   rH   r4   Úsuperr   rZ   )r   r&   ©r*   r   r   rZ   µ  s   
zBytesGenerator._handle_textc                 C   s   t  | d¡|¡S r‚   )rr   rx   r   ry   r   r   r   rq   Ä  s   zBytesGenerator._compile_re)r{   r|   r}   r   r.   r    r9   rZ   rF   r~   rq   Ú__classcell__r   r   r„   r   r   —  s    r   zD[Non-text (%(type)s) part of message omitted, filename %(filename)s]c                   @   s&   e Zd Z	 dddœdd„Zdd„ ZdS )r   Nr   c                C   s2   	 t j| ||||d |d u rt| _d S || _d S r)   )r   r   Ú_FMTrp   )r   r   r   r   Úfmtr   r   r   r   r   Ò  s   ÿ

zDecodedGenerator.__init__c                 C   s„   |  ¡ D ];}| ¡ }|dkrt|jdd| d q|dkrqt| j| ¡ | ¡ | ¡ | d¡| dd¡| d	d
¡dœ | d qd S )Nrh   F)Údecode)ÚfileZ	multipartz[no filename]zContent-Descriptionz[no description]r6   z[no encoding])rV   ÚmaintypeZsubtypeÚfilenameÚdescriptionÚencoding)	ÚwalkrA   ÚprintrR   rp   Zget_content_typerB   Úget_filenamer<   )r   r&   rb   rŠ   r   r   r   r;   ð  s*   ÿÿù	÷øzDecodedGenerator._dispatch)NNN)r{   r|   r}   r   r;   r   r   r   r   r   Ì  s    ÿr   r8   z%%0%dd)Ú__all__rr   rn   r#   rl   Úcopyr   Úior   r   Zemail.utilsr   Zemail.errorsr	   rC   ÚNLrx   r0   rt   rX   rK   r   r   r†   r   ÚlenÚreprro   Ú_widthrp   r^   r   r   r   r   Ú<module>   s0   

  }3;
