abstract-utilities 0.2.2.667__py3-none-any.whl → 0.2.2.679__py3-none-any.whl

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.

Potentially problematic release.


This version of abstract-utilities might be problematic. Click here for more details.

@@ -32,7 +32,8 @@ from .json_utils import (unified_json_loader,
32
32
  safe_write_to_file,
33
33
  safe_save_updated_json_data,
34
34
  get_result_from_data,
35
- flatten_json
35
+ flatten_json,
36
+ to_json_safe
36
37
  )
37
38
 
38
39
  from .directory_utils import *
@@ -45,7 +46,9 @@ from .list_utils import (get_highest_value_obj,
45
46
  compare_lists,
46
47
  get_symetric_difference,
47
48
  list_set,
48
- make_list_it)
49
+ make_list_it,
50
+ get_single_from_list
51
+ )
49
52
  from .time_utils import (get_time_stamp,
50
53
  get_sleep,
51
54
  sleep_count_down,
@@ -1,5 +1,5 @@
1
1
  from ...list_utils import make_list
2
- from ...type_utils import get_media_exts, is_media_type, MIME_TYPES, is_str
2
+ from ...type_utils import get_media_exts, is_media_type, MIME_TYPES, is_str,if_not_bool_default
3
3
  from ...ssh_utils import *
4
4
  from ...env_utils import *
5
5
  from ...read_write_utils import read_from_file,write_to_file
@@ -188,3 +188,13 @@ def collect_filepaths(
188
188
  ) -> List[str]:
189
189
  kwargs['file_type']='f'
190
190
  return collect_globs(*args,**kwargs)
191
+
192
+ def get_filename(path):
193
+ basename = os.path.basename(path)
194
+ filename,ext = os.path.splitext(basename)
195
+ return filename
196
+ def find_files(filename,directory=None,add=None):
197
+ add = if_not_bool_default(add,default=True)
198
+ directory = directory or os.getcwd()
199
+ dirs,files = get_files_and_dirs(directory,add=add)
200
+ return [file for file in files if get_filename(file) == filename]
@@ -326,12 +326,14 @@ def initFuncs(self, mode=None):
326
326
  existing = set(self.__dict__) | set(dir(self))
327
327
 
328
328
  for _, module_name, _ in pkgutil.iter_modules(pkg.__path__):
329
- mod = importlib.import_module(f"{pkg.__name__}.{module_name}")
330
-
331
- for name, obj in inspect.getmembers(mod, inspect.isfunction):
332
- if name not in existing:
333
- setattr(self, name, obj.__get__(self))
329
+ try:
330
+ mod = importlib.import_module(f"{pkg.__name__}.{module_name}")
334
331
 
332
+ for name, obj in inspect.getmembers(mod, inspect.isfunction):
333
+ if name not in existing:
334
+ setattr(self, name, obj.__get__(self))
335
+ except Exception as e:
336
+ logger.error(f"initFuncs({mode}) pkgutil error: {e}")
335
337
  except Exception as e:
336
338
  logger.error(f"initFuncs({mode}) error: {e}")
337
339
 
@@ -1,7 +1,7 @@
1
1
  from ...imports import *
2
2
  from .nullProxy import nullProxy,nullProxy_logger
3
3
  @lru_cache(maxsize=None)
4
- def lazy_import_single(name: str):
4
+ def lazy_import_single(name: str,fallback=None):
5
5
  """
6
6
  Import module safely. If unavailable, return NullProxy.
7
7
  """
@@ -18,24 +18,24 @@ def lazy_import_single(name: str):
18
18
  name,
19
19
  e,
20
20
  )
21
- return nullProxy(name)
21
+ return nullProxy(name,fallback=fallback)
22
22
 
23
- def get_lazy_attr(module_name: str, *attrs):
24
- obj = lazy_import(module_name)
23
+ def get_lazy_attr(module_name: str, *attrs,fallback=None):
24
+ obj = lazy_import(module_name,fallback=fallback)
25
25
 
26
26
  for attr in attrs:
27
27
  try:
28
28
  obj = getattr(obj, attr)
29
29
  except Exception:
30
- return nullProxy(module_name, attrs)
30
+ return nullProxy(module_name, attrs,fallback=fallback)
31
31
 
32
32
  return obj
33
- def lazy_import(name: str, *attrs):
33
+ def lazy_import(name: str, *attrs,fallback=None):
34
34
  """
35
35
  Import module safely. If unavailable, return NullProxy.
36
36
  """
37
37
  if attrs:
38
- obj = get_lazy_attr(name, *attrs)
38
+ obj = get_lazy_attr(name, *attrs,fallback=fallback)
39
39
  else:
