B
    0*\(6                 @   sf  d ddddddddd	d
ddddg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d6d!dZd"d Zd#d$ Zd7d&dZ d8d'dZ!d9d(dZ"d)d Z#d*d
 Z$d+d Z%d,d Z&d:d-dZ'ed.ej(Z)d/d Z*d;d2d Z+d<d4d5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&   y|    dS  tk
r    dS X d S )NFT)encodeUnicodeEncodeError)s r   6C:\ALexclude\prg\programme\Python37\Lib\email\utils.py_has_surrogates3   s
    r   c             C   s   |  dd}|ddS )Nzutf-8surrogateescapereplace)r   decode)stringZoriginal_bytesr   r   r   	_sanitize@   s    r!   utf-8c             C   s   | \}}| d |ry| d W n8 tk
r\   t|trFt|}||}d||f S X d}t|rpd}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nameZaddressZencoded_nameZquotesr   r   r   r   L   s     



c             C   s   t | }t|}|jS )N)
COMMASPACEjoin_AddressListaddresslist)Zfieldvaluesallar   r   r   r   n   s    
c             C   sf   ddddddddg| d	  | d
 ddddddddddddg| d d  | d | d | d | d |f S )Nz"%s, %02d %s %04d %02d:%02d:%02d %sZ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   sR   | d k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    c             C   sV   |   }|r2| jd ks$| jtjjkr,tdd}n| jd krBd}n
| d}t||S )Nz%usegmt option requires a UTC datetimeZGMTz-0000z%z)r9   tzinfor=   r>   r?   
ValueErrorZstrftimer;   )rD   rC   nowr:   r   r   r   r      s    

c             C   s^   t t d }t }td}| d kr0d} nd|  } |d krHt }d|||| |f }|S )Nd   @   r   .z<%d.%d.%d%s@%s>)intr<   osgetpidrandomZgetrandbitssocketZgetfqdn)ZidstringdomainrA   ZpidZrandintZmsgidr   r   r   r	      s    

c             C   sN   t | ^ }}|d kr(tj|d d  S tj|d d dttj|diS )Nr3   rE   )seconds)r   r=   r>   	timedelta)dataZdtupletzr   r   r   r      s
    c             C   s   t | j}|sdS |d S )N)r   r   r   )r/   r0   )ZaddrZaddrsr   r   r   r      s    
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\\\z\"<>)len
startswithendswithr   )r&   r   r   r   r      s    c             C   s&   |  td}t|dkr"d d | fS |S )Nr4   )splitTICKrY   )r   partsr   r   r   r      s    
c             C   sD   t jj| d|pdd} |d kr*|d kr*| S |d kr6d}d||| f S )Nr   r#   )Zsafeencodingz%s'%s'%s)urllibparser   )r   r+   languager   r   r   r      s    z&^(?P<name>\w+)\*((?P<num>[0-9]+)\*?)?$c             C   sx  | d d  } g }i }|  d\}}|||f x| r|  d\}}|drTd}nd}t|}t|}|r|dd\}}|d k	rt|}||g |||f q2||dt	| f q2W |rtx|
 D ]\}}g }d}	|  x6|D ].\}}
}|rtjj|
dd	}
d}	||
 qW t	t|}|	r^t|\}}}||||d| ff q||d| f qW |S )
Nr   *TFr,   numz"%s"zlatin-1)r_   )popappendr[   r   rfc2231_continuationmatchgrouprK   
setdefaultr   itemssortr`   ra   EMPTYSTRINGr.   r   )paramsZ
new_paramsZrfc2231_paramsr,   valueZencodedmord   ZcontinuationsZextendedr   r+   rb   r   r   r   r     sD    

r   us-asciic             C   sh   t | trt| dkrt| S | \}}}|d kr4|}t|d}yt|||S  tk
rb   t|S X d S )Nr6   zraw-unicode-escape)r%   tuplerY   r   bytesr&   LookupError)ro   errorsZfallback_charsetr+   rb   textZrawbytesr   r   r   r   9  s    

rU   c       	      C   s  | d krt j t jj S | jd k	r.|  S |  d d |f }t|}t	|}y t j
|jd}t ||j}W n tk
r   | 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X | j|dS )NrU   )rQ   r3   r   )rE   )r=   rG   r>   r?   r@   rE   r9   r<   ZmktimerB   rR   Z	tm_gmtoffZtm_zoneAttributeErrorZgmtimeZdaylightZtm_isdstZaltzoneZtznamer   )	rD   ZisdstZtmrQ   ZlocaltmZdeltarT   dstZgmtoffr   r   r   rB   S  s$    


rB   )r"   )NFF)F)NN)NN)r   rq   )NrU   )-__all__rL   rer<   rN   rO   r=   Zurllib.parser`   Zemail._parseaddrr   r   r/   r
   r   r   r   Zemail.charsetr   r-   rm   ZUEMPTYSTRINGZCRLFr]   compiler'   r)   r   r!   r   r   r;   r   r   r	   r   r   r   r   r   ASCIIrg   r   r   rB   r   r   r   r   <module>   sh   


"	



8 
