stouputils 1.19.1__tar.gz → 1.19.3__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 (161) hide show
  1. {stouputils-1.19.1 → stouputils-1.19.3}/PKG-INFO +1 -1
  2. {stouputils-1.19.1 → stouputils-1.19.3}/pyproject.toml +1 -1
  3. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/decorators.py +1 -4
  4. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/decorators.pyi +1 -1
  5. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/capturer.py +16 -9
  6. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/capturer.pyi +15 -5
  7. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/typing.py +2 -2
  8. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/typing.pyi +1 -1
  9. {stouputils-1.19.1 → stouputils-1.19.3}/README.md +0 -0
  10. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/__init__.py +0 -0
  11. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/__init__.pyi +0 -0
  12. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/__main__.py +0 -0
  13. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/_deprecated.py +0 -0
  14. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/_deprecated.pyi +0 -0
  15. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/all_doctests.py +0 -0
  16. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/all_doctests.pyi +0 -0
  17. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/__init__.py +0 -0
  18. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/__init__.pyi +0 -0
  19. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/automatic_docs.py +0 -0
  20. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/automatic_docs.pyi +0 -0
  21. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/upscaler/__init__.py +0 -0
  22. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/upscaler/__init__.pyi +0 -0
  23. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/upscaler/config.py +0 -0
  24. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/upscaler/config.pyi +0 -0
  25. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/upscaler/image.py +0 -0
  26. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/upscaler/image.pyi +0 -0
  27. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/upscaler/video.py +0 -0
  28. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/applications/upscaler/video.pyi +0 -0
  29. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/archive.py +0 -0
  30. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/archive.pyi +0 -0
  31. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/backup.py +0 -0
  32. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/backup.pyi +0 -0
  33. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/collections.py +0 -0
  34. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/collections.pyi +0 -0
  35. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/__init__.py +0 -0
  36. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/__init__.pyi +0 -0
  37. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/cd_utils.py +0 -0
  38. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/cd_utils.pyi +0 -0
  39. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/github.py +0 -0
  40. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/github.pyi +0 -0
  41. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/pypi.py +0 -0
  42. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/pypi.pyi +0 -0
  43. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/pyproject.py +0 -0
  44. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/pyproject.pyi +0 -0
  45. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/stubs.py +0 -0
  46. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/continuous_delivery/stubs.pyi +0 -0
  47. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/ctx.py +0 -0
  48. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/ctx.pyi +0 -0
  49. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/config/get.py +0 -0
  50. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/config/set.py +0 -0
  51. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/__init__.py +0 -0
  52. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/auto_contrast.py +0 -0
  53. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/axis_flip.py +0 -0
  54. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/bias_field_correction.py +0 -0
  55. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/binary_threshold.py +0 -0
  56. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/blur.py +0 -0
  57. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/brightness.py +0 -0
  58. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/canny.py +0 -0
  59. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/clahe.py +0 -0
  60. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/common.py +0 -0
  61. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/contrast.py +0 -0
  62. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/curvature_flow_filter.py +0 -0
  63. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/denoise.py +0 -0
  64. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/histogram_equalization.py +0 -0
  65. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/invert.py +0 -0
  66. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/laplacian.py +0 -0
  67. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/median_blur.py +0 -0
  68. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/noise.py +0 -0
  69. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/normalize.py +0 -0
  70. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/random_erase.py +0 -0
  71. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/resize.py +0 -0
  72. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/rotation.py +0 -0
  73. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/salt_pepper.py +0 -0
  74. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/sharpening.py +0 -0
  75. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/shearing.py +0 -0
  76. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/threshold.py +0 -0
  77. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/translation.py +0 -0
  78. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image/zoom.py +0 -0
  79. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image_augmentation.py +0 -0
  80. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/image_preprocess.py +0 -0
  81. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/prosthesis_detection.py +0 -0
  82. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/data_processing/technique.py +0 -0
  83. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/dataset/__init__.py +0 -0
  84. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/dataset/dataset.py +0 -0
  85. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/dataset/dataset_loader.py +0 -0
  86. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/dataset/grouping_strategy.py +0 -0
  87. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/dataset/image_loader.py +0 -0
  88. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/dataset/xy_tuple.py +0 -0
  89. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/metric_dictionnary.py +0 -0
  90. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/metric_utils.py +0 -0
  91. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/mlflow_utils.py +0 -0
  92. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/abstract_model.py +0 -0
  93. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/all.py +0 -0
  94. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/base_keras.py +0 -0
  95. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/all.py +0 -0
  96. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/convnext.py +0 -0
  97. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/densenet.py +0 -0
  98. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/efficientnet.py +0 -0
  99. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/mobilenet.py +0 -0
  100. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/resnet.py +0 -0
  101. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/squeezenet.py +0 -0
  102. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/vgg.py +0 -0
  103. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras/xception.py +0 -0
  104. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/callbacks/__init__.py +0 -0
  105. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/callbacks/colored_progress_bar.py +0 -0
  106. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/callbacks/learning_rate_finder.py +0 -0
  107. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/callbacks/model_checkpoint_v2.py +0 -0
  108. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/callbacks/progressive_unfreezing.py +0 -0
  109. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/callbacks/warmup_scheduler.py +0 -0
  110. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/losses/__init__.py +0 -0
  111. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/losses/next_generation_loss.py +0 -0
  112. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/keras_utils/visualizations.py +0 -0
  113. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/model_interface.py +0 -0
  114. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/models/sandbox.py +0 -0
  115. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/range_tuple.py +0 -0
  116. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/scripts/augment_dataset.py +0 -0
  117. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/scripts/exhaustive_process.py +0 -0
  118. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/scripts/preprocess_dataset.py +0 -0
  119. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/scripts/routine.py +0 -0
  120. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/data_science/utils.py +0 -0
  121. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/image.py +0 -0
  122. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/image.pyi +0 -0
  123. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/__init__.py +0 -0
  124. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/__init__.pyi +0 -0
  125. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/common.py +0 -0
  126. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/common.pyi +0 -0
  127. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/downloader.py +0 -0
  128. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/downloader.pyi +0 -0
  129. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/linux.py +0 -0
  130. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/linux.pyi +0 -0
  131. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/main.py +0 -0
  132. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/main.pyi +0 -0
  133. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/windows.py +0 -0
  134. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/installer/windows.pyi +0 -0
  135. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/io.py +0 -0
  136. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/io.pyi +0 -0
  137. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/__init__.py +0 -0
  138. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/__init__.pyi +0 -0
  139. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/base.py +0 -0
  140. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/base.pyi +0 -0
  141. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/queue.py +0 -0
  142. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/queue.pyi +0 -0
  143. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/re_entrant.py +0 -0
  144. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/re_entrant.pyi +0 -0
  145. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/redis_fifo.py +0 -0
  146. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/redis_fifo.pyi +0 -0
  147. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/shared.py +0 -0
  148. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/lock/shared.pyi +0 -0
  149. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/__init__.py +0 -0
  150. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/__init__.pyi +0 -0
  151. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/common.py +0 -0
  152. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/common.pyi +0 -0
  153. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/multi.py +0 -0
  154. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/multi.pyi +0 -0
  155. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/subprocess.py +0 -0
  156. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/parallel/subprocess.pyi +0 -0
  157. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/print.py +0 -0
  158. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/print.pyi +0 -0
  159. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/py.typed +0 -0
  160. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/version_pkg.py +0 -0
  161. {stouputils-1.19.1 → stouputils-1.19.3}/stouputils/version_pkg.pyi +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: stouputils
