;
"Ic               @   sR  d  Z  d d d d g Z d d l Z d Z d Z d	 Z d
 d d d d d d d d d d d d d d d d d d d d d d d  g Z d! d" d# d$ d% d& d' g Z i d d( 6d d) 6d d* 6d d+ 6d, d- 6d. d/ 6d0 d1 6d, d2 6d3 d4 6d0 d5 6d6 d7 6d3 d8 6d9 d: 6d6 d; 6Z d<   Z	 d=   Z
 d>   Z d?   Z Gd@   dA  Z GdB   dC e  Z d S(D   uc   Email address parsing code.

Lifted directly from rfc822.py.  This should eventually be rewritten.
u	   mktime_tzu	   parsedateu   parsedate_tzu   quotei    Nu    u    u   , u   janu   febu   maru   apru   mayu   junu   julu   augu   sepu   octu   novu   decu   januaryu   februaryu   marchu   aprilu   juneu   julyu   augustu	   septemberu   octoberu   novemberu   decemberu   monu   tueu   wedu   thuu   friu   satu   sunu   UTu   UTCu   GMTu   Zipu   ASTiu   ADTiu   ESTu   EDTiu   CSTu   CDTiDu   MSTu   MDTiu   PSTu   PDTc             C   s>  |  j    }  |  d j d  p |  d j   t k o |  d =nA |  d j d  } | d k o  |  d | d d  |  d <n t |   d k oB |  d j  d  } t |  d k o | |  d d  }  q n t |   d k oi |  d } | j d  } | d k o2 | d |  | | d d  g |  d d  <qS|  j d	  n t |   d
 k  o d S|  d d
  }  |  \ } } } } } | j   } | t	 k o) | | j   } } | t	 k o d Sn t	 j
 |  d } | d k o | d 8} n | d d k o | d d  } n | j d  } | d k o | | } } n | d d k o | d d  } n | d j   p | | } } n | d d k o | d d  } n | j  d  } t |  d k o | \ }	 }
 d } n+ t |  d k o | \ }	 }
 } n d Sy@ t |  } t |  } t |	  }	 t |
  }
 t |  } Wn t k
 o d SYn Xd } | j   } | t k o t | } n( y t |  } Wn t k
 o Yn X| oF | d k  o d } | } n d } | | d d | d d } n | | | |	 |
 | d d d | f
 S(   uQ   Convert a date string to a time tuple.

    Accounts for military timezones.
    i    u   ,i   Ni   u   -i   u   +u    i   i   iu   :i   u   0id   i  i<   (   u   splitu   endswithu   loweru	   _daynamesu   rfindu   lenu   findu   appendu   Noneu   _monthnamesu   indexu   isdigitu   intu
   ValueErroru   upperu
   _timezones(   u   datau   iu   stuffu   su   ddu   mmu   yyu   tmu   tzu   thhu   tmmu   tssu   tzoffsetu   tzsign(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   parsedate_tz-   s    + 
2	

"c             C   s3   t  |   } t | t  o | d d  S| Sd S(   u&   Convert a time string to a time tuple.Ni	   (   u   parsedate_tzu
   isinstanceu   tuple(   u   datau   t(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu	   parsedate   s    c             C   sa   |  d d k o t j |  d d  d  St j |  d d  d  } | |  d t j Sd S(   uC   Turn a 10-tuple as returned by parsedate_tz() into a UTC timestamp.i	   Ni   ii    (   i(   i    (   u   Noneu   timeu   mktimeu   timezone(   u   datau   t(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu	   mktime_tz   s    c             C   s   |  j  d d  j  d d  S(   u   Add quotes around a string.u   \u   \\u   "u   \"(   u   replace(   u   str(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   quote   s    c             B   s   |  Ee  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d d  Z d	   Z d
   Z d   Z d d  Z d   Z d S(   u   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.
    c             C   s   d |  _  d |  _ d |  _ d |  _ |  j |  j |  _ |  j  |  j |  j |  _ |  j j d d  |  _ | |  _ g  |  _	 d S(   u   Initialize a new instance.

        `field' is an unparsed address header field, containing
        one or more addresses.
        u   ()<>@,:;."[]i    u    	u   
u   .u    N(
   u   specialsu   posu   LWSu   CRu   FWSu   atomendsu   replaceu
   phraseendsu   fieldu   commentlist(   u   selfu   field(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   __init__   s    					c             C   s   x |  j  t |  j  k  og |  j |  j  |  j d k o |  j  d 7_  q |  j |  j  d k o |  j j |  j    q Pq Wd S(   u*   Parse up to the start of the next address.u   
i   u   (N(   u   posu   lenu   fieldu   LWSu   commentlistu   appendu
   getcomment(   u   self(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   gotonext   s     c             C   sY   g  } xL |  j  t |  j  k  o2 |  j   } | o | | 7} q	 | j d  q	 W| S(   uV   Parse all addresses.

        Returns a list containing all of the addresses.
        u    (   u    u    (   u   posu   lenu   fieldu
   getaddressu   append(   u   selfu   resultu   ad(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   getaddrlist   s     c             C   s  g  |  _  |  j   |  j } |  j  } |  j   } |  j   g  } |  j t |  j  k o. | o# t j |  j   | d f g } qen|  j |  j d k o= | |  _ | |  _  |  j   } t j |  j   | f g } n|  j |  j d k o g  } t |  j  } |  j d 7_ xK|  j t |  j  k  oY |  j   |  j | k  o+ |  j |  j d k o |  j d 7_ Pn | |  j	   } qWn |  j |  j d k of |  j
   } |  j  o4 t j |  d d j |  j   d	 | f g } qet j |  | f g } nX | o# t j |  j   | d f g } n. |  j |  j |  j k o |  j d 7_ n |  j   |  j t |  j  k  o* |  j |  j d
 k o |  j d 7_ n | S(   u   Parse the next address.i    u   .@u   :i   u   ;u   <u    (u    u   )u   ,(   u   commentlistu   gotonextu   posu   getphraselistu   lenu   fieldu   SPACEu   joinu   getaddrspecu
   getaddressu   getrouteaddru   specials(   u   selfu   oldposu   oldclu   plistu
   returnlistu   addrspecu   fieldlenu	   routeaddr(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu
   getaddress   sN    	
		
'		 
'
4#
0c             C   s,  |  j  |  j d k o d Sd } |  j d 7_ |  j   d } x |  j t |  j   k  o | o |  j   d } n |  j  |  j d k o |  j d 7_ Pnw |  j  |  j d k o |  j d 7_ d	 } nG |  j  |  j d k o |  j d 7_ n |  j   } |  j d 7_ P|  j   qD W| S(
   u   Parse a route address (Return-path value).

        This method just skips all the route stuff and returns the addrspec.
        u   <Ni   u    u   >u   @u   :FT(   u   fieldu   posu   Falseu   gotonextu   lenu	   getdomainu   Trueu   getaddrspec(   u   selfu   expectrouteu   adlist(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   getrouteaddr  s0    
 


c             C   sQ  g  } |  j    x |  j t |  j  k  o |  j |  j d k o  | j d  |  j d 7_ ne |  j |  j d k o | j d |  j    n3 |  j |  j |  j k o Pn | j |  j    |  j    q W|  j t |  j  k p |  j |  j d k o t j	 |  S| j d  |  j d 7_ |  j    t j	 |  |  j
   S(   u   Parse an RFC 2822 addr-spec.u   .i   u   "u   "%s"u   @(   u   gotonextu   posu   lenu   fieldu   appendu   getquoteu   atomendsu   getatomu   EMPTYSTRINGu   joinu	   getdomain(   u   selfu   aslist(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   getaddrspec+  s&    
 0
c             C   s)  g  } x|  j  t |  j  k  o |  j |  j  |  j k o |  j  d 7_  q	 |  j |  j  d k o |  j j |  j    q	 |  j |  j  d k o | j |  j    q	 |  j |  j  d k o  |  j  d 7_  | j d  q	 |  j |  j  |  j k o Pq	 | j |  j	    q	 Wt
 j |  S(   u-   Get the complete domain name from an address.i   u   (u   [u   .(   u   posu   lenu   fieldu   LWSu   commentlistu   appendu
   getcommentu   getdomainliteralu   atomendsu   getatomu   EMPTYSTRINGu   join(   u   selfu   sdlist(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu	   getdomainD  s      c             C   s:  |  j  |  j | k o d Sd g } d } |  j d 7_ x |  j t |  j   k  o | o! | j |  j  |  j  d } n |  j  |  j | k o |  j d 7_ Pnq | o1 |  j  |  j d k o | j |  j    q= n9 |  j  |  j d k o
 d } n | j |  j  |  j  |  j d 7_ q= Wt j |  S(   u  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.
        u    i   u   (u   \FT(	   u   fieldu   posu   Falseu   lenu   appendu
   getcommentu   Trueu   EMPTYSTRINGu   join(   u   selfu	   begincharu   endcharsu   allowcommentsu   slistu   quote(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   getdelimitedW  s*    	 

c             C   s   |  j  d d d  S(   u1   Get a quote-delimited fragment from self's field.u   "u   "F(   u   getdelimitedu   False(   u   self(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   getquote|  s    c             C   s   |  j  d d d  S(   u7   Get a parenthesis-delimited fragment from self's field.u   (u   )T(   u   getdelimitedu   True(   u   self(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu
   getcomment  s    c             C   s   d |  j  d d d  S(   u!   Parse an RFC 2822 domain-literal.u   [%s]u   [u   ]F(   u   getdelimitedu   False(   u   self(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   getdomainliteral  s    c             C   s   d g } | d k o |  j } n x` |  j t |  j  k  oF |  j |  j | k o Pn | j |  j |  j  |  j d 7_ q& Wt j |  S(   u  Parse 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).u    i   N(   u   Noneu   atomendsu   posu   lenu   fieldu   appendu   EMPTYSTRINGu   join(   u   selfu   atomendsu   atomlist(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   getatom  s    	 c             C   s   g  } x |  j  t |  j  k  o |  j |  j  |  j k o |  j  d 7_  q	 |  j |  j  d k o | j |  j    q	 |  j |  j  d k o |  j j |  j    q	 |  j |  j  |  j k o Pq	 | j |  j	 |  j   q	 W| S(   u   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.
        i   u   "u   ((
   u   posu   lenu   fieldu   FWSu   appendu   getquoteu   commentlistu
   getcommentu
   phraseendsu   getatom(   u   selfu   plist(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   getphraselist  s     NT(   u   __name__u
   __module__u   __doc__u   __init__u   gotonextu   getaddrlistu
   getaddressu   getrouteaddru   getaddrspecu	   getdomainu   Trueu   getdelimitedu   getquoteu
   getcommentu   getdomainliteralu   Noneu   getatomu   getphraselist(   u
   __locals__(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   AddrlistClass   s   
		
		;	 		%			u   AddrlistClassc             B   sS   |  Ee  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d S(	   u@   An AddressList encapsulates a list of parsed RFC 2822 addresses.c             C   s7   t  j |  |  | o |  j   |  _ n
 g  |  _ d  S(   N(   u   AddrlistClassu   __init__u   getaddrlistu   addresslist(   u   selfu   field(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   __init__  s    c             C   s   t  |  j  S(   N(   u   lenu   addresslist(   u   self(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   __len__  s    c             C   s^   t  d   } |  j d  d   | _ x5 | j D]* } | |  j k o | j j |  q, q, W| S(   N(   u   AddressListu   Noneu   addresslistu   append(   u   selfu   otheru   newaddru   x(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   __add__  s    
 c             C   s<   x5 | j  D]* } | |  j  k o |  j  j |  q
 q
 W|  S(   N(   u   addresslistu   append(   u   selfu   otheru   x(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   __iadd__  s
    
 c             C   sH   t  d   } x5 |  j D]* } | | j k o | j j |  q q W| S(   N(   u   AddressListu   Noneu   addresslistu   append(   u   selfu   otheru   newaddru   x(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   __sub__  s    
 c             C   s<   x5 | j  D]* } | |  j  k o |  j  j |  q
 q
 W|  S(   N(   u   addresslistu   remove(   u   selfu   otheru   x(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   __isub__  s
    
 c             C   s   |  j  | S(   N(   u   addresslist(   u   selfu   index(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   __getitem__  s    N(
   u   __name__u
   __module__u   __doc__u   __init__u   __len__u   __add__u   __iadd__u   __sub__u   __isub__u   __getitem__(   u
   __locals__(    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   AddressList  s   
							u   AddressList(   u   __doc__u   __all__u   timeu   SPACEu   EMPTYSTRINGu
   COMMASPACEu   _monthnamesu	   _daynamesu
   _timezonesu   parsedate_tzu	   parsedateu	   mktime_tzu   quoteu   AddrlistClassu   AddressList(    (    (    u-   /mit/python/lib/python3.0/email/_parseaddr.pyu   <module>   s4   		V			
	 