
    9iX                        S r SSKJr  SSKJr  SSKJr  SSKJrJrJr  SSK	J
r
Jr  SS/rSS	KrSS
KJr  SSKJr  SSKJr  \R&                  " S5      r\R&                  " S5      r\R&                  " S5      r\R&                  " S5      r\R&                  " S5      rSrSr\" 5       r " S S\5      r " S S\5      r " S S\5      rg	)a  FeedParser - An email feed parser.

The feed parser implements an interface for incrementally parsing an email
message, line by line.  This has advantages for certain applications, such as
those reading email messages off a socket.

FeedParser.feed() is the primary interface for pushing new data into the
parser.  It returns when there's nothing more it can do with the available
data.  When you have no more data to push into the parser, call .close().
This completes the parsing and returns the root message object.

The other advantage of this parser is that it will never raise a parsing
exception.  Instead, when it finds something unexpected, it adds a 'defect' to
the current message.  Defects are just instances that live on the message
object's .defects attribute.
    )unicode_literals)division)absolute_import)objectrangesuper)implements_iteratorPY3
FeedParserBytesFeedParserN)errors)message)compat32z
||
z(
||
)z
(
||
)\Zz(^(From |[\041-\071\073-\176]{1,}:|[\t ]) 
c                   T    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)BufferedSubFile1   aW  A file-ish object that can have new data loaded into it.

You can also push and pop line-matching predicates onto a stack.  When the
current predicate matches the current line, a false EOF response
(i.e. empty string) is returned instead.  This lets the parser adhere to a
simple abstraction -- it parses until EOF closes the current message.
c                 <    SU l         / U l        / U l        SU l        g )Nr   F)_partial_lines	_eofstack_closedselfs    a/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/future/backports/email/feedparser.py__init__BufferedSubFile.__init__9   s        c                 :    U R                   R                  U5        g N)r   append)r   preds     r   push_eof_matcher BufferedSubFile.push_eof_matcherC   s    d#r   c                 6    U R                   R                  5       $ r!   )r   popr   s    r   pop_eof_matcherBufferedSubFile.pop_eof_matcherF   s    ~~!!##r   c                 j    U R                   R                  U R                  5        SU l        SU l        g )Nr   T)r   r"   r   r   r   s    r   closeBufferedSubFile.closeI   s&    4==)r   c                    U R                   (       d  U R                  (       a  g[        $ U R                   R                  5       nU R                  S S S2    H-  nU" U5      (       d  M  U R                   R                  U5          g   U$ )Nr   )r   r   NeedMoreDatar'   r   r"   )r   lineateofs      r   readlineBufferedSubFile.readlineO   si    {{|| {{  ^^DbD)ET{{""4(	 *
 r   c                 P    U[         Ld   eU R                  R                  U5        g r!   )r/   r   r"   r   r0   s     r   
unreadlineBufferedSubFile.unreadlinea   s"    <'''4 r   c                    U R                   U-   Ssol         [        R                  U5      nUR                  5       U l         U R                   (       dG  U(       a@  US   R	                  S5      (       a'  UR                  S5      UR                  5       -   U l         / n[        [        U5      S-  5       H$  nUR                  X$S-     X$S-  S-      -   5        M&     U R                  U5        g)z$Push some new data into this object.r   r.         N)	r   NLCRE_cracksplitr'   endswithr   lenr"   	pushlines)r   datapartslinesis        r   pushBufferedSubFile.pushf   s     #mmd2Bm!!$'
 		 }}59+=+=d+C+C!IIbM%))+5DM s5zQ'ALLseaCEl23 (ur   c                 .    US S S2   U R                   S S& g )Nr.   r   )r   )r   rD   s     r   rA   BufferedSubFile.pushlines}   s    "+BQr   c                     U $ r!    r   s    r   __iter__BufferedSubFile.__iter__   s    r   c                 >    U R                  5       nUS:X  a  [        eU$ )Nr   )r2   StopIterationr5   s     r   __next__BufferedSubFile.__next__   s    }}2:r   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r$   r(   r+   r2   r6   rF   rA   rL   rP   __static_attributes__rK   r   r   r   r   1   s9    $$$!
