stouputils 1.16.3__tar.gz → 1.17.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. {stouputils-1.16.3 → stouputils-1.17.0}/PKG-INFO +3 -1
  2. {stouputils-1.16.3 → stouputils-1.17.0}/pyproject.toml +4 -1
  3. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/__init__.py +1 -0
  4. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/__init__.pyi +1 -0
  5. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/all_doctests.py +1 -1
  6. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/decorators.py +1 -1
  7. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/image.py +1 -1
  8. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/image.pyi +1 -1
  9. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/io.py +1 -1
  10. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/io.pyi +1 -1
  11. stouputils-1.17.0/stouputils/lock/__init__.py +36 -0
  12. stouputils-1.17.0/stouputils/lock/__init__.pyi +5 -0
  13. stouputils-1.17.0/stouputils/lock/base.py +536 -0
  14. stouputils-1.17.0/stouputils/lock/base.pyi +169 -0
  15. stouputils-1.17.0/stouputils/lock/queue.py +377 -0
  16. stouputils-1.17.0/stouputils/lock/queue.pyi +131 -0
  17. stouputils-1.17.0/stouputils/lock/re_entrant.py +115 -0
  18. stouputils-1.17.0/stouputils/lock/re_entrant.pyi +81 -0
  19. stouputils-1.17.0/stouputils/lock/redis_fifo.py +299 -0
  20. stouputils-1.17.0/stouputils/lock/redis_fifo.pyi +123 -0
  21. stouputils-1.17.0/stouputils/lock/shared.py +30 -0
  22. stouputils-1.17.0/stouputils/lock/shared.pyi +16 -0
  23. {stouputils-1.16.3 → stouputils-1.17.0}/README.md +0 -0
  24. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/__main__.py +0 -0
  25. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/_deprecated.py +0 -0
  26. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/_deprecated.pyi +0 -0
  27. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/all_doctests.pyi +0 -0
  28. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/__init__.py +0 -0
  29. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/__init__.pyi +0 -0
  30. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/automatic_docs.py +0 -0
  31. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/automatic_docs.pyi +0 -0
  32. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/upscaler/__init__.py +0 -0
  33. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/upscaler/__init__.pyi +0 -0
  34. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/upscaler/config.py +0 -0
  35. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/upscaler/config.pyi +0 -0
  36. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/upscaler/image.py +0 -0
  37. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/upscaler/image.pyi +0 -0
  38. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/upscaler/video.py +0 -0
  39. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/applications/upscaler/video.pyi +0 -0
  40. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/archive.py +0 -0
  41. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/archive.pyi +0 -0
  42. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/backup.py +0 -0
  43. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/backup.pyi +0 -0
  44. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/collections.py +0 -0
  45. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/collections.pyi +0 -0
  46. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/__init__.py +0 -0
  47. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/__init__.pyi +0 -0
  48. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/cd_utils.py +0 -0
  49. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/cd_utils.pyi +0 -0
  50. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/github.py +0 -0
  51. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/github.pyi +0 -0
  52. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/pypi.py +0 -0
  53. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/pypi.pyi +0 -0
  54. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/pyproject.py +0 -0
  55. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/pyproject.pyi +0 -0
  56. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/stubs.py +0 -0
  57. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/continuous_delivery/stubs.pyi +0 -0
  58. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/ctx.py +0 -0
  59. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/ctx.pyi +0 -0
  60. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/config/get.py +0 -0
  61. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/config/set.py +0 -0
  62. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/__init__.py +0 -0
  63. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/auto_contrast.py +0 -0
  64. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/axis_flip.py +0 -0
  65. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/bias_field_correction.py +0 -0
  66. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/binary_threshold.py +0 -0
  67. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/blur.py +0 -0
  68. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/brightness.py +0 -0
  69. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/canny.py +0 -0
  70. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/clahe.py +0 -0
  71. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/common.py +0 -0
  72. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/contrast.py +0 -0
  73. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/curvature_flow_filter.py +0 -0
  74. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/denoise.py +0 -0
  75. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/histogram_equalization.py +0 -0
  76. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/invert.py +0 -0
  77. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/laplacian.py +0 -0
  78. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/median_blur.py +0 -0
  79. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/noise.py +0 -0
  80. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/normalize.py +0 -0
  81. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/random_erase.py +0 -0
  82. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/resize.py +0 -0
  83. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/rotation.py +0 -0
  84. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/salt_pepper.py +0 -0
  85. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/sharpening.py +0 -0
  86. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/shearing.py +0 -0
  87. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/threshold.py +0 -0
  88. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/translation.py +0 -0
  89. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image/zoom.py +0 -0
  90. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image_augmentation.py +0 -0
  91. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/image_preprocess.py +0 -0
  92. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/prosthesis_detection.py +0 -0
  93. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/data_processing/technique.py +0 -0
  94. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/dataset/__init__.py +0 -0
  95. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/dataset/dataset.py +0 -0
  96. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/dataset/dataset_loader.py +0 -0
  97. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/dataset/grouping_strategy.py +0 -0
  98. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/dataset/image_loader.py +0 -0
  99. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/dataset/xy_tuple.py +0 -0
  100. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/metric_dictionnary.py +0 -0
  101. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/metric_utils.py +0 -0
  102. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/mlflow_utils.py +0 -0
  103. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/abstract_model.py +0 -0
  104. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/all.py +0 -0
  105. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/base_keras.py +0 -0
  106. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/all.py +0 -0
  107. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/convnext.py +0 -0
  108. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/densenet.py +0 -0
  109. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/efficientnet.py +0 -0
  110. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/mobilenet.py +0 -0
  111. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/resnet.py +0 -0
  112. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/squeezenet.py +0 -0
  113. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/vgg.py +0 -0
  114. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras/xception.py +0 -0
  115. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/callbacks/__init__.py +0 -0
  116. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/callbacks/colored_progress_bar.py +0 -0
  117. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/callbacks/learning_rate_finder.py +0 -0
  118. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/callbacks/model_checkpoint_v2.py +0 -0
  119. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/callbacks/progressive_unfreezing.py +0 -0
  120. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/callbacks/warmup_scheduler.py +0 -0
  121. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/losses/__init__.py +0 -0
  122. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/losses/next_generation_loss.py +0 -0
  123. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/keras_utils/visualizations.py +0 -0
  124. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/model_interface.py +0 -0
  125. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/models/sandbox.py +0 -0
  126. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/range_tuple.py +0 -0
  127. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/scripts/augment_dataset.py +0 -0
  128. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/scripts/exhaustive_process.py +0 -0
  129. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/scripts/preprocess_dataset.py +0 -0
  130. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/scripts/routine.py +0 -0
  131. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/data_science/utils.py +0 -0
  132. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/decorators.pyi +0 -0
  133. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/__init__.py +0 -0
  134. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/__init__.pyi +0 -0
  135. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/common.py +0 -0
  136. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/common.pyi +0 -0
  137. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/downloader.py +0 -0
  138. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/downloader.pyi +0 -0
  139. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/linux.py +0 -0
  140. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/linux.pyi +0 -0
  141. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/main.py +0 -0
  142. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/main.pyi +0 -0
  143. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/windows.py +0 -0
  144. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/installer/windows.pyi +0 -0
  145. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/parallel.py +0 -0
  146. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/parallel.pyi +0 -0
  147. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/print.py +0 -0
  148. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/print.pyi +0 -0
  149. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/py.typed +0 -0
  150. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/typing.py +0 -0
  151. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/typing.pyi +0 -0
  152. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/version_pkg.py +0 -0
  153. {stouputils-1.16.3 → stouputils-1.17.0}/stouputils/version_pkg.pyi +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: stouputils
