tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
W\¬Qc@sddZddddgZddlZddlZdZdZd    Zd
d d 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>„Z d?„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àüÿÿtPSTtPDTc Cs|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|d dkrä|d  }n|jd ƒ}|dkr||}}n|d dkr,|d  }n|dj ƒsL||}}n|d dkri|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((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/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((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/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((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/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((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyR¢st AddrlistClasscBs‰eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z    e
d„Z d    „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
phraseendstfieldt commentlist(tselfRh((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/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((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/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((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt getaddrlistÓ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|j krP|jd7_n|jƒ|jt|jƒkrš|j|jd
krš|jd7_n|S( sParse the next address.is.@R5it;t<s (Rt)R2( RiRnRbt getphraselistR<RhtSPACEtjoint getaddrspecRot getrouteaddrRa(Rjtoldpostoldcltplistt
returnlisttaddrspectfieldlent    routeaddr((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/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(Rjt expectroutetadlist((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyRzs.
 
         cCsLg}|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ƒt    j
|ƒ|j ƒS(sParse an RFC 2822 addr-spec.R`iR\s"%s"Rƒ( RnRbR<RhR>RtgetquoteRftgetatomt EMPTYSTRINGRxR…(Rjtaslist((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyRy<s$
  .  
cCsg}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|j|jkrùPq    |j|j    ƒƒq    Wt
j |ƒS(s-Get the complete domain name from an address.iRlt[R`( RbR<RhRcRiR>RmtgetdomainliteralRfRŠR‹Rx(Rjtsdlist((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyR…UscCs-|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((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt getdelimitedhs(             cCs|jddtƒS(s1Get a quote-delimited fragment from self's field.R\s" (R”R„(Rj((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyR‰scCs|jddtƒS(s7Get a parenthesis-delimited fragment from self's field.Rls) (R”R†(Rj((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyRm‘scCsd|jddtƒS(s!Parse an RFC 2822 domain-literal.s[%s]Rs] (R”R„(Rj((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/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((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/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}((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyRv­sN(t__name__t
__module__t__doc__RkRnRrRoRzRyR…R†R”R‰RmRŽR?RŠRv(((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyR_¬s        
       ;              %             t AddressListcBsMeZdZd„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_RkRrt addresslist(RjRh((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyRkÆscCs t|jƒS(N(R<Rš(Rj((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt__len__ÍscCsStdƒ}|j|_x3|jD](}||jkr#|jj|ƒq#q#W|S(N(R™R?RšR>(Rjtothertnewaddrtx((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt__add__Ðs   cCs:x3|jD](}||jkr
|jj|ƒq
q
W|S(N(RšR>(RjRœRž((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt__iadd__ÙscCsFtdƒ}x3|jD](}||jkr|jj|ƒqqW|S(N(R™R?RšR>(RjRœRRž((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt__sub__às
 cCs:x3|jD](}||jkr
|jj|ƒq
q
W|S(N(Rštremove(RjRœRž((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt__isub__èscCs |j|S(N(Rš(RjRA((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt __getitem__ïs(
R–R—R˜RkR›RŸR R¡R£R¤(((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyR™Äs                            (R˜t__all__RXRZRwR‹t
COMMASPACER@R:RFRRRRR_R™(((sX/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/email/_parseaddr.pyt<module>s4        b            
   
ÿ