o
     JAf;)                     @   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
 q3dd Zd D ]
Ze	de e qDd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 qd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.10/email/contentmanager.py__init__	   s   
zContentManager.__init__c                 C      || j |< d S r   )r   )r   keyhandlerr   r   r	   add_get_handler      zContentManager.add_get_handlerc                 O   s   |  }|| jv r| j| |g|R i |S | }|| jv r.| j| |g|R i |S d| jv rA| jd |g|R i |S t|)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   r   r   )r   )r   Ztypekeyr   r   r   r	   add_set_handler   r   zContentManager.add_set_handlerc                 O   sD   |  dkr
td| ||}|  |||g|R i | 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 ]O}|| jv r| j|   S |j}t|dd}|r'd||fn|}|d u r/|}|| jv r;| j|   S || jv rG| j|   S |j}|| jv rV| j|   S qd | jv ra| jd  S t|)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   r0   textc                 C   s   | j ddS )NTr*   r/   r   r   r   r	   get_non_text_contentG   s   r4   zaudio image video applicationc                 C   s
   |  dS Nr   r2   r3   r   r   r	   get_message_contentM   s   
r6   zrfc822 external-bodyzmessage/c                 C   s   t | dS r5   )bytesr/   r3   r   r   r	   %get_and_fixup_unknown_message_contentS   s   r8   messagec              
      s   d ||f| d< |rOt|d ds| j  fdd|D }z|D ]}|jr+|jd || |j< q!W d S  tjjyN } ztd	|j
| jd|d }~ww 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#   hasattrr@   Zdefectsr(   emailr.   ZHeaderDefect
ValueErrorformatZfold)r   r   subtypeheadersr<   excr   r=   r	   _prepare_set_   s,   

rH   c                 C   s|   |d u r
|d ur
d}|d ur|| d< |d ur| j d|ddd |d ur'|| d< |d ur:| D ]\}}|  || q/d S d S )NZ
attachmentzContent-DispositionfilenameT)r<   r)   z
Content-ID)	set_paramitems)r   dispositionrI   cidparamsr   valuer   r   r	   _finalize_setp   s"   rP   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   
r\   c                    s  |  | }|j d  fdd}dd }|d u rztdd |D dd	|jkrLz
d
||dfW S  ty<   Y nw |jdkrLd||ddfS ||d d }t	|d|j}t
|}	t|t|	krnd}nd}t|dkrz||fS |d
kr||d}
||
fS |dkr||dd}
||
fS |dkrt	||d|j}
||
fS |dkrt|||j}
||
fS td|)NrS   c                    s     |   S r   r#   lineslinesepr   r	   embedded_body       z#_encode_text.<locals>.embedded_bodyc                 S   s   d | d S )N   
r]   r^   r   r   r	   normal_body   rc   z!_encode_text.<locals>.normal_bodyc                 s   s    | ]}t |V  qd S r   )rU   )r;   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
splitlinesra   maxrZ   r+   UnicodeDecodeErrorZcte_typer   Zbody_encoderW   rX   rU   r\   rC   rD   )stringr,   cter@   r_   rb   re   ZsniffZsniff_qpZsniff_base64rY   r   r`   r	   _encode_text   sL   


ru   plainutf-8c
                 C   sd   t | d||	 t|||| j\}}
| |
 | jdtjj||dd || d< t	| |||| d S )Nr1   r,   Tr)   Content-Transfer-Encoding)
rH   ru   r@   set_payloadrJ   rB   r,   ZALIASESgetrP   )r   rs   rE   r,   rt   rL   rI   rM   rN   rF   payloadr   r   r	   set_text_content   s   
r}   rfc822c	           	      C   s   |dkrt d|dkr |dvrt d||d u rdn|}n|dkr2|dvr/t d	|d
}n|d u r8d
}t| d|| | |g || d< t| |||| d S )Npartialz4message/partial is not supported for Message objectsr~   )Nri   rj   binaryz*message/rfc822 parts do not support cte={}rj   zexternal-body)Nri   z1message/external-body parts do not support cte={}ri   r9   ry   )rC   rD   rH   rz   rP   )	r   r9   rE   rt   rL   rI   rM   rN   rF   r   r   r	   set_message_content   s(   r   rm   c
           
      C   s   t | |||	 |dkrt|| jjd}n'|dkr'tj|dddd}|d}n|dkr1|d}n
|d	v r;|dd
}| | || d< t| |||| d S )Nrm   )rZ   rn   FT)istextr<   Z	quotetabsrS   ri   )rj   r   rk   ry   )	rH   r\   r@   rZ   rW   Zb2a_qpr+   rz   rP   )
r   rY   r   rE   rt   rL   rI   rM   rN   rF   r   r   r	   set_bytes_content   s   
r   rx   )rv   rw   NNNNNN)r~   NNNNNN)rm   NNNNN)rW   Zemail.charsetrB   Zemail.messageZemail.errorsr   r   Zraw_data_managerr0   r   r4   splitr   r6   rE   r8   rH   rP   r\   ru   r}   r   strr   r9   ZMessager   r7   	bytearray
memoryviewr%   r   r   r   r	   <module>   sP    6
	'


