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 annotations
10
11import sys
12import warnings
13from typing import TYPE_CHECKING
14
15from ._api import AcquireReturnProxy, BaseFileLock
16from ._error import Timeout
17from ._soft import SoftFileLock
18from ._unix import UnixFileLock, has_fcntl
19from ._windows import WindowsFileLock
20from .asyncio import (
21 AsyncAcquireReturnProxy,
22 AsyncSoftFileLock,
23 AsyncUnixFileLock,
24 AsyncWindowsFileLock,
25 BaseAsyncFileLock,
26)
27from .version import version
28
29#: version of the project as a string
30__version__: str = version
31
32
33if sys.platform == "win32": # pragma: win32 cover
34 _FileLock: type[BaseFileLock] = WindowsFileLock
35 _AsyncFileLock: type[BaseAsyncFileLock] = AsyncWindowsFileLock
36else: # pragma: win32 no cover # noqa: PLR5501
37 if has_fcntl:
38 _FileLock: type[BaseFileLock] = UnixFileLock
39 _AsyncFileLock: type[BaseAsyncFileLock] = AsyncUnixFileLock
40 else:
41 _FileLock = SoftFileLock
42 _AsyncFileLock = AsyncSoftFileLock
43 if warnings is not None:
44 warnings.warn("only soft file lock is available", stacklevel=2)
45
46if TYPE_CHECKING:
47 FileLock = SoftFileLock
48 AsyncFileLock = AsyncSoftFileLock
49else:
50 #: Alias for the lock, which should be used for the current platform.
51 FileLock = _FileLock
52 AsyncFileLock = _AsyncFileLock
53
54
55__all__ = [
56 "AcquireReturnProxy",
57 "AsyncAcquireReturnProxy",
58 "AsyncFileLock",
59 "AsyncSoftFileLock",
60 "AsyncUnixFileLock",
61 "AsyncWindowsFileLock",
62 "BaseAsyncFileLock",
63 "BaseFileLock",
64 "FileLock",
65 "SoftFileLock",
66 "Timeout",
67 "UnixFileLock",
68 "WindowsFileLock",
69 "__version__",
70]