o
    …9j;)  ã                   @   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¡ 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.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Ú )Úget_content_typer   Úget_content_maintypeÚKeyError)r   ÚmsgÚargsÚkwÚcontent_typeÚmaintyper   r   r	   Úget_content   s   


zContentManager.get_contentc                 C   r   r   )r   )r   Ú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 )NÚ	multipartz"set_content not valid on multipart)r   Ú	TypeErrorÚ_find_set_handlerÚ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    Úfull_path_for_errorÚtypÚ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_payloadÚ	get_paramr2   )r   r5   Úcontentr3   r   r   r	   Úget_text_content@   s   r9   Útextc                 C   s   | j dd�S )NTr1   ©r6   ©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 r>   )Úbytesr6   r<   r   r   r	   Ú%get_and_fixup_unknown_message_contentS   s   rA   Ú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   )Úheader_factoryÚheader_source_parse)Ú.0Úheader©Úmpr   r	   Ú
<listcomp>d   s    ÿz _prepare_set.<locals>.<listcomp>zInvalid header: {})Úpolicy)r(   ÚhasattrrK   Údefectsr/   Úemailr5   ÚHeaderDefectÚ
ValueErrorÚformatÚfold)r   r   ÚsubtypeÚheadersrG   Úexcr   rH   r	   Ú_prepare_set_   s,   
ÿ
ýÿÿ€ÿörV   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 )NÚ
attachmentzContent-DispositionÚfilenameT)rG   r0   z
Content-ID)Ú	set_paramÚitems)r   ÚdispositionrX   ÚcidÚparamsr   Úvaluer   r   r	   Ú_finalize_setp   s"   ýþr_   c                 C   sV   g }|d d }t dt| ƒ|ƒD ]}| ||| … }| t |¡ d¡¡ qd |¡S )Né   é   r   Úasciir   )ÚrangeÚlenÚappendÚbinasciiÚ
b2a_base64r2   r(   )ÚdataÚmax_line_lengthÚencoded_linesÚunencoded_bytes_per_lineÚiÚthisliner   r   r	   Ú_encode_base64…   s   
rn   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r­t 	||ƒ d¡|j¡}
||
fS |dkr½t||ƒ|jƒ}
||
fS td |¡ƒ‚)Nrb   c                    s   ˆ   | ¡ˆ  S r   ©r(   ©Úlines©Úlinesepr   r	   Úembedded_body‘   ó    z#_encode_text.<locals>.embedded_bodyc                 S   s   d  | ¡d S )Nó   
ro   rp   r   r   r	   Únormal_body’   ru   z!_encode_text.<locals>.normal_bodyc                 s   s   � | ]}t |ƒV  qd S r   )rd   )rF   Ú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Ú
splitlinesrs   Úmaxri   r2   ÚUnicodeDecodeErrorÚcte_typer   Úbody_encoderf   rg   rd   rn   rP   rQ   )Ústringr3   ÚcterK   rq   rt   rw   ÚsniffÚsniff_qpÚsniff_base64rh   r   rr   r	   Ú_encode_textŽ   sL   ÿ
ÿ

÷ùÿüÿrŒ   Úplainúutf-8c
                 C   sd   t | d||	ƒ t|||| jƒ\}}
|  |
¡ | jdtjj ||¡dd� || d< t	| ||||ƒ d S )Nr:   r3   T©r0   úContent-Transfer-Encoding)
rV   rŒ   rK   Úset_payloadrY   rN   r3   ÚALIASESÚgetr_   )r   r‡   rS   r3   rˆ   r[   rX   r\   r]   rT   Ú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–   )Nr{   r|   Úbinaryz*message/rfc822 parts do not support cte={}r|   zexternal-body)Nr{   z1message/external-body parts do not support cte={}r{   rB   r�   )rP   rQ   rV   r‘   r_   )	r   rB   rS   rˆ   r[   rX   r\   r]   rT   r   r   r	   Úset_message_contentÃ   s(   ÿÿr™   r   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 )Nr   )ri   r€   FT)ÚistextrG   Ú	quotetabsrb   r{   )r|   r˜   r}   r�   )	rV   rn   rK   ri   rf   Úb2a_qpr2   r‘   r_   )
r   rh   r   rS   rˆ   r[   rX   r\   r]   rT   r   r   r	   Úset_bytes_contentä   s   
r�   r�   )r�   rŽ   NNNNNN)r–   NNNNNN)r   NNNNN)rf   Úemail.charsetrN   Úemail.messageÚemail.errorsr   r   Úraw_data_managerr9   r   r=   Úsplitr   r?   rS   rA   rV   r_   rn   rŒ   r•   r   Ústrr™   rB   ÚMessager�   r@   Ú	bytearrayÚ
memoryviewr+   r   r   r   r	   Ú<module>   sP    6
ÿ	'
þ
þ
þÿ