__init__.py 2.3 KB

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