Ë
    ò¦1h˜  ã            	       óÀ  — U d Z dZddlZddlmZ ddlmZ ddlZddlmZm	Z	 ddl
mZ ddlmZmZmZmZmZmZ erdd	lmZ ddlZddlZddlZddlZddlZddlZd!d„Zd"d
ddededdfd„Z G d„ de«      Zd
eddfd„Z dZ!ee"d<   dZ#ee"d<   d#de$defd„Z%d$de$defd„Z&d%de$defd„Z'd&de$ddfd„Z(d'de$deddfd„Z)e*d k(  r! eejV                  jY                  «       «       yy)(z=Diagnostic functions, mainly for use when doing tech support.ÚMITé    N)ÚBytesIO)Ú
HTMLParser)ÚBeautifulSoupÚ__version__)Úbuilder_registry)ÚAnyÚIOÚListÚOptionalÚTupleÚTYPE_CHECKING)Ú_IncomingMarkupÚdatar   Úreturnc           	      óš  — t        dt        z  «       t        dt        j                  z  «       g d¢}|D ]F  }t        j
                  D ]  }||j                  v sŒ Œ' |j                  |«       t        d|z  «       ŒH d|v rM|j                  d«       	 ddl	m
} t        d	d
j                  t        t        |j                  «      «      z  «       d|v r	 ddl}t        d|j                  z  «       t#        | d«      r| j%                  «       } |D ]V  }t        d|z  «       d}	 t'        | |¬«      }d}|r't        d|z  «       t        j/                  «       «       t        d«       ŒX y# t        $ r t        d«       Y Œ¯w xY w# t        $ r t        d«       Y Œ¨w xY w# t(        $ r% t        d|z  «       t+        j,                  «        Y Œ˜w xY w)z­Diagnostic suite for isolating common problems.

    :param data: Some markup that needs to be explained.
    :return: None; diagnostics are printed to standard output.
    z'Diagnostic running on Beautiful Soup %szPython version %s)úhtml.parserÚhtml5libÚlxmlz;I noticed that %s is not installed. Installing it may help.r   zlxml-xmlr   ©ÚetreezFound lxml version %sú.z.lxml is not installed or couldn't be imported.r   NzFound html5lib version %sz2html5lib is not installed or couldn't be imported.Úreadz#Trying to parse your markup with %sF)ÚfeaturesTú%s could not parse the markup.z#Here's what %s did with the markup:zP--------------------------------------------------------------------------------)Úprintr   ÚsysÚversionr   Úbuildersr   ÚremoveÚappendr   r   ÚjoinÚmapÚstrÚLXML_VERSIONÚImportErrorr   Úhasattrr   r   Ú	ExceptionÚ	tracebackÚ	print_excÚprettify)	r   Úbasic_parsersÚnameÚbuilderr   r   ÚparserÚsuccessÚsoups	            úJ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/bs4/diagnose.pyÚdiagnoser3       sÄ  € ô 
Ð4´{ÑBÔDÜ	Ð¤§¡Ñ,Ô.â7€MØò ˆÜ'×0Ñ0ò 	ˆGØ�w×'Ñ'Ò'Ùð	ð × Ñ  Ô&ÜØNÐQUÑUõðð �ÑØ×Ñ˜ZÔ(ð	DÝ"äÐ*¨S¯X©X´c¼#¸u×?QÑ?QÓ6RÓ-SÑSÔUð �]Ñ"ð	HÛäÐ.°×1EÑ1EÑEÔGô ˆt�VÔØ�y‰y‹{ˆàò ˆÜÐ4°vÑ=Ô?Øˆð	"Ü  °Ô7ˆDØˆGñ ÜÐ8¸6ÑAÔCÜ�4—=‘=“?Ô$äˆxÕñøô ò 	DÜÐBÖCð	Dûô ò 	HÜÐFÖGð	Hûô ò 	"ÜÐ3°fÑ<Ô>Ü×ÑÖ!ð	"ús6   Â;E( ÃF Ä"FÅ(E?Å>E?ÆFÆFÆ+G
Ç	G
ÚhtmlÚkwargsc                 ó8  — ddl m} |j                  dd«      }t        | t        «      r| j                  d«      } t        | t        «      st        | «      } |j                  f||dœ|¤ŽD ]-  \  }}t        |›d|j                  d›d|j                  ›�«       Œ/ y	)
a´  Print out the lxml events that occur during parsing.

    This lets you see how lxml parses a document when no Beautiful
    Soup code is running. You can use this to determine whether
    an lxml-specific problem is in Beautiful Soup's lxml tree builders
    or in lxml itself.

    :param data: Some markup.
    :param html: If True, markup will be parsed with lxml's HTML parser.
       if False, lxml's XML parser will be used.
    r   r   ÚrecoverTÚutf8)r4   r7   z, z>4N)r   r   ÚpopÚ
