Module hdrezka.post.site.filters

Catalog page filter / sort controls parsing.

Functions

def parse_page_filters(html: str | bs4.BeautifulSoup | bs4.element.Tag) ‑> PageFilters
Expand source code
def parse_page_filters(html: str | BeautifulSoup | Tag) -> PageFilters:
    """
    Parse ``ul.b-content__main_filters`` into ``PageFilters``.

    Returns empty tuples when the block is absent.
    """
    soup = as_soup(html)
    root = soup.select_one('ul.b-content__main_filters')
    if root is None:
        return PageFilters()
    sorts = tuple(
        _link(a, param='filter')
        for a in root.select('li.b-content__main_filters_item > a.b-content__main_filters_link')
    )
    types = tuple(
        _link(a, param='genre')
        for a in root.select('li.b-content__filters_types a.filter-link')
    )
    return PageFilters(sorts=sorts, types=types)

Parse ul.b-content__main_filters into PageFilters.

Returns empty tuples when the block is absent.

Classes

Expand source code
class FilterLink(NamedTuple):
    """One filter or content-type control on a catalog page."""
    name: str
    url: str
    param: str
    value: str
    active: bool = False

One filter or content-type control on a catalog page.

Ancestors

  • builtins.tuple

Instance variables

var active : bool
Expand source code
class FilterLink(NamedTuple):
    """One filter or content-type control on a catalog page."""
    name: str
    url: str
    param: str
    value: str
    active: bool = False

Alias for field number 4

var name : str
Expand source code
class FilterLink(NamedTuple):
    """One filter or content-type control on a catalog page."""
    name: str
    url: str
    param: str
    value: str
    active: bool = False

Alias for field number 0

var param : str
Expand source code
class FilterLink(NamedTuple):
    """One filter or content-type control on a catalog page."""
    name: str
    url: str
    param: str
    value: str
    active: bool = False

Alias for field number 2

var url : str
Expand source code
class FilterLink(NamedTuple):
    """One filter or content-type control on a catalog page."""
    name: str
    url: str
    param: str
    value: str
    active: bool = False

Alias for field number 1

var value : str
Expand source code
class FilterLink(NamedTuple):
    """One filter or content-type control on a catalog page."""
    name: str
    url: str
    param: str
    value: str
    active: bool = False

Alias for field number 3

class PageFilters (sorts: tuple[FilterLink, ...] = (),
types: tuple[FilterLink, ...] = ())
Expand source code
class PageFilters(NamedTuple):
    """
    Filters available on a catalog page.

    ``sorts`` — ``filter=`` controls (popular, watching, …).
    ``types`` — ``genre=`` content-type controls (films, anime, …).
    """
    sorts: tuple[FilterLink, ...] = ()
    types: tuple[FilterLink, ...] = ()

Filters available on a catalog page.

sortsfilter= controls (popular, watching, …). typesgenre= content-type controls (films, anime, …).

Ancestors

  • builtins.tuple

Instance variables

var sorts : tuple[FilterLink, ...]
Expand source code
class PageFilters(NamedTuple):
    """
    Filters available on a catalog page.

    ``sorts`` — ``filter=`` controls (popular, watching, …).
    ``types`` — ``genre=`` content-type controls (films, anime, …).
    """
    sorts: tuple[FilterLink, ...] = ()
    types: tuple[FilterLink, ...] = ()

Alias for field number 0

var types : tuple[FilterLink, ...]
Expand source code
class PageFilters(NamedTuple):
    """
    Filters available on a catalog page.

    ``sorts`` — ``filter=`` controls (popular, watching, …).
    ``types`` — ``genre=`` content-type controls (films, anime, …).
    """
    sorts: tuple[FilterLink, ...] = ()
    types: tuple[FilterLink, ...] = ()

Alias for field number 1