B
    sG_O                 @   sf  d dl mZ d dlmZ d dlmZ d dlmZ G dd dZG dd dZG d	d
 d
e	Z
dd ZG dd dZG dd deZG dd dZG dd deZG dd dZG dd deZG dd deZG dd deZG dd dZG dd  d ZG d!d" d"eZG d#d$ d$eZG d%d& d&Zeeeeeeeeeeeeeeeeeeed'ZG d(d) d)Zd*S )+    )MappingProxyType)utils)errors)_header_value_parserc               @   s^   e Zd ZdddZedd Zedd Zed	d
 Zedd Zdd Z	dd Z
dd ZdS )Address Nc             C   s   d td ||||f}d|ks(d|kr0td|d k	r|s@|rHtdt|\}}|rjtd|||jrz|jd |j}|j	}|| _
|| _|| _d S )Nr   
z8invalid arguments; address parts cannot contain CR or LFz=addrspec specified when username and/or domain also specifiedz6Invalid addr_spec; only '{}' could be parsed from '{}'r   )joinfilter
ValueError	TypeErrorparserZget_addr_specformatall_defects
local_partdomain_display_name	_username_domain)selfdisplay_nameusernamer   	addr_specZinputsZa_srest r   6/opt/hscpipe/8.4/lib/python3.7/email/headerregistry.py__init__   s"    

zAddress.__init__c             C   s   | j S )N)r   )r   r   r   r   r   <   s    zAddress.display_namec             C   s   | j S )N)r   )r   r   r   r   r   @   s    zAddress.usernamec             C   s   | j S )N)r   )r   r   r   r   r   D   s    zAddress.domainc             C   sT   t | j}t|t|tj kr.t| j}n| j}| jrH|d | j S |sPdS |S )N@z<>)setr   lenr   ZDOT_ATOM_ENDSquote_stringr   )r   namesetZlpr   r   r   r   H   s    
zAddress.addr_specc             C   s   d | jj| j| j| jS )Nz1{}(display_name={!r}, username={!r}, domain={!r}))r   	__class____name__r   r   r   )r   r   r   r   __repr__X   s    zAddress.__repr__c             C   s^   t | j}t|t|tj kr.t| j}n| j}|rX| jdkrFdn| j}d||S | jS )Nz<>r   z{} <{}>)r   r   r    r   SPECIALSr!   r   r   )r   r"   dispr   r   r   r   __str__]   s    
zAddress.__str__c             C   s8   t |t | krdS | j|jko6| j|jko6| j|jkS )NF)typer   r   r   )r   otherr   r   r   __eq__h   s
    zAddress.__eq__)r   r   r   N)r$   
__module____qualname__r   propertyr   r   r   r   r%   r(   r+   r   r   r   r   r      s   
*r   c               @   sF   e Zd ZdddZedd Zedd Zdd	 Zd
d Zdd Z	dS )GroupNc             C   s   || _ |rt|nt | _d S )N)r   tuple
_addresses)r   r   	addressesr   r   r   r   r   s    zGroup.__init__c             C   s   | j S )N)r   )r   r   r   r   r      s    zGroup.display_namec             C   s   | j S )N)r1   )r   r   r   r   r2      s    zGroup.addressesc             C   s   d | jj| j| jS )Nz${}(display_name={!r}, addresses={!r})r   r#   r$   r   r2   )r   r   r   r   r%      s    zGroup.__repr__c             C   s   | j d kr&t| jdkr&t| jd S | j }|d k	r\t|}t|t|tj kr\t|}ddd | jD }|r~d| n|}d	||S )N   r   z, c             s   s   | ]}t |V  qd S )N)str).0xr   r   r   	<genexpr>   s    z Group.__str__.<locals>.<genexpr> z{}:{};)
r   r    r2   r4   r   r   r&   r!   r
   r   )r   r'   r"   Zadrstrr   r   r   r(      s    