40
- obj = lazy_import_single(name)
40
+ obj = lazy_import_single(name,fallback=fallback)
41
41
  return obj
@@ -7,14 +7,19 @@ class nullProxy:
7
7
  Safe, chainable, callable placeholder for missing modules/attributes.
8
8
  """
9
9
 
10
- def __init__(self, name, path=()):
10
+ def __init__(self, name, path=(),fallback=None):
11
11
  self._name = name
12
12
  self._path = path
13
-
13
+ self.fallback=fallback
14
14
  def __getattr__(self, attr):
15
15
  return nullProxy(self._name, self._path + (attr,))
16
16
 
17
17
  def __call__(self, *args, **kwargs):
18
+ if self.fallback is not None:
19
+ try:
20
+ return self.fallback(*args, **kwargs)
21
+ except Exception as e:
22
+ logger.info(f"{e}")
18
23
  nullProxy_logger.warning(
19
24
  "[lazy_import] Call to missing module/attr: %s.%s args=%s kwargs=%s",
20
25
  self._name,
@@ -17,3 +17,5 @@ from dataclasses import dataclass,field,asdict
17
17
  from pprint import pprint
18
18
  from dotenv import load_dotenv
19
19
  from types import MethodType
20
+ from datetime import datetime, date
21
+ from decimal import Decimal
@@ -1,2 +1,2 @@
1
- from ...imports import json,re,os,logging
1
+ from ...imports import *
2
2
  from typing import *
@@ -749,3 +749,29 @@ def flatten_json(data, parent_key='', sep='_'):
749
749
  items.append((parent_key, data))
750
750
 
751
751
  return dict(items)
752
+
753
+
754
+ def to_json_safe(obj):
755
+ if obj is None:
756
+ return None
757
+
758
+ if isinstance(obj, (str, int, float, bool)):
759
+ return obj
760
+
761
+ if isinstance(obj, (datetime, date)):
762
+ return obj.isoformat()
763
+
764
+ if isinstance(obj, Decimal):
765
+ return float(obj)
766
+
767
+ if isinstance(obj, Path):
768
+ return str(obj)
769
+
770
+ if isinstance(obj, dict):
771
+ return {k: to_json_safe(v) for k, v in obj.items()}
772
+
773
+ if isinstance(obj, (list, tuple, set)):
774
+ return [to_json_safe(v) for v in obj]
775
+
776
+ # Fallback (yt-dlp objects, enums, etc.)
777
+ return str(obj)
@@ -197,3 +197,6 @@ def make_list(obj:any) -> list:
197
197
  def make_list_it(obj=None):
198
198
  obj = make_list(obj or [])
199
199
  return obj
200
+
201
+ def get_single_from_list(list_obj,default=None):
202
+ return make_list(list_obj or default)[0]
@@ -1,7 +1,8 @@
1
1
  from .imports import *
2
2
  import os, sys, inspect, logging
3
3
  from logging.handlers import RotatingFileHandler
4
-
4
+ import logging
5
+ from pathlib import Path
5
6
  PACKAGE_NAME = "abstract_utilities" # ← update if needed
6
7
 
7
8
 
@@ -43,39 +44,93 @@ def _resolve_log_root():
43
44
  LOG_ROOT = _resolve_log_root()
44
45
 
45
46
 
46
- def get_logFile(bpName=None, maxBytes=100_000, backupCount=3):
47
- """
48
- A logger that always writes to a safe OS-appropriate path.
49
- Works even when installed through pip.
50
- """
51
- if bpName is None:
52
- frame_idx = _find_caller_frame_index()
53
- frame_info = inspect.stack()[frame_idx]
54
- caller_path = frame_info.filename
55
- bpName = os.path.splitext(os.path.basename(caller_path))[0]
56
- del frame_info
57
-
58
- logger = logging.getLogger(f"{PACKAGE_NAME}.{bpName}")
59
- logger.setLevel(logging.INFO)
60
-
61
- if not logger.handlers:
62
- log_file = os.path.join(LOG_ROOT, f"{bpName}.log")
63
- handler = RotatingFileHandler(log_file, maxBytes=maxBytes, backupCount=backupCount)
47
+ ##def get_logFile(bpName=None, maxBytes=100_000, backupCount=3):
48
+ ## """
49
+ ## A logger that always writes to a safe OS-appropriate path.
50
+ ## Works even when installed through pip.
51
+ ## """
52
+ ## if bpName is None:
53
+ ## frame_idx = _find_caller_frame_index()
54
+ ## frame_info = inspect.stack()[frame_idx]
55
+ ## caller_path = frame_info.filename
56
+ ## bpName = os.path.splitext(os.path.basename(caller_path))[0]
57
+ ## del frame_info
58
+ ##
59
+ ## logger = logging.getLogger(f"{PACKAGE_NAME}.{bpName}")
60
+ ## logger.setLevel(logging.INFO)
61
+ ##
62
+ ## if not logger.handlers:
63
+ ## log_file = os.path.join(LOG_ROOT, f"{bpName}.log")
64
+ ## handler = RotatingFileHandler(log_file, maxBytes=maxBytes, backupCount=backupCount)
65
+ ##
66
+ ## fmt = "%(asctime)s - %(levelname)s - %(pathname)s:%(lineno)d - %(message)s"
67
+ ## formatter = logging.Formatter(fmt)
68
+ ## handler.setFormatter(formatter)
69
+ ##
70
+ ## logger.addHandler(handler)
71
+ ##
72
+ ## # Console handler (optional; can disable for gunicorn)
73
+ ## console = logging.StreamHandler(sys.stdout)
74
+ ## console.setFormatter(formatter)
75
+ ## logger.addHandler(console)
76
+ ##
77
+ ## return logger
78
+ LOG_FORMAT = (
79
+ "[%(asctime)s] "
80
+ "%(levelname)-8s "
81
+ "%(name)s:%(lineno)d | "
82
+ "%(message)s"
83
+ )
84
+
85
+ DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
86
+
87
+
88
+
89
+
90
+ def get_logFile(
91
+ name: str,
92
+ log_dir: str | Path = "logs",
93
+ level: int = logging.INFO,
94
+ console: bool = True,
95
+ max_bytes: int = 5 * 1024 * 1024,
96
+ backup_count: int = 5,
97
+ ):
98
+ logger = logging.getLogger(name)
99
+
100
+ if logger.handlers:
101
+ return logger
102
+
103
+ logger.setLevel(level)
104
+
105
+ formatter = logging.Formatter(LOG_FORMAT, DATE_FORMAT)
64
106
 
