codekingpro/portable-devtools
114k
1"""2A platform independent file lock that supports the with-statement.3 4.. autodata:: filelock.__version__5 :no-value:6 7"""8 9from __future__ import annotations10 11import sys12import warnings13from typing import TYPE_CHECKING14 15from ._api import AcquireReturnProxy, BaseFileLock16from ._error import Timeout17 18if TYPE_CHECKING:19 from ._async_read_write import (20 AsyncAcquireReadWriteReturnProxy,21 AsyncReadWriteLock,22 )23 from ._read_write import ReadWriteLock24else:25 try:26 from ._async_read_write import AsyncAcquireReadWriteReturnProxy, AsyncReadWriteLock27 from ._read_write import ReadWriteLock28 except ImportError: # sqlite3 may be unavailable if Python was built without it or the C library is missing29 AsyncAcquireReadWriteReturnProxy = None30 AsyncReadWriteLock = None31 ReadWriteLock = None32 33from ._soft import SoftFileLock34from ._soft_rw import AsyncAcquireSoftReadWriteReturnProxy, AsyncSoftReadWriteLock, SoftReadWriteLock35from ._unix import UnixFileLock, has_fcntl36from ._windows import WindowsFileLock37from .asyncio import (38 AsyncAcquireReturnProxy,39 AsyncSoftFileLock,40 AsyncUnixFileLock,41 AsyncWindowsFileLock,42 BaseAsyncFileLock,43)44from .version import version45 46#: version of the project as a string47__version__: str = version48 49 50if sys.platform == "win32": # pragma: win32 cover51 _FileLock: type[BaseFileLock] = WindowsFileLock52 _AsyncFileLock: type[BaseAsyncFileLock] = AsyncWindowsFileLock53else: # pragma: win32 no cover # noqa: PLR550154 if has_fcntl:55 _FileLock: type[BaseFileLock] = UnixFileLock56 _AsyncFileLock: type[BaseAsyncFileLock] = AsyncUnixFileLock57 else:58 _FileLock = SoftFileLock59 _AsyncFileLock = AsyncSoftFileLock60 if warnings is not None:61 warnings.warn("only soft file lock is available", stacklevel=2)62 63if TYPE_CHECKING:64 FileLock = SoftFileLock65 AsyncFileLock = AsyncSoftFileLock66else:67 #: Alias for the lock, which should be used for the current platform.68 FileLock = _FileLock69 AsyncFileLock = _AsyncFileLock70 71 72__all__ = [73 "AcquireReturnProxy",74 "AsyncAcquireReadWriteReturnProxy",75 "AsyncAcquireReturnProxy",76 "AsyncAcquireSoftReadWriteReturnProxy",77 "AsyncFileLock",78 "AsyncReadWriteLock",79 "AsyncSoftFileLock",80 "AsyncSoftReadWriteLock",81 "AsyncUnixFileLock",82 "AsyncWindowsFileLock",83 "BaseAsyncFileLock",84 "BaseFileLock",85 "FileLock",86 "ReadWriteLock",87 "SoftFileLock",88 "SoftReadWriteLock",89 "Timeout",90 "UnixFileLock",91 "WindowsFileLock",92 "__version__",93]94 