zGroup.__str__c             C   s,   t |t | krdS | j|jko*| j|jkS )NF)r)   r   r2   )r   r*   r   r   r   r+      s    zGroup.__eq__)NN)
r$   r,   r-   r   r.   r   r2   r%   r(   r+   r   r   r   r   r/   p   s   
r/   c               @   sP   e Zd Zdd Zdd Zedd Zedd Zd	d
 Ze	dd Z
dd ZdS )
BaseHeaderc             C   s\   dg i}|  || t|d r4t|d |d< t| |d }|d= |j|f| |S )Ndefectsdecoded)parser   Z_has_surrogates	_sanitizer4   __new__init)clsnamevaluekwdsr   r   r   r   r>      s    zBaseHeader.__new__c            C   s   || _ || _|| _d S )N)_name_parse_tree_defects)r   rA   
parse_treer:   r   r   r   r?      s    zBaseHeader.initc             C   s   | j S )N)rD   )r   r   r   r   rA      s    zBaseHeader.namec             C   s
   t | jS )N)r0   rF   )r   r   r   r   r:      s    zBaseHeader.defectsc             C   s   t | jj| jjt| f| jfS )N)_reconstruct_headerr#   r$   	__bases__r4   __dict__)r   r   r   r   
__reduce__   s
    zBaseHeader.__reduce__c             C   s   t | |S )N)r4   r>   )r@   rB   r   r   r   _reconstruct   s    zBaseHeader._reconstructc         	   C   s`   t t t | jdt ddgg}| jrH|t t ddg || j |j	|dS )Nzheader-name:z
header-sepr8   Zfws)policy)
r   ZHeaderZHeaderLabelZValueTerminalrA   rE   appendZCFWSListZWhiteSpaceTerminalfold)r   rN   headerr   r   r   rP      s    zBaseHeader.foldN)r$   r,   r-   r>   r?   r.   rA   r:   rK   classmethodrL   rP   r   r   r   r   r9      s   "

r9   c             C   s   t | |i |S )N)r)   rL   )Zcls_namebasesrB   r   r   r   rH   
  s    rH   c               @   s&   e Zd ZdZeejZedd Z	dS )UnstructuredHeaderNc             C   s"   |  ||d< t|d |d< d S )NrG   r;   )value_parserr4   )r@   rB   rC   r   r   r   r<     s    zUnstructuredHeader.parse)
r$   r,   r-   	max_countstaticmethodr   get_unstructuredrU   rR   r<   r   r   r   r   rT     s   
rT   c               @   s   e Zd ZdZdS )UniqueUnstructuredHeaderr3   N)r$   r,   r-   rV   r   r   r   r   rY     s   rY   c                   sB   e Zd ZdZeejZedd Z	 fddZ
edd Z  ZS )
DateHeaderNc             C   sz   |s6|d  t  d |d< d|d< t |d< d S t|trJt|}||d< t	|d |d< | 
|d |d< d S )Nr:   datetimer   r;   rG   )rO   r   ZHeaderMissingRequiredValuer   Z	TokenList
isinstancer4   r   Zparsedate_to_datetimeZformat_datetimerU   )r@   rB   rC   r   r   r   r<   .  s    

zDateHeader.parsec                s   | d| _t j|| d S )Nr[   )pop	_datetimesuperr?   )r   argskw)r#   r   r   r?   <  s    zDateHeader.initc             C   s   | j S )N)r^   )r   r   r   r   r[   @  s    zDateHeader.datetime)r$   r,   r-   rV   rW   r   rX   rU   rR   r<   r?   r.   r[   __classcell__r   r   )r#   r   rZ     s
   
rZ   c               @   s   e Zd ZdZdS )UniqueDateHeaderr3   N)r$   r,   r-   rV   r   r   r   r   rc   E  s   rc   c                   sP   e Zd ZdZedd Zedd Z fddZe	dd	 Z
e	d
d Z  ZS )AddressHeaderNc             C   s   t | \}} |S )N)r   Zget_address_list)rB   address_listr   r   r   rU   N  s    zAddressHeader.value_parserc             C   s   t |trZ| | |d< }g }x,|jD ]"}|t|jdd |jD  q(W t|j	}n"t
|dsj|g}dd |D }g }||d< ||d< dd	d |D |d
< d|kr| |d
 |d< d S )NrG   c             S   s*   g | ]"}t |jpd |jpd |jp"d qS )r   )r   r   r   r   )r5   Zmbr   r   r   
<listcomp>]  s   z'AddressHeader.parse.<locals>.<listcomp>__iter__c             S   s&   g | ]}t |d std|gn|qS )r2   N)hasattrr/   )r5   itemr   r   r   rf   f  s   groupsr:   z, c             S   s   g | ]}t |qS r   )r4   )r5   ri   r   r   r   rf   l  s    r;   )r\   r4   rU   r2   rO   r/   r   Zall_mailboxeslistr   rh   r
   )r@   rB   rC   re   rj   Zaddrr:   r   r   r   r<   T  s$    


zAddressHeader.parsec                s(   t |d| _d | _t j|| d S )Nrj   )r0   r]   _groupsr1   r_   r?   )r   r`   ra   )r#   r   r   r?   p  s    zAddressHeader.initc             C   s   | j S )N)rl   )r   r   r   r   rj   u  s    zAddressHeader.groupsc             C   s&   | j d kr tdd | jD | _ | j S )Nc             s   s   | ]}|j D ]
}|V  qqd S )N)r2   )r5   groupaddressr   r   r   r7   |  s    z*AddressHeader.addresses.<locals>.<genexpr>)r1   r0   rl   )r   r   r   r   r2   y  s    
zAddressHeader.addresses)r$   r,   r-   rV   rW   rU   rR   r<   r?   r.   rj   r2   rb   r   r   )r#   r   rd   J  s   rd   c               @   s   e Zd ZdZdS )UniqueAddressHeaderr3   N)r$   r,   r-   rV   r   r   r   r   ro     s   ro   c               @   s   e Zd Zedd ZdS )SingleAddressHeaderc             C   s(   t | jdkrtd| j| jd S )Nr3   z9value of single address header {} is not a single addressr   )r    r2   r   r   rA   )r   r   r   r   rn     s    
zSingleAddressHeader.addressN)r$   r,   r-   r.   rn   r   r   r   r   rp     s   rp   c               @   s   e Zd ZdZdS )UniqueSingleAddressHeaderr3   N)r$   r,   r-   rV   r   r   r   r   rq     s   rq   c                   sZ   e Zd ZdZeejZedd Z	 fddZ
edd Zedd	 Zed
d Z  ZS )MIMEVersionHeaderr3   c             C   s   |  | |d< }t||d< |d |j |jd kr<d n|j|d< |j|d< |jd k	rtd|d |d |d< nd |d< d S )NrG   r;   r:   majorminorz{}.{}version)rU   r4   extendr   rt   rs   r   )r@   rB   rC   rG   r   r   r   r<     s    