65
- fmt = "%(asctime)s - %(levelname)s - %(pathname)s:%(lineno)d - %(message)s"
66
- formatter = logging.Formatter(fmt)
67
- handler.setFormatter(formatter)
107
+ try:
108
+ log_dir = Path(log_dir)
109
+ log_dir.mkdir(parents=True, exist_ok=True)
110
+
111
+ file_handler = RotatingFileHandler(
112
+ log_dir / f"{name}.log",
113
+ maxBytes=max_bytes,
114
+ backupCount=backup_count,
115
+ encoding="utf-8",
116
+ )
117
+ file_handler.setFormatter(formatter)
118
+ logger.addHandler(file_handler)
68
119
 
69
- logger.addHandler(handler)
120
+ except PermissionError:
121
+ # 🔒 Import-safe fallback
122
+ logger.addHandler(logging.NullHandler())
70
123
 
71
- # Console handler (optional; can disable for gunicorn)
72
- console = logging.StreamHandler(sys.stdout)
73
- console.setFormatter(formatter)
74
- logger.addHandler(console)
124
+ if console:
125
+ console_handler = logging.StreamHandler()
126
+ console_handler.setFormatter(formatter)
127
+ logger.addHandler(console_handler)
75
128
 
129
+ logger.propagate = False
76
130
  return logger
77
131
 
78
132
 
133
+
79
134
  def _find_caller_frame_index():
80
135
  """Find the correct caller module outside this logger."""
81
136
  for idx, frame_info in enumerate(inspect.stack()):
@@ -15,6 +15,38 @@ Usage:
15
15
  from .imports import *
16
16
  _FILE_PATH_KEYS = ['file', 'filepath', 'file_path', 'path', 'directory', 'f', 'dst', 'dest']
17
17
  _CONTENTS_KEYS = ['cont', 'content', 'contents', 'data', 'datas', 'dat', 'src', 'source']
18
+ from pathlib import Path
19
+ import uuid
20
+ import shlex
21
+
22
+ _STAGE_ROOT = Path("/var/tmp/abstract_stage")
23
+
24
+
25
+ def _stage_file(contents: str, suffix=".tmp") -> Path:
26
+ """
27
+ Write contents to a local staging file.
28
+ """
29
+ _STAGE_ROOT.mkdir(parents=True, exist_ok=True)
30
+ path = _STAGE_ROOT / f"{uuid.uuid4().hex}{suffix}"
31
+ path.write_text(str(contents), encoding="utf-8")
32
+ return path
33
+
34
+
35
+ def _install_file(staged: Path, dest: str, **kwargs) -> str:
36
+ """
37
+ Atomically install a staged file to destination using sudo install.
38
+ """
39
+ cmd = (
40
+ f"sudo install -D -m 0644 "
41
+ f"{shlex.quote(str(staged))} "
42
+ f"{shlex.quote(dest)}"
43
+ )
44
+ return run_local_cmd(
45
+ cmd=cmd,
46
+ password=kwargs.get("password"),
47
+ key=kwargs.get("key"),
48
+ env_path=kwargs.get("env_path"),
49
+ )
18
50
 