isinstancer$   Úencoder
   r   Ú	iterparser   ÚtagÚtext)r   r4   r5   r   r7   ÚreaderÚeventÚelements           r2   Ú
lxml_tracerB   X   s†   € õ à�j‰j˜ DÓ)€GÜ�$œÔØ�{‰{˜6Ó"ˆÜ�dœBÔÜ˜“ˆØ)˜%Ÿ/™/¨&ÐW°tÀWÑWÐPVÑWò D‰ˆˆwÜ¢ w§{¤{°G·L²LÐAÕCñDó    c            	       óØ   — e Zd ZdZdeddfd„Z	 ddedeeeee   f      de	ddfd	„Z
dded
e	ddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zy)ÚAnnouncingParserzèSubclass of HTMLParser that announces parse events, without doing
    anything else.

    You can use this to get a picture of how html.parser sees a given
    document. The easiest way to do this is to call `htmlparser_trace`.
    Úsr   Nc                 ó   — t        |«       y )N)r   )ÚselfrF   s     r2   Ú_pzAnnouncingParser._pw   s	   € Üˆa�rC   r-   ÚattrsÚhandle_empty_elementc                 ó2   — | j                  |› d|› d�«       y )Nú z START©rI   )rH   r-   rJ   rK   s       r2   Úhandle_starttagz AnnouncingParser.handle_starttagz   s   € ð 	�‰�4�&˜˜%˜ Ð'Õ(rC   Úcheck_already_closedc                 ó,   — | j                  d|z  «       y )Nz%s ENDrN   )rH   r-   rP   s      r2   Úhandle_endtagzAnnouncingParser.handle_endtag‚   s   € Ø�‰�˜4‘Õ rC   r   c                 ó,   — | j                  d|z  «       y )Nz%s DATArN   ©rH   r   s     r2   Úhandle_datazAnnouncingParser.handle_data…   ó   € Ø�‰�	˜DÑ Õ!rC   c                 ó,   — | j                  d|z  «       y )Nz
