a
    zeP                     @   sv  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G d'd( d(Ze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|v s(d|v r0td|d u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   */usr/lib/python3.9/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 r   )r   r    r   r   r   r   @   s    zAddress.usernamec                 C   s   | j S r   )r   r    r   r   r   r   D   s    zAddress.domainc                 C   s<   | j }tj|st|}| jr0|d | j S |s8dS |S )N@<>)r   r   ZDOT_ATOM_ENDS
isdisjointquote_stringr   )r   Z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__V   s    zAddress.__repr__c                 C   sF   | j }tj|st|}|r@| jdkr.dn| j}d||S | jS )Nr"   r   z{} <{}>)r   r   SPECIALSr#   r$   r   r   )r   dispr   r   r   r   __str__[   s    
zAddress.__str__c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r   )
isinstancer   NotImplementedr   r   r   r   otherr   r   r   __eq__d   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 r   )r   tuple
_addresses)r   r   	addressesr   r   r   r   n   s    zGroup.__init__c                 C   s   | j S r   r   r    r   r   r   r      s    zGroup.display_namec                 C   s   | j S r   )r5   r    r   r   r   r6      s    zGroup.addressesc                 C   s   d | jj| j| jS )Nz${}(display_name={!r}, addresses={!r})r   r%   r&   r   r6   r    r   r   r   r'      s    zGroup.__repr__c                 C   s|   | j d u r&t| jdkr&t| jd S | j }|d urJtj|sJt|}ddd | jD }|rld| n|}d	||S )N   r   , c                 s   s   | ]}t |V  qd S r   str).0xr   r   r   	<genexpr>       z Group.__str__.<locals>.<genexpr> z{}:{};)
r   lenr6   r:   r   r(   r#   r$   r
   r   )r   r)   Zadrstrr   r   r   r*      s    
zGroup.__str__c                 C   s&   t |tstS | j|jko$| j|jkS r   )r+   r3   r,   r   r6   r-   r   r   r   r/      s
    

zGroup.__eq__)NN)
r&   r0   r1   r   r2   r   r6   r'   r*   r/   r   r   r   r   r3   l   s   



r3   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i | |S )Ndefectsdecoded)parser   Z_has_surrogates	_sanitizer:   __new__init)clsnamevaluekwdsr   r   r   r   rF      s    zBaseHeader.__new__c                C   s   || _ || _|| _d S r   )_name_parse_tree_defects)r   rI   
parse_treerB   r   r   r   rG      s    zBaseHeader.initc                 C   s   | j S r   )rL   r    r   r   r   rI      s    zBaseHeader.namec                 C   s
   t | jS r   )r4   rN   r    r   r   r   rB      s    zBaseHeader.defectsc                 C   s   t | jj| jjt| f| jfS r   )_reconstruct_headerr%   r&   	__bases__r:   __dict__r    r   r   r   
__reduce__   s    zBaseHeader.__reduce__c                 C   s   t | |S r   )r:   rF   )rH   rJ   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-sepr?   Zfws)policy)
r   ZHeaderZHeaderLabelZValueTerminalrI   rM   appendZCFWSListZWhiteSpaceTerminalfold)r   rV   headerr   r   r   rX      s    
zBaseHeader.foldN)r&   r0   r1   rF   rG   r2   rI   rB   rS   classmethodrT   rX   r   r   r   r   rA      s   "