3
- Version: 1.16.3
3
+ Version: 1.17.0
4
4
  Summary: Stouputils is a collection of utility modules designed to simplify and enhance the development process. It includes a range of tools for tasks such as execution of doctests, display utilities, decorators, as well as context managers, and many more.
5
5
  Keywords: utilities,tools,helpers,development,python
6
6
  Author: Stoupy51
@@ -32,12 +32,14 @@ Requires-Dist: sphinx-design ; extra == 'docs'
32
32
  Requires-Dist: sphinx-treeview ; extra == 'docs'
33
33
  Requires-Dist: sphinx-breeze-theme ; extra == 'docs'
34
34
  Requires-Dist: pydata-sphinx-theme ; extra == 'docs'
35
+ Requires-Dist: redis[hiredis] ; extra == 'redis'
35
36
  Requires-Python: >=3.12
36
37
  Project-URL: Homepage, https://stoupy51.github.io/stouputils
37
38
  Project-URL: Issues, https://github.com/Stoupy51/stouputils/issues
38
39
  Project-URL: Source, https://github.com/Stoupy51/stouputils
39
40
  Provides-Extra: data-science
40
41
  Provides-Extra: docs
42
+ Provides-Extra: redis
41
43
  Description-Content-Type: text/markdown
42
44
 
43
45
 
@@ -8,7 +8,7 @@ module-root = ""
8
8
 
9
9
  [project]
10
10
  name = "stouputils"
11
- version = "1.16.3"
11
+ version = "1.17.0"
12
12
  description = "Stouputils is a collection of utility modules designed to simplify and enhance the development process. It includes a range of tools for tasks such as execution of doctests, display utilities, decorators, as well as context managers, and many more."
13
13
  readme = "README.md"
14
14
  keywords = ["utilities", "tools", "helpers", "development", "python"]
@@ -53,6 +53,9 @@ data_science = [
53
53
  "scikit-learn",
54
54
  "PyWavelets",
55
55
  ]
56
+ redis = [
57
+ "redis[hiredis]",
58
+ ]
56
59
 
57
60
  [project.urls]
58
61
  Homepage = "https://stoupy51.github.io/stouputils"
@@ -18,6 +18,7 @@ from .ctx import *
18
18
  from .decorators import *
19
19
  from .image import *
20
20
  from .io import *
21
+ from .lock import *
21
22
  from .parallel import *
22
23
  from .print import *
23
24
  from .typing import *
@@ -8,6 +8,7 @@ from .ctx import *
8
8
  from .decorators import *