%s CHARREFrN   ©rH   r-   s     r2   Úhandle_charrefzAnnouncingParser.handle_charrefˆ   ó   € Ø�‰�˜tÑ#Õ$rC   c                 ó,   — | j                  d|z  «       y )Nz%s ENTITYREFrN   rX   s     r2   Úhandle_entityrefz!AnnouncingParser.handle_entityref‹   s   € Ø�‰� Ñ%Õ&rC   c                 ó,   — | j                  d|z  «       y )Nz
%s COMMENTrN   rT   s     r2   Úhandle_commentzAnnouncingParser.handle_commentŽ   rZ   rC   c                 ó,   — | j                  d|z  «       y )Nz%s DECLrN   rT   s     r2   Úhandle_declzAnnouncingParser.handle_decl‘   rV   rC   c                 ó,   — | j                  d|z  «       y )Nz%s UNKNOWN-DECLrN   rT   s     r2   Úunknown_declzAnnouncingParser.unknown_decl”   s   € Ø�‰Ð! DÑ(Õ)rC   c                 ó,   — | j                  d|z  «       y )Nz%s PIrN   rT   s     r2   Ú	handle_pizAnnouncingParser.handle_pi—   s   € Ø�‰�˜$‘ÕrC   ©T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   rI   r   r   r   ÚboolrO   rR   rU   rY   r\   r^   r`   rb   rd   © rC   r2   rE   rE   o   sü   „ ñð�Cð ˜Dó ð &*ñ	)àð)ð �E˜#˜x¨™}Ð,Ñ-Ñ.ð)ð #ð	)ð
 
ó)ñ! #ð !¸Tð !ÈTó !ð" ð "¨ó "ð% 3ð %¨4ó %ð' Sð '¨Tó 'ð% 3ð %¨4ó %ð" ð "¨ó "ð* ð *¨ó *ð ˜cð   dô  rC   rE   c                 ó:   — t        «       }|j                  | «       y)zÂPrint out the HTMLParser events that occur during parsing.

    This lets you see how HTMLParser parses a document when no
    Beautiful Soup code is running.

    :param data: Some markup.
    N)rE   Úfeed)r   r/   s     r2   Úhtmlparser_tracern   ›   s   € ô Ó€FØ
‡K�K�ÕrC   ÚaeiouÚ_vowelsÚbcdfghjklmnpqrstvwxyzÚ_consonantsÚlengthc                 ó„   — d}t        | «      D ]/  }|dz  dk(  rt        }nt        }|t        j                  |«      z  }Œ1 |S )z<Generate a random word-like string.

    :meta private:
    Ú é   r   )Úrangerr   rp   ÚrandomÚchoice)rs   rF   ÚiÚts       r2   Úrwordr|   «   sK   € ð
 	€AÜ�6‹]ò ˆØˆq‰5�AŠ:Ü‰AäˆAØ	ŒV�]‰]˜1ÓÑ‰ðð €HrC   c                 óD   — dj                  d„ t        | «      D «       «      S )z@Generate a random sentence-like string.

    :meta private:
    rM   c              3   óZ   K  — | ]#  }t        t        j                  d d«      «      –— Œ% y­w)é   é	   N)r|   rx   Úrandint)Ú.0rz   s     r2   ú	<genexpr>zrsentence.<locals>.<genexpr>¿   s    è ø€ ÒG°A”Eœ&Ÿ.™.¨¨AÓ.×/ÑGùs   ‚)+)r"   rw   )rs   s    r2   Ú	rsentencer„   º   s   € ð
 �8‰8ÑG¼¸v»ÔGÓGÐGrC   Únum_elementsc           	      ó¬  — g d¢}g }t        | «      D ]ª  }t        j                  dd«      }|dk(  r*t        j                  |«      }|j	                  d|z  «       ŒH|dk(  r/|j	                  t        t        j                  dd«      «      «       Œ||dk(  sŒ‚t        j                  |«      }|j	                  d|z  «       Œ¬ d	d
j                  |«      z   dz   S )zDRandomly generate an invalid HTML document.

    :meta private:
    )ÚpÚdivÚspanrz   ÚbÚscriptÚtabler   é   z<%s>é   r   rv   z</%s>z<html>ú
z</html>)rw   rx   r�   ry   r!   r„   r"   )r…   Ú	tag_namesÚelementsrz   ry   Útag_names         r2   Úrdocr“   Â   s½   € ò
 B€IØ€HÜ�<Ó ò 0ˆÜ—‘  1Ó%ˆØ�QŠ;ä—}‘} YÓ/ˆHØ�O‰O˜F XÑ-Õ.Ø�qŠ[Ø�O‰OœI¤f§n¡n°Q¸Ó&:Ó;Õ<Ø�q‹[ä—}‘} YÓ/ˆHØ�O‰O˜G hÑ.Õ/ð0ð �d—i‘i Ó)Ñ)¨IÑ5Ð5rC   c                 óâ  — t        dt        z  «       t        | «      }t        dt        |«      z  «       dddgddfD ]Q  }d}	 t	        j                  «       }t        ||«       t	        j                  «       }d}|sŒ?t        d
|z
  fz  «       ŒS ddl	m
} t	        j                  «       }|j                  |«       t	        j                  «       }t        d||z
  z  «       ddl}|j                  «       }t	        j                  «       }|j                  |«       t	        j                  «       }t        d||z
  z  «       y# t        $ r% t        d	|z  «       t        j                  «        Y Œôw xY w)z.Very basic head-to-head performance benchmark.z1Comparative parser benchmark on Beautiful Soup %sz3Generated a large invalid HTML document (%d bytes).r   r4   r   r   FTr   z"BS4+%s parsed the markup in %.2fs.r   r   z$Raw lxml parsed the markup in %.2fs.Nz(Raw html5lib parsed the markup in %.2fs.)r   r   r“   ÚlenÚtimer   r(   r)   r*   r   r   ÚHTMLr   r   Úparse)	r…   r   Úparser_namer0   ÚarŠ   r   r   r/   s	            r2   Úbenchmark_parsersr›   Ø   s?  € ä	Ð>ÄÑLÔNÜ�Ó€DÜ	Ð@Ä3ÀtÃ9ÑLÔNà ¨Ð 0°*¸mÐLò QˆØˆð	"Ü—	‘	“ˆAÜ˜$ Ô,Ü—	‘	“ˆAØˆGò ÜÐ7¸;ÈÈAÉÐ:NÑNÕPðQõ ä�	‰	‹€AØ	‡J�JˆtÔÜ�	‰	‹€AÜ	Ð1°Q¸±UÑ;Ô=ãà× Ñ Ó"€FÜ�	‰	‹€AØ
‡L�L�ÔÜ�	‰	‹€AÜ	Ð5¸¸Q¹Ñ?ÕAøô' ò 	"ÜÐ3°kÑAÔCÜ×ÑÖ!ð	"ús   Á6E Å +E.Å-E.r/   c                 ó  — t        j                  «       }|j                  }t        | «      }t	        t
        ||¬«      }t        j                  d|||«       t        j                  |«      }|j                  d«       |j                  dd«       y)z7Use Python's profiler on a randomly generated document.)Úbs4r   r/   zbs4.BeautifulSoup(data, parser)Ú
cumulativez_html5lib|bs4é2   N)ÚtempfileÚNamedTemporaryFiler-   r“   Údictr�   ÚcProfileÚrunctxÚpstatsÚStatsÚ
sort_statsÚprint_stats)r…   r/   Ú
filehandleÚfilenamer   ÚvarsÚstatss          r2   Úprofiler­   û   sp   € ä×,Ñ,Ó.€JØ�‰€Hä�Ó€DÜ”C˜d¨6Ô2€DÜ‡O�OÐ5°t¸TÀ8ÔLä�L‰L˜Ó"€Eà	×Ñ�\Ô"Ø	×Ñ�o rÕ*rC   Ú__main__)r   r   r   Nre   )é   )r   )iè  )é † )r°   r   )-ri   Ú__license__r£   Úior   Úhtml.parserr   r�   r   r   Úbs4.builderr   Útypingr	   r
   r   r   r   r   Úbs4._typingr   r¥   rx   r    r–   r)   r   r3   rj   rB   rE   r$   rn   rp   Ú__annotations__rr   Úintr|   r„   r“   r›   r­   rf   Ústdinr   rk   rC   r2   ú<module>rº      s7  ðÚ Cð €ã Ý Ý "Û 
ß *Ý (÷÷ ñ Ý+ã Û Û Û Û Û 
ó5ñpDÐ&ð D¨dð DÀSð DÈTó Dô.) �zô ) ðX	˜3ð 	 4ó 	ð €ˆÓ Ø*€ˆSÓ *ñ�#ð ˜có ñH�cð H #ó Hñ6�sð 6 có 6ñ, B Cð  B°Tó  BñF+˜#ð +°ð +Àó +ð  ˆzÒÙˆS�Y‰Y�^‰^ÓÕð rC   