stouputils 1.3.12__tar.gz → 1.3.13__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 (107) hide show
  1. {stouputils-1.3.12 → stouputils-1.3.13}/PKG-INFO +1 -1
  2. {stouputils-1.3.12 → stouputils-1.3.13}/pyproject.toml +1 -1
  3. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/archive.py +44 -6
  4. {stouputils-1.3.12 → stouputils-1.3.13}/.gitignore +0 -0
  5. {stouputils-1.3.12 → stouputils-1.3.13}/LICENSE +0 -0
  6. {stouputils-1.3.12 → stouputils-1.3.13}/README.md +0 -0
  7. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/__init__.py +0 -0
  8. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/all_doctests.py +0 -0
  9. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/applications/__init__.py +0 -0
  10. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/applications/automatic_docs.py +0 -0
  11. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/applications/upscaler/__init__.py +0 -0
  12. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/applications/upscaler/config.py +0 -0
  13. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/applications/upscaler/image.py +0 -0
  14. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/applications/upscaler/video.py +0 -0
  15. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/backup.py +0 -0
  16. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/collections.py +0 -0
  17. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/continuous_delivery/__init__.py +0 -0
  18. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/continuous_delivery/cd_utils.py +0 -0
  19. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/continuous_delivery/github.py +0 -0
  20. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/continuous_delivery/pypi.py +0 -0
  21. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/continuous_delivery/pyproject.py +0 -0
  22. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/ctx.py +0 -0
  23. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/config/get.py +0 -0
  24. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/config/set.py +0 -0
  25. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/__init__.py +0 -0
  26. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/auto_contrast.py +0 -0
  27. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/axis_flip.py +0 -0
  28. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/bias_field_correction.py +0 -0
  29. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/binary_threshold.py +0 -0
  30. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/blur.py +0 -0
  31. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/brightness.py +0 -0
  32. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/canny.py +0 -0
  33. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/clahe.py +0 -0
  34. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/common.py +0 -0
  35. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/contrast.py +0 -0
  36. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/curvature_flow_filter.py +0 -0
  37. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/denoise.py +0 -0
  38. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/histogram_equalization.py +0 -0
  39. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/invert.py +0 -0
  40. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/laplacian.py +0 -0
  41. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/median_blur.py +0 -0
  42. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/noise.py +0 -0
  43. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/normalize.py +0 -0
  44. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/random_erase.py +0 -0
  45. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/resize.py +0 -0
  46. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/rotation.py +0 -0
  47. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/salt_pepper.py +0 -0
  48. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/sharpening.py +0 -0
  49. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/shearing.py +0 -0
  50. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/threshold.py +0 -0
  51. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/translation.py +0 -0
  52. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image/zoom.py +0 -0
  53. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image_augmentation.py +0 -0
  54. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/image_preprocess.py +0 -0
  55. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/prosthesis_detection.py +0 -0
  56. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/data_processing/technique.py +0 -0
  57. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/dataset/__init__.py +0 -0
  58. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/dataset/dataset.py +0 -0
  59. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/dataset/dataset_loader.py +0 -0
  60. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/dataset/grouping_strategy.py +0 -0
  61. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/dataset/image_loader.py +0 -0
  62. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/dataset/xy_tuple.py +0 -0
  63. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/metric_dictionnary.py +0 -0
  64. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/metric_utils.py +0 -0
  65. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/mlflow_utils.py +0 -0
  66. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/abstract_model.py +0 -0
  67. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/all.py +0 -0
  68. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/base_keras.py +0 -0
  69. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/all.py +0 -0
  70. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/convnext.py +0 -0
  71. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/densenet.py +0 -0
  72. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/efficientnet.py +0 -0
  73. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/mobilenet.py +0 -0
  74. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/resnet.py +0 -0
  75. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/squeezenet.py +0 -0
  76. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/vgg.py +0 -0
  77. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras/xception.py +0 -0
  78. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/callbacks/__init__.py +0 -0
  79. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/callbacks/colored_progress_bar.py +0 -0
  80. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/callbacks/learning_rate_finder.py +0 -0
  81. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/callbacks/model_checkpoint_v2.py +0 -0
  82. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/callbacks/progressive_unfreezing.py +0 -0
  83. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/callbacks/warmup_scheduler.py +0 -0
  84. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/losses/__init__.py +0 -0
  85. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/losses/next_generation_loss.py +0 -0
  86. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/keras_utils/visualizations.py +0 -0
  87. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/model_interface.py +0 -0
  88. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/models/sandbox.py +0 -0
  89. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/range_tuple.py +0 -0
  90. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/scripts/augment_dataset.py +0 -0
  91. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/scripts/exhaustive_process.py +0 -0
  92. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/scripts/preprocess_dataset.py +0 -0
  93. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/scripts/routine.py +0 -0
  94. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/data_science/utils.py +0 -0
  95. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/decorators.py +0 -0
  96. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/dont_look/zip_file_override.py +0 -0
  97. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/image.py +0 -0
  98. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/installer/__init__.py +0 -0
  99. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/installer/common.py +0 -0
  100. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/installer/downloader.py +0 -0
  101. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/installer/linux.py +0 -0
  102. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/installer/main.py +0 -0
  103. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/installer/windows.py +0 -0
  104. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/io.py +0 -0
  105. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/parallel.py +0 -0
  106. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/print.py +0 -0
  107. {stouputils-1.3.12 → stouputils-1.3.13}/stouputils/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: stouputils
3
- Version: 1.3.12
3
+ Version: 1.3.13
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
  Project-URL: Homepage, https://github.com/Stoupy51/stouputils