19
51
 
20
52
  # --- Helper utilities --------------------------------------------------------
@@ -251,54 +283,53 @@ def _should_use_remote(**kwargs) -> bool:
251
283
 
252
284
  def _write_to_file(contents: str, file_path: str, **kwargs) -> str:
253
285
  """
254
- Safe writer that handles arbitrarily large files.
255
- Uses native I/O for local writes and streams for remote.
286
+ Unified writer using stage install model.
256
287
  """
257
288
 
258
289
  remote = _should_use_remote(**kwargs)
259
- dirname = os.path.dirname(file_path)
260
- make_dirs(dirname, exist_ok=True, **kwargs)
261
290
 
262
- # --- Local write (always robust) ---
263
- if not remote:
291
+ # --- Remote path (unchanged conceptually) ---
292
+ if remote:
293
+ tmp_path = _stage_file(contents)
294
+
295
+ user_at_host = kwargs["user_at_host"]
296
+ password = kwargs.get("password")
297
+ key = kwargs.get("key")
298
+
299
+ # copy staged file
300
+ scp_cmd = (
301
+ f"scp {shlex.quote(str(tmp_path))} "
302
+ f"{shlex.quote(user_at_host)}:{shlex.quote(file_path)}"
303
+ )
304
+ return run_pruned_func(
305
+ run_local_cmd,
306
+ cmd=scp_cmd,
307
+ password=password,
308
+ key=key,
309
+ **kwargs
310
+ )
311
+
312
+ # --- Local path ---
313
+ try:
314
+ # Attempt direct write for non-privileged paths
315
+ os.makedirs(os.path.dirname(file_path) or ".", exist_ok=True)
264
316
  with open(file_path, "w", encoding="utf-8") as f:
265
- f.write(contents)
317
+ f.write(str(contents))
266
318
  return file_path
267
319
 
268
- # --- Remote write ---
269
- # Stream data through SSH using base64 chunks instead of huge one-liner
270
- import io
271
- import base64
272
-
273
- # Write to a temporary file locally first
274
- tmp_path = "/tmp/_abstract_write.tmp"
275
- with open(tmp_path, "w", encoding="utf-8") as tmpf:
276
- tmpf.write(contents)
277
-
278
- user_at_host = kwargs["user_at_host"]
279
- password = kwargs.get("password")
280
- key = kwargs.get("key")
281
-
282
- # Use scp for remote write — no shell arg limits
283
- scp_cmd = f"scp {shlex.quote(tmp_path)} {user_at_host}:{shlex.quote(file_path)}"
284
- return run_pruned_func(
285
- run_local_cmd,
286
- cmd=scp_cmd,
287
- password=password,
288
- key=key,
289
- **kwargs
290
- )
320
+ except (PermissionError, FileNotFoundError):
321
+ # Privileged path stage + install
322
+ staged = _stage_file(contents)
323
+ return _install_file(staged, file_path, **kwargs)
324
+
291
325
 
292
326
 
293
327
  def write_to_file(*, contents: str, file_path: str, **kwargs):
294
328
  """
295
- Error-handled wrapper.
329
+ Error-handled public writer.
296
330
  """
297
-
298
331
  try:
299
- result = _write_to_file(contents=contents, file_path=file_path, **kwargs)
300
- return result
301
-
332
+ return _write_to_file(contents=contents, file_path=file_path, **kwargs)
302
333
  except Exception as e:
303
334
  print("WRITE ERROR:", e)
304
335
  raise RuntimeError(f"Failed writing: {file_path}")
@@ -114,3 +114,7 @@ def is_strings_in_string(strings, parts):
114
114
  if not parts:
115
115
  return []
116
116
  return parts
117
+ def if_not_bool_default(value,default=None):
118
+ if not isinstance(value,bool):
119
+ value = default
120
+ return value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: abstract_utilities
3
- Version: 0.2.2.667
3
+ Version: 0.2.2.679
4
4
  Summary: abstract_utilities is a collection of utility modules providing a variety of functions to aid in tasks such as data comparison, list manipulation, JSON handling, string manipulation, mathematical computations, and time operations.