zMIMEVersionHeader.parsec                s6   | d| _| d| _| d| _t j|| d S )Nru   rs   rt   )r]   _version_major_minorr_   r?   )r   r`   ra   )r#   r   r   r?     s    zMIMEVersionHeader.initc             C   s   | j S )N)rx   )r   r   r   r   rs     s    zMIMEVersionHeader.majorc             C   s   | j S )N)ry   )r   r   r   r   rt     s    zMIMEVersionHeader.minorc             C   s   | j S )N)rw   )r   r   r   r   ru     s    zMIMEVersionHeader.version)r$   r,   r-   rV   rW   r   Zparse_mime_versionrU   rR   r<   r?   r.   rs   rt   ru   rb   r   r   )r#   r   rr     s   
rr   c                   s8   e Zd ZdZedd Z fddZedd Z  Z	S )ParameterizedMIMEHeaderr3   c             C   sZ   |  | |d< }t||d< |d |j |jd krBi |d< ndd |jD |d< d S )NrG   r;   r:   paramsc             S   s&   i | ]\}}t |t | qS r   )r   r=   lower)r5   rA   rB   r   r   r   
<dictcomp>  s   z1ParameterizedMIMEHeader.parse.<locals>.<dictcomp>)rU   r4   rv   r   r{   )r@   rB   rC   rG   r   r   r   r<     s    

zParameterizedMIMEHeader.parsec                s   | d| _t j|| d S )Nr{   )r]   _paramsr_   r?   )r   r`   ra   )r#   r   r   r?     s    zParameterizedMIMEHeader.initc             C   s
   t | jS )N)r   r~   )r   r   r   r   r{     s    zParameterizedMIMEHeader.params)
