__init__.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. """
  2. A platform independent file lock that supports the with-statement.
  3. .. autodata:: filelock.__version__
  4. :no-value:
  5. """
  6. from __future__ import annotations
  7. import sys
  8. import warnings
  9. from typing import TYPE_CHECKING
  10. from ._api import AcquireReturnProxy, BaseFileLock
  11. from ._error import Timeout
  12. from ._soft import SoftFileLock
  13. from ._unix import UnixFileLock, has_fcntl
  14. from ._windows import WindowsFileLock
  15. from .asyncio import (
  16. AsyncAcquireReturnProxy,
  17. AsyncSoftFileLock,
  18. AsyncUnixFileLock,
  19. AsyncWindowsFileLock,
  20. BaseAsyncFileLock,
  21. )
  22. from .version import version
  23. #: version of the project as a string
  24. __version__: str = version
  25. if sys.platform == "win32": # pragma: win32 cover
  26. _FileLock: type[BaseFileLock] = WindowsFileLock
  27. _AsyncFileLock: type[BaseAsyncFileLock] = AsyncWindowsFileLock
  28. else: # pragma: win32 no cover # noqa: PLR5501
  29. if has_fcntl:
  30. _FileLock: type[BaseFileLock] = UnixFileLock
  31. _AsyncFileLock: type[BaseAsyncFileLock] = AsyncUnixFileLock
  32. else:
  33. _FileLock = SoftFileLock
  34. _AsyncFileLock = AsyncSoftFileLock
  35. if warnings is not None:
  36. warnings.warn("only soft file lock is available", stacklevel=2)
  37. if TYPE_CHECKING:
  38. FileLock = SoftFileLock
  39. AsyncFileLock = AsyncSoftFileLock
  40. else:
  41. #: Alias for the lock, which should be used for the current platform.
  42. FileLock = _FileLock
  43. AsyncFileLock = _AsyncFileLock
  44. __all__ = [
  45. "AcquireReturnProxy",
  46. "AsyncAcquireReturnProxy",
  47. "AsyncFileLock",
  48. "AsyncSoftFileLock",
  49. "AsyncUnixFileLock",
  50. "AsyncWindowsFileLock",
  51. "BaseAsyncFileLock",
  52. "BaseFileLock",
  53. "FileLock",
  54. "SoftFileLock",
  55. "Timeout",
  56. "UnixFileLock",
  57. "WindowsFileLock",
  58. "__version__",
  59. ]