a
    )BiYH                     @   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Zdadd Zdd Zdd Zdd Z dEd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)dFd+d,Z*dGd-d.Z+dHd/d0Z,d1d2 Z-ddd3d4Z.d5d6 Z/d7d8 Z0dId9d:Z1ed;ej2Z3d<d= Z4dJd@dAZ5dKdCdDZ6dS )L)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[\\"]z/etc/python/email.cfgc                   C   s   t d u rt a t S N)_cached_strict_addr_parsing_use_strict_email_parsing_impl r   r   #/usr/lib64/python3.9/email/utils.py_use_strict_email_parsing7   s    r   c                  C   s   t tjd} | rdS ztt}W n ty6   Y nV0 |@ dd l}|jd dd}|	| |j
ddd d} W d    n1 s0    Y  | rdS dS )	NZ(PYTHON_EMAIL_DISABLE_STRICT_ADDR_PARSINGFr   )#)ZinterpolationZcomment_prefixesZemail_addr_parsing)fallbackT)boolosenvirongetopen_EMAIL_CONFIG_FILEFileNotFoundErrorconfigparserConfigParserZ	read_fileZ
getboolean)disabledfiler&   Zconfigr   r   r   r   ?   s$    
.r   c                 C   s(   z|    W dS  ty"   Y dS 0 d S )NFT)encodeUnicodeEncodeError)sr   r   r   _has_surrogates\   s
    r-   c                 C   s   |  dd}|ddS )Nutf-8surrogateescapereplace)r*   decode)stringZoriginal_bytesr   r   r   	_sanitizei   s    r3   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   u   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_chars   s    rE   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 )Nr5   r      r   )rE   appendlenjoin)rA   startZopen_posresultrB   rD   r   r   r   _strip_quoted_realnames   s     rL   T)strictc                C   s   |d krt  }|s4tdd | D }t|}|jS dd | D } t| } t| }t|}t|j}d}| D ]}t|}|d|d 7 }qnt	||krdgS |S )	Nc                 s   s   | ]}t |V  qd S r   r7   .0vr   r   r   	<genexpr>       zgetaddresses.<locals>.<genexpr>c                 S   s   g | ]}t |qS r   rN   rO   r   r   r   
<listcomp>   rS   z getaddresses.<locals>.<listcomp>r   rF   ,r   r   )
r   
COMMASPACErI   _AddressListaddresslist_pre_parse_validation_post_parse_validationrL   countrH   )ZfieldvaluesrM   allarA   rK   nrQ   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   (rF   )F)rL   rE   )rA   ZopensrB   rD   r   r   r   _check_parenthesis   s    
rb   c                 C   s(   g }| D ]}t |sd}|| q|S )Nz('', ''))rb   rG   )Zemail_header_fieldsaccepted_valuesrQ   r   r   r   rZ      s    rZ   c                 C   s,   g }| D ]}d|d v rd}| | q|S )N[rF   rV   )rG   )Zparsed_email_header_tuplesrc   rQ   r   r   r   r[   
  s    r[   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DecrF   r            r   )	timetuplezoner   r   r   _format_timetuple_and_zone  s    
rl   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)rj   tzinforn   ro   rp   
ValueErrorstrftimerl   )ru   rt   nowrk   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>)intrm   r    getpidrandomgetrandbitssocketgetfqdn)Zidstringdomainrr   pidrandintZmsgidr   r   r   r	   O  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 )Nre   rv   seconds)r   rn   ro   	timedelta)dataZdtupletzr   r   r   r   f  s    r   c                C   s   |d krt  }|s,t| j}|s$dS |d S t| tr>| d } t| tsLdS t| gd } tt| j}|rxt|dkr|dS |d S )NrV   r   rF   )	r   rX   rY   r6   listr7   rZ   r[   rH   )rA   rM   addrsr   r   r   r   n  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 )	NrF   r5   z\\r?   z\"<>)rH   
startswithendswithr0   rN   r   r   r   r     s    r   c                 C   s&   |  td}t|dkr"d d | fS |S )Nrf   )splitTICKrH   )r,   partsr   r   r   r     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   r4   )safeencodingz%s'%s'%s)urllibparser   )r,   r<   languager   r   r   r     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   rF   *r=   numz"%s"Fzlatin-1)r   T)r   r   rfc2231_continuationmatchgroupr}   
setdefaultrG   r   itemssortr   r   EMPTYSTRINGrI   r   )params
new_paramsZrfc2231_paramsr=   valueencodedmor   ZcontinuationsZextendedr,   r<   r   r   r   r   r     s8    


r   r0   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 )Nrg   zraw-unicode-escape)r6   tuplerH   r   bytesr7   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   r   re   r   )rv   )rn   ry   ro   rp   rq   rv   rj   rm   mktimers   r   	tm_gmtofftm_zoneAttributeErrorgmtimedaylighttm_isdstaltzonetznamer0   )	ru   ZisdstZtmr   ZlocaltmZdeltar   dstZgmtoffr   r   r   rs     s$    


rs   )r.   )NFF)F)NN)NN)r0   r   )Nr   )7__all__r    rerm   r   r   rn   urllib.parser   Zemail._parseaddrr   r   rX   r
   r   r   r   Zemail.charsetr   rW   r   ZUEMPTYSTRINGZCRLFr   compiler8   r:   r$   r   r   r   r-   r3   r   rE   rL   Zsupports_strict_parsingr   rb   rZ   r[   rl   r   r   r	   r   r   r   r   r   ASCIIr   r   r   rs   r   r   r   r   <module>   sd   


!1
	


$
0  