3
- Version: 1.19.1
3
+ Version: 1.19.3
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
@@ -8,7 +8,7 @@ module-root = ""
8
8
 
9
9
  [project]
10
10
  name = "stouputils"
11
- version = "1.19.1"
11
+ version = "1.19.3"
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"]
@@ -619,15 +619,12 @@ def _get_wrapper_name(decorator_name: str, func: Callable[..., Any]) -> str:
619
619
 
620
620
 
621
621
  def _set_wrapper_name(wrapper: Callable[..., Any], name: str) -> None:
622
- """ Set the wrapper function's visible name, qualname and code object name for clearer tracebacks.
622
+ """ Set the wrapper function's visible name (code object name) for clearer tracebacks.
623
623
 
624
624
  Args:
625
625
  wrapper (Callable[..., Any]): Wrapper function to update
626
626
  name (str): New name to set
627
627
  """
628
- # __name__ affects repr and some introspection
629
- wrapper.__name__ = name
630
-
631
628
  # Update the code object's co_name so tracebacks show the new name
632
629
  try:
633
630
  wrapper.__code__ = wrapper.__code__.replace(co_name=name)
@@ -251,7 +251,7 @@ def _get_wrapper_name(decorator_name: str, func: Callable[..., Any]) -> str:
251
251
  \t\tstr: Combined name for the wrapper function (e.g., "stouputils.decorators.handle_error@function_name")
252
252
  \t'''
253
253
  def _set_wrapper_name(wrapper: Callable[..., Any], name: str) -> None:
254
- """ Set the wrapper function's visible name, qualname and code object name for clearer tracebacks.
254
+ """ Set the wrapper function's visible name (code object name) for clearer tracebacks.
255
255
 
256
256
  \tArgs:
257
257
  \t\twrapper\t(Callable[..., Any]):\tWrapper function to update
@@ -27,13 +27,23 @@ class CaptureOutput:
27
27
  The class creates an os.pipe(), marks fds as inheritable (for spawn method),
28
28
  provides methods to start a listener thread that reads from the pipe and writes
29
29
  to the main process's sys.stdout/sys.stderr, and to close/join the listener.
30
+
31
+ >>> capturer = CaptureOutput(encoding="utf-8", errors="replace")
32
+
33
+ >>> pass # send capturer object to subprocess
34
+ >>> capturer.redirect() # Redirects sys.stdout/sys.stderr to the pipe
35
+
36
+ >>> pass # in parent process:
37
+ >>> capturer.parent_close_write() # Close parent's write end
38
+ >>> capturer.start_listener() # Start listener thread to read from pipe
39
+ >>> ... # do other work
40
+ >>> capturer.join_listener() # Wait for listener to finish (on EOF)
30
41
  """
