from abc import ABC, abstractmethod
import abc

from django import forms
from django.db import models
from django.http import HttpRequest
from django.utils.functional import classproperty
from django.views.generic import FormView
from wagtail import hooks as hooks
from wagtail.admin import messages as messages
from wagtail.admin.utils import get_valid_next_url_from_request as get_valid_next_url_from_request

class BulkAction(ABC, FormView, metaclass=abc.ABCMeta):
    @property
    @abstractmethod
    def display_name(self): ...
    @property
    @abstractmethod
    def action_type(self): ...
    @property
    @abstractmethod
    def aria_label(self): ...
    extras: dict
    action_priority: int
    classes: set
    form_class = forms.Form
    cleaned_form: forms.Form | None
    request: HttpRequest
    next_url: str
    num_parent_objects: int
    model: type[models.Model]
    def __init__(self, request, model) -> None: ...
    @classproperty
    def models(cls): ...
    @classmethod
    def get_queryset(cls, model, object_ids): ...
    def check_perm(self, obj): ...
    @classmethod
    def execute_action(cls, objects, **kwargs) -> None: ...
    def get_success_message(self, num_parent_objects, num_child_objects) -> None: ...
    def object_context(self, obj): ...
    @classmethod
    def get_default_model(cls): ...
    def get_all_objects_in_listing_query(self, parent_id): ...
    def annotate_items(self, items: list) -> list: ...
    def get_actionable_objects(self): ...
    def get_context_data(self, **kwargs): ...
    def prepare_action(self, objects, objects_without_access) -> None: ...
    def get_execution_context(self): ...
    actionable_objects: list
    def form_valid(self, form): ...
    def form_invalid(self, form): ...
