a
    "hB                     @   s  g d Z ddlZddlZddlZddlZddlZddlZddlZddl	m
Z
 ddl	mZ ddl	mZ ddl	mZmZmZ ddlmZ dZd	Zd	Zd
ZdZedZedZdd Zdd Zd@ddZdd Zdd ZdZ ddddZ!dd Z"dd  Z#d!d" Z$d#d$ Z%dAd&d'Z&dBd(d)Z'dCd*d+Z(d,d- Z)ddd.d/Z*d0d1 Z+d2d3 Z,dDd4d5Z-ed6ej.Z/d7d8 Z0dEd;d<Z1dFd>d?Z2dS )G)collapse_rfc2231_valuedecode_paramsdecode_rfc2231encode_rfc2231
formataddr
formatdateformat_datetimegetaddresses
make_msgid	mktime_tz	parseaddr	parsedateparsedate_tzparsedate_to_datetimeunquote    N)quote)AddressList)r
   )r   r   _parsedate_tz)Charsetz,  z
'z[][\\()<>@,:;".]z[\\"]c                 C   s(   z|    W dS  ty"   Y dS 0 d S )NFT)encodeUnicodeEncodeError)s r   3/opt/python-3.9.21/usr/lib/python3.9/email/utils.py_has_surrogates4   s
    r   c                 C   s   |  dd}|ddS )Nutf-8surrogateescapereplace)r   decode)stringZoriginal_bytesr   r   r   	_sanitizeA   s    r"   r   c                 C   s   | \}}| d |rz| d W n: ty^   t|trDt|}||}d||f  Y S 0 d}t|rrd}t	d|}d||||f S |S )Nasciiz%s <%s>r   "z\\\g<0>z%s%s%s <%s>)
r   r   
isinstancestrr   Zheader_encode
specialsresearch	escapesresub)ZpaircharsetnameaddressZencoded_nameZquotesr   r   r   r   M   s     