6
6
  Project-URL: Issues, https://github.com/Stoupy51/stouputils/issues
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
5
5
 
6
6
  [project]
7
7
  name = "stouputils"
8
- version = "1.3.12"
8
+ version = "1.3.13"
9
9
  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."
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.10"
@@ -9,6 +9,7 @@ This module provides functions for creating and managing archives.
9
9
  """
10
10
 
11
11
  # Imports
12
+ import fnmatch
12
13
  import os
13
14
  from zipfile import ZIP_DEFLATED, ZipFile, ZipInfo
14
15
 
@@ -23,7 +24,8 @@ def make_archive(
23
24
  source: str,
24
25
  destinations: list[str] | str | None = None,
25
26
  override_time: None | tuple[int, int, int, int, int, int] = None,
26
- create_dir: bool = False
27
+ create_dir: bool = False,
28
+ ignore_patterns: str | None = None,
27
29
  ) -> bool:
28
30
  """ Create a zip archive from a source directory with consistent file timestamps.
29
31
  (Meaning deterministic zip file each time)
@@ -38,6 +40,7 @@ def make_archive(
38
40
  override_time (None | tuple[int, ...]): The constant time to use for the archive
39
41
  (e.g. (2024, 1, 1, 0, 0, 0) for 2024-01-01 00:00:00)
40
42
  create_dir (bool): Whether to create the destination directory if it doesn't exist
43
+ ignore_patterns (str | None): Glob pattern(s) to ignore files. Can be a single pattern or comma-separated patterns (e.g. "*.pyc" or "*.pyc,__pycache__,*.log")
41
44
  Returns:
42
45
  bool: Always returns True unless any strong error
43
46
  Examples:
@@ -47,6 +50,9 @@ def make_archive(
47
50
  > make_archive("/path/to/source", "/path/to/destination.zip")
48
51
  > make_archive("/path/to/source", ["/path/to/destination.zip", "/path/to/destination2.zip"])
49
52
  > make_archive("src", "hello_from_year_2085.zip", override_time=(2085,1,1,0,0,0))
53
+ > make_archive("src", "output.zip", ignore_patterns="*.pyc")
54
+ > make_archive("src", "output.zip", ignore_patterns="__pycache__")
55
+ > make_archive("src", "output.zip", ignore_patterns="*.pyc,__pycache__,*.log")
50
56
  """
51
57
  # Fix copy_destinations type if needed
52
58
  if destinations is None:
@@ -56,14 +62,46 @@ def make_archive(
56
62
  if not destinations:
57
63
  raise ValueError("destinations must be a list of at least one destination")
58
64
 
65
+ # Create directories if needed
66
+ if create_dir:
67
+ for dest_file in destinations:
68
+ dest_file = clean_path(dest_file)
69
+ parent_dir = os.path.dirname(dest_file)
70
+ if parent_dir and not os.path.exists(parent_dir):
71
+ os.makedirs(parent_dir, exist_ok=True)
72
+
59
73
  # Create the archive
60
74
  destination: str = clean_path(destinations[0])
61
75
  destination = destination if ".zip" in destination else destination + ".zip"
76
+
77
+ # Parse ignore patterns (can be a single pattern or comma-separated patterns)
78
+ ignore_pattern_list: list[str] = []
79
+ if ignore_patterns:
80
+ ignore_pattern_list = [pattern.strip() for pattern in ignore_patterns.split(',')]
81
+
82
+ def should_ignore(path: str) -> bool:
83
+ """Check if a file or directory path should be ignored based on patterns."""
84
+ if not ignore_pattern_list:
85
+ return False
86
+ for pattern in ignore_pattern_list:
87
+ if fnmatch.fnmatch(os.path.basename(path), pattern) or fnmatch.fnmatch(path, pattern):
88
+ return True
89
+ return False
90
+
62
91
  with ZipFile(destination, "w", compression=ZIP_DEFLATED, compresslevel=9) as zip:
63
- for root, _, files in os.walk(source):
92
+ for root, dirs, files in os.walk(source):
93
+ # Filter out ignored directories in-place to prevent walking into them
94
+ dirs[:] = [d for d in dirs if not should_ignore(d)]
95
+
64
96
  for file in files:
65
97
  file_path: str = clean_path(os.path.join(root, file))
66
- info: ZipInfo = ZipInfo(file_path)
98
+ rel_path = os.path.relpath(file_path, source)
99
+
100
+ # Skip files that match any ignore pattern
101
+ if should_ignore(file) or should_ignore(rel_path):
102
+ continue
103
+
104
+ info: ZipInfo = ZipInfo(rel_path)
67
105
  info.compress_type = ZIP_DEFLATED
68
106
  if override_time:
69
107
  info.date_time = override_time
@@ -71,11 +109,11 @@ def make_archive(
71
109
  zip.writestr(info, f.read())
72
110
 
73
111
  # Copy the archive to the destination(s)
74
- for dest_folder in destinations[1:]:
75
- @handle_error(Exception, message=f"Unable to copy '{destination}' to '{dest_folder}'", error_log=LogLevels.WARNING)
112
+ for dest_file in destinations[1:]:
113
+ @handle_error(Exception, message=f"Unable to copy '{destination}' to '{dest_file}'", error_log=LogLevels.WARNING)
76
114
  def internal(src: str, dest: str) -> None:
77
115
  super_copy(src, dest, create_dir=create_dir)
78
- internal(destination, clean_path(dest_folder))
116
+ internal(destination, clean_path(dest_file))
79
117
 
80
118
  return True
81
119
 
File without changes
File without changes
File without changes