31
- def __init__(self, encoding: str = "utf-8", errors: str = "replace", chunk_size: int = 1024):
42
+ def __init__(self, encoding: str = "utf-8", errors: str = "replace"):
32
43
  import multiprocessing as mp
33
44
  import threading
34
45
  self.encoding: str = encoding
35
46
  self.errors: str = errors
36
- self.chunk_size: int = chunk_size
37
47
  self.read_conn, self.write_conn = mp.Pipe(duplex=False)
38
48
  self.read_fd = self.read_conn.fileno()
39
49
  self.write_fd = self.write_conn.fileno()
@@ -91,10 +101,11 @@ class CaptureOutput:
91
101
  nonlocal buffer
92
102
  try:
93
103
  while True:
94
- # Read a chunk from the pipe, stop loop on error
104
+ # Read the next message from the pipe. Use recv_bytes() without a maxlength
105
+ # so we don't error when a single message is larger than our chunk size.
95
106
  try:
96
- data: bytes = self.read_conn.recv_bytes(self.chunk_size)
97
- except EOFError:
107
+ data: bytes = self.read_conn.recv_bytes()
108
+ except (EOFError, OSError, BrokenPipeError):
98
109
  _handle_buffer()
99
110
  break
100
111
 
@@ -104,10 +115,6 @@ class CaptureOutput:
104
115
  except Exception:
105
116
  chunk = data.decode(self.encoding, errors="replace")
106
117
  buffer += chunk
107
-
108
- # Periodically flush large buffers to avoid holding too much memory
109
- if len(buffer) > self.chunk_size * 4:
110
- _handle_buffer()
111
118
  finally:
112
119
  safe_close(self.read_conn)
113
120
  self.read_fd = -1
@@ -12,20 +12,30 @@ class PipeWriter:
12
12
  def flush(self) -> None: ...
13
13
 
14
14
  class CaptureOutput:
15
- """ Utility to capture stdout/stderr from a subprocess and relay it to the parent's stdout.
15
+ ''' Utility to capture stdout/stderr from a subprocess and relay it to the parent\'s stdout.
16
16
 
17
17
  \tThe class creates an os.pipe(), marks fds as inheritable (for spawn method),
18
18
  \tprovides methods to start a listener thread that reads from the pipe and writes
19
- \tto the main process's sys.stdout/sys.stderr, and to close/join the listener.
20
- \t"""
19
+ \tto the main process\'s sys.stdout/sys.stderr, and to close/join the listener.
20
+
21
+ \t>>> capturer = CaptureOutput(encoding="utf-8", errors="replace")
22
+
23
+ \t>>> pass # send capturer object to subprocess
24
+ \t>>> capturer.redirect() # Redirects sys.stdout/sys.stderr to the pipe
25
+
26
+ \t>>> pass # in parent process:
27
+ \t>>> capturer.parent_close_write() # Close parent\'s write end
28
+ \t>>> capturer.start_listener() # Start listener thread to read from pipe
29
+ \t>>> ... # do other work
30
+ \t>>> capturer.join_listener() # Wait for listener to finish (on EOF)
31
+ \t'''
21
32
  encoding: str
22
33
  errors: str
23
- chunk_size: int
24
34
  read_fd: Incomplete
25
35
  write_fd: Incomplete
26
36
  _thread: threading.Thread | None
27
37
  _reader_file: IO[Any] | None
28
- def __init__(self, encoding: str = 'utf-8', errors: str = 'replace', chunk_size: int = 1024) -> None: ...
38
+ def __init__(self, encoding: str = 'utf-8', errors: str = 'replace') -> None: ...
29
39
  def __repr__(self) -> str: ...
30
40
  def __getstate__(self) -> dict[str, Any]: ...
31
41
  def redirect(self) -> None:
@@ -3,7 +3,7 @@ This module provides utilities for typing enhancements such as JSON type aliases
3
3
  - JsonDict
4
4
  - JsonList
5
5
  - JsonMap
6
- - MutJsonMap
6
+ - JsonMutMap
7
7
  - IterAny
8
8
  """
9
9
 
@@ -19,7 +19,7 @@ JsonList = list[Any]
19
19
  """ A type alias for JSON lists """
20
20
  JsonMap = Mapping[str, Any]
21
21
  """ A type alias for JSON mapping """
22
- MutJsonMap = MutableMapping[str, Any]
22
+ JsonMutMap = MutableMapping[str, Any]
23
23
  """ A type alias for mutable JSON mapping """
24
24
  IterAny = Iterable[Any]
25
25
  """ A type alias for iterable of any type """
@@ -4,7 +4,7 @@ from typing import Any
4
4
  JsonDict = dict[str, Any]
5
5
  JsonList = list[Any]
6
6
  JsonMap = Mapping[str, Any]
7
- MutJsonMap = MutableMapping[str, Any]
7
+ JsonMutMap = MutableMapping[str, Any]
8
8
  IterAny = Iterable[Any]
9
9
 
10
10
  def convert_to_serializable(obj: Any) -> Any:
File without changes