U
    pd)                     @   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
d D ]Ze	ee
 qfdd Zd D ]Ze	de e qd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eeefD ]Zeee q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   */usr/lib/python3.8/email/contentmanager.py__init__	   s    zContentManager.__init__c                 C   s   || j |< d S r   )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 r   )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 }t |jD ]}|| jkr*| j|   S |j}t|dd}|rNd||fn|}|d kr^|}|| jkrv| j|   S || jkr| j|   S |j}|| jkr| j|   S q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 )NTr(   r-   r   r   r   r	   get_non_text_contentG   s    r2   zaudio image video applicationc                 C   s
   |  dS Nr   r0   r1   r   r   r	   get_message_contentM   s    r4   zrfc822 external-bodyzmessage/c                 C   s   t | dS r3   )bytesr-   r1   r   r   r	   %get_and_fixup_unknown_message_contentS   s    r6   messagec              
      s   d ||f| d< |rt|d ds<| j  fdd|D }z(|D ]}|jrV|jd || |j< qBW n@ tjjk
r } ztd	|j
| jd|W 5 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Zmpr   r	   
<listcomp>d   s   z _prepare_set.<locals>.<listcomp>zInvalid header: {})policy)r!   hasattrr=   Zdefectsr&   emailr,   ZHeaderDefect
ValueErrorformatZfold)r   r   subtypeheadersr:   excr   r;   r	   _prepare_set_   s$    

rE   c                 C   sx   |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	rt| D ]\}}|  || q^d S )NZ
attachmentzContent-DispositionfilenameT)r:   r'   z
Content-ID)	set_paramitems)r   dispositionrF   cidparamsr   valuer   r   r	   _finalize_setp   s    rM   c                 C   sV   g }|d d }t dt| |D ]*}| |||  }|t|d q 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    rY   c                    s  |  | }|j d  fdd}dd }|d krtdd |D dd	|jkrzd
||dfW S  tk
rz   Y nX |jd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rPt	||d|j}
n*|dkrlt|||j}
ntd|||
fS )NrP   c                    s     |   S r   r!   lineslinesepr   r	   embedded_body       z#_encode_text.<locals>.embedded_bodyc                 S   s   d | d S )N   
rZ   r[   r   r   r	   normal_body   r`   z!_encode_text.<locals>.normal_bodyc                 s   s   | ]}t |V  qd S r   )rR   )r9   xr   r   r	   	<genexpr>   s     z_encode_text.<locals>.<genexpr>r   )default7bit8bitsurrogateescape
   zlatin-1base64quoted-printablez$Unknown content transfer encoding {})encode
splitlinesr^   maxrW   r)   UnicodeDecodeErrorZcte_typer   Zbody_encoderT   rU   rR   rY   r@   rA   )stringr*   cter=   r\   r_   rb   ZsniffZsniff_qpZsniff_base64rV   r   r]   r	   _encode_text   sD    





rr   plainutf-8c
                 C   sd   t | d||	 t|||| j\}}
| |
 | jdtjj||dd || d< t	| |||| d S )Nr/   r*   T)r'   Content-Transfer-Encoding)
rE   rr   r=   set_payloadrG   r?   r*   ZALIASESgetrM   )r   rp   rB   r*   rq   rI   rF   rJ   rK   rC   Zpayloadr   r   r	   set_text_content   s    
rx   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 objectsry   )Nrf   rg   binaryz*message/rfc822 parts do not support cte={}rg   zexternal-body)Nrf   z1message/external-body parts do not support cte={}rf   r7   ru   )r@   rA   rE   rv   rM   )	r   r7   rB   rq   rI   rF   rJ   rK   rC   r   r   r	   set_message_content   s(    r|   rj   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 )Nrj   )rW   rk   FT)istextr:   Z	quotetabsrP   rf   )rg   r{   rh   ru   )
rE   rY   r=   rW   rT   Zb2a_qpr)   rl   rv   rM   )
r   rV   r   rB   rq   rI   rF   rJ   rK   rC   r   r   r	   set_bytes_content   s    
r~   )r'   )rs   rt   NNNNNN)ry   NNNNNN)rj   NNNNN)rT   Zemail.charsetr?   Zemail.messageZemail.errorsr   r   Zraw_data_managerr.   r   r2   splitr   r4   rB   r6   rE   rM   rY   rr   rx   r   strr|   r7   ZMessager~   r5   	bytearray
memoryviewr#   r   r   r   r	   <module>   s^   6
	'         
         
         
