
    z%iY                     P   	 d dg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	  ej                  d      Z ej                  d	      Z ej                  d
      Z ej                  d	      Z ej                  d      ZdZdZ e       Z G d de      Z G d d       Z G d de      Zy)
FeedParserBytesFeedParser    N)errors)compat32)deque)StringIOz
\r\n|\r|\nz(\r\n|\r|\n)z(\r\n|\r|\n)\Zz%^(From |[\041-\071\073-\176]*:|[\t ]) 
c                   J    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)BufferedSubFilec                 `    t        d      | _        t               | _        g | _        d| _        y )Nr	   )newlineF)r   _partialr   _lines	_eofstack_closedselfs    D/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/email/feedparser.py__init__zBufferedSubFile.__init__4   s'     !,g    c                 :    | j                   j                  |       y N)r   append)r   preds     r   push_eof_matcherz BufferedSubFile.push_eof_matcher?   s    d#r   c                 6    | j                   j                         S r   )r   popr   s    r   pop_eof_matcherzBufferedSubFile.pop_eof_matcherB   s    ~~!!##r   c                    | j                   j                  d       | j                  | j                   j                                | j                   j                  d       | j                   j	                          d| _        y )Nr   T)r   seek	pushlines	readlinestruncater   r   s    r   closezBufferedSubFile.closeE   sV    1t}}..011 r   c                     | j                   s| j                  ryt        S | j                   j                         }t	        | j
                        D ]'  } ||      s| j                   j                  |        y |S Nr	   )r   r   NeedMoreDatapopleftreversedr   
appendleft)r   lineateofs      r   readlinezBufferedSubFile.readlineM   sj    {{|| {{""$ dnn- 	ET{&&t,		
 r   c                 :    | j                   j                  |       y r   )r   r+   r   r,   s     r   
unreadlinezBufferedSubFile.unreadline_   s     	t$r   c                    	 | j                   j                  |       d|vrd|vry | j                   j                  d       | j                   j                         }| j                   j                  d       | j                   j	                          |d   j                  d      s)| j                   j                  |j                                | j                  |       y )Nr
   r   )r   writer!   r#   r$   endswithr   r"   )r   datapartss      r   pushzBufferedSubFile.pushd   s    2D!tD 0 	1'')1  Ry!!$'MM		,ur   c                 :    | j                   j                  |       y r   )r   extend)r   liness     r   r"   zBufferedSubFile.pushlinesy   s    5!r   c                     | S r    r   s    r   __iter__zBufferedSubFile.__iter__|   s    r   c                 <    | j                         }|dk(  rt        |S r'   )r.   StopIterationr0   s     r   __next__zBufferedSubFile.__next__   s    }}2:r   N)__name__
__module____qualname__r   r   r   r%   r.   r1   r9   r"   r?   rB   r>   r   r   r   r   ,   s9    	$$$%
*"r   r   c                   L    e Zd Z	 deddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zy)r   Npolicyc                t   	 || _         d| _        |,|j                  ddlm} || _        n-|j                  | _        n|| _        	  || j                          t               | _        g | _	        | j                         j                  | _        d | _        d | _        d| _        y # t        $ r
 d| _        Y ]w xY w)NFr   )MessagerG   T)rH   _old_style_factorymessage_factoryemail.messagerJ   _factory	TypeErrorr   _input	_msgstack	_parsegenrB   _parse_cur_last_headersonly)r   rN   rH   rJ   s       r   r   zFeedParser.__init__   s    	 "'%%-1 ' & 6 6$DM/, &'nn&//	
!  /*.'/s   B$ $B76B7c                     d| _         y )NT)rV   r   s    r   _set_headersonlyzFeedParser._set_headersonly   s
     r   c                 \    	 | j                   j                  |       | j                          y r   )rP   r9   _call_parse)r   r7   s     r   feedzFeedParser.feed   s#    -r   c                 D    	 | j                          y # t        $ r Y y w xY wr   )rS   rA   r   s    r   rZ   zFeedParser._call_parse   s"    	KKM 		s    	c                 :   	 | j                   j                          | j                          | j                         }|j	                         dk(  rL|j                         s<| j                  s0t        j                         }| j                  j                  ||       |S )N	multipart)rP   r%   rZ   _pop_messageget_content_maintypeis_multipartrV   r   !MultipartInvariantViolationDefectrH   handle_defect)r   rootdefects      r   r%   zFeedParser.close   s}    J  " $$&+5((*43D3D==?FKK%%dF3r   c                    | j                   r| j                         }n| j                  | j                        }| j                  r.| j                  j	                         dk(  r|j                  d       | j                  r| j                  d   j                  |       | j                  j                  |       || _        || _	        y )NrG   zmultipart/digestzmessage/rfc822r4   )
rK   rN   rH   rT   get_content_typeset_default_typerQ   attachr   rU   )r   msgs     r   _new_messagezFeedParser._new_message   s    ""--/C--t{{-3C993359KK  !12>>NN2%%c*c"	
r   c                     | j                   j                         }| j                   r| j                   d   | _        |S d | _        |S )Nr4   )rQ   r   rT   )r   retvals     r   r_   zFeedParser._pop_message   s@    ##%>>r*DI  DIr   c              #   B  K   | j                          g }| j                  D ]  }|t        u r	t         t        j	                  |      slt
        j	                  |      sUt        j                         }| j                  j                  | j                  |       | j                  j                  |        n|j                  |        | j                  |       | j                  rug }	 | j                  j                         }|t        u r	t         ,|dk(  rn|j                  |       C| j                  j!                  t"        j%                  |             y | j                  j'                         dk(  r	 | j                  j)                  t
        j                         | j+                         D ]  }|t        u r	t          n | j-                          | j                  j/                          	 | j                  j                         }|t        u r	t         ,	 	 | j                  j                         }|t        u r	t         ,	 |dk(  r	 y | j                  j                  |       | j                  j1                         dk(  r8| j+                         D ]  }|t        u r	t          n | j-                          y | j                  j1                         dk(  r| j                  j3                         }|t        j4                         }| j                  j                  | j                  |       g }| j                  D ]$  }|t        u r	t         |j                  |       & | j                  j!                  t"        j%                  |             y t7        | j                  j9                  dd            j;                         dvr:t        j<                         }| j                  j                  | j                  |       d	|z   }t?        j@                  d
t?        jB                  |      z   dz         }d}	g }
d}d}	 | j                  j                         }|t        u r	t         ,|dk(  rn|j	                  |      }|r|jE                  d      rd}|jE                  d      }ny|	r|
ra|
d   }tF        jI                  |      }|r!|d tK        |jE                  d              |
d<   t"        j%                  |
      | j                  _&        d}	| j                  j                  |       	 | j                  j                         }|t        u r	t         ,|j	                  |      }|s| j                  j                  |       n[| j                  j)                  |j                         | j+                         D ]  }|t        u r	t          n | jN                  j1                         dk(  rv| jN                  jP                  }|dk(  rd | jN                  _(        n|tF        jI                  |      }|rtK        |jE                  d            }|d |  | jN                  _(        nl| jN                  jR                  }tU        |t6              rFtF        jI                  |      }|r/|d tK        |jE                  d              }|| jN                  _)        | j                  j/                          | j-                          | j                  | _'        n|
j                  |       |	rt        jV                         }| j                  j                  | j                  |       | j                  j!                  t"        j%                  |
             g }| j                  D ]  }|t        u st          t"        j%                  |      | j                  _(        y |s;t        jX                         }| j                  j                  | j                  |       y |rdg}ng }| j                  D ]$  }|t        u r	t         |j                  |       & |r<|d   }tZ        j	                  |      }|r |tK        |jE                  d            d  |d<   t"        j%                  |      | j                  _(        y g }| j                  D ]$  }|t        u r	t         |j                  |       & | j                  j!                  t"        j%                  |             y w)NTr	   zmessage/delivery-statusmessager^   zcontent-transfer-encoding8bit)7bitrp   binaryz--z(?P<sep>z4)(?P<end>--)?(?P<ws>[ \t]*)(?P<linesep>\r\n|\r|\n)?$Fendlinesepr4   r   ).rk   rP   r(   headerREmatchNLCREr    MissingHeaderBodySeparatorDefectrH   rc   rT   r1   r   _parse_headersrV   r.   set_payloadEMPTYSTRINGjoinrg   r   rR   r_   r   r`   get_boundaryNoBoundaryInMultipartDefectstrgetlower-InvalidMultipartContentTransferEncodingDefectrecompileescapegroup	NLCRE_eolsearchlenpreamblerU   epilogue_payload
