o
     JAfMQ                     @   s  	 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i d)ed*ed+ed,ed-ed.ed/ed0ed1ed2ed3ed4ed5ed6ed7ed8ed9e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 rtd|d urD|s!|r%tdt|\}}|r6td|||jr>|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.10/email/headerregistry.py__init__   s*   

zAddress.__init__c                 C      | j S Nr   r   r   r   r   r   8      zAddress.display_namec                 C   r   r   )r   r!   r   r   r   r   <   r"   zAddress.usernamec                 C   r   r   )r   r!   r   r   r   r   @   r"   zAddress.domainc                 C   s>   	 | j }tj|st|}| jr|d | j S |sdS |S )N@<>)r   r   ZDOT_ATOM_ENDS
isdisjointquote_stringr   )r   Zlpr   r   r   r   D   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__R   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__W   s   
zAddress.__str__c                 C   s2   t |tstS | j|jko| j|jko| j|jkS r   )
isinstancer   NotImplementedr   r   r   r   otherr   r   r   __eq__`   s   


zAddress.__eq__)r   r   r   N)r(   
__module____qualname__r   propertyr   r   r   r   r)   r,   r1   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|| _d S t | _d S r   )r   tuple
_addresses)r   r   	addressesr   r   r   r   j   s   zGroup.__init__c                 C   r   r   r    r!   r   r   r   r   |   r"   zGroup.display_namec                 C   r   r   )r7   r!   r   r   r   r8      r"   zGroup.addressesc                 C   s   d | jj| j| jS )Nz${}(display_name={!r}, addresses={!r})r   r'   r(   r   r8   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r%tj|s%t|}ddd | jD }|r6d| n|}d	||S )N   r   , c                 s   s    | ]}t |V  qd S r   str).0xr   r   r   	<genexpr>   s    z Group.__str__.<locals>.<genexpr> z{}:{};)
r   lenr8   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-   r5   r.   r   r8   r/   r   r   r   r1      s
   

zGroup.__eq__)NN)
r(   r2   r3   r   r4   r   r8   r)   r,   r1   r   r   r   r   r5   h   s    



r5   c                   @   sR   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 rt|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   rG      s   zBaseHeader.__new__c                C   s   || _ || _|| _d S r   )_name_parse_tree_defects)r   rJ   
parse_treerC   r   r   r   rH      s   
zBaseHeader.initc                 C   r   r   )rM   r!   r   r   r   rJ      r"   zBaseHeader.namec                 C   
   t | jS r   )r6   rO   r!   r   r   r   rC         
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<   rG   )rI   rK   r   r   r   _reconstruct   s   zBaseHeader._reconstructc             	   C   sb   	 t t t | jdt ddgg}| jr%|t t ddg || j |j	|dS )Nzheader-name:z
header-sepr@   Zfws)policy)
r   ZHeaderZHeaderLabelZValueTerminalrJ   rN   appendZCFWSListZWhiteSpaceTerminalfold)r   rY   headerr   r   r   r[      s   
zBaseHeader.foldN)r(   r2   r3   rG   rH   r4   rJ   rC   rV   classmethodrW   r[   r   r   r   r   rB      s     




rB   c                 C   s   t | |i |S r   )typerW   )cls_namebasesrK   r   r   r   rS      s   rS   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 )NrP   rD   )value_parserr<   rI   rK   rL   r   r   r   rE   	  s   zUnstructuredHeader.parse)
r(   r2   r3   	max_countstaticmethodr   get_unstructuredrb   r]   rE   r   r   r   r   ra     
    
ra   c                   @      e Zd ZdZdS )UniqueUnstructuredHeaderr9   Nr(   r2   r3   rd   r   r   r   r   ri         ri   c                       sD   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   s   |s|d  t  d |d< d|d< t |d< d S t|trJ||d< zt|}W n t	yI   |d  t
d d |d< t |d< Y d S w ||d< t|d |d< | |d |d< d S )NrC   datetimer   rD   rP   zInvalid date value or format)rZ   r   ZHeaderMissingRequiredValuer   Z	TokenListr-   r<   r   Zparsedate_to_datetimer   ZInvalidDateDefectZformat_datetimerb   rc   r   r   r   rE   $  s&   
zDateHeader.parsec                    "   | d| _t j|i | d S )Nrm   )pop	_datetimesuperrH   r   argskwr'   r   r   rH   9     zDateHeader.initc                 C   r   r   )rp   r!   r   r   r   rm   =  r"   zDateHeader.datetime)r(   r2   r3   rd   re   r   rf   rb   r]   rE   rH   r4   rm   __classcell__r   r   ru   r   rl     s    	

rl   c                   @   rh   )UniqueDateHeaderr9   Nrj   r   r   r   r   rx   B  rk   rx   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)rK   address_listr   r   r   rb   K  s   zAddressHeader.value_parserc                 C   s   t |tr+| | |d< }g }|jD ]}|t|jdd |jD  qt|j	}nt
|ds3|g}dd |D }g }||d< ||d< dd	d |D |d
< d|vr_| |d
 |d< d S d S )NrP   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>Z  s    
z'AddressHeader.parse.<locals>.<listcomp>__iter__c                 S   s&   g | ]}t |d std|gn|qS )r8   N)hasattrr5   r=   itemr   r   r   r{   c  s
    groupsrC   r:   c                 S   s   g | ]}t |qS r   r;   r~   r   r   r   r{   i  s    rD   )r-   r<   rb   r8   rZ   r5   r   Zall_mailboxeslistr   r}   r
   )rI   rK   rL   rz   r   addrrC   r   r   r   rE   Q  s,   



zAddressHeader.parsec                    s,   t |d| _d | _t j|i | d S )Nr   )r6   ro   _groupsr7   rq   rH   rr   ru   r   r   rH   m  s   zAddressHeader.initc                 C   r   r   )r   r!   r   r   r   r   r  r"   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   )r8   )r=   groupaddressr   r   r   r?   y  s    z*AddressHeader.addresses.<locals>.<genexpr>)r7   r6   r   r!   r   r   r   r8   v  s   
zAddressHeader.addresses)r(   r2   r3   rd   re   rb   r]   rE   rH   r4   r   r8   rw   r   r   ru   r   ry   G  s    


ry   c                   @   rh   )UniqueAddressHeaderr9   Nrj   r   r   r   r   r   ~  rk   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 )Nr9   z9value of single address header {} is not a single addressr   )rA   r8   r   r   rJ   r!   r   r   r   r     s
   
zSingleAddressHeader.addressN)r(   r2   r3   r4   r   r   r   r   r   r     s    r   c                   @   rh   )UniqueSingleAddressHeaderr9   Nrj   r   r   r   r   r     rk   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 )MIMEVersionHeaderr9   c                 C   s   |  | |d< }t||d< |d |j |jd u rd n|j|d< |j|d< |jd ur;d|d |d |d< d S d |d< d S )NrP   rD   rC   majorminorz{}.{}version)rb   r<   extendr   r   r   r   rI   rK   rL   rP   r   r   r   rE     s   

zMIMEVersionHeader.parsec                    s:   | d| _| d| _| d| _t j|i | d S )Nr   r   r   )ro   _version_major_minorrq   rH   rr   ru   r   r   rH     s   zMIMEVersionHeader.initc                 C   r   r   )r   r!   r   r   r   r     r"   zMIMEVersionHeader.majorc                 C   r   r   )r   r!   r   r   r   r     r"   zMIMEVersionHeader.minorc                 C   r   r   )r   r!   r   r   r   r     r"   zMIMEVersionHeader.version)r(   r2   r3   rd   re   r   Zparse_mime_versionrb   r]   rE   rH   r4   r   r   r   rw   r   r   ru   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 )ParameterizedMIMEHeaderr9   c                 C   s\   |  | |d< }t||d< |d |j |jd u r"i |d< d S dd |jD |d< d S )NrP   rD   rC   paramsc                 S   s&   i | ]\}}t | t |qS r   )r   rF   lower)r=   rJ   rK   r   r   r   
<dictcomp>  s
    z1ParameterizedMIMEHeader.parse.<locals>.<dictcomp>)rb   r<   r   r   r   r   r   r   r   rE     s   
zParameterizedMIMEHeader.parsec                    rn   )Nr   )ro   _paramsrq   rH   rr   ru   r   r   rH     rv   zParameterizedMIMEHeader.initc                 C   rQ   r   )r   r   r!   r   r   r   r     rR   zParameterizedMIMEHeader.params)
r(   r2   r3   rd   r]   rE   rH   r4   r   rw   r   r   ru   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   )	rq   rH   r   rF   rN   maintype	_maintypesubtype_subtyperr   ru   r   r   rH     s   zContentTypeHeader.initc                 C   r   r   )r   r!   r   r   r   r     r"   zContentTypeHeader.maintypec                 C   r   r   )r   r!   r   r   r   r     r"   zContentTypeHeader.subtypec                 C   s   | j d | j S )N/)r   r   r!   r   r   r   content_type  s   zContentTypeHeader.content_type)r(   r2   r3   re   r   Zparse_content_type_headerrb   rH   r4   r   r   r   rw   r   r   ru   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                    s<   t  j|i | | jj}|d u r|| _d S t|| _d S r   )rq   rH   rN   content_dispositionr   rF   _content_disposition)r   rs   rt   Zcdru   r   r   rH     s   "zContentDispositionHeader.initc                 C   r   r   )r   r!   r   r   r   r     r"   z,ContentDispositionHeader.content_disposition)r(   r2   r3   re   r   Z parse_content_disposition_headerrb   rH   r4   r   rw   r   r   ru   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 )ContentTransferEncodingHeaderr9   c                 C   2   |  | |d< }t||d< |d |j d S NrP   rD   rC   rb   r<   r   r   r   r   r   r   rE        z#ContentTransferEncodingHeader.parsec                    s&   t  j|i | t| jj| _d S r   )rq   rH   r   rF   rN   cte_cterr   ru   r   r   rH     s   z"ContentTransferEncodingHeader.initc                 C   r   r   )r   r!   r   r   r   r     r"   z!ContentTransferEncodingHeader.cte)r(   r2   r3   rd   re   r   Z&parse_content_transfer_encoding_headerrb   r]   rE   rH   r4   r   rw   r   r   ru   r   r     s    

r   c                   @   s&   e Zd ZdZeejZedd Z	dS )MessageIDHeaderr9   c                 C   r   r   r   r   r   r   r   rE     r   zMessageIDHeader.parseN)
r(   r2   r3   rd   re   r   Zparse_message_idrb   r]   rE   r   r   r   r   r     rg   r   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-type)zcontent-dispositionzcontent-transfer-encodingz
message-idc                   @   s6   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 d S r   )registry
base_classdefault_classupdate_default_header_map)r   r   r   Zuse_default_mapr   r   r   r   6  s   
zHeaderRegistry.__init__c                 C   s   	 || j | < d S r   )r   r   r   rJ   rI   r   r   r   map_to_typeH  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__N  s   zHeaderRegistry.__getitem__c                 C   s   	 | | ||S r   r   )r   rJ   rK   r   r   r   __call__R  s   	zHeaderRegistry.__call__N)	r(   r2   r3   rB   ra   r   r   r   r   r   r   r   r   r   2  s    
r   N)typesr   Zemailr   r   r   r   r   r5   r<   rB   rS   ra   ri   rl   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s~    \4d.7
%	
