
    Mh1                        U d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZ ddlZddlmZ erddlmZ ddlmZ dd	lmZmZ d
ed<   	 ddlZn# e$ r dZ ej        d           Y nw xY w G d de          ZdS )a,  Integration code for CSS selectors using `Soup Sieve <https://facelessuser.github.io/soupsieve/>`_ (pypi: ``soupsieve``).

Acquire a `CSS` object through the `element.Tag.css` attribute of
the starting point of your CSS selector, or (if you want to run a
selector against the entire document) of the `BeautifulSoup` object
itself.

The main advantage of doing this instead of using ``soupsieve``
functions is that you don't need to keep passing the `element.Tag` to be
selected against, since the `CSS` object is permanently scoped to that
`element.Tag`.

    )annotations)
ModuleType)AnycastIterableIteratorOptionalTYPE_CHECKINGN)_NamespaceMapping)	SoupSieve)element)	ResultSetTagOptional[ModuleType]	soupsievezEThe soupsieve package is not installed. CSS selectors cannot be used.c                      e Zd ZdZd(d)dZd*dZd+dZd,dZ	 	 d-d.dZ	 	 d-d/dZ		 	 	 d0d1d Z
	 	 	 d0d2d"Z	 	 d-d3d$Z	 	 d-d4d&Z	 	 d-d5d'ZdS )6CSSa  A proxy object against the ``soupsieve`` library, to simplify its
    CSS selector API.

    You don't need to instantiate this class yourself; instead, use
    `element.Tag.css`.

    :param tag: All CSS selectors run by this object will use this as
        their starting point.

    :param api: An optional drop-in replacement for the ``soupsieve`` module,
        intended for use in unit tests.
    Ntagelement.Tagapir   c                V    |t           }|t          d          || _        || _        d S )NzLCannot execute CSS selectors because the soupsieve package is not installed.)r   NotImplementedErrorr   r   )selfr   r   s      G/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/bs4/css.py__init__zCSS.__init__:   s:    ;C;%^       identstrreturnc                    t           t          d          t          t          | j                            |                    S )zEscape a CSS identifier.

        This is a simple wrapper around `soupsieve.escape() <https://facelessuser.github.io/soupsieve/api/#soupsieveescape>`_. See the
        documentation for that function for more information.
        NzMCannot escape CSS identifiers because the soupsieve package is not installed.)r   r   r   r   r   escape)r   r   s     r   r!   z
