509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„j×S  ã               @   sè   d ddg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jdƒZejdejƒZejdƒZej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]s   \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 kr|d krdn|j }|| _|| _|| _|| _d S )NT)Úmangle_from_Ú_fpÚ_mangle_from_Úmaxheaderlenr   )ÚselfÚoutfpr   r   r   © r   ú'/usr/lib64/python3.6/email/generator.pyÚ__init__'   s    zGenerator.__init__c             C   s   | j j|ƒ d S )N)r   Úwrite)r   Úsr   r   r   r   G   s    zGenerator.writeFc             C   sØ   | j d kr|j n| j }|d k	r*|j|d�}| jd k	rB|j| jd�}|j| _| j| jƒ| _d| _| j| jƒ| _| j }|j }zL|| _ ||_ |r¸|j	ƒ }|s¨dt
jt
j
ƒ ƒ }| j|| j ƒ | j|ƒ W d || _ ||_ X d S )N)Úlinesep)Úmax_line_lengthÚ zFrom nobody )r   Úcloner   r   Ú_NLÚ_encodeÚ_encoded_NLZ_EMPTYÚ_encoded_EMPTYZget_unixfromÚtimeZctimer   Ú_write)r   ÚmsgÚunixfromr   r   Zold_gen_policyZold_msg_policyZufromr   r   r   ÚflattenK   s,    
zGenerator.flattenc             C   s   | j || jd | jd�S )N)r   )Ú	__class__r   r   )r   Úfpr   r   r   r   |   s    zGenerator.clonec             C   s   t ƒ S )N)r   )r   r   r   r   Ú_new_buffer�   s    zGenerator._new_bufferc             C   s   |S )Nr   )r   r   r   r   r   r   ”   s    zGenerator._encodec             C   sX   |sd S t j|ƒ}x*|d d… D ]}| j|ƒ | j| jƒ q W |d rT| j|d ƒ d S )Né   éÿÿÿÿr)   r)   )ÚNLCREÚsplitr   r   )r   ÚlinesÚliner   r   r   Ú_write_lines˜   s    

zGenerator._write_linesc             C   s¤   | j }z"d | _| jƒ  | _ }| j|ƒ W d || _ | j}| `X |rht|ƒ}|jd|d ƒ |jd|d ƒ t|dd ƒ}|d krˆ| j|ƒ n|| ƒ | j j|j	ƒ ƒ d S )Nzcontent-transfer-encodingr   zcontent-typer(   Ú_write_headers)
r   Ú
_munge_cter'   Ú	_dispatchr   Zreplace_headerÚgetattrr/   r   Úgetvalue)r   r"   ZoldfpZsfpZ	munge_cteÚmethr   r   r   r!   ¨   s"    zGenerator._writec             C   st   |j ƒ }|jƒ }tj||fƒjddƒ}t| d| d ƒ}|d krh|jddƒ}t| d| d ƒ}|d krh| j}||ƒ d S )Nú-r
   Z_handle_)Úget_content_maintypeÚget_content_subtypeÚ
UNDERSCOREÚjoinÚreplacer2   Ú
_writeBody)r   r"   ÚmainÚsubZspecificr4   Zgenericr   r   r   r1   Ë   s    zGenerator._dispatchc             C   s¨   x–|j ƒ D ]Š\}}| jj||ƒ}| jjrŠ| jj}|j| jjƒsRtd|›d|›�ƒ‚|}|j|ƒrr|d t|ƒ … }tj	|ƒrŠtd|›�ƒ‚| j
|ƒ q
W | j
| jƒ d S )Nz folded header does not end with z: z folded header contains newline: )Ú	raw_itemsr   ZfoldÚverify_generated_headersr   Úendswithr	   ÚlenÚNEWLINE_WITHOUT_FWSPÚsearchr   r   )r   r"   ÚhÚvÚfoldedr   Úfolded_no_linesepr   r   r   r/   ß   s    

zGenerator._write_headersc             C   sž   |j ƒ }|d krd S t|tƒs.tdt|ƒ ƒ‚t|jƒr~|jdƒ}|d k	r~t|ƒ}|d= |j	||ƒ |j ƒ }|d |d f| _
| jr�tjd|ƒ}| j|ƒ d S )Nzstring payload expected: %sÚcharsetzcontent-transfer-encodingzcontent-typez>From )Úget_payloadÚ
isinstanceÚstrÚ	TypeErrorÚtyper   Ú_payloadZ	get_paramr   Zset_payloadr0   r   Úfcrer=   r.   )r   r"   ÚpayloadrH   r   r   r   Ú_handle_textõ   s"    


zGenerator._handle_textc             C   s¢  g }|j ƒ }|d krg }n(t|tƒr2| j|ƒ d S t|tƒsB|g}x>|D ]6}| jƒ }| j|ƒ}|j|d| jd� |j	|j
ƒ ƒ qHW |jƒ }|s®| jj|ƒ}| j|ƒ}|j|ƒ |jd k	rê| jrÎtjd|jƒ}	n|j}	| j|	ƒ | j| jƒ | jd| | j ƒ |�r| jj|jdƒƒ x4|D ],}
| j| jd | | j ƒ | jj|
ƒ �qW | j| jd | d | j ƒ |jd k	�rž| j�rŽtjd|jƒ}n|j}| j|ƒ d S )NF)r#   r   z>From z--r   )rI   rJ   rK   r   Úlistr'   r   r$   r   Úappendr3   Zget_boundaryr   r9   Ú_make_boundaryZset_boundaryÚpreambler   rO   r=   r.   r   ÚpopÚepilogue)r   r"   ZmsgtextsZsubpartsÚpartr   ÚgÚboundaryZalltextrU   Z	body_partrW   r   r   r   Ú_handle_multipart  sJ    