5
5
  Home-page: https://github.com/AbstractEndeavors/abstract_utilities
6
6
  Author: putkoff
@@ -1,4 +1,4 @@
1
- abstract_utilities/__init__.py,sha256=kQ_uhBIlyECizBuYLMRHtwgO4fnlKaGbnXki5jM94IM,5258
1
+ abstract_utilities/__init__.py,sha256=dHCOxtfHTIgNEXqpvJ7kUPGi7io935nlViOuA7zZDhU,5370
2
2
  abstract_utilities/abstract_classes.py,sha256=A6-FNDQb2P_jcyt01Kc5SuY2QawLVKNjQ-rDGfsn4rA,2461
3
3
  abstract_utilities/circular_import_finder.py,sha256=bs1O4NjSDrJ2cC8whPfZPouNDr1oxdMCFKUIfRyIEB4,8415
4
4
  abstract_utilities/circular_import_finder2.py,sha256=n6OFjiIsxxw2u_bf8wcQ81fzQzXhsD4VYWzOC9pDYXw,3869
@@ -10,7 +10,7 @@ abstract_utilities/error_utils.py,sha256=dSMIM3TKe4e9i_akObyjDwy3Zu4fnoWRK9hucg_
10
10
  abstract_utilities/global_utils.py,sha256=UkCS1nE561bVbxWsH-YQdFPSeZFMYXV7xg-DAtGUvrI,2204
11
11
  abstract_utilities/hash_utils.py,sha256=u7t209ERD9aGONZHqmkYtiQRRadD2qG5ICSTxlYlZMc,206
12
12
  abstract_utilities/history_utils.py,sha256=2bG8hMSRzLWMae4mpd2sf1esYtqT2D_3MDxeJnAE2Jw,1633
13
- abstract_utilities/imports.py,sha256=vhZLc7hzcpkeZJSAo8HjoM-nW7ld4cvlxxJqB1ZfRxU,916
13
+ abstract_utilities/imports.py,sha256=cPUHsQFHxJANgX2SHNK3aMQAPO446GgSWNh-4_kbk5s,980
14
14
  abstract_utilities/json_utils.py,sha256=YA4zoBRAsVjdU-BjFd1L5z81Y5X-NuwKrQW5L992EY4,27609
15
15
  abstract_utilities/list_utils.py,sha256=i1fZ_kZ0mf_ei6w0MOkuEieRiyF-ReeAXzIdoRI1cvo,6298
16
16
  abstract_utilities/log_utils.py,sha256=W74Y-CmdQP4Kj88HmAgejVxWgyWlvgCKMwLvOfyFf9c,9393
@@ -94,13 +94,13 @@ abstract_utilities/file_utils/imports/clean_imps.py,sha256=DB_NEKR8YLla5qCkTMuNs
94
94
  abstract_utilities/file_utils/imports/constants.py,sha256=uPsIYVRs1Rf0SQ4pRdAke-tuc28LtgaSHSDS4_seaMk,5997
95
95
  abstract_utilities/file_utils/imports/file_functions.py,sha256=brQha7TV9DaJe-hZSuHoFZBUI_45hxrGOIBTAojPWU8,297
96
96
  abstract_utilities/file_utils/imports/imports.py,sha256=OQKsPec2raa55hxGUeTo0yDqzw-xBsshljFxG69rHk0,1504
97
- abstract_utilities/file_utils/imports/module_imports.py,sha256=Mol48vj-m2204MCJgStUyAw8DbH-HFVs21rnGpx5HyI,420
97
+ abstract_utilities/file_utils/imports/module_imports.py,sha256=UGWoPUZ_AUzo9n2wejlwupOEQqEb6ZPt18pdQJXdxrk,440
98
98
  abstract_utilities/file_utils/src/__init__.py,sha256=kgjkZ6IWDR_fQJTAQTinUBKUPLurekgdZ15ZT1wm20E,203
99
99
  abstract_utilities/file_utils/src/file_filters.py,sha256=n8efrxxJRRd6dT4E5PbGoyGGKe1LU1cYy-b443XhqAo,6355
100
100
  abstract_utilities/file_utils/src/file_reader.py,sha256=9fZ2dEXFRYhJNUsUYQO3hGs2uWrHu2o4FacVhfhdefE,22320
101
101
  abstract_utilities/file_utils/src/file_utils.py,sha256=jgxMKeOAhYB2dxoqtudo4DKXctRE1TdcSbFcJmHcoiI,5766
102
102
  abstract_utilities/file_utils/src/filter_params.py,sha256=tO5PJvYpd3bHQejulDVGHandR-_8w3VPnjiCayrLW9g,6774
