o
     JAfn4                     @   sR  	 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d4ddZdd Zdd Zd5ddZ d6ddZ!d7ddZ"d d! Z#d"d# Z$d$d% Z%d&d' Z&d7d(d)Z'ed*ej(Z)d+d, Z*	-	.d8d/d0Z+d9d2d3Z,dS ):)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 w )NFT)encodeUnicodeEncodeError)s r   "/usr/lib/python3.10/email/utils.py_has_surrogates3   s   r   c                 C   s   |  dd}|ddS )Nutf-8surrogateescapereplace)r   decode)stringZoriginal_bytesr   r   r   	_sanitize@   s   r"   r   c                 C   s   	 | \}}| d |rHz| d W n ty0   t|tr#t|}||}d||f  Y S w d}t|r:d}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   L   s$   



r   c                 C   s$   	 t dd | D }t|}|jS )Nc                 s   s    | ]}t |V  qd S )Nr&   ).0vr   r   r   	<genexpr>p   s    zgetaddresses.<locals>.<genexpr>)
COMMASPACEjoin_AddressListaddresslist)Zfieldvaluesallar   r   r   r   n   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Dec   r            r   )	timetuplezoner   r   r   _format_timetuple_and_zoneu   s   
r@   Fc                 C   sT   	 | d u r	t   } |s|rtj| tjj}ntj| }|r%| }d}t||S )NF)timedatetimeZfromtimestamptimezoneutcZutcfromtimestamp
astimezoner   )timeval	localtimeusegmtdtr   r   r   r   ~   s   
r   c                 C   sX   	 |   }|r| jd u s| jtjjkrtdd}n| jd u r"d}n| d}t||S )Nz%usegmt option requires a UTC datetimeZGMTz-0000z%z)r>   tzinforB   rC   rD   
ValueErrorstrftimer@   )rI   rH   nowr?   r   r   r   r      s   


r   c                 C   s`   	 t t d }t }td}| d u rd} nd|  } |d u r%t }d|||| |f }|S )Nd   @   r   .z<%d.%d.%d%s@%s>)intrA   osgetpidrandomgetrandbitssocketgetfqdn)ZidstringdomainrF   pidrandintZmsgidr   r   r   r	      s   	
r	   c                 C   sj   t | }|d u rtdt|  |^ }}|d u r"tj|d d  S tj|d d dttj|diS )Nz!Invalid date value or format "%s"r8   rJ   seconds)r   rK   r&   rB   rC   	timedelta)dataZparsed_date_tzZdtupletzr   r   r   r      s   
r   c                 C   s   	 t | j}|s
dS |d S )N)r   r   r   )r4   r5   )addrZaddrsr   r   r   r      s
   
r   c                 C   sb   	 t | dkr/| dr| dr| dd ddddS | dr/| dr/| dd S | S )	Nr:   r$   z\\\z\"<>)len
startswithendswithr   r.   r   r   r   r      s   r   c                 C   s(   	 |  td}t|dkrd d | fS |S )Nr9   )splitTICKre   )r   partsr   r   r   r      s
   
r   c                 C   sF   	 t jj| d|p	dd} |d u r|d u r| S |d u rd}d||| f S )Nr   r#   )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 ]<\}}| d}t|}t|}|r?|dd\}}|d ur2t|}||g |||f q||dt| f q|r|	 D ]K\}}g }d}	|
  |D ]\}}
}|rptjj|
dd	}
d
}	||
 q_tt|}|	rt|\}}}||||d| ff qQ||d| f qQ|S )Nr   r:   *r,   numz"%s"Fzlatin-1)rl   T)rg   r   rfc2231_continuationmatchgrouprQ   
setdefaultappendr   itemssortrm   rn   EMPTYSTRINGr3   r   )paramsZ
new_paramsZrfc2231_paramsr,   valueencodedmorq   ZcontinuationsZextendedr   r+   ro   r   r   r   r     s:   


r   r   us-asciic                 C   sh   t | trt| dkrt| S | \}}}|d u r|}t|d}zt|||W S  ty3   t| Y S w )Nr;   zraw-unicode-escape)r%   tuplere   r   bytesr&   LookupError)r{   errorsZfallback_charsetr+   ro   textZrawbytesr   r   r   r   4  s   

r   ra   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oY|jdk}|r_tjntj }|t j
|dkrut |tj| }nt |}Y nw | j|dS )Nra   r[   r8   r   )rJ   )rB   rM   rC   rD   rE   rJ   r>   rA   mktimerG   r]   	tm_gmtofftm_zoneAttributeErrorgmtimedaylighttm_isdstaltzonetznamer   )	rI   ZisdstZtmr\   ZlocaltmZdeltar_   dstZgmtoffr   r   r   rG   N  s*   




rG   )r   )NFF)F)NN)r   r~   )Nra   )-__all__rR   rerA   rT   rV   rB   urllib.parserm   Zemail._parseaddrr   r   r4   r
   r   r   r   Zemail.charsetr   r2   ry   ZUEMPTYSTRINGZCRLFri   compiler'   r)   r   r"   r   r   r@   r   r   r	   r   r   r   r   r   ASCIIrr   r   r   rG   r   r   r   r   <module>   sT   


"
	


0
