Your IP : 3.139.237.170


Current Path : /lib64/python2.7/email/
Upload File :
Current File : //lib64/python2.7/email/_parseaddr.pyc

�
�mec@sddZddddgZddlZddlZdZdZd	Zd
ddd
dddddddddddddddddddd gZd!d"d#d$d%d&d'gZid(d)6d(d*6d(d+6d(d,6d-d.6d/d06d1d26d-d36d4d56d1d66d7d86d4d96d:d;6d7d<6Z	d=�Z
d>�Zd?�Zd@�Z
dAfdB��YZdCefdD��YZdS(EscEmail address parsing code.

Lifted directly from rfc822.py.  This should eventually be rewritten.
t	mktime_tzt	parsedatetparsedate_tztquotei����Nt ts, tjantfebtmartaprtmaytjuntjultaugtseptocttnovtdectjanuarytfebruarytmarchtapriltjunetjulytaugustt	septembertoctobertnovembertdecembertmonttuetwedtthutfritsattsunitUTtUTCtGMTtZip���tASTi���tADTi���tESTtEDTi����tCSTtCDTiD���tMSTtMDTi��tPSTtPDTcCs|j�}|djd�s5|dj�tkr?|d=n8|djd�}|dkrw|d|d|d<nt|�dkr�|djd�}t|�dkr�||d}q�nt|�dkr(|d}|jd�}|dkr|| ||dg|d)q(|jd�nt|�d	kr>dS|d	 }|\}}}}}|j�}|t	kr�||j�}}|t	kr�dSnt	j
|�d}|d
kr�|d
8}n|ddkr�|d }n|jd�}|dkr||}}n|ddkr,|d }n|dj�sL||}}n|ddkri|d }n|jd�}t|�d
kr�|\}	}
d}n(t|�dkr�|\}	}
}ndSy@t|�}t|�}t|	�}	t|
�}
t|�}Wnt
k
rdSX|dkrN|dkrA|d7}qN|d7}nd}|j�}|tkryt|}n$yt|�}Wnt
k
r�nX|r�|dkr�d}
|}nd}
|
|dd|dd}n||||	|
|ddd|f
S(sQConvert a date string to a time tuple.

    Accounts for military timezones.
    it,iit-it+Riii����t:it0idiDili�ii<N(tsplittendswithtlowert	_daynamestrfindtlentfindtappendtNonet_monthnamestindextisdigittintt
ValueErrortuppert
_timezones(tdatatitstufftstddtmmtyyttmttztthhttmmttssttzoffsetttzsign((s(/usr/lib64/python2.7/email/_parseaddr.pyR-s�)






	





!cCs+t|�}t|t�r#|d S|SdS(s&Convert a time string to a time tuple.i	N(Rt
isinstancettuple(RGtt((s(/usr/lib64/python2.7/email/_parseaddr.pyR�scCsD|ddkr%tj|d d�Stj|�}||dSdS(sETurn a 10-tuple as returned by parsedate_tz() into a POSIX timestamp.i	ii����N(i����(R?ttimetmktimetcalendarttimegm(RGRW((s(/usr/lib64/python2.7/email/_parseaddr.pyR�scCs|jdd�jdd�S(s�Prepare string to be used in a quoted string.

    Turns backslash and double quote characters into quoted pairs.  These
    are the only characters that need to be quoted inside a quoted string.
    Does not add the surrounding double quotes.
    s\s\\t"s\"(treplace(tstr((s(/usr/lib64/python2.7/email/_parseaddr.pyR�st
AddrlistClasscBs�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	e
d�Zd	�Zd
�Z
d�Zdd�Zd
�ZRS(s�Address parser class by Ben Escoto.

    To understand what this class does, it helps to have a copy of RFC 2822 in
    front of you.

    Note: this class interface is deprecated and may be removed in the future.
    Use rfc822.AddressList instead.
    cCsd|_d|_d|_d|_|j|j|_|j|j|j|_|jjdd�|_||_g|_	dS(s�Initialize a new instance.

        `field' is an unparsed address header field, containing
        one or more addresses.
        s()<>@,:;."[]is 	s
t.RN(
tspecialstpostLWStCRtFWStatomendsR]t
phraseendstfieldtcommentlist(tselfRh((s(/usr/lib64/python2.7/email/_parseaddr.pyt__init__�s					cCs�x{|jt|j�kr}|j|j|jdkrJ|jd7_q|j|jdkry|jj|j��qPqWdS(s*Parse up to the start of the next address.s

it(N(RbR<RhRcRiR>t
getcomment(Rj((s(/usr/lib64/python2.7/email/_parseaddr.pytgotonext�scCsUg}xH|jt|j�krP|j�}|r@||7}q	|jd�q	W|S(sVParse all addresses.

        Returns a list containing all of the addresses.
        R(RR(RbR<Rht
getaddressR>(Rjtresulttad((s(/usr/lib64/python2.7/email/_parseaddr.pytgetaddrlist�s
cCs�g|_|j�|j}|j}|j�}|j�g}|jt|j�kr�|rPtj|j�|dfg}qPn�|j|jdkr�||_||_|j�}tj|j�|fg}nz|j|jdkr�g}t|j�}|jd7_x=|jt|j�kr�|j�|j|krm|j|jdkrm|jd7_Pn||j	�}qWn�|j|jdkr�|j
�}|jr�tj|�ddj|j�d	|fg}qPtj|�|fg}nS|r%tj|j�|dfg}n+|j|j|jkrP|jd7_n|j�|jt|j�kr�|j|jd
kr�|jd7_n|S(sParse the next address.is.@R5it;t<s (Rt)R2(RiRnRbt
getphraselistR<RhtSPACEtjointgetaddrspecRotgetrouteaddrRa(Rjtoldpostoldcltplistt
returnlisttaddrspectfieldlent	routeaddr((s(/usr/lib64/python2.7/email/_parseaddr.pyRo�sL	
		
%		
%	3"
.cCs |j|jdkrdSt}|jd7_|j�d}x�|jt|j�kr|rs|j�t}n�|j|jdkr�|jd7_Pnr|j|jdkr�|jd7_t}nD|j|jdkr�|jd7_n|j�}|jd7_P|j�qBW|S(s�Parse a route address (Return-path value).

        This method just skips all the route stuff and returns the addrspec.
        RtNiRt>t@R5(RhRbtFalseRnR<t	getdomaintTrueRy(Rjtexpectroutetadlist((s(/usr/lib64/python2.7/email/_parseaddr.pyRzs.

		cCs\g}|j�x�|jt|j�kr�|j|jdkr`|jd�|jd7_nf|j|jdkr�|jdt|j���n0|j|j|jkr�Pn|j|j��|j�qW|jt|j�ks|j|jdkrt	j
|�S|jd�|jd7_|j�|j�}|sKt	St	j
|�|S(sParse an RFC 2822 addr-spec.R`iR\s"%s"R�(RnRbR<RhR>RtgetquoteRftgetatomtEMPTYSTRINGRxR�(Rjtaslisttdomain((s(/usr/lib64/python2.7/email/_parseaddr.pyRy<s*

 .


cCs7g}x!|jt|j�kr)|j|j|jkrL|jd7_q	|j|jdkr{|jj|j��q	|j|jdkr�|j|j��q	|j|jdkr�|jd7_|jd�q	|j|jdkr�tS|j|j|j	krPq	|j|j
��q	Wtj|�S(s-Get the complete domain name from an address.iRlt[R`R�(RbR<RhRcRiR>RmtgetdomainliteralR�RfR�Rx(Rjtsdlist((s(/usr/lib64/python2.7/email/_parseaddr.pyR�Zs"cCs-|j|j|krdSdg}t}|jd7_x�|jt|j�kr|ry|j|j|j�t}n�|j|j|kr�|jd7_Pnk|r�|j|jdkr�|j|j��q;n6|j|jdkr�t}n|j|j|j�|jd7_q;Wtj|�S(s�Parse a header fragment delimited by special characters.

        `beginchar' is the start character for the fragment.
        If self is not looking at an instance of `beginchar' then
        getdelimited returns the empty string.

        `endchars' is a sequence of allowable end-delimiting characters.
        Parsing stops when one of these is encountered.

        If `allowcomments' is non-zero, embedded RFC 2822 comments are allowed
        within the parsed fragment.
        RiRls\(	RhRbR�R<R>RmR�R�Rx(Rjt	beginchartendcharst
allowcommentstslistR((s(/usr/lib64/python2.7/email/_parseaddr.pytgetdelimitedqs(
			cCs|jddt�S(s1Get a quote-delimited fragment from self's field.R\s"
(R�R�(Rj((s(/usr/lib64/python2.7/email/_parseaddr.pyR��scCs|jddt�S(s7Get a parenthesis-delimited fragment from self's field.Rls)
(R�R�(Rj((s(/usr/lib64/python2.7/email/_parseaddr.pyRm�scCsd|jddt�S(s!Parse an RFC 2822 domain-literal.s[%s]R�s]
(R�R�(Rj((s(/usr/lib64/python2.7/email/_parseaddr.pyR��scCs�dg}|dkr!|j}nx\|jt|j�kr|j|j|krVPn|j|j|j�|jd7_q$Wtj|�S(sParse an RFC 2822 atom.

        Optional atomends specifies a different set of end token delimiters
        (the default is to use self.atomends).  This is used e.g. in
        getphraselist() since phrase endings must not include the `.' (which
        is legal in phrases).RiN(R?RfRbR<RhR>R�Rx(RjRftatomlist((s(/usr/lib64/python2.7/email/_parseaddr.pyR��s	cCs�g}x�|jt|j�kr�|j|j|jkrL|jd7_q	|j|jdkrx|j|j��q	|j|jdkr�|jj|j��q	|j|j|jkr�Pq	|j|j	|j��q	W|S(s�Parse a sequence of RFC 2822 phrases.

        A phrase is a sequence of words, which are in turn either RFC 2822
        atoms or quoted-strings.  Phrases are canonicalized by squeezing all
        runs of continuous whitespace into one space.
        iR\Rl(
RbR<RhReR>R�RiRmRgR�(RjR}((s(/usr/lib64/python2.7/email/_parseaddr.pyRv�sN(t__name__t
__module__t__doc__RkRnRrRoRzRyR�R�R�R�RmR�R?R�Rv(((s(/usr/lib64/python2.7/email/_parseaddr.pyR_�s		
		;	 		%			tAddressListcBsMeZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(s@An AddressList encapsulates a list of parsed RFC 2822 addresses.cCs5tj||�|r(|j�|_n	g|_dS(N(R_RkRrtaddresslist(RjRh((s(/usr/lib64/python2.7/email/_parseaddr.pyRk�scCs
t|j�S(N(R<R�(Rj((s(/usr/lib64/python2.7/email/_parseaddr.pyt__len__�scCsStd�}|j|_x3|jD](}||jkr#|jj|�q#q#W|S(N(R�R?R�R>(Rjtothertnewaddrtx((s(/usr/lib64/python2.7/email/_parseaddr.pyt__add__�s
cCs:x3|jD](}||jkr
|jj|�q
q
W|S(N(R�R>(RjR�R�((s(/usr/lib64/python2.7/email/_parseaddr.pyt__iadd__�scCsFtd�}x3|jD](}||jkr|jj|�qqW|S(N(R�R?R�R>(RjR�R�R�((s(/usr/lib64/python2.7/email/_parseaddr.pyt__sub__�s
cCs:x3|jD](}||jkr
|jj|�q
q
W|S(N(R�tremove(RjR�R�((s(/usr/lib64/python2.7/email/_parseaddr.pyt__isub__�scCs|j|S(N(R�(RjRA((s(/usr/lib64/python2.7/email/_parseaddr.pyt__getitem__�s(
R�R�R�RkR�R�R�R�R�R�(((s(/usr/lib64/python2.7/email/_parseaddr.pyR��s							(R�t__all__RXRZRwR�t
COMMASPACER@R:RFRRRRR_R�(((s(/usr/lib64/python2.7/email/_parseaddr.pyt<module>s4		b			
	
�"