103
- abstract_utilities/file_utils/src/find_collect.py,sha256=wV6u9AsVeJxMCHwyf3NGvzA-QbA_OgLRfQUhjSrLjew,5796
103
+ abstract_utilities/file_utils/src/find_collect.py,sha256=AmgIzO42wuhzs8Q_5Z9iRs2lu-HNypsUSDcAWINTVYc,6189
104
104
  abstract_utilities/file_utils/src/find_content.py,sha256=3UI8HsTHR0UnuqybeYW4rxHvER7-SK42_hNZih-LfUU,6806
105
105
  abstract_utilities/file_utils/src/initFunctionsGen.py,sha256=WyWv3Gt33QzvI8IxZCGLqAqsramAyoRbpvMTiuJeSTE,10418
106
106
  abstract_utilities/file_utils/src/initFunctionsGens.py,sha256=A-I2dL2G58LfpCSI6c_aLbDtAsYvG0wwY37joYnqGcw,9804
@@ -160,14 +160,14 @@ abstract_utilities/import_utils/src/clean_imports.py,sha256=awpVFI-DMd8oOtx3JcUi
160
160
  abstract_utilities/import_utils/src/dot_utils.py,sha256=oahEkVmexO-a2F3DKYQP5IrCvKJi9tjM_rjCImM_KCY,2793
161
161
  abstract_utilities/import_utils/src/extract_utils.py,sha256=YuDVWbCKDrVDh9M7aZHdsrEoh_infJ3BUv46J6K-UYg,1705
162
162
  abstract_utilities/import_utils/src/import_functions.py,sha256=5GxFh32e-DWDZ5IR-LnQTOiEmv15tjb3Fn_yhgnu7q8,4408
163
- abstract_utilities/import_utils/src/import_utils.py,sha256=v5s1gV5535Wli4SM1dEfbunj1-eW9NTN7u-tYVLiAQs,13128
163
+ abstract_utilities/import_utils/src/import_utils.py,sha256=B0ghZBrv1Gs3l3312UPbCn6TSKKDslegt2hpJcS0IyA,13265
164
164
  abstract_utilities/import_utils/src/nullProxy.py,sha256=pYzP_tBJHduqc8IqdvjtRs1miYSab6NzHYiIqYGpduA,849
165
165
  abstract_utilities/import_utils/src/package_utils.py,sha256=9qjBzIApDhV7kOdSRgZA9k-EncBNAg3mZZodgsiUNM4,5861
166
166
  abstract_utilities/import_utils/src/pkg_utils.py,sha256=tSLaqFgitwswSuGhv-UnONT3rpri9DjK9ALt_0t5I30,7617
167
167
  abstract_utilities/import_utils/src/sysroot_utils.py,sha256=k9sNVvp3zYrPV62rsaFLfCzXhaIQc61XJreog0RvOIc,3696
168
168
  abstract_utilities/import_utils/src/layze_import_utils/__init__.py,sha256=lhbmFdYlyzCRo9cA_bAnjVwPjsCDKlKe1KKG-oa1A70,51
169
- abstract_utilities/import_utils/src/layze_import_utils/lazy_utils.py,sha256=DzDlmrmSec5uoZ1mfyBzzbANO9zgZ0WkjCMQtKuS1B0,1020
170
- abstract_utilities/import_utils/src/layze_import_utils/nullProxy.py,sha256=b8wE8bq0R97MPygRjlMsXr0ULgcUUxQmOaNF8bt2X58,847
169
+ abstract_utilities/import_utils/src/layze_import_utils/lazy_utils.py,sha256=B1UKuWfVZnAWAEtvy-97mU-7xwrQDGDbiZYUzSSL6-I,1152
170
+ abstract_utilities/import_utils/src/layze_import_utils/nullProxy.py,sha256=wosvIciVBUWlhBBgHvbkMOR9X3DKGQwgcy3UTG7wKEU,1071
171
171
  abstract_utilities/import_utils/src/package_utils/__init__.py,sha256=xV_XKJSLcXf4qRQSRseWLV_iqCqijPm4zvrs-tjNb2M,4618
172
172
  abstract_utilities/import_utils/src/package_utils/context_utils.py,sha256=8USSB6LR047k8fqge8J2jEM_StPEZ3cI1OKB3UENN8w,1177
173
173
  abstract_utilities/import_utils/src/package_utils/import_collectors.py,sha256=kueQead4CW6FGmHHiXpQilE8spbnt2mSK93dJ3bpeW4,2365