.&r   r   c                   h    \ rS rSrSr\R                  4S jrS rS r	S r
S rS rS	 rS
 rS rSrg)r      zA feed-style parser of email.c                   ^  SU;   a  US   o2S	 O[         n UT l        UT l         U" T R                  S9  U 4S jT l        [        5       T l        / T l        [        (       a   T R                  5       R                  T l        OT R                  5       R                  T l        S T l        S T l        ST l        g ! [         a    S T l         Nf = f)Npolicyr[   c                      > ST R                   0$ )Nr[   r\   r   s   r   <lambda>%FeedParser.__init__.<locals>.<lambda>   s    (DKK)@r   c                      0 $ r!   rK   rK   r   r   r^   r_      s    r   F)r   _factoryr[   _factory_kwds	TypeErrorr   _input	_msgstackr
   	_parsegenrP   _parsenext_cur_last_headersonly)r   ra   _3to2kwargsr[   s   `   r   r   FeedParser.__init__   s    {"[-BFT\H]f	 !	,DKK(!@D &'3..*33DK..*//DK	
!  	,!+D	,s   B7 7CCc                     SU l         g )NT)rk   r   s    r   _set_headersonlyFeedParser._set_headersonly   s
     r   c                 Z    U R                   R                  U5        U R                  5         g)zPush more data into the parser.N)rd   rF   _call_parse)r   rB   s     r   feedFeedParser.feed   s     r   c                 F     U R                  5         g ! [         a     g f = fr!   )rg   rO   r   s    r   rr   FeedParser._call_parse   s"    	KKM 		s    
  c                 R   U R                   R                  5         U R                  5         U R                  5       nU R                  (       a   eUR                  5       S:X  aE  UR                  5       (       d0  [        R                  " 5       nU R                  R                  X5        U$ )z<Parse all remaining data and return the root message object.	multipart)rd   r+   rr   _pop_messagere   get_content_maintypeis_multipartr   !MultipartInvariantViolationDefectr[   handle_defect)r   rootdefects      r   r+   FeedParser.close   s~      ">>!!$$&+5((**==?FKK%%d3r   c                 p   U R                   " S0 U R                  5       D6nU R                  (       a/  U R                  R                  5       S:X  a  UR	                  S5        U R
                  (       a  U R
                  S   R                  U5        U R
                  R                  U5        Xl        Xl        g )Nzmultipart/digestzmessage/rfc822r.   rK   )	ra   rb   ri   get_content_typeset_default_typere   attachr"   rj   )r   msgs     r   _new_messageFeedParser._new_message   s    mm3d0023993359KK  !12>>NN2%%c*c"	
r   c                     U R                   R                  5       nU R                   (       a  U R                   S   U l        U$ S U l        U$ )Nr.   )re   r'   ri   )r   retvals     r   ry   FeedParser._pop_message   s@    ##%>>r*DI  DIr   c              #   p  #    U R                  5         / nU R                   H  nU[        L a
  [        v   M  [        R	                  U5      (       dr  [
        R	                  U5      (       dV  [        R                  " 5       nU R                  R                  U R                  U5        U R                  R                  U5          OUR                  U5        M     U R                  U5        U R                  (       ay  / n U R                  R                  5       nU[        L a
  [        v   M.  US:X  a  OUR                  U5        MG  U R                  R!                  ["        R%                  U5      5        g U R                  R'                  5       S:X  Ga   U R                  R)                  [
        R                  5        U R+                  5        H  nU[        L a
  [        v   M    O   U R-                  5       nU R                  R/                  5          U R                  R                  5       nU[        L a
  [        v   M.    U R                  R                  5       nU[        L a
  [        v   M.   US:X  a   g U R                  R                  U5        GM  U R                  R1                  5       S:X  a;  U R+                  5        H  nU[        L a
  [        v   M    O   U R-                  5         g U R                  R1                  5       S:X  GaB  U R                  R3                  5       nUc  [        R4                  " 5       nU R                  R                  U R                  U5        / nU R                   H'  nU[        L a
  [        v   M  UR                  U5        M)     U R                  R!                  ["        R%                  U5      5        g U R                  R7                  SS5      R9                  5       S;  a;  [        R:                  " 5       nU R                  R                  U R                  U5        S	U-   n[<        R>                  " S
[<        R@                  " U5      -   S-   5      n	Sn
/ nSnSn U R                  R                  5       nU[        L a
  [        v   M.  US:X  a  GOU	R	                  U5      nU(       Ga  URC                  S5      (       a  SnURC                  S5      nGOU
(       a  U(       af  US   n[D        RG                  U5      nU(       a!  US [I        URC                  S5      5      *  US'   ["        R%                  U5      U R                  l%        Sn
U R                  R                  U5        GM   U R                  R                  5       nU[        L a
  [        v   M.  U	R	                  U5      nU(       d  U R                  R                  U5        OMc  U R                  R)                  U	R                  5        U R+                  5        H  nU[        L a
  [        v   M    O   U RL                  R1                  5       S:X  a}  U RL                  RN                  nUS:X  a  S U RL                  l'        OUbK  [D        RG                  U5      nU(       a/  [I        URC                  S5      5      nUS U*  U RL                  l'        OvU RL                  RP                  n[S        U[T        5      (       aK  [D        RG                  U5      nU(       a/  US [I        URC                  S5      5      *  nUU RL                  l(        U R                  R/                  5         U R-                  5         U R                  U l&        OU
(       d   eUR                  U5        GM*  U
(       a  [        RV                  " 5       nU R                  R                  U R                  U5        U R                  R!                  ["        R%                  U5      5        / nU R                   H  nU[        L d  M  [        v   M     ["        R%                  U5      U R                  l'        g U(       d<  [        RX                  " 5       nU R                  R                  U R                  U5        g U(       a  S/nO/ nU R                   H'  nU[        L a
  [        v   M  UR                  U5        M)     U(       aA  US   n[Z        R	                  U5      nU(       a   U[I        URC                  S5      5      S  US'   ["        R%                  U5      U R                  l'        g / nU R                   H'  nU[        L a
  [        v   M  UR                  U5        M)     U R                  R!                  ["        R%                  U5      5        g 7f)NTr   zmessage/delivery-statusr   rx   zcontent-transfer-encoding8bit)7bitr   binaryz--z(?P<sep>z4)(?P<end>--)?(?P<ws>[ \t]*)(?P<linesep>\r\n|\r|\n)?$Fendlinesepr.   r   ).r   rd   r/   headerREmatchNLCREr    MissingHeaderBodySeparatorDefectr[   r}   ri   r6   r"   _parse_headersrk   r2   set_payloadEMPTYSTRINGjoinr   r$   rf   ry   r(   rz   get_boundaryNoBoundaryInMultipartDefectgetlower-InvalidMultipartContentTransferEncodingDefectrecompileescapegroup	NLCRE_eolsearchr@   preamblerj   epilogue_payload
isinstancestrStartBoundaryNotFoundDefectCloseBoundaryNotFoundDefect	NLCRE_bol)r   headersr0   r   rD   r   r   boundary	separator
boundaryrecapturing_preambler   r   close_boundary_seenmolastlineeolmor   r   payload	firstlinebolmos                         r   rf   FeedParser._parsegen   s     KKD|#"">>$'' {{4((#DDFFKK--dii@KK**40NN4     	G$ E{{++-<'&&2:T"  II!!+"2"25"9:99%%'+DD ,,U[[9"nn.F-** 	 /
 '') ++-
 ;;//1D|+** ;;//1D|+** 2:  &&t,? B 99))+y8 ..*\)&&	 +
 99))+{:yy--/H
  ;;=))$))V< KKD|+** LL&	 (
 		%%k&6&6u&=>		96BHHJ56MMO))$))V<
 xIRYYy11GHIJ "&HG"'{{++-<'&&2:%%d+
 xx.2+"$((9"5)# (0|H$-$4$4X$>E$/78M#ekk!n:M9M/N1<1A1A(1KDII.-2*..t4 
 #{{335</"..$'--d3! KK2248!  KK001A1AB"&.."2!\1"..$	 #3 zz668KG#'::#6#6#r>26DJJ/%1!*!1!1(!;B!&)"((1+&66>uo

 3"&**"5"5%gs33!*!1!1'!:B!*12DC4D3D*E6=

 3KK//1%%' "&DJ .--OOD)_ f ";;=))$))V<		%%k&6&6x&@A KKD|+**  ( &1%5%5h%?		" ';;=))$))V< 4<'&&%	 $ $QK	!	2"+CA,?,@"AHQK!,!1!1(!;DII KKD|#""LL	  
 			k..u56s   `#f6)Ff6c                    Sn/ n[        U5       GH  u  pEUS   S;   aX  U(       d>  [        R                  " U5      nU R                  R	                  U R
                  U5        MT  UR                  U5        Mg  U(       a5  U R
                  R                  " U R                  R                  U5      6   S/ p2UR                  S5      (       a  US:X  aX  [        R                  U5      nU(       a  US [        UR                  S5      5      *  nU R
                  R                  U5        GM  U[        U5      S-
  :X  a  U R                  R!                  U5          g [        R"                  " U5      nU R
                  R$                  R                  U5        GM  UR'                  S5      nUS:  d   S5       eUS U nU/nGM     U(       a3  U R
                  R                  " U R                  R                  U5      6   g g )Nr   r   z 	zFrom r<   :z3_parse_headers fed line with no : and no leading WS)	enumerater   #FirstHeaderLineIsContinuationDefectr[   r}   ri   r"   set_rawheader_source_parse
startswithr   r   r@   r   set_unixfromrd   r6   MisplacedEnvelopeHeaderDefectdefectsfind)	r   rD   
lastheader	lastvaluelinenor0   r   r   rE   s	            r   r   FeedParser._parse_headers  s   
	%e,LFAw%! $GGMFKK--dii@  &		!!4;;#B#B9#MN(*BIw''Q;"))$/B#$6c"((1+&6%67II**40s5zA~- KK**40 $AA$GFII%%,,V4 		#AQ3MMM3bqJIU -X IIt{{>>yIJ r   )	ri   ra   rb   rk   rd   rj   re   rg   r[   N)rR   rS   rT   rU   rV   r   Messager   ro   rs   rr   r+   r   ry   rf   r   rW   rK   r   r   r   r      s<    ' ' ":!
{7z1Kr   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )r   i	  z(Like FeedParser, but feed accepts bytes.c                 X   > [        5       R                  UR                  SS5      5        g )Nasciisurrogateescape)r   rs   decode)r   rB   	__class__s     r   rs   BytesFeedParser.feed  s    T[[*;<=r   rK   )rR   rS   rT   rU   rV   rs   rW   __classcell__)r   s   @r   r   r   	  s    2> >r   )rV   
__future__r   r   r   future.builtinsr   r   r   future.utilsr	   r
   __all__r   future.backports.emailr   r   "future.backports.email._policybaser   r   r   r   r   r=   r   r   NLr/   r   r   r   rK   r   r   <module>r      s   
  (  & 0 0 1*
+ 	 ) * 7


< JJ~&	JJ'(	jj( ::AB	xWf Wt{K {K|>j >r   