a
    #Rî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   s6   |d u r|d u rdn|j }|| _|| _|| _|| _d S )NT)Úmangle_from_Ú_fpÚ_mangle_from_Úmaxheaderlenr   )ÚselfÚoutfpr   r   r   © r   ú7/opt/python-3.9.24/usr/lib/python3.9/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rB|j| jd}|j| _|  | j¡| _d| _|  | j¡| _| j }|j }zX|| _ ||_ |r¸| 	¡ }|s¨dt
 t
 
¡ ¡ }|  || j ¡ |  |¡ W || _ ||_ n|| _ ||_ 0 d S )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   s0    
ÿ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   s   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   sT   |sd S t  |¡}|d d… D ]}|  |¡ |  | j¡ q|d rP|  |d ¡ d S )Néÿÿÿÿ)ÚNLCREÚsplitr   r   )r   ÚlinesÚliner   r   r   Ú_write_lines—   s    

zGenerator._write_linesc                 C   sÐ   | j }z2d | _|  ¡  | _ }|  |¡ W || _ | j}| `n|| _ | j}| `0 |r”t|ƒ}| d¡d u rt|d |d< n| d|d ¡ | d|d ¡ t|dd ƒ}|d u r´|  |¡ 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 rh| dd¡}t| d| d ƒ}|d u rh| 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 ]p\}}| j ||¡}| jjrn| jj}| | jj¡sPtd|›d|›ƒ‚t | 	|¡¡rnt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   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rt 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&   ÚpayloadrO   r   r   r   Ú_handle_textõ   s$    


ÿzGenerator._handle_textc                 C   sš  g }|  ¡ }|d u rg }n(t|tƒr2|  |¡ d S t|tƒsB|g}|D ]6}|  ¡ }|  |¡}|j|d| jd | 	| 
¡ ¡ qF| ¡ }|sª| j |¡}|  |¡}| |¡ |jd uræ| jrÊt 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 )NF©r'   r   rP   z--r   )rQ   rR   rS   r   Úlistr-   r   r(   r   Úappendr=   Zget_boundaryr!   rC   Ú_make_boundaryZset_boundaryÚpreambler   rW   rG   r3   r   ÚpopÚepilogue)r   r&   ZmsgtextsZsubpartsÚpartr   ÚgÚboundaryZalltextr^   Z	body_partr`   r   r   r   Ú_handle_multipart  sJ    







zGenerator._handle_multipartc                 C   s6   | j }|jdd| _ z|  |¡ W || _ n|| _ 0 d S )Nr   r   )r   r   rd   )r   r&   Úpr   r   r   Ú_handle_multipart_signedG  s
    z"Generator._handle_multipart_signedc                 C   sš   g }|  ¡ D ]t}|  ¡ }|  |¡}|j|d| jd | ¡ }| | j¡}|rv|d | jkrv| 	| j 
|d d… ¡¡ q| 	|¡ q| j | j 
|¡¡ d S )NFrZ   r.   )rQ   r-   r   r(   r   r=   r0   r!   r"   r\   rC   r   r   )r   r&   Zblocksra   r   rb   Útextr1   r   r   r   Ú_handle_message_delivery_statusR  s    
z)Generator._handle_message_delivery_statusc                 C   s^   |   ¡ }|  |¡}|j}t|tƒrD|j| d¡d| jd | ¡ }n
|  	|¡}| j
 |¡ d S )Nr   FrZ   )r-   r   rV   rR   r[   r(   rQ   r   r=   r    r   r   )r   r&   r   rb   rX   r   r   r   Ú_handle_messageg  s    




zGenerator._handle_messagec                 C   sv   t  tj¡}dt|  d }|d u r(|S |}d}|  dt |¡ d tj¡}| 	|¡sXqr|d t
|ƒ }|d7 }q0|S )Nz===============z==r   z^--z(--)?$Ú.r7   )ÚrandomÚ	randrangeÚsysÚmaxsizeÚ_fmtÚ_compile_reÚreÚescapeÚ	MULTILINErK   rS   )Úclsrg   Útokenrc   ÚbZcounterZcrer   r   r   r]   €  s    

zGenerator._make_boundaryc                 C   s   t  ||¡S r   )rq   Úcompile©rt   r   Úflagsr   r   r   rp   ’  s    zGenerator._compile_re)NN)FN)N)Ú__name__Ú
__module__Ú__qualname__r   r   r(   r   r-   r    r3   r%   r:   r8   rY   rE   rd   rf   rh   ri   Úclassmethodr]   rp   r   r   r   r   r      s,   
ÿ 
1':r   c                       sL   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   s   t ƒ S 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   )r   r&   rM   rN   r   r   r   r8   ­  s    zBytesGenerator._write_headersc                    s\   |j d u rd S t|j ƒrH| jjdksH| jr:t d|j ¡|_ |  |j ¡ ntt	| ƒ 
|¡ d S )NZ7bitrP   )rV   r   r   Zcte_typer   rW   rG   r3   Úsuperr   rY   )r   r&   ©r*   r   r   rY   µ  s    
zBytesGenerator._handle_textc                 C   s   t  | d¡|¡S r   )rq   rw   r€   rx   r   r   r   rp   Ä  s    zBytesGenerator._compile_re)rz   r{   r|   r   r-   r    r8   rY   rE   r}   rp   Ú__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   s.   t j| ||||d |d u r$t| _n|| _d S r)   )r   r   Ú_FMTro   )r   r   r   r   Úfmtr   r   r   r   r   Ò  s    ÿzDecodedGenerator.__init__c                 C   s„   |  ¡ D ]v}| ¡ }|dkr2t|jdd| d q|dkr<qt| j| ¡ | ¡ | ¡ | d¡| dd¡| d	d
¡dœ | d qd S )Nrg   F)Údecode)ÚfileZ	multipartz[no filename]zContent-Descriptionz[no description]r5   z[no encoding])rU   ÚmaintypeZsubtypeÚfilenameÚdescriptionÚencoding)	Úwalkr@   ÚprintrQ   ro   Zget_content_typerA   Úget_filenamer;   )r   r&   ra   r‰   r   r   r   r:   ð  s(    ÿÿù	÷zDecodedGenerator._dispatch)NNN)rz   r{   r|   r   r:   r   r   r   r   r   Ì  s   ÿr   r7   z%%0%dd)Ú__all__rq   rm   r#   rk   Úcopyr   Úior   r   Zemail.utilsr   Zemail.errorsr	   rB   ÚNLrw   r/   rs   rW   rJ   r   r   r…   r   ÚlenÚreprrn   Ú_widthro   r]   r   r   r   r   Ú<module>   s,   

  }3;