§
    ¥”j©1  ã                  óô   — 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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ÚMutableSequenceÚ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      úV/var/www/finuniver-perm.ru/html/portfolio/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 )zçEscape 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.escapeE   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._nsQ   s0   € õ ˜& $¤(Ô"4Ñ5Ô5ð 	&¸"¸*ð ”Ô%ˆBØˆ	r   ÚresultsúMutableSequence[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%   r0   r1   r3   s        r   r5   zCSS.compilei   s3   € ð2  ˆtŒxÔ ¨¯ª°¸VÑ(DÔ(DÀeÐVÐVÈvÐ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)   r6   s        r   r9   zCSS.select_one„   sC   € ð4 #ˆtŒxÔ"Ø�D”H˜dŸhšh z°6Ñ:Ô:¸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%   r0   r:   r1   r3   s         r   r%   z
CSS.select¢   s_   € ð8 ˆ=ØˆEà�xŠxØˆDŒHŒOØ˜œ $§(¢(¨:°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   € ð>  ˆtŒxÔØ�D”H˜dŸhšh z°6Ñ:Ô:¸EÀ5ð
ð 
Ø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)   r6   s        r   rC   zCSS.closestê   sC   € ð8  ˆtŒxÔØ�D”H˜dŸhšh z°6Ñ:Ô:¸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   rD   r   Úmatchr   r)   r6   s        r   rF   z	CSS.match
  sR   € õ> ÝØˆDŒHŒNØ˜œ $§(¢(¨:°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)   r6   s        r   rH   z
CSS.filter0  sS   € ð> �xŠxØˆDŒHŒOØ˜œ $§(¢(¨:°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   r0   r$   r1   r2   r3   r   r    r   )
r%   r   r0   r$   r1   r2   r3   r   r    r7   )Nr   r   )r%   r   r0   r$   r:   r2   r1   r2   r3   r   r    r;   )r%   r   r0   r$   r:   r2   r1   r2   r3   r   r    r>   )
r%   r   r0   r$   r1   r2   r3   r   r    rA   )
r%   r   r0   r$   r1   r2   r3   r   r    rD   )
r%   r   r0   r$   r1   r2   r3   r   r    r;   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   r)   r/   r5   r9   r%   r@   rC   rF   rH   © 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   )rL   Ú
__future__r   Útypesr   Útypingr   r   r   r   r	   r
   r   ÚwarningsÚbs4._typingr   r   r   r.   r   Úbs4.elementr   r   Ú__annotations__ÚImportErrorÚwarnÚobjectr   rM   r   r   ú<module>rX      s–  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€Ø )Ð )Ð )Ð )Ð )Ð )àð +Ø#Ð#Ð#Ð#Ð#Ð#ØÐÐÐÐÐØ*Ð*Ð*Ð*Ð*Ð*Ð*Ð*à Ð Ð Ñ ðØÐÐÐÐøØð ð ð Ø€IØ€H„MØOñô ð ð ð ðøøøðf
ð f
ð f
ð f
ð f
ˆ&ñ f
ô f
ð f
ð f
ð f
s   ÁA ÁA'Á&A'