# This file was automatically generated by SWIG (https://www.swig.org).
# Version 4.5.1
#
# Do not make changes to this file unless you know what you are doing - modify
# the SWIG interface file instead.

import typing
# Import the low-level C/C++ module
if getattr(globals().get("__spec__"), "parent", None) or __package__ or "." in __name__:
    from . import _utils
else:
    import _utils

import builtins as __builtin__

def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "this":
            set(self, name, value)
        elif name == "thisown":
            self.this.own(value)
        elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add instance attributes to %s" % self)
    return set_instance_attr


def _swig_setattr_nondynamic_class_variable(set):
    def set_class_attr(cls, name, value):
        if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
            set(cls, name, value)
        else:
            raise AttributeError("You cannot add class attributes to %s" % cls)
    return set_class_attr


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


from . import exception

def is_glob_pattern(pattern):
    r"""
    Check if a given pattern is a GLOB.

    :type pattern: string
    :param pattern: Text pattern to be test
    :rtype: boolean
    :return: True if a given pattern is a GLOB
    """
    return _utils.is_glob_pattern(pattern)

def is_file_pattern(pattern):
    r"""
    Check if a given pattern is a file path.

    :type pattern: string
    :param pattern: Text pattern to be test
    :rtype: boolean
    :return: True if a given pattern is a file path
    """
    return _utils.is_file_pattern(pattern)
class Locale(object):
    r"""Class for passing locale"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, std_name):
        r"""
        Creates a new `Locale` object containing the system locale with the specified `std_name` (for example, "C",
        or "POSIX", or "cs_CZ.UTF-8") if such a locale is supported by the operating system.

        :type std_name: string
        :param std_name: name of the system locale to use ("" - user-preferred locale, must not be null pointer)
        """
        _utils.Locale_swiginit(self, _utils.new_Locale(std_name))
    __swig_destroy__ = _utils.delete_Locale

    def get_cpp_locale(self):
        return _utils.Locale_get_cpp_locale(self)

    def get_c_locale(self):
        return _utils.Locale_get_c_locale(self)

# Register Locale in _utils:
_utils.Locale_swigregister(Locale)
LockAccess_READ = _utils.LockAccess_READ
LockAccess_WRITE = _utils.LockAccess_WRITE
LockBlocking_NON_BLOCKING = _utils.LockBlocking_NON_BLOCKING
LockBlocking_BLOCKING = _utils.LockBlocking_BLOCKING
class Locker(object):
    r"""
    Object for implementing a simple file mutex mechanism
    or checking read/write access on a given path.
    """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    __swig_destroy__ = _utils.delete_Locker

    def __init__(self, *args):
        r"""Create a Locker object at a given path"""
        _utils.Locker_swiginit(self, _utils.new_Locker(*args))

    def lock(self, type, blocking):
        r"""
        Acquire a read or write lock on a given file path, either blocking or non-blocking.
        :rtype: boolean
        :return: True if lock acquisition was successful, otherwise false
        :raises: libdnf5::SystemError if an unexpected error occurs when checking the lock state, like insufficient privileges
        """
        return _utils.Locker_lock(self, type, blocking)

    def read_lock(self):
        r"""
        Try to acquire read lock on a given file path
        :rtype: boolean
        :return: True if lock acquisition was successful, otherwise false
        :raises: libdnf5::SystemError if an unexpected error occurs when checking the lock state, like insufficient privileges
        """
        return _utils.Locker_read_lock(self)

    def write_lock(self):
        r"""
        Try to acquire write lock on a given file path
        :rtype: boolean
        :return: True if lock acquisition was successful, otherwise false
        :raises: libdnf5::SystemError if an unexpected error occurs when checking the lock state, like insufficient privileges
        """
        return _utils.Locker_write_lock(self)

    def write_content(self, content):
        r"""
        Write content to the lock file
        :type content: string
        :param content: The content to write to the lock file
        :raises: libdnf5::SystemError if the lock file is not opened or writing fails
        """
        return _utils.Locker_write_content(self, content)

    def read_content(self):
        r"""
        Read content from the lock file, requires the file to be open.
        :rtype: string
        :return: The content of the lock file
        :raises: libdnf5::RuntimeError if the file is not open
        :raises: libdnf5::SystemError if reading fails
        """
        return _utils.Locker_read_content(self)

    def unlock(self):
        r"""
        Unlock the existing lock and remove the underlying lock file
        :raises: libdnf5::SystemError if an unexpected error occurs when unlocking
        """
        return _utils.Locker_unlock(self)

    def open_file(self, type):
        r"""
        Open the file but don't acquire a lock yet. Useful for checking permissions.
        :raises: libdnf5::SystemError if an unexpected error occurs when opening the file
        """
        return _utils.Locker_open_file(self, type)

    def get_path(self):
        r"""Get the path being locked"""
        return _utils.Locker_get_path(self)

# Register Locker in _utils:
_utils.Locker_swigregister(Locker)