isinstanceStartBoundaryNotFoundDefectCloseBoundaryNotFoundDefect	NLCRE_bol)r   headersr,   re   r<   rm   boundary	separator
boundaryrecapturing_preambler   rt   close_boundary_seenmolastlineeolmor   rs   payload	firstlinebolmos                        r   rR   zFeedParser._parsegen   s     KK 	!D|#"">>$' {{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< KK 'D|+** LL&	'
 		%%k&6&6u&=>DIIMM"=vFGMMO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"..$	 zz668KG#'::#6#6#r>26DJJ/%1!*!1!1(!;B!&)"((1+&66>uo

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

 3KK//1%%' "&DJ OOD)_ f ";;=))$))V<		%%k&6&6x&@A KK !D|+** ! &1%5%5h%?		" ';;=))$))V< 4 &<'&&%	& $QK	!	2"+CA,?,@"AHQK!,!1!1(!;DII KK 	D|#""LL		
 			k..u56s   ^.d1E.dc                    d}g }t        |      D ]  \  }}|d   dv rP|s<t        j                  |      }| j                  j	                  | j
                  |       L|j                  |       ^|r6 | j
                  j                  | j                  j                  |        dg }}|j                  d      r|dk(  rQt        j                  |      }|r|d t        |j                  d              }| j
                  j                  |       |t        |      dz
  k(  r| j                  j!                  |        y t        j"                  |      }| j
                  j$                  j                  |       g|j'                  d      }|dk(  r<t        j(                  d      }| j
                  j$                  j                  |       |d | }|g} |r3 | j
                  j                  | j                  j                  |        y y )Nr	   r   z 	zFrom    :zMissing header name.)	enumerater   #FirstHeaderLineIsContinuationDefectrH   rc   rT   r   set_rawheader_source_parse
startswithr   r   r   r   set_unixfromrP   r1   MisplacedEnvelopeHeaderDefectdefectsfindInvalidHeaderDefect)	r   r<   
lastheader	lastvaluelinenor,   re   r   is	            r   ry   zFeedParser._parse_headers  s   
	%e, 3	LFD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
 Av334JK		!!((0 bqJIg3	j DIIt{{>>yIJ r   r   )rC   rD   rE   r   r   rX   r[   rZ   r%   rk   r_   rR   ry   r>   r   r   r   r      s<    '" ">!
{7z:Kr   c                         e Zd Z	  fdZ xZS )r   c                 D    t         |   |j                  dd             y )Nasciisurrogateescape)superr[   decode)r   r7   	__class__s     r   r[   zBytesFeedParser.feed  s    T[[*;<=r   )rC   rD   rE   r[   __classcell__)r   s   @r   r   r     s    2> >r   )__all__r   emailr   email._policybaser   collectionsr   ior   r   rw   r   r   NLCRE_crackru   r{   NLobjectr(   r   r   r   r>   r   r   <module>r      s   
" *
+ 	  &  

=!BJJ'	BJJ()	bjj) 2::>?	xWf WtIK IKX>j >r   