rA   c                 C   s   t | |i |S r   )typerT   )cls_namebasesrJ   r   r   r   rP     s    rP   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 )NrO   rC   )value_parserr:   rH   rJ   rK   r   r   r   rD     s    zUnstructuredHeader.parse)
r&   r0   r1   	max_countstaticmethodr   get_unstructuredr_   rZ   rD   r   r   r   r   r^     s   
r^   c                   @   s   e Zd ZdZdS )UniqueUnstructuredHeaderr7   Nr&   r0   r1   ra   r   r   r   r   rd     s   rd   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 )NrB   datetimer   rC   rO   )rW   r   ZHeaderMissingRequiredValuer   Z	TokenListr+   r:   r   Zparsedate_to_datetimeZformat_datetimer_   r`   r   r   r   rD   (  s    

zDateHeader.parsec                    s"   | d| _t j|i | d S )Nrg   )pop	_datetimesuperrG   r   argskwr%   r   r   rG   6  s    zDateHeader.initc                 C   s   | j S r   )ri   r    r   r   r   rg   :  s    zDateHeader.datetime)r&   r0   r1   ra   rb   r   rc   r_   rZ   rD   rG   r2   rg   __classcell__r   r   rn   r   rf     s   

rf   c                   @   s   e Zd ZdZdS )UniqueDateHeaderr7   Nre   r   r   r   r   rp   ?  s   rp   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 r   )r   Zget_address_list)rJ   address_listr   r   r   r_   H  s    zAddressHeader.value_parserc                 C   s   t |trV| | |d< }g }|jD ]"}|t|jdd |jD  q&t|j	}n"t
|dsf|g}dd |D }g }||d< ||d< dd	d |D |d
< d|vr| |d
 |d< d S )NrO   c                 S   s*   g | ]"}t |jpd |jpd |jp"d qS )r   )r   r   r   r   )r;   Zmbr   r   r   
<listcomp>W  s
   
z'AddressHeader.parse.<locals>.<listcomp>__iter__c                 S   s&   g | ]}t |d std|gn|qS )r6   N)hasattrr3   r;   itemr   r   r   rs   `  s   groupsrB   r8   c                 S   s   g | ]}t |qS r   r9   rv   r   r   r   rs   f  r>   rC   )r+   r:   r_   r6   rW   r3   r   Zall_mailboxeslistr   ru   r
   )rH   rJ   rK   rr   rx   addrrB   r   r   r   rD   N  s*    



zAddressHeader.parsec                    s,   t |d| _d | _t j|i | d S )Nrx   )r4   rh   _groupsr5   rj   rG   rk   rn   r   r   rG   j  s    zAddressHeader.initc                 C   s   | j S r   )r{   r    r   r   r   rx   o  s    zAddressHeader.groupsc                 C   s&   | j d u r tdd | jD | _ | j S )Nc                 s   s   | ]}|j D ]
}|V  qqd S r   )r6   )r;   groupaddressr   r   r   r=   v  s   
z*AddressHeader.addresses.<locals>.<genexpr>)r5   r4   r{   r    r   r   r   r6   s  s    
zAddressHeader.addresses)r&   r0   r1   ra   rb   r_   rZ   rD   rG   r2   rx   r6   ro   r   r   rn   r   rq   D  s   


rq   c                   @   s   e Zd ZdZdS )UniqueAddressHeaderr7   Nre   r   r   r   r   r~   {  s   r~   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 )Nr7   z9value of single address header {} is not a single addressr   )r@   r6   r   r   rI   r    r   r   r   r}     s
    zSingleAddressHeader.addressN)r&   r0   r1   r2   r}   r   r   r   r   r     s   r   c                   @   s   e Zd ZdZdS )UniqueSingleAddressHeaderr7   Nre   r   r   r   r   r     s   r   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 )MIMEVersionHeaderr7   c                 C   s   |  | |d< }t||d< |d |j |jd u r<d n|j|d< |j|d< |jd urtd|d |d |d< nd |d< d S )NrO   rC   rB   majorminorz{}.{}version)r_   r:   extendr   r   r   r   rH   rJ   rK   rO   r   r   r   rD     s    

zMIMEVersionHeader.parsec                    s:   | d| _| d| _| d| _t j|i | d S )Nr   r   r   )rh   _version_major_minorrj   rG   rk   rn   r   r   rG     s    zMIMEVersionHeader.initc                 C   s   | j S r   )r   r    r   r   r   r     s    zMIMEVersionHeader.majorc                 C   s   | j S r   )r   r    r   r   r   r     s    zMIMEVersionHeader.minorc                 C   s   | j S r   )r   r    r   r   r   r     s    zMIMEVersionHeader.version)r&   r0   r1   ra   rb   r   Zparse_mime_versionr_   rZ   rD   rG   r2   r   r   r   ro   r   r   rn   r   r     s   