9
9
  from .image import *
10
10
  from .io import *
11
+ from .lock import *
11
12
  from .parallel import *
12
13
  from .print import *
13
14
  from .typing import *
@@ -99,7 +99,7 @@ def launch_tests(root_dir: str, strict: bool = True, pattern: str = "*") -> int:
99
99
  import fnmatch
100
100
  modules_file_paths = [
101
101
  path for path in modules_file_paths
102
- if fnmatch.fnmatch(path.split(".")[-1], pattern)
102
+ if fnmatch.fnmatch(path, pattern)
103
103
  ]
104
104
  if not modules_file_paths:
105
105
  raise ValueError(f"No modules matching pattern '{pattern}' found in '{relative_path(root_dir)}'")
@@ -211,7 +211,7 @@ def timeout(
211
211
  def decorator(func: Callable[..., Any]) -> Callable[..., Any]:
212
212
  # Check if we can use signal-based timeout (Unix only)
213
213
  import os
214
- use_signal: bool = os.name != 'nt' # Not Windows
214
+ use_signal: bool = os.name != "nt" # Not Windows
215
215
 
216
216
  if use_signal:
217
217
  try:
@@ -401,7 +401,7 @@ def numpy_to_obj(
401
401
 
402
402
  # Apply marching cubes algorithm to extract mesh
403
403
  verts, faces, _, _ = cast(
404
- tuple[NDArray[np.floating], NDArray[np.integer], NDArray[np.floating], NDArray[np.floating]],
404
+ "tuple[NDArray[np.floating], NDArray[np.integer], NDArray[np.floating], NDArray[np.floating]]",
405
405
  measure.marching_cubes(volume, level=threshold, step_size=step_size, allow_degenerate=False) # type: ignore
406
406
  )
407
407
 
@@ -3,7 +3,7 @@ from .io import super_open as super_open
3
3
  from .print import debug as debug, info as info
4
4
  from PIL import Image
5
5
  from collections.abc import Callable
6
- from numpy.typing import NDArray
6
+ from numpy.typing import NDArray as NDArray
7
7
  from typing import Any, TypeVar
8
8
 
9
9
  PIL_Image_or_NDArray = TypeVar('PIL_Image_or_NDArray', bound='Image.Image | NDArray[np.number]')
@@ -338,7 +338,7 @@ def super_copy(src: str, dst: str, create_dir: bool = True, symlink: bool = Fals
338
338
  src (str): The source path
339
339
  dst (str): The destination path
340
340
  create_dir (bool): Whether to create the directory if it doesn't exist (default: True)
341
- symlink (bool): Whether to create a symlink instead of copying (Linux only, default: True)
341
+ symlink (bool): Whether to create a symlink instead of copying (Linux only)
342
342
  Returns:
343
343
  str: The destination path
344
344
  """
@@ -144,7 +144,7 @@ def super_copy(src: str, dst: str, create_dir: bool = True, symlink: bool = Fals
144
144
  \t\tsrc (str): The source path
145
145
  \t\tdst (str): The destination path
146
146
  \t\tcreate_dir (bool): Whether to create the directory if it doesn't exist (default: True)
147
- \t\tsymlink (bool): Whether to create a symlink instead of copying (Linux only, default: True)
147
+ \t\tsymlink (bool): Whether to create a symlink instead of copying (Linux only)
148
148
  \tReturns:
149
149
  \t\tstr: The destination path
150
150
  \t"""
@@ -0,0 +1,36 @@
1
+ """ Inter-process locks implementing First-In-First-Out (FIFO).
2
+
3
+ Source:
4
+ - https://en.wikipedia.org/wiki/File_locking
5
+ - https://en.wikipedia.org/wiki/Starvation_%28computer_science%29
6
+ - https://en.wikipedia.org/wiki/FIFO_and_LIFO_accounting
7
+
8
+ Provides three classes:
9
+
10
+ - LockFifo: basic cross-process lock using filesystem (POSIX via fcntl, Windows via msvcrt).
11
+ - RLockFifo: reentrant per-(process,thread) lock built on top of LockFifo.
12
+ - RedisLockFifo: distributed lock using redis (optional dependency).
13
+
14
+ Usage
15
+ -----
16
+ >>> import stouputils as stp
17
+ >>> with stp.LockFifo("some_directory/my.lock", timeout=5):
18
+ ... pass
19
+
20
+ >>> with stp.RLockFifo("some_directory/my_r.lock", timeout=5):
21
+ ... pass
22
+
23
+ >>> def _redis_example():
24
+ ... with stp.RedisLockFifo("my_redis_lock", timeout=5):
25
+ ... pass
26
+ >>> import os
27
+ >>> if os.name != "nt":
28
+ ... _redis_example()
29
+ """
30
+ # Imports
31
+ from .base import *
32
+ from .queue import *
33
+ from .re_entrant import *
34
+ from .redis_fifo import *
35
+ from .shared import *
36
+
@@ -0,0 +1,5 @@
1
+ from .base import *
2
+ from .queue import *
3
+ from .re_entrant import *
4
+ from .redis_fifo import *
5
+ from .shared import *