
    ſig                     F   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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lZd Zdd
Z G d de          Zd ZdZdZddZddZddZddZd dZedk    r$ eej                                                    dS dS )!z=Diagnostic functions, mainly for use when doing tech support.MIT    N)BytesIO)
HTMLParser)BeautifulSoup__version__)builder_registryc           	      :   t          dt          z             t          dt          j        z             g d}|D ]C}t          j        D ]}||j        v r n(|                    |           t          d|z             Dd|v r|                    d           	 ddl	m
} t          d	d
                    t          t          |j                            z             n&# t          $ r}t          d           Y d}~nd}~ww xY wd|v rC	 ddl}t          d|j        z             n&# t          $ r}t          d           Y d}~nd}~ww xY wt#          | d          r|                                 } |D ]}t          d|z             d}	 t'          | |          }	d}n<# t(          $ r/}t          d|z             t+          j                     Y d}~nd}~ww xY w|r3t          d|z             t          |	                                           t          d           dS )zDiagnostic suite for isolating common problems.

    :param data: A string containing 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.Nr   z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)
databasic_parsersnamebuilderr   er   parsersuccesssoups
             H/var/www/html/afkarena/venv/lib/python3.11/site-packages/bs4/diagnose.pydiagnoser,      s    
4{BDDD	,...777M  '0 	 	Gw''' (   &&&M   Z(((	B""""""*SXXc#e>P6Q6Q-R-RRTTTT 	B 	B 	B@B B B B B B B B	B
 ]""	FOOO.1EEGGGG 	F 	F 	FDF F F F F F F F	F tV yy{{  4v=???	" 777DGG 	" 	" 	"3f<>>>!!!!!!!!	"  	%86ACCC4==??$$$x sI   AC 
C?&C::C?D# #
E-EEF
G$%GGTc                 "   ddl m} |                    dd          }t          | t                    r|                     d          } t          |           } |j        |f||d|D ]'\  }}t          |d|j	        dd|j
                   (d	S )
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)htmlr.   z, z>4N)r   r   pop
isinstancer   encoder   	iterparser   tagtext)r#   r0   kwargsr   r.   readereventelements           r+   
lxml_tracer;   N   s     jjD))G$ #{{6""T]]F)%/7 .4  D Dw 	w{{{{GLLACCCCD D    c                   N    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dS )AnnouncingParserzSubclass 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`.
    c                 $    t          |           d S )N)r   )selfss     r+   _pzAnnouncingParser._pl   s    ar<   c                 6    |                      d|z             d S )Nz%s STARTrB   )r@   r%   attrss      r+   handle_starttagz AnnouncingParser.handle_starttago   s    