r   c                       s8   e Zd ZdZedd Z fddZedd Z  Z	S )ParameterizedMIMEHeaderr7   c                 C   sZ   |  | |d< }t||d< |d |j |jd u rBi |d< ndd |jD |d< d S )NrO   rC   rB   paramsc                 S   s&   i | ]\}}t | t |qS r   )r   rE   lower)r;   rI   rJ   r   r   r   
<dictcomp>  s   z1ParameterizedMIMEHeader.parse.<locals>.<dictcomp>)r_   r:   r   r   r   r   r   r   r   rD     s    

zParameterizedMIMEHeader.parsec                    s"   | d| _t j|i | d S )Nr   )rh   _paramsrj   rG   rk   rn   r   r   rG     s    zParameterizedMIMEHeader.initc                 C   s
   t | jS r   )r   r   r    r   r   r   r     s    zParameterizedMIMEHeader.params)
r&   r0   r1   ra   rZ   rD   rG   r2   r   ro   r   r   rn   r   r     s   
r   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                    s6   t  j|i | t| jj| _t| jj| _d S r   )	rj   rG   r   rE   rM   maintype	_maintypesubtype_subtyperk   rn   r   r   rG     s    zContentTypeHeader.initc                 C   s   | j S r   )r   r    r   r   r   r     s    zContentTypeHeader.maintypec                 C   s   | j S r   )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&   r0   r1   rb   r   Zparse_content_type_headerr_   rG   r2   r   r   r   ro   r   r   rn   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                    s6   t  j|i | | jj}|d u r&|nt|| _d S r   )rj   rG   rM   content_dispositionr   rE   _content_disposition)r   rl   rm   Zcdrn   r   r   rG     s    zContentDispositionHeader.initc                 C   s   | j S r   )r   r    r   r   r   r     s    z,ContentDispositionHeader.content_disposition)r&   r0   r1   rb   r   Z parse_content_disposition_headerr_   rG   r2   r   ro   r   r   rn   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 )ContentTransferEncodingHeaderr7   c                 C   s2   |  | |d< }t||d< |d |j d S NrO   rC   rB   r_   r:   r   r   r   r   r   r   rD     s    z#ContentTransferEncodingHeader.parsec                    s&   t  j|i | t| jj| _d S r   )rj   rG   r   rE   rM   cte_cterk   rn   r   r   rG     s    z"ContentTransferEncodingHeader.initc                 C   s   | j S r   )r   r    r   r   r   r     s    z!ContentTransferEncodingHeader.cte)r&   r0   r1   ra   rb   r   Z&parse_content_transfer_encoding_headerr_   rZ   rD   rG   r2   r   ro   r   r   rn   r   r     s   

r   c                   @   s&   e Zd ZdZeejZedd Z	dS )MessageIDHeaderr7   c                 C   s2   |  | |d< }t||d< |d |j d S r   r   r   r   r   r   rD     s    zMessageIDHeader.parseN)
r&   r0   r1   ra   rb   r   Zparse_message_idr_   rZ   rD   r   r   r   r   r   
  s   
r   )Zsubject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-encodingz
message-idc                   @   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 r   )registry
base_classdefault_classupdate_default_header_map)r   r   r   Zuse_default_mapr   r   r   r   3  s
    zHeaderRegistry.__init__c                 C   s   || j | < d S r   )r   r   r   rI   rH   r   r   r   map_to_typeE  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   r   r   r   __getitem__K  s    zHeaderRegistry.__getitem__c                 C   s   | | ||S r   r   )r   rI   rJ   r   r   r   __call__O  s    
zHeaderRegistry.__call__N)	r&   r0   r1   rA   r^   r   r   r   r   r   r   r   r   r   /  s   
r   N)typesr   Zemailr   r   r   r   r   r3   r:   rA   rP   r^   rd   rf   rp   rq   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>
   sV   \4d'7
%