zGenerator._handle_multipartc             C   s0   | j }|jdd�| _ z| j|ƒ W d || _ X d S )Nr   )r   )r   r   r[   )r   r"   Úpr   r   r   Ú_handle_multipart_signedG  s
    z"Generator._handle_multipart_signedc             C   sž   g }x€|j ƒ D ]t}| jƒ }| j|ƒ}|j|d| jd� |jƒ }|j| jƒ}|rx|d | jkrx|j	| jj
|d d… ƒƒ q|j	|ƒ qW | jj| jj
|ƒƒ d S )NF)r#   r   r(   r)   r)   )rI   r'   r   r$   r   r3   r+   r   r   rS   r9   r   r   )r   r"   ZblocksrX   r   rY   Útextr,   r   r   r   Ú_handle_message_delivery_statusR  s    
z)Generator._handle_message_delivery_statusc             C   s^   | j ƒ }| j|ƒ}|j}t|tƒrD|j|jdƒd| jd� |jƒ }n
| j	|ƒ}| j
j|ƒ d S )Nr   F)r#   r   )r'   r   rN   rJ   rR   r$   rI   r   r3   r   r   r   )r   r"   r   rY   rP   r   r   r   Ú_handle_messageg  s    




zGenerator._handle_messagec             C   sz   t jtjƒ}d	t|  d }|d kr(|S |}d}xD| jdtj|ƒ d tjƒ}|j	|ƒsZP |d t
|ƒ }|d7 }q2W |S )
Nú=é   z==r   z^--z(--)?$Ú.r(   z===============)ÚrandomZ	randrangeÚsysÚmaxsizeÚ_fmtÚ_compile_reÚreÚescapeÚ	MULTILINErC   rK   )Úclsr^   ÚtokenrZ   ÚbZcounterZcrer   r   r   rT   €  s    
zGenerator._make_boundaryc             C   s   t j||ƒS )N)ri   Úcompile)rl   r   Úflagsr   r   r   rh   ’  s    zGenerator._compile_re)NN)FN)N)Ú__name__Ú
__module__Ú__qualname__r   r   r$   r   r'   r   r.   r!   r1   r/   rQ   r;   r[   r]   r_   r`   ÚclassmethodrT   rh   r   r   r   r   r      s(   

1#: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 j|jddƒƒ d S )NÚasciiÚsurrogateescape)r   r   Úencode)r   r   r   r   r   r   ¤  s    zBytesGenerator.writec             C   s   t ƒ S )N)r   )r   r   r   r   r'   §  s    zBytesGenerator._new_bufferc             C   s
   |j dƒS )Nru   )rw   )r   r   r   r   r   r   ª  s    zBytesGenerator._encodec             C   sª   x˜|j ƒ D ]Œ\}}| jj||ƒ}| jjrŠ| jjjƒ }|j|ƒsRtd|›d|›�ƒ‚|}|j|ƒrr|d t|ƒ … }t	j
|ƒrŠtd|›�ƒ‚| jj|ƒ q
W | j| jƒ d S )Nz folded header does not end with z: z folded header contains newline: )r>   r   Zfold_binaryr?   r   rw   r@   r	   rA   ÚNEWLINE_WITHOUT_FWSP_BYTESrC   r   r   r   )r   r"   rD   rE   rF   r   rG   r   r   r   r/   ­  s    


zBytesGenerator._write_headersc                s^   |j d krd S t|j ƒrJ| jjdk rJ| jr<tjd|j ƒ|_ | j|j ƒ ntt	| ƒj
|ƒ d S )NZ7bitz>From )rN   r   r   Zcte_typer   rO   r=   r.   Úsuperr   rQ   )r   r"   )r%   r   r   rQ   Á  s    
zBytesGenerator._handle_textc             C   s   t j|jdƒ|ƒS )Nru   )ri   ro   rw   )rl   r   rp   r   r   r   rh   Ð  s    zBytesGenerator._compile_re)rq   rr   rs   r   r'   r   r/   rQ   r;   rt   rh   Ú__classcell__r   r   )r%   r   r   —  s   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   N)r   c            C   s.   t j| ||||d� |d kr$t| _n|| _d S )N)r   )r   r   Ú_FMTrg   )r   r   r   r   Zfmtr   r   r   r   r   Þ  s
    zDecodedGenerator.__init__c             C   sˆ   x‚|j ƒ D ]v}|jƒ }|dkr4t|jdd�| d� q
|dkr>q
t| j|jƒ |jƒ |jƒ |jdƒ|jddƒ|jd	d
ƒdœ | d� q
W d S )Nr^   F)Údecode)ÚfileZ	multipartz[no filename]zContent-Descriptionz[no description]zContent-Transfer-Encodingz[no encoding])rM   ÚmaintypeÚsubtypeÚfilenameZdescriptionÚencoding)	Úwalkr6   ÚprintrI   rg   Zget_content_typer7   Úget_filenameÚget)r   r"   rX   r~   r   r   r   r1   ü  s     
zDecodedGenerator._dispatch)NNN)rq   rr   rs   r   r1   r   r   r   r   r   Ø  s   r(   z%%0%dd) Ú__all__ri   re   r    rd   Úcopyr   Úior   r   Zemail.utilsr   Zemail.errorsr	   r8   ÚNLro   r*   rk   rO   rB   rx   r   r   r{   r   rA   Úreprrf   Z_widthrg   rT   r   r   r   r   Ú<module>   s.   



  |?;