@@ -179,19 +179,19 @@ abstract_utilities/import_utils/src/package_utilss/import_collectors.py,sha256=k
179
179
  abstract_utilities/import_utils/src/package_utilss/path_utils.py,sha256=RTbfI4r2XF5mPn9GSS5ZNdmT0h5qM-8uG78pD3X-6-Q,926
180
180
  abstract_utilities/import_utils/src/package_utilss/safe_import.py,sha256=2xqu37hRuUwZvNYhvwbzORIdBxzhnJJByF2I4-uzwpg,828
181
181
  abstract_utilities/json_utils/__init__.py,sha256=_wzyTwWiqV9fxk85SOsaTXNWY6zDTlALYFix0h3afeo,49
182
- abstract_utilities/json_utils/json_utils.py,sha256=CEX9r73B8MmGHZLp4dsd2-23YlRp-vqsns_QN3KS8HQ,27521
182
+ abstract_utilities/json_utils/json_utils.py,sha256=12yp8yisclMaHJFp6OtkcGMYpzRmt7-EnYu84LwSnKs,28092
183
183
  abstract_utilities/json_utils/imports/__init__.py,sha256=sUUAr6PY1SMtVjSTsb08dFU6mF-Ug4usnbh908q4Jq0,53
184
- abstract_utilities/json_utils/imports/imports.py,sha256=7Z-WJ_nhiAEGJWR05BzKU1M6cDxw8pLMwQqMPCH8Egw,63
184
+ abstract_utilities/json_utils/imports/imports.py,sha256=BfaNN4bs2pvgxVU8XQ_r0uDzxm4alw5H52bZHHcLNyc,46
185
185
  abstract_utilities/json_utils/imports/module_imports.py,sha256=jTwYq8g13yHcFkKKVB8jBlYXMt3JsiqN4-yBGeGFApI,253
186
186
  abstract_utilities/list_utils/__init__.py,sha256=6Ya5OVuv9QWiDlLFRBDY3bTqgSR0E0tck-ugUzKvlq0,49
187
- abstract_utilities/list_utils/list_utils.py,sha256=i1fZ_kZ0mf_ei6w0MOkuEieRiyF-ReeAXzIdoRI1cvo,6298
187
+ abstract_utilities/list_utils/list_utils.py,sha256=qcoVZcsrSH3VWIA8jGku_WNllYVbWhOhR8B8HBm8xMw,6393
188
188
  abstract_utilities/list_utils/imports/__init__.py,sha256=sUUAr6PY1SMtVjSTsb08dFU6mF-Ug4usnbh908q4Jq0,53
189
189
  abstract_utilities/list_utils/imports/imports.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
190
190
  abstract_utilities/list_utils/imports/module_imports.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
191
191
  abstract_utilities/log_utils/__init__.py,sha256=QzmY8RLyegJsq9Id06dHMiJAit5jxUzwhkY5-qgqxBU,141
192
192
  abstract_utilities/log_utils/abstractLogManager.py,sha256=EF4GkNbeCUh_RStN2Sf_PmxgyUmxeB5RJT7P-SHGZ3w,2823
193
193
  abstract_utilities/log_utils/call_response.py,sha256=E_QdT6R5REuXxeUuEXLwjUh8D0Lk0vair2ryRj4zocY,2518
194
- abstract_utilities/log_utils/log_file.py,sha256=5W3Ia5RLGho6WbQNnqZTmQbRiEzUqGYIMlbEyzKElQg,3769
194
+ abstract_utilities/log_utils/log_file.py,sha256=80QQ7LGKhyZ8Gtm4Mczit5qZQcaFwdfTbfSh7Gf-edw,5071
195
195
  abstract_utilities/log_utils/logger_callable.py,sha256=9STZtZrmUlXmakxhwmXNPpCSQC10aCTMNjXbhaWZ7_8,1629
196
196
  abstract_utilities/log_utils/imports/__init__.py,sha256=sUUAr6PY1SMtVjSTsb08dFU6mF-Ug4usnbh908q4Jq0,53
197
197
  abstract_utilities/log_utils/imports/imports.py,sha256=TGhATFGyhvovFFKYH-CbCnEQK0WCkmA1C5LqvmmzlrQ,189
@@ -213,7 +213,7 @@ abstract_utilities/path_utils/imports/__init__.py,sha256=wBNCq8vHWdl7DleRNq0UK_-
213
213
  abstract_utilities/path_utils/imports/imports.py,sha256=R7rno0pnzOU9XpzPhco0Wp9aIR73w_BGqCLdYpAHowI,32
214
214
  abstract_utilities/path_utils/imports/module_imports.py,sha256=q5v_tXKEltMCD6-tJbs9KW7SFuwGaBDSko7SwEh6xlk,418
