
    h1                        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 G d de      Zy# e$ r dZ ej0                  d       Y 'w xY w)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		 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd	Z
	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd
Z	 	 d	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 ddZy)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.
    Nc                J    |t         }|t        d      || _        || _        y )NzLCannot execute CSS selectors because the soupsieve package is not installed.)r   NotImplementedErrorapitag)selfr   r   s      o/var/labsstorage/home/kalaiyarasan.offl.2004/htdocs/course/socket/myenv/lib/python3.12/site-packages/bs4/css.py__init__zCSS.__init__:   s1    ;C;%^      c                v    t         t        d      t        t        | j                  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.
        zMCannot escape CSS identifiers because the soupsieve package is not installed.)r   r   r   strr   escape)r   idents     r   r   z
CSS.escapeD   s6     %_  C/00r   c                v    t        || j                  j                        s|| j                  j                  }|S )z%Normalize a dictionary of namespaces.)
isinstancer   r   r   _namespaces)r   nsselects      r   _nszCSS._nsP   s2     &$(("4"45"* %%B	r   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   resultsr   s      r   _rszCSS._rs[   s     	"w''r   c                `     | j                   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$   
namespacesflagskwargss        r   r+   zCSS.compileh   s/    2  txxV(DeVvVVr   c                v     | j                   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%   r,   s        r   r1   zCSS.select_one   s=    4 #txx""DHHdhhz6:E
EK
 	
r   c           
         |d}| j                   | j                  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.
        r   )r)   r   r$   r   r%   r   r$   r-   limitr.   r/   s         r   r$   z
CSS.select   sS    8 =ExxDHHOO$((:v">uPV
 	
r   c                x     | j                   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%   r3   s         r   r6   zCSS.iselect   s?    >  txxDHHdhhz6:E5
LR
 	
r   c                v     | j                   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%   r,   s        r   r8   zCSS.closest   s=    8  txxDHHdhhz6:E
EK
 	
r   c                    t        t         | j                  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   boolr   matchr   r%   r,   s        r   r;   z	CSS.match	  sF    > DHHNN$((:v">IO
 	
r   c           
         | j                   | j                  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%   r,   s        r   r=   z
CSS.filter/  sG    > xxDHHOO$((:v">IO
 	
r   )N)r   zelement.Tagr   r   )r   r   returnr   )r#   Optional[_NamespaceMapping]r$   r   r>   r?   )r(   zIterable[Tag]r>   zResultSet[Tag])Nr   )
r$   r   r-   r?   r.   intr/   r   r>   r   )
r$   r   r-   r?   r.   r@   r/   r   r>   zelement.Tag | None)Nr   r   )r$   r   r-   r?   r4   r@   r.   r@   r/   r   r>   ResultSet[element.Tag])r$   r   r-   r?   r4   r@   r.   r@   r/   r   r>   zIterator[element.Tag])
r$   r   r-   r?   r.   r@   r/   r   r>   zOptional[element.Tag])
r$   r   r-   r?   r.   r@   r/   r   r>   r:   )
r$   r   r-   r?   r.   r@   r/   r   r>   rA   )__name__
__module____qualname____doc__r   r   r%   r)   r+   r1   r$   r6   r8   r;   r=    r   r   r   r   ,   s   
1	-	7:		$	(  37	WW 0W 	W
 W 
W< 37	

 0
 	

 
 

B 37#
#
 0#
 	#

 #
 #
 
 #
P 37!
!
 0!
 	!

 !
 !
 
!
L 37	

 0
 	

 
 

F 37	$
$
 0$
 	$

 $
 
$
R 37	#
#
 0#
 	#

 #
 
 #
r   r   )rE   
__future__r   typesr   typingr   r   r   r   r	   r
   warningsbs4._typingr   r   r   r'   r   bs4.elementr   r   __annotations__ImportErrorwarnobjectr   rF   r   r   <module>rQ      ss    #    )#* f
& f
  IHMMOs   A A21A2