Ë
    	š„jÐX  ã                   ó�  — d Z ddlmZ ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
mZ ddgZdd	l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e«      Z G d„ de«      Zy	)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                   óL   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚBufferedSubFileak  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                 ó<   — d| _         g | _        g | _        d| _        y )Nr   F)Ú_partialÚ_linesÚ	_eofstackÚ_closed©Úselfs    úX/var/www/html/GAP/venv/lib/python3.12/site-packages/future/backports/email/feedparser.pyÚ__init__zBufferedSubFile.__init__9   s   € àˆŒàˆŒàˆŒàˆ�ó    c                 ó:   — | j                   j                  |«       y ©N)r   Úappend)r   Úpreds     r   Úpush_eof_matcherz BufferedSubFile.push_eof_matcherC   s   € Ø�‰×Ñ˜dÕ#r   c                 ó6   — | j                   j                  «       S r   )r   Úpopr   s    r   Úpop_eof_matcherzBufferedSubFile.pop_eof_matcherF   s   € Ø�~‰~×!Ñ!Ó#Ð#r   c                 ój   — | j                   j                  | j                  «       d| _        d| _        y )Nr   T)r   r    r   r   r   s    r   ÚclosezBufferedSubFile.closeI   s&   € à�‰×Ñ˜4Ÿ=™=Ô)ØˆŒØˆ�r   c                 óð   — | j                   s| j                  ryt        S | j                   j                  «       }| j                  d d d…   D ]'  } ||«      sŒ| j                   j                  |«        y |S )Nr   éÿÿÿÿ)r   r   ÚNeedMoreDatar$   r   r    )r   ÚlineÚateofs      r   ÚreadlinezBufferedSubFile.readlineO   sl   € Ø�{Š{Ø�|Š|ØÜÐð �{‰{�‰Ó ˆð —^‘^¡D b DÑ)ò 	ˆEÙ�T�{à—‘×"Ñ" 4Ô(Ùð		ð
 ˆr   c                 óN   — |t         usJ ‚| j                  j                  |«       y r   )r*   r   r    ©r   r+   s     r   Ú
unreadlinezBufferedSubFile.unreadlinea   s"   € àœ<Ñ'Ð'Ð'Ø�‰×Ñ˜4Õ r   c                 ó¼  — | j                   |z   dc}| _         t        j                  |«      }|j                  «       | _         | j                   s=|r;|d   j	                  d«      r'|j                  d«      |j                  «       z   | _         g }t        t        |«      dz  «      D ]%  }|j                  ||dz     ||dz  dz      z   «       Œ' | j                  |«       y)z$Push some new data into this object.r   r)   úéþÿÿÿé   é   N)	r   ÚNLCRE_crackÚsplitr$   Úendswithr   Úlenr    Ú	pushlines)r   ÚdataÚpartsÚlinesÚis        r   ÚpushzBufferedSubFile.pushf   sÄ   € ð #Ÿm™m¨dÑ2°BÐˆˆdŒmä×!Ñ! $Ó'ˆð
 Ÿ	™	›ˆŒð �}Š}¡¨5°©9×+=Ñ+=¸dÔ+CØ!ŸI™I b›M¨%¯)©)«+Ñ5ˆDŒMð ˆÜ”s˜5“z Q‘Ó'ò 	4ˆAØ�L‰L˜˜q ™s™ e¨A¨a©C°©E¡lÑ2Õ3ð	4à�‰�uÕr   c                 ó.   — |d d d…   | j                   d d y )Nr)   r   )r   )r   r=   s     r   r:   zBufferedSubFile.pushlines}   s   € à¡ " ™+ˆ�‰�B�Q‰r   c                 ó   — | S r   © r   s    r   Ú__iter__zBufferedSubFile.__iter__�   s   € Øˆr   c                 ó<   — | j                  «       }|dk(  rt        ‚|S )Nr   )r-   ÚStopIterationr/   s     r   Ú__next__zBufferedSubFile.__next__„   s   € Ø�}‰}‹ˆØ�2Š:ÜÐØˆr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r%   r'   r-   r0   r?   r:   rC   rF   rB   r   r   r   r   1   s9   „ ñòò$ò$òòò$!ò
