"""
This type stub file was generated by pyright.
"""

if __package__ or "." in __name__:
    ...
else:
    ...

class _SwigNonDynamicMeta(type):
    """Meta class to enforce nondynamic attributes (no new attributes) for a class"""

    __setattr__ = ...

class Version:
    r"""Plugin version"""

    thisown = ...
    __repr__ = ...
    major = ...
    minor = ...
    micro = ...
    def __init__(self, major, minor, micro) -> None: ...

    __swig_destroy__ = ...

class IPlugin:
    r"""A base class for implementing LIBDNF5 plugins that introduce additional logic into the library using hooks."""

    thisown = ...
    __repr__ = ...
    def __init__(self, base) -> None: ...

    __swig_destroy__ = ...
    def get_api_version(self):
        r"""Returns the version of the API supported by the plugin. It can be called at any time."""
        ...

    def get_name(self):
        r"""Returns the name of the plugin. It can be called at any time."""
        ...

    def get_version(self):
        r"""Gets the plugin version. It can be called at any time."""
        ...

    def get_attributes(self):
        r"""
        :rtype: string
        :return: A nullptr terminated array of attributes supported by the plugin.
        """
        ...

    def get_attribute(self, name):
        r"""
        Gets the value of the attribute from the plugin. Returns nullptr if the attribute does not exist.
        It can be called at any time.
        """
        ...

    def load_plugins(self):
        r"""
        The plugin can load additional plugins. E.g. C++ plugin for loading Python plugins.
        Called before init.
        """
        ...

    def init(self):
        r"""
        Plugin initialization.
        Called before hooks.
        """
        ...

    def pre_base_setup(self):
        r"""
        The pre_base_setup hook.
        It is called at the beginning of the `Base::setup` method (after the `init` hook).
        """
        ...

    def post_base_setup(self):
        r"""
        The post_base_setup hook.
        It is called at the end of the `Base::setup` method.
        """
        ...

    def pre_transaction(self, arg0):
        r"""
        The pre_transaction hook.
        It is called just before the actual transaction starts.
        """
        ...

    def post_transaction(self, arg0):
        r"""
        The post_transaction hook.
        It is called after transactions.
        """
        ...

    def finish(self):
        r"""Finish the plugin and release all resources obtained by the init method and in hooks."""
        ...

    def get_base(self): ...
    def __disown__(self):  # -> Any:
        ...