CSS.escapeD   s?     %_   C//000r   nsOptional[_NamespaceMapping]selectc                V    t          || j        j                  s|| j        j        }|S )z%Normalize a dictionary of namespaces.)
isinstancer   r   r   _namespaces)r   r"   r$   s      r   _nszCSS._nsP   s0     &$("455 	&"* %B	r   resultsIterable[Tag]ResultSet[Tag]c                &    ddl m}  |d|          S )a?  Normalize a list of results to a py:class:`ResultSet`.

        A py:class:`ResultSet` is more consistent with the rest of
        Beautiful Soup's API, and :py:meth:`ResultSet.__getattr__` has
        a helpful error message if you try to treat a list of results
        as a single result (a common mistake).
        r   )r   N)bs4r   )r   r)   r   s      r   _rszCSS._rs[   s(     	"!!!!!yw'''r   r   
namespacesflagsintkwargsr   r   c                T     | j         j        ||                     ||          |fi |S )a  Pre-compile a selector and return the compiled object.

        :param selector: A CSS selector.

        :param namespaces: A dictionary mapping namespace prefixes
           used in the CSS selector to namespace URIs. By default,
           Beautiful Soup will use the prefixes it encountered while
           parsing the document.

        :param flags: Flags to be passed into Soup Sieve's
            `soupsieve.compile() <https://facelessuser.github.io/soupsieve/api/#soupsievecompile>`_ method.

        :param kwargs: Keyword arguments to be passed into Soup Sieve's
           `soupsieve.compile() <https://facelessuser.github.io/soupsieve/api/#soupsievecompile>`_ method.

        :return: A precompiled selector object.
        :rtype: soupsieve.SoupSieve
        )r   compiler(   r   r$   r/   r0   r2   s        r   r4   zCSS.compileh   s3    2  txV(D(DeVVvVVVr   element.Tag | Nonec                `     | j         j        || j        |                     ||          |fi |S )a  Perform a CSS selection operation on the current Tag and return the
        first result, if any.

        This uses the Soup Sieve library. For more information, see
        that library's documentation for the `soupsieve.select_one() <https://facelessuser.github.io/soupsieve/api/#soupsieveselect_one>`_ method.

        :param selector: A CSS selector.

        :param namespaces: A dictionary mapping namespace prefixes
           used in the CSS selector to namespace URIs. By default,
           Beautiful Soup will use the prefixes it encountered while
           parsing the document.

        :param flags: Flags to be passed into Soup Sieve's
            `soupsieve.select_one() <https://facelessuser.github.io/soupsieve/api/#soupsieveselect_one>`_ method.

        :param kwargs: Keyword arguments to be passed into Soup Sieve's
           `soupsieve.select_one() <https://facelessuser.github.io/soupsieve/api/#soupsieveselect_one>`_ method.
        )r   
select_oner   r(   r5   s        r   r8   zCSS.select_one   sC    4 #tx"DHdhhz6::E
 
EK
 
 	
r   limitResultSet[element.Tag]c           
         |d}|                       | j        j        || j        |                     ||          ||fi |          S )a  Perform a CSS selection operation on the current `element.Tag`.

        This uses the Soup Sieve library. For more information, see
        that library's documentation for the `soupsieve.select() <https://facelessuser.github.io/soupsieve/api/#soupsieveselect>`_ method.

        :param selector: A CSS selector.

        :param namespaces: A dictionary mapping namespace prefixes
            used in the CSS selector to namespace URIs. By default,
            Beautiful Soup will pass in the prefixes it encountered while
            parsing the document.

        :param limit: After finding this number of results, stop looking.

        :param flags: Flags to be passed into Soup Sieve's
            `soupsieve.select() <https://facelessuser.github.io/soupsieve/api/#soupsieveselect>`_ method.

        :param kwargs: Keyword arguments to be passed into Soup Sieve's
           `soupsieve.select() <https://facelessuser.github.io/soupsieve/api/#soupsieveselect>`_ method.
        Nr   )r.   r   r$   r   r(   r   r$   r/   r9   r0   r2   s         r   r$   z
CSS.select   s_    8 =ExxDHO$((:v">">u PV 
 
 	
r   Iterator[element.Tag]c                b     | j         j        || j        |                     ||          ||fi |S )aU  Perform a CSS selection operation on the current `element.Tag`.

        This uses the Soup Sieve library. For more information, see
        that library's documentation for the `soupsieve.iselect()
        <https://facelessuser.github.io/soupsieve/api/#soupsieveiselect>`_
        method. It is the same as select(), but it returns a generator
        instead of a list.

        :param selector: A string containing a CSS selector.

        :param namespaces: A dictionary mapping namespace prefixes
            used in the CSS selector to namespace URIs. By default,
            Beautiful Soup will pass in the prefixes it encountered while
            parsing the document.

        :param limit: After finding this number of results, stop looking.

        :param flags: Flags to be passed into Soup Sieve's
            `soupsieve.iselect() <https://facelessuser.github.io/soupsieve/api/#soupsieveiselect>`_ method.

        :param kwargs: Keyword arguments to be passed into Soup Sieve's
           `soupsieve.iselect() <https://facelessuser.github.io/soupsieve/api/#soupsieveiselect>`_ method.
        )r   iselectr   r(   r<   s         r   r?   zCSS.iselect   sE    >  txDHdhhz6::E5
 
LR
 
 	
r   Optional[element.Tag]c                `     | j         j        || j        |                     ||          |fi |S )a  Find the `element.Tag` closest to this one that matches the given selector.

        This uses the Soup Sieve library. For more information, see
        that library's documentation for the `soupsieve.closest()
        <https://facelessuser.github.io/soupsieve/api/#soupsieveclosest>`_
        method.

        :param selector: A string containing a CSS selector.

        :param namespaces: A dictionary mapping namespace prefixes
            used in the CSS selector to namespace URIs. By default,
            Beautiful Soup will pass in the prefixes it encountered while
            parsing the document.

        :param flags: Flags to be passed into Soup Sieve's
            `soupsieve.closest() <https://facelessuser.github.io/soupsieve/api/#soupsieveclosest>`_ method.

        :param kwargs: Keyword arguments to be passed into Soup Sieve's
           `soupsieve.closest() <https://facelessuser.github.io/soupsieve/api/#soupsieveclosest>`_ method.

        )r   closestr   r(   r5   s        r   rB   zCSS.closest   sC    8  txDHdhhz6::E
 
EK
 
 	
r   boolc                    t          t           | j        j        || j        |                     ||          |fi |          S )a  Check whether or not this `element.Tag` matches the given CSS selector.

        This uses the Soup Sieve library. For more information, see
        that library's documentation for the `soupsieve.match()
        <https://facelessuser.github.io/soupsieve/api/#soupsievematch>`_
        method.

        :param: a CSS selector.

        :param namespaces: A dictionary mapping namespace prefixes
            used in the CSS selector to namespace URIs. By default,
            Beautiful Soup will pass in the prefixes it encountered while
            parsing the document.

        :param flags: Flags to be passed into Soup Sieve's
            `soupsieve.match()
            <https://facelessuser.github.io/soupsieve/api/#soupsievematch>`_
            method.

        :param kwargs: Keyword arguments to be passed into SoupSieve's
            `soupsieve.match()
            <https://facelessuser.github.io/soupsieve/api/#soupsievematch>`_
            method.
        )r   rC   r   matchr   r(   r5   s        r   rE   z	CSS.match	  sR    > DHN$((:v">"> IO 
 
 	
r   c           
         |                       | j        j        || j        |                     ||          |fi |          S )aN  Filter this `element.Tag`'s direct children based on the given CSS selector.

        This uses the Soup Sieve library. It works the same way as
        passing a `element.Tag` into that library's `soupsieve.filter()
        <https://facelessuser.github.io/soupsieve/api/#soupsievefilter>`_
        method. For more information, see the documentation for
        `soupsieve.filter()
        <https://facelessuser.github.io/soupsieve/api/#soupsievefilter>`_.

        :param namespaces: A dictionary mapping namespace prefixes
            used in the CSS selector to namespace URIs. By default,
            Beautiful Soup will pass in the prefixes it encountered while
            parsing the document.

        :param flags: Flags to be passed into Soup Sieve's
            `soupsieve.filter()
            <https://facelessuser.github.io/soupsieve/api/#soupsievefilter>`_
            method.

        :param kwargs: Keyword arguments to be passed into SoupSieve's
            `soupsieve.filter()
            <https://facelessuser.github.io/soupsieve/api/#soupsievefilter>`_
            method.
        )r.   r   filterr   r(   r5   s        r   rG   z
CSS.filter/  sS    > xxDHO$((:v">"> IO 
 
 	
r   )N)r   r   r   r   )r   r   r   r   )r"   r#   r$   r   r   r#   )r)   r*   r   r+   )Nr   )
r$   r   r/   r#   r0   r1   r2   r   r   r   )
r$   r   r/   r#   r0   r1   r2   r   r   r6   )Nr   r   )r$   r   r/   r#   r9   r1   r0   r1   r2   r   r   r:   )r$   r   r/   r#   r9   r1   r0   r1   r2   r   r   r=   )
r$   r   r/   r#   r0   r1   r2   r   r   r@   )
r$   r   r/   r#   r0   r1   r2   r   r   rC   )
r$   r   r/   r#   r0   r1   r2   r   r   r:   )__name__
__module____qualname____doc__r   r!   r(   r.   r4   r8   r$   r?   rB   rE   rG    r   r   r   r   ,   sj            
1 
1 
1 
1	 	 	 	( ( ( (  37	W W W W W< 37	
 
 
 
 
B 37#
 #
 #
 #
 #
P 37!
 !
 !
 !
 !
L 37	
 
 
 
 
F 37	$
 $
 $
 $
 $
R 37	#
 #
 #
 #
 #
 #
 #
r   r   )rK   
__future__r   typesr   typingr   r   r   r   r	   r
   warningsbs4._typingr   r   r   r-   r   bs4.elementr   r   __annotations__ImportErrorwarnobjectr   rL   r   r   <module>rW      s     # " " " " "                       ) ) ) ) ) ) +######********       IHMO    f
 f
 f
 f
 f
& f
 f
 f
 f
 f
s   A A%$A%