ò.&òór   r   c                   ó^   — e Zd ZdZej
                  fd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zy)r   zA feed-style parser of email.c                 ó”  ‡ — d|v r	|d   }|d= nt         }	 |‰ _        |‰ _        	  |‰ j                  ¬«       ˆ fd„‰ _        t        «       ‰ _        g ‰ _        t        r ‰ j                  «       j                  ‰ _        n‰ j                  «       j                  ‰ _        d ‰ _        d ‰ _        d‰ _        y # t        $ r d„ ‰ _        Y Œ„w xY w)NÚpolicy©rM   c                  ó    •— d‰ j                   iS )NrM   rN   r   s   €r   ú<lambda>z%FeedParser.__init__.<locals>.<lambda>œ   s   ø€ ¨(°D·K±KÐ)@€ r   c                  ó   — i S r   rB   rB   r   r   rP   z%FeedParser.__init__.<locals>.<lambda>Ÿ   s   € ¨€ r   F)r   Ú_factoryrM   Ú_factory_kwdsÚ	TypeErrorr   Ú_inputÚ	_msgstackr
   Ú	_parsegenrF   Ú_parseÚnextÚ_curÚ_lastÚ_headersonly)r   rR   Ú_3to2kwargsrM   s   `   r   r   zFeedParser.__init__Ž   s¼   ø€ Ø�{Ñ"¨[¸Ñ-B FÈÐT\ÑH]Üˆfð	ð !ˆŒØˆŒð	,Ù˜DŸK™KÕ(Û!@ˆDÔô &Ó'ˆŒØˆŒÝØŸ.™.Ó*×3Ñ3ˆD�KàŸ.™.Ó*×/Ñ/ˆDŒKØˆŒ	ØˆŒ
Ø!ˆÕøô ò 	,á!+ˆDÖð	,ús   ¥B3 Â3CÃCc                 ó   — d| _         y )NT)r\   r   s    r   Ú_set_headersonlyzFeedParser._set_headersonly«   s
   € Ø ˆÕr   c                 óZ   — | j                   j                  |«       | j                  «        y)zPush more data into the parser.N)rU   r?   Ú_call_parse)r   r;   s     r   ÚfeedzFeedParser.feed®   s    € à�‰×Ñ˜ÔØ×ÑÕr   c                 óD   — 	 | j                  «        y # t        $ r Y y w xY wr   )rX   rE   r   s    r   ra   zFeedParser._call_parse³   s"   € ð	Ø�K‰K�MøÜò 	Ùð	ús   ‚ “	žc                 ó<  — | j                   j                  «        | j                  «        | j                  «       }| j                  rJ ‚|j                  «       dk(  r@|j                  «       s0t        j                  «       }| j                  j                  ||«       |S )z<Parse all remaining data and return the root message object.Ú	multipart)rU   r'   ra   Ú_pop_messagerV   Úget_content_maintypeÚis_multipartr   Ú!MultipartInvariantViolationDefectrM   Úhandle_defect)r   ÚrootÚdefects      r   r'   zFeedParser.close¹   s}   € à�‰×ÑÔØ×ÑÔØ× Ñ Ó"ˆØ—>’>Ð!Ð!à×$Ñ$Ó&¨+Ò5Ø×(Ñ(Ô*Ü×=Ñ=Ó?ˆFØ�K‰K×%Ñ% d¨FÔ3Øˆr   c                 ó^  —  | j                   di | j                  «       ¤Ž}| j                  r.| j                  j                  «       dk(  r|j	                  d«       | j
                  r| j
                  d   j                  |«       | j
                  j                  |«       || _        || _        y )Nzmultipart/digestzmessage/rfc822r)   rB   )	rR   rS   rZ   Úget_content_typeÚset_default_typerV   Úattachr    r[   )r   Úmsgs     r   Ú_new_messagezFeedParser._new_messageÆ   s‡   € Øˆd�m‰mÑ3˜d×0Ñ0Ó2Ñ3ˆØ�9Š9˜Ÿ™×3Ñ3Ó5Ð9KÒKØ× Ñ Ð!1Ô2Ø�>Š>Ø�N‰N˜2Ñ×%Ñ% cÔ*Ø�‰×Ñ˜cÔ"ØˆŒ	Øˆ�
r   c                 óŒ   — | j                   j                  «       }| j                   r| j                   d   | _        |S d | _        |S )Nr)   )rV   r$   rZ   )r   Úretvals     r   rf   zFeedParser._pop_messageÐ   s@   € Ø—‘×#Ñ#Ó%ˆØ�>Š>ØŸ™ rÑ*ˆDŒIð ˆð ˆDŒIØˆr   c              #   ó8  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 | j                  j7                  dd«      j9                  «       dvr:t        j:                  «       }| j                  j                  | j                  |«       d	|z   }t=        j>                  d
t=        j@                  |«      z   dz   «      }	d}
g }d}d}	 | j                  j                  «       }|t        u r	t        –— Œ,|dk(  r�n·|	j	                  |«      }|�rŒ|jC                  d«      rd}|jC                  d«      }�n}|
r�|ra|d   }tD        jG                  |«      }|r!|d tI        |jC                  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 | jL                  j1                  «       dk(  rv| jL                  jN                  }|dk(  rd | jL                  _'        nµ|�³tD        jG                  |«      }|rœtI        |jC                  d«      «      }|d |  | jL                  _'        nl| jL                  jP                  }tS        |tT        «      rFtD        jG                  |«      }|r/|d tI        |jC                  d«      «        }|| jL                  _(        | j                  j/                  «        | j-                  «        | j                  | _&        n|
sJ ‚|j                  |«       �Œé|
r±t        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 |tI        |jC                  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-statusr   re   zcontent-transfer-encodingÚ8bit)Ú7bitrv   Úbinaryz--z(?P<sep>z4)(?P<end>--)?(?P<ws>[ \t]*)(?P<linesep>\r\n|\r|\n)?$FÚendÚlinesepr)   r   ).rr   rU   r*   ÚheaderREÚmatchÚNLCREr   Ú MissingHeaderBodySeparatorDefectrM   rj   rZ   r0   r    Ú_parse_headersr\   r-   Úset_payloadÚEMPTYSTRINGÚjoinrn   r"   rW   rf   r%   rg   Úget_boundaryÚNoBoundaryInMultipartDefectÚgetÚlowerÚ-InvalidMultipartContentTransferEncodingDefectÚreÚcompileÚescapeÚgroupÚ	NLCRE_eolÚsearchr9   Úpreambler[   ÚepilogueÚ_payloadÚ
isinstanceÚstrÚStartBoundaryNotFoundDefectÚCloseBoundaryNotFoundDefectÚ	NLCRE_bol)r   Úheadersr+   rl   r=   rt   rq   ÚboundaryÚ	separatorÚ
boundaryreÚcapturing_preamblerŽ   rz   Úclose_boundary_seenÚmoÚlastlineÚeolmor�   ry   ÚpayloadÚ	firstlineÚbolmos                         r   rW   zFeedParser._parsegenØ   så  è ø€ à×ÑÔØˆð —K‘Kò 	!ˆDØ”|Ñ#Ü"Ò"ØÜ—>‘> $Ô'ô —{‘{ 4Ô(Ü#×DÑDÓF�FØ—K‘K×-Ñ-¨d¯i©i¸Ô@Ø—K‘K×*Ñ*¨4Ô0ÙØ�N‰N˜4Õ ð	!ð  	×Ñ˜GÔ$ð ×ÒØˆEØØ—{‘{×+Ñ+Ó-�Øœ<Ñ'Ü&Ò&ØØ˜2’:ØØ—‘˜TÔ"ð ð �I‰I×!Ñ!¤+×"2Ñ"2°5Ó"9Ô:ØØ�9‰9×%Ñ%Ó'Ð+DÒDð Ø—‘×,Ñ,¬U¯[©[Ô9Ø"Ÿn™nÓ.ò �FØ¤Ñ-Ü*Ò*Ø Ùð	ð
 ×'Ñ'Ó)�ð —‘×+Ñ+Ô-ð
 ØŸ;™;×/Ñ/Ó1�DØœ|Ñ+Ü*Ò*Ø ØØØŸ;™;×/Ñ/Ó1�DØœ|Ñ+Ü*Ò*Ø ØØ˜2’:Øð ð —‘×&Ñ& tÔ,ð? ðB �9‰9×)Ñ)Ó+¨yÒ8ð Ÿ.™.Ó*ò �Øœ\Ñ)Ü&Ò&ØÙð	ð
 ×ÑÔØØ�9‰9×)Ñ)Ó+¨{Ó:Ø—y‘y×-Ñ-Ó/ˆHØÐô
  ×;Ñ;Ó=�Ø—‘×)Ñ)¨$¯)©)°VÔ<Ø�Ø ŸK™Kò '�DØœ|Ñ+Ü*Ò*Ø Ø—L‘L Õ&ð	'ð
 —	‘	×%Ñ%¤k×&6Ñ&6°uÓ&=Ô>Øà—	‘	—‘Ð9¸6ÓB×HÑHÓJØ5ñ6ä×MÑMÓO�Ø—‘×)Ñ)¨$¯)©)°VÔ<ð
 ˜x™ˆIÜŸ™ØœRŸY™Y yÓ1Ñ1ØGñHóIˆJð "&ÐØˆHØˆGØ"'ÐØØ—{‘{×+Ñ+Ó-�Øœ<Ñ'Ü&Ò&ØØ˜2’:ÙØ×%Ñ% dÓ+�Úð
 —x‘x ”Ø.2Ð+Ø"$§(¡(¨9Ó"5˜Ùá)Ù#ð (0°¡|˜HÜ$-×$4Ñ$4°XÓ$>˜EÙ$Ø/7Ð8M¼#¸e¿k¹kÈ!»nÓ:MÐ9MÐ/N ¨¡Ü1<×1AÑ1AÀ(Ó1K˜DŸI™IÔ.Ø-2Ð*ØŸ™×.Ñ.¨tÔ4Ø ð
 Ø#Ÿ{™{×3Ñ3Ó5˜Ø¤<Ñ/Ü".Ò.Ø$Ø'×-Ñ-¨dÓ3˜Ù!Ø ŸK™K×2Ñ2°4Ô8Ø!ð ð —K‘K×0Ñ0°×1AÑ1AÔBØ"&§.¡.Ó"2ò ˜Ø!¤\Ñ1Ü".Ò.Ø$Ùð	ð —z‘z×6Ñ6Ó8¸KÒGØ#'§:¡:×#6Ñ#6˜Ø# rš>Ø26˜DŸJ™JÕ/Ø%Ð1Ü!*×!1Ñ!1°(Ó!;˜BÙ!Ü&)¨"¯(©(°1«+Ó&6 Ø6>¸uÀÀ°o §
¡
Õ 3à"&§*¡*×"5Ñ"5˜Ü% g¬sÔ3Ü!*×!1Ñ!1°'Ó!:˜BÙ!Ø*1Ð2D´C¸¿¹À»Ó4DÐ3DÐ*E Ø6= §
¡
Ô 3Ø—K‘K×/Ñ/Ô1Ø×%Ñ%Ô'ð "&§¡�D•Jñ .Ð-Ð-Ø—O‘O DÔ)ñ_ ñf "Ü×;Ñ;Ó=�Ø—‘×)Ñ)¨$¯)©)°VÔ<Ø—	‘	×%Ñ%¤k×&6Ñ&6°xÓ&@ÔAØ�Ø ŸK™Kò !�DØœ|Ò+Ü*Ò*Ø ð!ô &1×%5Ñ%5°hÓ%?�—	‘	Ô"Øñ 'Ü×;Ñ;Ó=�Ø—‘×)Ñ)¨$¯)©)°VÔ<Øñ Ø˜4‘à�ØŸ™ò &�Øœ<Ñ'Ü&Ò&ØØ—‘ Õ%ð	&ñ Ø$ Q™K�	Ü!Ÿ™¨	Ó2�ÙØ"+¬C°·±¸A³Ó,?Ð,@Ð"A�H˜Q‘KÜ!,×!1Ñ!1°(Ó!;ˆD�I‰IÔØð ˆØ—K‘Kò 	ˆDØ”|Ñ#Ü"Ò"ØØ�L‰L˜Õð		ð
 	�	‰	×Ñœk×.Ñ.¨uÓ5Õ6ùs   ‚^)dÞ,E.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kD  sJ d«       ‚|d | }|g}�ŒŽ |r3 | j
                  j                  | j                  j                  |«      Ž  y y )Nr   r   z 	zFrom r5   ú:z3_parse_headers fed line with no : and no leading WS)Ú	enumerater   Ú#FirstHeaderLineIsContinuationDefectrM   rj   rZ   r    Úset_rawÚheader_source_parseÚ
startswithrŒ   r�   r9   r‹   Úset_unixfromrU   r0   ÚMisplacedEnvelopeHeaderDefectÚdefectsÚfind)	r   r=   Ú
lastheaderÚ	lastvalueÚlinenor+   rl   rœ   r>   s	            r   r   zFeedParser._parse_headersÕ  s®  € àˆ
Øˆ	Ü% eÓ,ó *	‰LˆF�Dà�A‰w˜%ÑÙ!ô $×GÑGÈÓM�FØ—K‘K×-Ñ-¨d¯i©i¸Ô@ØØ× Ñ  Ô&ØÙØ!�—	‘	×!Ñ! 4§;¡;×#BÑ#BÀ9Ó#MÑNØ(*¨B˜I�
à�‰˜wÔ'Ø˜Q’;ä"×)Ñ)¨$Ó/�BÙØ#Ð$6¤c¨"¯(©(°1«+Ó&6Ð%6Ð7˜Ø—I‘I×*Ñ*¨4Ô0ØØœs 5›z¨A™~Ò-ð —K‘K×*Ñ*¨4Ô0Ùô $×AÑAÀ$ÓG�FØ—I‘I×%Ñ%×,Ñ,¨VÔ4Ùð —	‘	˜#“ˆAØ�Q’3ÐMÐMÓM�3Ø˜b˜q˜ˆJØ˜ŠIðU*	ñX ØˆD�I‰I×Ñ˜tŸ{™{×>Ñ>¸yÓIÒJð r   N)rG   rH   rI   rJ   r   ÚMessager   r_   rb   ra   r'   rr   rf   rW   r   rB   r   r   r   r   ‹   s<   „ Ù'à '§¡ó "ò:!òò
òòòò{7óz1Kr   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )r   z(Like FeedParser, but feed accepts bytes.c                 óX   •— t        «       j                  |j                  dd«      «       y )NÚasciiÚsurrogateescape)r   rb   Údecode)r   r;   Ú	__class__s     €r   rb   zBytesFeedParser.feed  s   ø€ Ü‹�‰�T—[‘[ Ð*;Ó<Õ=r   )rG   rH   rI   rJ   rb   Ú__classcell__)r¶   s   @r   r   r   	  s   ø„ Ù2÷>ð >r   )rJ   Ú
__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Œ   r6   r{   r�   ÚNLr*   r   r   r   rB   r   r   ú<module>r¿      sÆ   ðñ
õ  (Ý Ý &ß 0Ñ 0ß 1àÐ*Ð
+€ã 	å )Ý *Ý 7àˆ�
‰
�<Ó €ØˆB�J‰J�~Ó&€	ØˆB�J‰JÐ'Ó(€	Øˆb�j‰j˜Ó(€ð ˆ2�:‰:ÐAÓB€Ø€Ø	€á‹x€ôW�fô Wôt{K�ô {Kô|>�jõ >r   