T!"""""r<   c                 6    |                      d|z             d S )Nz%s ENDrD   r@   r%   s     r+   handle_endtagzAnnouncingParser.handle_endtagr   s    4     r<   c                 6    |                      d|z             d S )Nz%s DATArD   r@   r#   s     r+   handle_datazAnnouncingParser.handle_datau       	D !!!!!r<   c                 6    |                      d|z             d S )Nz
%s CHARREFrD   rH   s     r+   handle_charrefzAnnouncingParser.handle_charrefx       t#$$$$$r<   c                 6    |                      d|z             d S )Nz%s ENTITYREFrD   rH   s     r+   handle_entityrefz!AnnouncingParser.handle_entityref{   s    %&&&&&r<   c                 6    |                      d|z             d S )Nz
%s COMMENTrD   rK   s     r+   handle_commentzAnnouncingParser.handle_comment~   rP   r<   c                 6    |                      d|z             d S )Nz%s DECLrD   rK   s     r+   handle_declzAnnouncingParser.handle_decl   rM   r<   c                 6    |                      d|z             d S )Nz%s UNKNOWN-DECLrD   rK   s     r+   unknown_declzAnnouncingParser.unknown_decl   s     !D()))))r<   c                 6    |                      d|z             d S )Nz%s PIrD   rK   s     r+   	handle_pizAnnouncingParser.handle_pi   s    $r<   N)__name__
__module____qualname____doc__rB   rF   rI   rL   rO   rR   rT   rV   rX   rZ    r<   r+   r>   r>   d   s           # # #! ! !" " "% % %' ' '% % %" " "* * *         r<   r>   c                 L    t                      }|                    |            dS )zPrint 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)r>   feed)r#   r(   s     r+   htmlparser_tracerb      s'     F
KKr<   aeioubcdfghjklmnpqrstvwxyz   c                     d}t          |           D ]1}|dz  dk    rt          }nt          }|t          j        |          z  }2|S )z#Generate a random word-like string.    r   )range_consonants_vowelsrandomchoice)lengthrA   its       r+   rwordrq      sP    
A6]]  q5A::AAA	V]1Hr<      c                 Z    d                     d t          |           D                       S )z'Generate a random sentence-like string. c              3   Z   K   | ]&}t          t          j        d d                    V  'dS )rr   	   N)rq   rl   randint).0ro   s     r+   	<genexpr>zrsentence.<locals>.<genexpr>   s6      FF1E&.1--..FFFFFFr<   )r   ri   )rn   s    r+   	rsentencerz      s)    88FFfFFFFFFr<     c           	         g d}g }t          |           D ]}t          j        dd          }|dk    r-t          j        |          }|                    d|z             J|dk    r6|                    t          t          j        dd                               |dk    r,t          j        |          }|                    d|z             d	d
                    |          z   dz   S )z+Randomly generate an invalid HTML document.)pdivspanro   bscripttabler      z<%s>   rr   rh   z</%s>z<html>
z</html>)ri   rl   rw   rm   r   rz   r   )num_elements	tag_nameselementsro   rm   tag_names         r+   rdocr      s    AAAIH<   0 0!$$Q;;}Y//HOOFX-....q[[OOIfnQq&9&9::;;;;q[[}Y//HOOGh.///dii)))I55r<   順 c                 D   t          dt          z             t          |           }t          dt          |          z             dddgddfD ]}d}	 t	          j                    }t          ||          }t	          j                    }d}n<# t          $ r/}t          d	|z             t          j                     Y d
}~nd
}~ww xY w|rt          d|||z
  fz             ddl	m
} t	          j                    }|                    |           t	          j                    }t          d||z
  z             dd
l}	|	                                }t	          j                    }|                    |           t	          j                    }t          d||z
  z             d
S )z.Very basic head-to-head performance benchmark.z1Comparative parser benchmark on Beautiful Soup %sz3Generated a large invalid HTML document (%d bytes).r   r0   r   r
   FTr   Nz"BS4+%s parsed the markup in %.2fs.r   r   z$Raw lxml parsed the markup in %.2fs.z(Raw html5lib parsed the markup in %.2fs.)r   r   r   lentimer   r   r    r!   r   r   HTMLr   r   parse)
r   r#   r(   r)   ar*   r   r'   r   r   s
             r+   benchmark_parsersr      s   	>LNNND	@3t99LNNNFF+ZG J J	"	A v..D	AGG 	" 	" 	"3f<>>>!!!!!!!!	"  	J761Q3-GIII	A	JJt	A	1QqS9;;;OOO  ""F	A
LL	A	51=?????s   8B
C%C  Cr   c                 2   t          j                    }|j        }t          |           }t	          t
          ||          }t          j        d|||           t          j	        |          }|
                    d           |                    dd           dS )z7Use Python's profiler on a randomly generated document.)bs4r#   r(   zbs4.BeautifulSoup(data, parser)
cumulativez_html5lib|bs42   N)tempfileNamedTemporaryFiler%   r   dictr   cProfilerunctxpstatsStats
sort_statsprint_stats)r   r(   
filehandlefilenamer#   varsstatss          r+   profiler      s    ,..JHDCd6222DO5dHMMML""E	\"""	or*****r<   __main__)T)re   )rr   )r{   )r   )r   r   )!r^   __license__r   ior   html.parserr   r   r   r   bs4.builderr   osr   rl   r   r   r    r   r,   r;   r>   rb   rk   rj   rq   rz   r   r   r   r[   stdinr   r_   r<   r+   <module>r      s   C C         " " " " " " 



 * * * * * * * * ( ( ( ( ( ( 				         



 6 6 6pD D D D,$  $  $  $  $ z $  $  $ L	 	 	 %	 	 	 	G G G G6 6 6 6$@ @ @ @@+ + + + zHSY^^ r<   