o
     JAfäN  ã                   @   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ZdZe d¡Ze d	ej¡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Ú_Ú
z
\r\n|\r|\nz^From 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   ú&/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   D   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   ÚflattenH   s2   

ÿzGenerator.flattenc                 C   s   	 | j || jd | jdS ©Nr   )Ú	__class__r   r   )r   Úfpr   r   r   r   y   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Úgetattrr8   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   s6   |  ¡ D ]\}}|  | j ||¡¡ q|  | j¡ d S r   )Ú	raw_itemsr   r   Zfoldr   ©r   r%   ÚhÚvr   r   r   r8   à   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Úcharsetr4   r6   ú>From )Úget_payloadÚ
isinstanceÚstrÚ	TypeErrorÚtyper   Ú_payloadZ	get_paramr   Zset_payloadr9   r   ÚfcrerG   r3   )r   r%   ÚpayloadrL   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   rM   z--r   )rN   rO   rP   r   Úlistr-   r   r'   r   Úappendr=   Zget_boundaryr    rC   Ú_make_boundaryZset_boundaryÚpreambler   rT   rG   r3   r   ÚpopÚepilogue)r   r%   ZmsgtextsZsubpartsÚpartr   ÚgÚboundaryZalltextr[   Z	body_partr]   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   ra   )r   r%   Úpr   r   r   Ú_handle_multipart_signed<  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 )NFrW   r.   )rN   r-   r   r'   r   r=   r0   r    r!   rY   rC   r   r   )r   r%   Zblocksr^   r   r_   Útextr1   r   r   r   Ú_handle_message_delivery_statusG  s   
z)Generator._handle_message_delivery_statusc                 C   s^   |   ¡ }|  |¡}|j}t|tƒr"|j| d¡d| jd | ¡ }n|  	|¡}| j
 |¡ d S )Nr   FrW   )r-   r   rS   rO   rX   r'   rN   r   r=   r   r   r   )r   r%   r   r_   rU   r   r   r   Ú_handle_message\  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(--)?$Ú.r7   )ÚrandomÚ	randrangeÚsysÚmaxsizeÚ_fmtÚ_compile_reÚreÚescapeÚ	MULTILINEÚsearchrP   )Úclsrd   Útokenr`   ÚbZcounterZcrer   r   r   rZ   u  s   
þûzGenerator._make_boundaryc                 C   s   t  ||¡S r   )rn   Úcompile©rr   r   Úflagsr   r   r   rm   ‡  s   zGenerator._compile_re)NN)FNr   )Ú__name__Ú
__module__Ú__qualname__r   r   r'   r   r-   r   r3   r$   r:   r8   rV   rE   ra   rc   re   rf   ÚclassmethodrZ   rm   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   )rH   r   r   r   Zfold_binaryr   rI   r   r   r   r8   ¢  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7bitrM   )rS   r   r   Zcte_typer   rT   rG   r3   Úsuperr   rV   )r   r%   ©r)   r   r   rV   ª  s   
zBytesGenerator._handle_textc                 C   s   t  | d¡|¡S r   )rn   ru   r~   rv   r   r   r   rm   ¹  s   zBytesGenerator._compile_re)rx   ry   rz   r   r-   r   r8   rV   rE   r{   rm   Ú__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   Ú_FMTrl   )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 )Nrd   F)Údecode)ÚfileZ	multipartz[no filename]zContent-Descriptionz[no description]r5   z[no encoding])rR   ÚmaintypeZsubtypeÚfilenameÚdescriptionÚencoding)	Úwalkr@   ÚprintrN   rl   Zget_content_typerA   Úget_filenamer;   )r   r%   r^   r‡   r   r   r   r:   å  s*   ÿÿù	÷øzDecodedGenerator._dispatch)NNN)rx   ry   rz   r   r:   r   r   r   r   r   Á  s    ÿr   r7   z%%0%dd)Ú__all__rn   rj   r"   rh   Úcopyr   Úior   r   Zemail.utilsr   rB   ÚNLru   r/   rp   rT   r   r   rƒ   r   ÚlenÚreprrk   Ú_widthrl   rZ   r   r   r   r   Ú<module>   s,   
  t3;