215
215
  abstract_utilities/read_write_utils/__init__.py,sha256=MYC2oSY2NEbnu-iwX55t9m_rFRVxwILY_oUbBCpGJkw,32
216
- abstract_utilities/read_write_utils/read_write_utils.py,sha256=UA6sGdrrs5eKivQJMjhSiqHNu9a2I_R6vRkrdepki9E,12919
216
+ abstract_utilities/read_write_utils/read_write_utils.py,sha256=0Tyf1PbfUAsRSB0y6ECw9dKm1yIgYDGsKQznoNlFQPU,13741
217
217
  abstract_utilities/read_write_utils/imports/__init__.py,sha256=sUUAr6PY1SMtVjSTsb08dFU6mF-Ug4usnbh908q4Jq0,53
218
218
  abstract_utilities/read_write_utils/imports/imports.py,sha256=zN1zEfAJ-UbJB34wxm2oVuAiDmyqS12dSoIzojUrsiM,46
219
219
  abstract_utilities/read_write_utils/imports/module_imports.py,sha256=cwmzuy1RKPyq2rQtMU6KSMSjDE9jUhPzHPjRTdTXcto,204
@@ -271,7 +271,7 @@ abstract_utilities/time_utils/imports/imports.py,sha256=mQn1yOBb8Oqw3TpmtQctHfLA
271
271
  abstract_utilities/time_utils/imports/module_imports.py,sha256=4dCrHHXmZBmJpmWuMIq9MIHOIB8YZvPQyb8_M234lzE,46
272
272
  abstract_utilities/type_utils/__init__.py,sha256=_0s-am2TO3lAkMc9IsKb3pnw8kEODQ1Ubw-T_sZe-bI,173
273
273
  abstract_utilities/type_utils/alpha_utils.py,sha256=MuuW6LoXN0hp61ejqffyRdG5yRO71N-5aOvIlvvEDEw,1553
274
- abstract_utilities/type_utils/get_type.py,sha256=O367FC7kNWe1WIYXQGqia96qf7IVbgsrQ0YJTtmOXJ4,3636
274
+ abstract_utilities/type_utils/get_type.py,sha256=bjJbRYxWGvKQR_1D_deOd2vLPmirl0u3v-rvI_OdUE8,3757
275
275
  abstract_utilities/type_utils/is_type.py,sha256=mHqgkQnxxI3XYWAXKW7MixYX_TtaemiWKpnt4F_QuHQ,11280
276
276
  abstract_utilities/type_utils/make_type.py,sha256=c85YNwBeNiJxvs4Hw31FTKn5mgccKORL9HUfamNR-GA,3297
277
277
  abstract_utilities/type_utils/mime_types.py,sha256=Th7Ij3txFgDT3_7MOC4ZALbf55_KnoXduEU0JER_h4w,2237
@@ -282,7 +282,7 @@ abstract_utilities/type_utils/imports/constants.py,sha256=HUCD5R1URZLuG1hHOinDR8
282
282
  abstract_utilities/type_utils/imports/imports.py,sha256=C_ZAQO-y7R31BYxTuaHJCEQE9IZSU1JgCtdHNWxZKhY,77
283
283
  abstract_utilities/type_utils/imports/module_imports.py,sha256=qWWGttKQ1_P_miOGExuen9nvIlSeLBcQ7tzw49G1vhc,707
284
284
  imports/__init__.py,sha256=2PSEAwZY88J2NHt98XCO5drFNok5ctiJ8LE02kwABP4,944
285
- abstract_utilities-0.2.2.667.dist-info/METADATA,sha256=iC3qmUGBUBNFjzpZokPWr2ZFxAfQP1Vs8YuvKpGL4qg,28108
286
- abstract_utilities-0.2.2.667.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
287
- abstract_utilities-0.2.2.667.dist-info/top_level.txt,sha256=BF0GZ0xVFfN1K-hFIWPO3viNsOs1sSF86n1vHBg39FM,19
288
- abstract_utilities-0.2.2.667.dist-info/RECORD,,
285
+ abstract_utilities-0.2.2.679.dist-info/METADATA,sha256=v8UVDEGmzXCASzsfvGDAg2pdYGYhF1DMPt0CToC7ehw,28108
286
+ abstract_utilities-0.2.2.679.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
287
+ abstract_utilities-0.2.2.679.dist-info/top_level.txt,sha256=BF0GZ0xVFfN1K-hFIWPO3viNsOs1sSF86n1vHBg39FM,19
288
+ abstract_utilities-0.2.2.679.dist-info/RECORD,,