r$   r,   r-   rV   rR   r<   r?   r.   r{   rb   r   r   )r#   r   rz     s   rz   c                   sJ   e Zd ZeejZ fddZedd Z	edd Z
edd Z  ZS )	ContentTypeHeaderc                s2   t  j|| t| jj| _t| jj| _d S )N)	r_   r?   r   r=   rE   maintype	_maintypesubtype_subtype)r   r`   ra   )r#   r   r   r?     s    zContentTypeHeader.initc             C   s   | j S )N)r   )r   r   r   r   r     s    zContentTypeHeader.maintypec             C   s   | j S )N)r   )r   r   r   r   r     s    zContentTypeHeader.subtypec             C   s   | j d | j S )N/)r   r   )r   r   r   r   content_type  s    zContentTypeHeader.content_type)r$   r,   r-   rW   r   Zparse_content_type_headerrU   r?   r.   r   r   r   rb   r   r   )r#   r   r     s
   
r   c                   s2   e Zd ZeejZ fddZedd Z	  Z
S )ContentDispositionHeaderc                s2   t  j|| | jj}|d kr"|nt|| _d S )N)r_   r?   rE   content_dispositionr   r=   _content_disposition)r   r`   ra   Zcd)r#   r   r   r?     s    zContentDispositionHeader.initc             C   s   | j S )N)r   )r   r   r   r   r     s    z,ContentDispositionHeader.content_disposition)r$   r,   r-   rW   r   Z parse_content_disposition_headerrU   r?   r.   r   rb   r   r   )r#   r   r     s   
r   c                   sB   e Zd ZdZeejZedd Z	 fddZ
edd Z  ZS )ContentTransferEncodingHeaderr3   c             C   s2   |  | |d< }t||d< |d |j d S )NrG   r;   r:   )rU   r4   rv   r   )r@   rB   rC   rG   r   r   r   r<     s    z#ContentTransferEncodingHeader.parsec                s"   t  j|| t| jj| _d S )N)r_   r?   r   r=   rE   cte_cte)r   r`   ra   )r#   r   r   r?     s    z"ContentTransferEncodingHeader.initc             C   s   | j S )N)r   )r   r   r   r   r     s    z!ContentTransferEncodingHeader.cte)r$   r,   r-   rV   rW   r   Z&parse_content_transfer_encoding_headerrU   rR   r<   r?   r.   r   rb   r   r   )r#   r   r     s
   
r   )ZsubjectZdatezresent-datez	orig-dateZsenderzresent-sendertoz	resent-toZccz	resent-ccZbccz
resent-bccfromzresent-fromzreply-tozmime-versionzcontent-typezcontent-dispositionzcontent-transfer-encodingc               @   s4   e Zd ZeedfddZdd Zdd Zdd	 Zd
S )HeaderRegistryTc             C   s&   i | _ || _|| _|r"| j t d S )N)registry
base_classdefault_classupdate_default_header_map)r   r   r   Zuse_default_mapr   r   r   r   ,  s
    zHeaderRegistry.__init__c             C   s   || j | < d S )N)r   r|   )r   rA   r@   r   r   r   map_to_type>  s    zHeaderRegistry.map_to_typec             C   s,   | j | | j}td|j || jfi S )N_)r   getr|   r   r)   r$   r   )r   rA   r@   r   r   r   __getitem__D  s    zHeaderRegistry.__getitem__c             C   s   | | ||S )Nr   )r   rA   rB   r   r   r   __call__H  s    
zHeaderRegistry.__call__N)	r$   r,   r-   r9   rT   r   r   r   r   r   r   r   r   r   (  s
   r   N)typesr   Zemailr   r   r   r   r   r/   r4   r9   rH   rT   rY   rZ   rc   rd   ro   rp   rq   rr   rz   r   r   r   r   r   r   r   r   r   <module>
   sP   `6d'7
%