B
    ^ c)                 @   s:  d dl Z d dlZd dlZd dlZd dlmZ G dd dZe Zd%ddZe	de d	d
 Z
xd D ]Ze	ee
 qhW dd Zx d D ]Ze	de e qW dd Ze	de dd Zdd Zdd Zdd Zd&ddZeee d'd d!Zeejje d(d#d$Zx eeefD ]Zeee q W dS ))    N)
quoprimimec               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )ContentManagerc             C   s   i | _ i | _d S )N)get_handlersset_handlers)self r   %lib/python3.7/email/contentmanager.py__init__	   s    zContentManager.__init__c             C   s   || j |< d S )N)r   )r   keyhandlerr   r   r   add_get_handler   s    zContentManager.add_get_handlerc             O   s|   |  }|| jkr(| j| |f||S | }|| jkrP| j| |f||S d| jkrp| jd |f||S t|d S )N )Zget_content_typer   get_content_maintypeKeyError)r   msgargskwZcontent_typemaintyper   r   r   get_content   s    


zContentManager.get_contentc             C   s   || j |< d S )N)r   )r   Ztypekeyr   r   r   r   add_set_handler   s    zContentManager.add_set_handlerc             O   s>   |  dkrtd| ||}|  |||f|| d S )NZ	multipartz"set_content not valid on multipart)r   	TypeError_find_set_handlerZclear_content)r   r   objr   r   r   r   r   r   set_content   s
    zContentManager.set_contentc       	      C   s   d }xt |jD ]}|| jkr(| j| S |j}t|dd}|rLd||fn|}|d kr\|}|| jkrp| j| S || jkr| j| S |j}|| jkr| j| S qW d | jkr| jd  S t|d S )N
__module__r   .)type__mro__r   __qualname__getattrjoin__name__r   )	r   r   r   Zfull_path_for_errortypZqnamemodname	full_pathnamer   r   r   r   '   s&    








z ContentManager._find_set_handlerN)	r!   r   r   r	   r   r   r   r   r   r   r   r   r   r      s   	r   replacec             C   s&   | j dd}| dd}|j||dS )NT)decodecharsetASCII)errors)get_payloadZ	get_paramr'   )r   r*   Zcontentr(   r   r   r   get_text_content@   s    r,   textc             C   s   | j ddS )NT)r'   )r+   )r   r   r   r   get_non_text_contentG   s    r.   zaudio image video applicationc             C   s
   |  dS )Nr   )r+   )r   r   r   r   get_message_contentM   s    r/   zrfc822 external-bodyzmessage/c             C   s   t | dS )Nr   )bytesr+   )r   r   r   r   %get_and_fixup_unknown_message_contentS   s    r1   messagec          
      s   d ||f| d< |rt|d ds<| j  fdd|D }y,x&|D ]}|jrX|jd || |j< qDW W n@ tjjk
r } ztd	|j
| jd|W d d }~X Y nX d S )	N/zContent-Typer   r%   c                s   g | ]} j  |g qS r   )Zheader_factoryZheader_source_parse).0header)mpr   r   
<listcomp>d   s   z _prepare_set.<locals>.<listcomp>zInvalid header: {})policy)r    hasattrr8   Zdefectsr%   emailr*   ZHeaderDefect
ValueErrorformatZfold)r   r   subtypeheadersr5   excr   )r6   r   _prepare_set_   s    


r@   c             C   s|   |d kr|d k	rd}|d k	r$|| d< |d k	r>| j d|ddd |d k	rN|| d< |d k	rxx | D ]\}}|  || q`W d S )NZ
attachmentzContent-DispositionfilenameT)r5   r&   z
Content-ID)	set_paramitems)r   dispositionrA   cidparamsr
   valuer   r   r   _finalize_setp   s    rH   c             C   sZ   g }|d d }x>t dt| |D ]*}| |||  }|t|d q"W d|S )N      r   asciir   )rangelenappendbinascii
b2a_base64r'   r    )datamax_line_lengthZencoded_linesZunencoded_bytes_per_lineiZthisliner   r   r   _encode_base64   s    rT   c                s|  |  | }|j d  fdd}dd }|d kryd||dfS  tk
r\   Y nX |jdkrtdd	 |D |jkrd||dd
fS ||d d }t	|d|j}t
|}	t|t|	krd}nd}t|dkr||fS |dkr
||d}
nj|dkr&||dd
}
nN|dkrJt	||d|j}
n*|dkrft|||j}
ntd|||
fS )NrK   c                s     |   S )N)r    )lines)linesepr   r   embedded_body       z#_encode_text.<locals>.embedded_bodyc             S   s   d | d S )N   
)r    )rU   r   r   r   normal_body   rX   z!_encode_text.<locals>.normal_body7bit8bitc             s   s   | ]}t |V  qd S )N)rM   )r4   xr   r   r   	<genexpr>   s    z_encode_text.<locals>.<genexpr>surrogateescape
   zlatin-1base64zquoted-printablez$Unknown content transfer encoding {})encode
splitlinesrV   r'   UnicodeDecodeErrorZcte_typemaxrR   r   Zbody_encoderO   rP   rM   rT   r;   r<   )stringr(   cter8   rU   rW   rZ   ZsniffZsniff_qpZsniff_base64rQ   r   )rV   r   _encode_text   s@    






rh   plainutf-8c
             C   sd   t | d||	 t|||| j\}}
| |
 | jdtjj||dd || d< t	| |||| d S )Nr-   r(   T)r&   zContent-Transfer-Encoding)
r@   rh   r8   set_payloadrB   r:   r(   ZALIASESgetrH   )r   rf   r=   r(   rg   rD   rA   rE   rF   r>   Zpayloadr   r   r   set_text_content   s    
rm   rfc822c	       	      C   s   |dkrt d|dkr@|dkr.t d||d kr:dn|}n0|dkrd|dkr^t d	|d
}n|d krpd
}t| d|| | |g || d< t| |||| d S )Npartialz4message/partial is not supported for Message objectsrn   )Nr[   r\   binaryz*message/rfc822 parts do not support cte={}r\   zexternal-body)Nr[   z1message/external-body parts do not support cte={}r[   r2   zContent-Transfer-Encoding)r;   r<   r@   rk   rH   )	r   r2   r=   rg   rD   rA   rE   rF   r>   r   r   r   set_message_content   s$    rq   ra   c
       
      C   s   t | |||	 |dkr(t|| jjd}nN|dkrNtj|dddd}|d}n(|dkrb|d n|d	krv|dd
}| | || d< t	| |||| d S )Nra   )rR   zquoted-printableFT)istextr5   Z	quotetabsrK   r[   )r\   rp   r_   zContent-Transfer-Encoding)
r@   rT   r8   rR   rO   Zb2a_qpr'   rb   rk   rH   )
r   rQ   r   r=   rg   rD   rA   rE   rF   r>   r   r   r   set_bytes_content   s    
rs   )r&   )ri   rj   NNNNNN)rn   NNNNNN)ra   NNNNN)rO   Zemail.charsetr:   Zemail.messageZemail.errorsr   r   Zraw_data_managerr,   r   r.   splitr   r/   r=   r1   r@   rH   rT   rh   rm   r   strrq   r2   ZMessagers   r0   	bytearray
memoryviewr"   r   r   r   r   <module>   sD   6
	'  
	  
  
