o
    DXh1C                     @   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,dCd4d5Z-ed6ej.Z/d7d8 Z0	9	:dDd;d<Z1dEd>d?Z2dS )F)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   5/opt/python-3.10.19/usr/lib/python3.10/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 |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   M   s$   



r   c                 c   sb    d}d}t | D ]\}}|r|d| fV  d}q	|dkr d}q	||fV  q	|r/|dfV  d S 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kr3|d u r |}q||kr-|| ||  |d }d }q|t| k rC|| |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 }q1t||krJdgS |S )	Nc                 s   s    | ]}t |V  qd S )Nr&   .0vr   r   r   	<genexpr>   s    zgetaddresses.<locals>.<genexpr>c                 S   s   g | ]}t |qS r   r=   r>   r   r   r   
<listcomp>   s    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 ]\}}|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   
rP   c                 C   s(   g }| D ]}t |sd}|| q|S )Nz('', ''))rP   r6   )Zemail_header_fieldsaccepted_valuesr@   r   r   r   rH      s   rH   c                 C   s,   g }| D ]}d|d v rd}| | q|S )N[r5   rD   )r6   )Zparsed_email_header_tuplesrQ   r@   r   r   r   rI      s   rI   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   
rZ   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)rX   tzinfor\   r]   r^   
ValueErrorstrftimerZ   )rc   rb   nowrY   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>)intr[   osgetpidrandomgetrandbitssocketgetfqdn)Zidstringdomainr`   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"rS   rd   seconds)r   re   r&   r\   r]   	timedelta)dataZparsed_date_tzZdtupletzr   r   r   r   9  s   
r   c                C   sx   	 |st | j}|sdS |d S t| tr| d } t| ts dS t| gd } tt | j}|r6t|dkr8dS |d S )NrD   r   r5   )rF   rG   r%   listr&   rH   rI   r7   )r0   r<   addrsr   r   r   r   D  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 )	Nr5   r$   z\\r.   z\"<>)r7   
startswithendswithr   r=   r   r   r   r   c  s   r   c                 C   s(   	 |  td}t|dkrd d | fS |S )NrT   )splitTICKr7   )r   partsr   r   r   r   o  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   w  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   r5   *r,   numz"%s"Fzlatin-1)r   T)r   r   rfc2231_continuationmatchgrouprk   
setdefaultr6   r   itemssortr   r   EMPTYSTRINGr8   r   )paramsZ
new_paramsZrfc2231_paramsr,   valueencodedmor   ZcontinuationsZextendedr   r+   r   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 )NrU   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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 )Nr|   ru   rS   r   )rd   )r\   rg   r]   r^   r_   rd   rX   r[   mktimera   rw   	tm_gmtofftm_zoneAttributeErrorgmtimedaylighttm_isdstaltzonetznamer   )	rc   ZisdstZtmrv   ZlocaltmZdeltary   dstZgmtoffr   r   r   ra     s*   




ra   )r   )NFF)F)NN)r   r   )Nr|   )3__all__rl   rer[   rn   rp   r\   urllib.parser   Zemail._parseaddrr   r   rF   r
   r   r   r   Zemail.charsetr   rE   r   ZUEMPTYSTRINGZCRLFr   compiler'   r)   r   r"   r   r4   r;   Zsupports_strict_parsingr   rP   rH   rI   rZ   r   r   r	   r   r   r   r   r   ASCIIr   r   r   ra   r   r   r   r   <module>   s`   


!,

	


0
