î
\á[\f)  ã            
   @   sè  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l m Z Gd d „  d ƒ Z e ƒ  Z d d d „ Z e j	 d e ƒ d	 d
 „  Z
 x$ d j ƒ  D] Z e j	 e e
 ƒ q” Wd d „  Z x( d j ƒ  D] Z e j	 d e e ƒ qÇ Wd d „  Z e j	 d e ƒ d d „  Z d d „  Z d d „  Z d d „  Z d d d d d d d d d d „ Z e j e e ƒ d d d d d d d d  d! „ Z e j e j j e ƒ d" d d d d d d# d$ „ Z x' e e e f D] Z e j e e ƒ qÊWd S)%é    N)Ú
quoprimimec               @   sX   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.4/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  ƒ  } | |  j k r2 |  j | | | | Ž S| j ƒ  } | |  j k rd |  j | | | | Ž Sd |  j k rŠ |  j d | | | Ž St | ƒ ‚ 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   sT   | j  ƒ  d k r! t d ƒ ‚ n  |  j | | ƒ } | j ƒ  | | | | | Ž 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  } xÙ t  | ƒ j D]È } | |  j k r6 |  j | S| j } t | d d ƒ } | rl d j | | f ƒ n | } | d  k r‡ | } n  | |  j k r¡ |  j | S| |  j k r» |  j | S| j } | |  j k r |  j | Sq Wd  |  j k rü |  j d  St | ƒ ‚ 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   s7   |  j  d d ƒ } |  j d d ƒ } | j | d | ƒS)NÚdecodeTÚ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)Nr'   T)r+   )r   r   r   r   Úget_non_text_contentG   s    r.   zaudio image video applicationc             C   s   |  j  d ƒ S)Nr   )r+   )r   r   r   r   Úget_message_contentM   s    r/   zrfc822 external-bodyzmessage/c             C   s   t  |  j d ƒ ƒ S)Nr   )Úbytesr+   )r   r   r   r   Ú%get_and_fixup_unknown_message_contentS   s    r1   Úmessagec                sî   d j  | | f ƒ |  d <| rê t | d d ƒ sW |  j ‰  ‡  f d d †  | Dƒ } n  y; x4 | D], } | j r€ | j d ‚ n  | |  | j <qa WWqê t j j k
 ræ } z, t d j	 | j
 d |  j ƒ ƒ ƒ | ‚ WYd  d  } ~ Xqê Xn  d  S)	Nú/zContent-Typer   r%   c                s+   g  |  ]! } ˆ  j  ˆ  j | g ƒ Œ  ‘ q Sr   )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 } n  | d  k	 r: | |  d <n  | d  k	 re |  j  d | d d d d ƒn  | d  k	 r~ | |  d <n  | d  k	 rº x- | j ƒ  D] \ } } |  j  | | ƒ q— Wn  d  S)NZ
attachmentzContent-DispositionÚfilenamer5   r&   Tz
Content-ID)Ú	set_paramÚitems)r   ÚdispositionrA   ÚcidÚparamsr
   Úvaluer   r   r   Ú_finalize_setp   s    		
rH   c             C   sw   g  } | d d } xS t  d t |  ƒ | ƒ D]9 } |  | | | … } | j t j | ƒ j d ƒ ƒ q- Wd j | ƒ 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  | ƒ j ƒ  } | j j  d ƒ ‰  ‡  f d d †  } d d „  } | d  k rYy d | | ƒ j d ƒ f SWn t k
 r‚ Yn X| j d k rÐ t d d	 „  | Dƒ ƒ | j k rÐ d | | ƒ j d d
 ƒ f S| | d  d … ƒ } t j	 | j d ƒ | j ƒ } t
 j | ƒ }	 t | ƒ t |	 ƒ k r4d } qYd } t | ƒ d k rY| | f Sn  | d k r}| | ƒ j d ƒ }
 n– | d k r¤| | ƒ j d d
 ƒ }
 no | d k r×t j	 | | ƒ j d ƒ | j ƒ }
 n< | d k rþt | | ƒ | j ƒ }
 n t d j | ƒ ƒ ‚ | |
 f S)NrK   c                s   ˆ  j  |  ƒ ˆ  S)N)r    )Úlines)Úlinesepr   r   Úembeded_body   s    z"_encode_text.<locals>.embeded_bodyc             S   s   d j  |  ƒ d S)Ns   
)r    )rU   r   r   r   Únormal_body‘   s    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   rX   ZsniffZsniff_qpZsniff_base64rQ   r   )rV   r   Ú_encode_text   s@    "	rf   Zplainzutf-8c
             C   sŠ   t  |  d | |	 ƒ t | | | |  j ƒ \ } }
 |  j |
 ƒ |  j d t j j j | | ƒ d d ƒ| |  d <t	 |  | | | | ƒ d  S)Nr-   r(   r&   TzContent-Transfer-Encoding)
r@   rf   r8   Úset_payloadrB   r:   r(   ZALIASESÚgetrH   )r   rd   r=   r(   re   rD   rA   rE   rF   r>   Zpayloadr   r   r   Úset_text_content´   s    	
ri   Úrfc822c	       	      C   sû   | d k r t  d ƒ ‚ n  | d k rf | d k rK t  d j | ƒ ƒ ‚ n  | d  k r] d n | } nN | d k rŸ | d k r– t  d	 j | ƒ ƒ ‚ n  d } n | d  k r´ d } n  t |  d
 | | ƒ |  j | g ƒ | |  d <t |  | | | | ƒ d  S)NÚpartialz4message/partial is not supported for Message objectsrj   rY   rZ   Úbinaryz*message/rfc822 parts do not support cte={}zexternal-bodyz1message/external-body parts do not support cte={}r2   zContent-Transfer-Encoding)Nú7bitz8bitrl   )Nrm   )r;   r<   r@   rg   rH   )	r   r2   r=   re   rD   rA   rE   rF   r>   r   r   r   Úset_message_contentÂ   s$    		
rn   r_   c
       
      C   sç   t  |  | | |	 ƒ | d k r: t | d |  j j ƒ} n| | d k ry t j | d d d d d d ƒ} | j d	 ƒ } n= | d
 k r• | j d	 ƒ n! | d k r¶ | j d	 d ƒ } n  |  j | ƒ | |  d <t	 |  | | | | ƒ d  S)Nr_   rR   zquoted-printableÚistextFr5   Z	quotetabsTrK   rY   rZ   rl   r]   zContent-Transfer-Encoding)z8bitzbinary)
r@   rT   r8   rR   rO   Zb2a_qpr'   r`   rg   rH   )
r   rQ   r   r=   re   rD   rA   rE   rF   r>   r   r   r   Úset_bytes_contentã   s    !
rp   )rO   Zemail.charsetr:   Zemail.messageZemail.errorsr   r   Zraw_data_managerr,   r   r.   Úsplitr   r/   r=   r1   r@   rH   rT   rf   ri   r   Ústrrn   r2   ZMessagerp   r0   Ú	bytearrayÚ
memoryviewr"   r   r   r   r   Ú<module>   sD   6			'					