r   c                 c   s\   d}d}t | D ]8\}}|r0|d| fV  d}q|dkr>d}q||fV  q|rX|dfV  d S )Nr   F\T)	enumerate)addrposescapechr   r   r   _iter_escaped_charsn   s    r4   c                 C   s   d| vr| S d}d }g }t | D ]D\}}|dkr |d u r>|}q ||krX|| ||  |d }d }q |t| k r|| |d   d|S )Nr$   r      r   )r4   appendlenjoin)r0   startZopen_posresultr1   r3   r   r   r   _strip_quoted_realnames}   s     r;   T)strictc                C   s   |s&t dd | D }t|}|jS dd | D } t| } t | }t|}t|j}d}| D ]}t|}|d|d 7 }q`t||krdgS |S )	Nc                 s   s   | ]}t |V  qd S )Nr&   .0vr   r   r   	<genexpr>       zgetaddresses.<locals>.<genexpr>c                 S   s   g | ]}t |qS r   r=   r>   r   r   r   
<listcomp>   rB   z getaddresses.<locals>.<listcomp>r   r5   ,r   r   )	
COMMASPACEr8   _AddressListaddresslist_pre_parse_validation_post_parse_validationr;   countr7   )Zfieldvaluesr<   allar0   r:   nr@   r   r   r   r      s     

r   c                 C   sV   t | } d}t| D ]8\}}|dkr.|d7 }q|dkr|d8 }|dk r dS q|dkS )Nr   (r5   )F)r;   r4   )r0   Zopensr1   r3   r   r   r   _check_parenthesis   s    
rQ   c                 C   s(   g }| D ]}t |sd}|| q|S )Nz('', ''))rQ   r6   )Zemail_header_fieldsaccepted_valuesr@   r   r   r   rI      s    rI   c                 C   s,   g }| D ]}d|d v rd}| | q|S )N[r5   rE   )r6   )Zparsed_email_header_tuplesrR   r@   r   r   r   rJ      s    rJ   c              	   C   sH   dg d| d  | d g d| d d  | d | d | d	 | d
 |f S )Nz"%s, %02d %s %04d %02d:%02d:%02d %s)ZMonZTueZWedZThuZFriZSatZSun      )ZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecr5   r            r   )	timetuplezoner   r   r   _format_timetuple_and_zone   s    
r[   Fc                 C   sR   | d u rt   } |s|r,tj| tjj}ntj| }|rH| }d}t||S )NF)timedatetimeZfromtimestamptimezoneutcZutcfromtimestamp
astimezoner   )timeval	localtimeusegmtdtr   r   r   r      s    r   c                 C   sV   |   }|r2| jd u s$| jtjjkr,tdd}n| jd u rBd}n
| d}t||S )Nz%usegmt option requires a UTC datetimeZGMTz-0000z%z)rY   tzinfor]   r^   r_   
ValueErrorstrftimer[   )rd   rc   nowrZ   r   r   r   r     s    

r   c                 C   s^   t t d }t }td}| d u r0d} nd|  } |d u rHt }d|||| |f }|S )Nd   @   r   .z<%d.%d.%d%s@%s>)intr\   osgetpidrandomgetrandbitssocketgetfqdn)Zidstringdomainra   pidrandintZmsgidr   r   r   r	   "  s    

r	   c                 C   sN   t | ^ }}|d u r(tj|d d  S tj|d d dttj|diS )NrT   re   seconds)r   r]   r^   	timedelta)dataZdtupletzr   r   r   r   9  s    r   c                C   sv   |st | j}|sdS |d S t| tr0| d } t| ts>dS t| gd } tt | j}|rjt|dkrndS |d S )NrE   r   r5   )rG   rH   r%   listr&   rI   rJ   r7   )r0   r<   addrsr   r   r   r   A  s    	


r   c                 C   s`   t | dkr\| dr<| dr<| dd ddddS | dr\| dr\| dd S | S )	Nr5   r$   z\\r.   z\"<>)r7   
startswithendswithr   r=   r   r   r   r   `  s    r   c                 C   s&   |  td}t|dkr"d d | fS |S )NrU   )splitTICKr7   )r   partsr   r   r   r   l  s    
r   c                 C   sD   t jj| d|pdd} |d u r*|d u r*| S |d u r6d}d||| f S )Nr   r#   )safeencodingz%s'%s'%s)urllibparser   )r   r+   languager   r   r   r   t  s    r   z&^(?P<name>\w+)\*((?P<num>[0-9]+)\*?)?$c                 C   s@  | d g}i }| dd  D ]x\}}| d}t|}t|}|r||dd\}}|d urbt|}||g |||f q||dt| f q|r<|	 D ]\}}g }d}	|
  |D ],\}}
}|rtjj|
dd	}
d
}	||
 qtt|}|	r(t|\}}}||||d| ff q||d| f q|S )Nr   r5   *r,   numz"%s"Fzlatin-1)r   T)r   r   rfc2231_continuationmatchgrouprl   
setdefaultr6   r   itemssortr   r   EMPTYSTRINGr8   r   )params
new_paramsZrfc2231_paramsr,   valueencodedmor   ZcontinuationsZextendedr   r+   r   r   r   r   r     s8    


r   r   us-asciic                 C   sl   t | trt| dkrt| S | \}}}|d u r4|}t|d}zt|||W S  tyf   t| Y S 0 d S )NrV   zraw-unicode-escape)r%   tupler7   r   bytesr&   LookupError)r   errorsZfallback_charsetr+   r   textZrawbytesr   r   r   r     s    

r   r}   c           	      C   s  | d u rt j t jj S | jd ur.|  S |  d d |f }t|}t	|}z t j
|jd}t ||j}W n~ ty   | t j t|d d   }tjo|jdk}|rtjntj }|t j
|dkrt |tj| }n
t |}Y n0 | j|dS )Nr}   rv   rT   r   )re   )r]   rh   r^   r_   r`   re   rY   r\   mktimerb   rx   	tm_gmtofftm_zoneAttributeErrorgmtimedaylighttm_isdstaltzonetznamer   )	rd   ZisdstZtmrw   ZlocaltmZdeltarz   dstZgmtoffr   r   r   rb     s$    


rb   )r   )NFF)F)NN)NN)r   r   )Nr}   )3__all__rm   rer\   ro   rq   r]   urllib.parser   Zemail._parseaddrr   r   rG   r
   r   r   r   Zemail.charsetr   rF   r   ZUEMPTYSTRINGZCRLFr   compiler'   r)   r   r"   r   r4   r;   Zsupports_strict_parsingr   rQ   rI   rJ   r[   r   r   r	   r   r   r   r   r   ASCIIr   r   r   rb   r   r   r   r   <module>   s\   


!,
	



0  
