""" A platform independent file lock that supports the with-statement. .. autodata:: filelock.__version__ :no-value: """ from __future__ import annotations import sys import warnings from typing import TYPE_CHECKING from ._api import AcquireReturnProxy, BaseFileLock from ._error import Timeout if TYPE_CHECKING: from ._async_read_write import ( AsyncAcquireReadWriteReturnProxy, AsyncReadWriteLock, ) from ._read_write import ReadWriteLock else: try: from ._async_read_write import AsyncAcquireReadWriteReturnProxy, AsyncReadWriteLock from ._read_write import ReadWriteLock except ImportError: # sqlite3 may be unavailable if Python was built without it or the C library is missing AsyncAcquireReadWriteReturnProxy = None AsyncReadWriteLock = None ReadWriteLock = None from ._soft import SoftFileLock from ._soft_rw import AsyncAcquireSoftReadWriteReturnProxy, AsyncSoftReadWriteLock, SoftReadWriteLock from ._unix import UnixFileLock, has_fcntl from ._windows import WindowsFileLock from .asyncio import ( AsyncAcquireReturnProxy, AsyncSoftFileLock, AsyncUnixFileLock, AsyncWindowsFileLock, BaseAsyncFileLock, ) from .version import version #: version of the project as a string __version__: str = version if sys.platform == "win32": # pragma: win32 cover _FileLock: type[BaseFileLock] = WindowsFileLock _AsyncFileLock: type[BaseAsyncFileLock] = AsyncWindowsFileLock else: # pragma: win32 no cover # noqa: PLR5501 if has_fcntl: _FileLock: type[BaseFileLock] = UnixFileLock _AsyncFileLock: type[BaseAsyncFileLock] = AsyncUnixFileLock else: _FileLock = SoftFileLock _AsyncFileLock = AsyncSoftFileLock if warnings is not None: warnings.warn("only soft file lock is available", stacklevel=2) if TYPE_CHECKING: FileLock = SoftFileLock AsyncFileLock = AsyncSoftFileLock else: #: Alias for the lock, which should be used for the current platform. FileLock = _FileLock AsyncFileLock = _AsyncFileLock __all__ = [ "AcquireReturnProxy", "AsyncAcquireReadWriteReturnProxy", "AsyncAcquireReturnProxy", "AsyncAcquireSoftReadWriteReturnProxy", "AsyncFileLock", "AsyncReadWriteLock", "AsyncSoftFileLock", "AsyncSoftReadWriteLock", "AsyncUnixFileLock", "AsyncWindowsFileLock", "BaseAsyncFileLock", "BaseFileLock", "FileLock", "ReadWriteLock", "SoftFileLock", "SoftReadWriteLock", "Timeout", "UnixFileLock", "WindowsFileLock", "__version__", ]