__init__.py 2.0 KB

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