abstract-utilities 0.2.2.436__tar.gz → 0.2.2.438__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.
Potentially problematic release.
This version of abstract-utilities might be problematic. Click here for more details.
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/PKG-INFO +1 -1
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/setup.py +1 -1
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/class_utils.py +39 -3
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/dynimport.py +7 -15
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/imports/module_imports.py +1 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/log_utils.py +1 -1
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/path_utils.py +42 -6
- abstract_utilities-0.2.2.438/src/abstract_utilities/read_write_utils.py +135 -0
- abstract_utilities-0.2.2.438/src/abstract_utilities/safe_utils.py +130 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities.egg-info/PKG-INFO +1 -1
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities.egg-info/SOURCES.txt +1 -0
- abstract_utilities-0.2.2.436/src/abstract_utilities/read_write_utils.py +0 -199
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/README.md +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/pyproject.toml +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/setup.cfg +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/abstract_classes.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/cmd_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/cmd_utils/cmd_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/cmd_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/cmd_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/cmd_utils/pexpect_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/cmd_utils/user_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/collator_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/compare_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/compare_utils/best_match.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/compare_utils/compare_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/compare_utils/find_value.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/doit.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/env_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/env_utils/abstractEnv.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/env_utils/envy_it.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/env_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/env_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/env_utils/imports/utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/error_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/file_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/file_utils/file_filters.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/file_utils/file_reader.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/file_utils/file_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/file_utils/filter_params.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/file_utils/imports.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/file_utils/map_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/file_utils/pdf_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/imports/classes.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/imports/constants.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/imports/file_functions.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/file_utils/req.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/global_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/hash_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/history_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/json_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/list_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/math_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/parse_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_reader/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_reader/file_reader2.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_reader/file_readers.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_reader/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_reader/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_reader/sadfsad.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/import_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/import_utils/dot_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/import_utils/function_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/import_utils/import_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/import_utils/impot_functions.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/import_utils/safe_import_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/import_utils/sysroot_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/import_utils/utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/imports.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/robust_readers/initFuncGen.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/ssh_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/ssh_utils/classes.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/ssh_utils/imports.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/ssh_utils/pexpect_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/ssh_utils/utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/string_clean.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/tetsts.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/thread_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/time_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/type_utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/utils.py +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities.egg-info/dependency_links.txt +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities.egg-info/requires.txt +0 -0
- {abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstract_utilities
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.438
|
|
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
|
|
@@ -4,7 +4,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|
|
4
4
|
long_description = fh.read()
|
|
5
5
|
setuptools.setup(
|
|
6
6
|
name='abstract_utilities',
|
|
7
|
-
version='0.2.2.
|
|
7
|
+
version='0.2.2.438',
|
|
8
8
|
author='putkoff',
|
|
9
9
|
author_email='partners@abstractendeavors.com',
|
|
10
10
|
description='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.',
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/class_utils.py
RENAMED
|
@@ -44,9 +44,9 @@ Dependencies:
|
|
|
44
44
|
Each function is furnished with its own docstring that elaborates on its purpose, expected inputs, and outputs.
|
|
45
45
|
|
|
46
46
|
"""
|
|
47
|
-
import inspect
|
|
48
|
-
import
|
|
49
|
-
|
|
47
|
+
import os,json,functools,inspect
|
|
48
|
+
from typing import *
|
|
49
|
+
|
|
50
50
|
def get_type_list() -> list:
|
|
51
51
|
"""Get a list of common Python types."""
|
|
52
52
|
return ['None','str','int','float','bool','list','tuple','set','dict','frozenset','bytearray','bytes','memoryview','range','enumerate','zip','filter','map','property','slice','super','type','Exception','object']
|
|
@@ -370,3 +370,39 @@ def get_class_inputs(cls, *args, **kwargs):
|
|
|
370
370
|
else:
|
|
371
371
|
values[field] = getattr(cls(), field)
|
|
372
372
|
return cls(**values)
|
|
373
|
+
def get_caller(i: Optional[int] = None) -> str:
|
|
374
|
+
"""
|
|
375
|
+
Return the filename of the calling frame.
|
|
376
|
+
|
|
377
|
+
Args:
|
|
378
|
+
i: Optional stack depth offset.
|
|
379
|
+
None = immediate caller (depth 1).
|
|
380
|
+
|
|
381
|
+
Returns:
|
|
382
|
+
Absolute path of the file for the stack frame.
|
|
383
|
+
"""
|
|
384
|
+
depth = 1 if i is None else int(i)
|
|
385
|
+
stack = inspect.stack()
|
|
386
|
+
if depth >= len(stack):
|
|
387
|
+
depth = len(stack) - 1
|
|
388
|
+
return stack[depth].filename
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
def get_caller_path(i: Optional[int] = None) -> str:
|
|
392
|
+
"""
|
|
393
|
+
Return the absolute path of the caller's file.
|
|
394
|
+
"""
|
|
395
|
+
depth = 1 if i is None else int(i)
|
|
396
|
+
file_path = get_caller(depth + 1)
|
|
397
|
+
return os.path.realpath(file_path)
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def get_caller_dir(i: Optional[int] = None) -> str:
|
|
401
|
+
"""
|
|
402
|
+
Return the absolute directory of the caller's file.
|
|
403
|
+
"""
|
|
404
|
+
depth = 1 if i is None else int(i)
|
|
405
|
+
abspath = get_caller_path(depth + 1)
|
|
406
|
+
return os.path.dirname(abspath)
|
|
407
|
+
|
|
408
|
+
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/dynimport.py
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# abstract_utilities/dynimport.py
|
|
2
2
|
from __future__ import annotations
|
|
3
|
-
import importlib, sys, os
|
|
4
3
|
from functools import lru_cache
|
|
5
|
-
from typing import
|
|
6
|
-
import
|
|
4
|
+
from typing import *
|
|
5
|
+
import importlib, sys, os, sys
|
|
6
|
+
from typing import Optional
|
|
7
7
|
from importlib import import_module
|
|
8
8
|
from .type_utils import make_list
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
class _LazyAttr:
|
|
11
11
|
"""Lazy resolver proxy to avoid import-time cycles.
|
|
12
12
|
First use triggers actual import & attribute lookup.
|
|
@@ -181,14 +181,6 @@ def get_many_module_imports(*args):
|
|
|
181
181
|
all_modules[symbol] = get_abstract_import(module = module,symbol=symbol)
|
|
182
182
|
import_symbols(all_modules)
|
|
183
183
|
return all_modules
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
def get_caller_dir():
|
|
188
|
-
frame = inspect.stack()[1]
|
|
189
|
-
abspath = os.path.abspath(frame.filename)
|
|
190
|
-
return os.path.dirname(abspath)
|
|
191
|
-
def call_for_all_tabs(root=None):
|
|
192
|
-
|
|
193
|
-
root = root or get_caller_dir()
|
|
194
|
-
get_for_all_tabs(root)
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/log_utils.py
RENAMED
|
@@ -229,7 +229,7 @@ def initialize_call_log(value=None,
|
|
|
229
229
|
|
|
230
230
|
print_or_log(full_message,level=log_level)
|
|
231
231
|
|
|
232
|
-
def get_json_call_response(value, status_code, data=None, logMsg=None, callLog=False):
|
|
232
|
+
def get_json_call_response(value=None, status_code=None, data=None, logMsg=None, callLog=False):
|
|
233
233
|
response_body = {}
|
|
234
234
|
if status_code == 200:
|
|
235
235
|
response_body["success"] = True
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/path_utils.py
RENAMED
|
@@ -27,12 +27,9 @@ from .read_write_utils import read_from_file,write_to_file
|
|
|
27
27
|
from .string_clean import eatAll
|
|
28
28
|
from .list_utils import make_list
|
|
29
29
|
from .type_utils import get_media_exts, is_media_type,MIME_TYPES
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def get_caller_dir(i=1):
|
|
34
|
-
abspath = get_caller_path(i+1)
|
|
35
|
-
return os.path.dirname(abspath)
|
|
30
|
+
from .safe_utils import safe_join
|
|
31
|
+
from .class_utils import get_caller_path,get_caller_dir
|
|
32
|
+
|
|
36
33
|
def get_os_info():
|
|
37
34
|
"""
|
|
38
35
|
Get Operating System Information
|
|
@@ -600,6 +597,45 @@ def get_safe_filename(path=None,basename=None):
|
|
|
600
597
|
def get_safe_ext(path=None,basename=None):
|
|
601
598
|
_,ext = get_safe_splitext(path=path,basename=basename)
|
|
602
599
|
return ext
|
|
600
|
+
def raw_create_dirs(*paths):
|
|
601
|
+
"""Recursively create all directories along the given path."""
|
|
602
|
+
full_path = os.path.abspath(safe_join(*paths))
|
|
603
|
+
sub_parts = [p for p in full_path.split(os.sep) if p]
|
|
604
|
+
|
|
605
|
+
current_path = "/" if full_path.startswith(os.sep) else ""
|
|
606
|
+
for part in sub_parts:
|
|
607
|
+
current_path = safe_join(current_path, part)
|
|
608
|
+
os.makedirs(current_path, exist_ok=True)
|
|
609
|
+
return full_path
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
def create_dirs(directory, child=None):
|
|
613
|
+
"""Create directory and optional child path safely."""
|
|
614
|
+
full_path = os.path.abspath(safe_join(directory, child))
|
|
615
|
+
if not os.path.exists(full_path):
|
|
616
|
+
raw_create_dirs(full_path)
|
|
617
|
+
return full_path
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
def get_base_dir(directory=None):
|
|
621
|
+
"""Return given directory or _BASE_DIR fallback."""
|
|
622
|
+
return directory or _BASE_DIR
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
def create_base_path(directory=None, child=None):
|
|
626
|
+
"""Join base dir with child."""
|
|
627
|
+
directory = get_base_dir(directory)
|
|
628
|
+
return safe_join(directory, child)
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
def create_base_dir(directory=None, child=None):
|
|
632
|
+
"""Ensure existence of base directory path."""
|
|
633
|
+
full_path = create_base_path(directory, child)
|
|
634
|
+
if not os.path.exists(full_path):
|
|
635
|
+
raw_create_dirs(full_path)
|
|
636
|
+
return full_path
|
|
637
|
+
|
|
638
|
+
|
|
603
639
|
|
|
604
640
|
def get_file_parts(path):
|
|
605
641
|
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""
|
|
2
|
+
read_write_utils.py
|
|
3
|
+
-------------------
|
|
4
|
+
Unified read/write utility for safe file operations.
|
|
5
|
+
Supports:
|
|
6
|
+
- Writing content to a file
|
|
7
|
+
- Reading content from a file
|
|
8
|
+
- Creating and reading if missing
|
|
9
|
+
- Detecting file/content params via positional args or kwargs
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
from abstract_utilities.read_write_utils import *
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import os
|
|
16
|
+
|
|
17
|
+
_FILE_PATH_KEYS = ['file', 'filepath', 'file_path', 'path', 'directory', 'f', 'dst', 'dest']
|
|
18
|
+
_CONTENTS_KEYS = ['cont', 'content', 'contents', 'data', 'datas', 'dat', 'src', 'source']
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# --- Helper utilities --------------------------------------------------------
|
|
22
|
+
def string_in_keys(strings, kwargs):
|
|
23
|
+
"""Find a matching keyword in kwargs that contains any of the given substrings."""
|
|
24
|
+
for key in kwargs:
|
|
25
|
+
for s in strings:
|
|
26
|
+
if s.lower() in key.lower():
|
|
27
|
+
return key
|
|
28
|
+
return None
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def get_path(paths):
|
|
32
|
+
"""Return the first valid path among given paths."""
|
|
33
|
+
for path in paths:
|
|
34
|
+
if isinstance(path, str):
|
|
35
|
+
if os.path.isfile(path):
|
|
36
|
+
return path
|
|
37
|
+
dirname = os.path.dirname(path)
|
|
38
|
+
if os.path.exists(dirname):
|
|
39
|
+
return path
|
|
40
|
+
return None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def break_down_find_existing(path):
|
|
44
|
+
"""Return the first non-existent subpath within a path chain."""
|
|
45
|
+
test_path = ''
|
|
46
|
+
for part in path.split(os.sep):
|
|
47
|
+
test_path = os.path.join(test_path, part)
|
|
48
|
+
if not os.path.exists(test_path):
|
|
49
|
+
return test_path if test_path else None
|
|
50
|
+
return test_path
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# --- Parameter parsing --------------------------------------------------------
|
|
54
|
+
def check_read_write_params(*args, **kwargs):
|
|
55
|
+
"""
|
|
56
|
+
Determine file_path and contents from arguments.
|
|
57
|
+
Returns a tuple: (file_path, contents)
|
|
58
|
+
"""
|
|
59
|
+
file_key = string_in_keys(_FILE_PATH_KEYS, kwargs)
|
|
60
|
+
content_key = string_in_keys(_CONTENTS_KEYS, kwargs)
|
|
61
|
+
|
|
62
|
+
file_path = kwargs.get(file_key) if file_key else None
|
|
63
|
+
contents = kwargs.get(content_key) if content_key else None
|
|
64
|
+
|
|
65
|
+
# Handle positional args (fallback)
|
|
66
|
+
if file_path is None and len(args) > 0:
|
|
67
|
+
file_path = args[0]
|
|
68
|
+
if contents is None and len(args) > 1:
|
|
69
|
+
contents = args[1]
|
|
70
|
+
|
|
71
|
+
if file_path is None:
|
|
72
|
+
raise ValueError("Missing file_path argument.")
|
|
73
|
+
return file_path, contents
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# --- Core functionality -------------------------------------------------------
|
|
77
|
+
def write_to_file(*args, **kwargs):
|
|
78
|
+
"""
|
|
79
|
+
Write contents to a file (create if missing).
|
|
80
|
+
|
|
81
|
+
Returns the file_path written.
|
|
82
|
+
"""
|
|
83
|
+
file_path, contents = check_read_write_params(*args, **kwargs)
|
|
84
|
+
if contents is None:
|
|
85
|
+
raise ValueError("Missing contents to write.")
|
|
86
|
+
|
|
87
|
+
os.makedirs(os.path.dirname(file_path) or ".", exist_ok=True)
|
|
88
|
+
with open(file_path, "w", encoding="utf-8") as f:
|
|
89
|
+
f.write(str(contents))
|
|
90
|
+
return file_path
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def read_from_file(file_path):
|
|
94
|
+
"""Read text content from a file."""
|
|
95
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
|
96
|
+
return f.read()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def create_and_read_file(*args, **kwargs):
|
|
100
|
+
"""
|
|
101
|
+
Create the file (if missing) and read contents from it.
|
|
102
|
+
"""
|
|
103
|
+
file_path, contents = check_read_write_params(*args, **kwargs)
|
|
104
|
+
if not os.path.isfile(file_path):
|
|
105
|
+
write_to_file(file_path, contents or "")
|
|
106
|
+
return read_from_file(file_path)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def is_file_extension(obj: str) -> bool:
|
|
110
|
+
"""Return True if obj looks like a filename with extension."""
|
|
111
|
+
if not isinstance(obj, str):
|
|
112
|
+
return False
|
|
113
|
+
root, ext = os.path.splitext(obj)
|
|
114
|
+
return bool(root and ext)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def delete_file(file_path: str):
|
|
118
|
+
"""Safely delete a file if it exists."""
|
|
119
|
+
if os.path.isfile(file_path):
|
|
120
|
+
os.remove(file_path)
|
|
121
|
+
return True
|
|
122
|
+
return False
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def get_content_lines(*args, **kwargs):
|
|
126
|
+
"""Return a list of lines from string or file path."""
|
|
127
|
+
file_path, contents = check_read_write_params(*args, **kwargs)
|
|
128
|
+
if os.path.isfile(file_path):
|
|
129
|
+
contents = read_from_file(filepath)
|
|
130
|
+
|
|
131
|
+
if isinstance(contents, str):
|
|
132
|
+
return contents.splitlines()
|
|
133
|
+
elif isinstance(contents, list):
|
|
134
|
+
return contents
|
|
135
|
+
return []
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""
|
|
2
|
+
abstract_safeops.py
|
|
3
|
+
-------------------
|
|
4
|
+
Utility functions for safely splitting, slicing, and retrieving elements from iterable or string objects
|
|
5
|
+
without raising exceptions on invalid input or out-of-range indices.
|
|
6
|
+
|
|
7
|
+
Designed for compatibility with the abstract_ ecosystem (e.g. abstract_utilities, abstract_math, etc.).
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from typing import *
|
|
11
|
+
from .type_utils import is_number
|
|
12
|
+
from .class_utils import get_caller_dir
|
|
13
|
+
|
|
14
|
+
_BASE_DIR = get_caller_dir()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def safe_split(
|
|
18
|
+
string: Any,
|
|
19
|
+
char: Any,
|
|
20
|
+
i: Optional[int] = None,
|
|
21
|
+
default: Union[bool, Any] = False
|
|
22
|
+
) -> Union[str, List[str], Any, None]:
|
|
23
|
+
"""
|
|
24
|
+
Safely split a string by a character and optionally return index i.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
string: Input string (or any object convertible to string).
|
|
28
|
+
char: Delimiter to split on.
|
|
29
|
+
i: Optional index to retrieve from the split result.
|
|
30
|
+
default: If True, return the original string on error.
|
|
31
|
+
If any other value, return that instead of raising.
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
The split list, or the element at index i, or default behavior on error.
|
|
35
|
+
"""
|
|
36
|
+
if string is None or char is None:
|
|
37
|
+
return string
|
|
38
|
+
|
|
39
|
+
s, c = str(string), str(char)
|
|
40
|
+
if c not in s:
|
|
41
|
+
return string
|
|
42
|
+
|
|
43
|
+
parts = s.split(c)
|
|
44
|
+
|
|
45
|
+
if i is None:
|
|
46
|
+
return parts
|
|
47
|
+
|
|
48
|
+
if is_number(i):
|
|
49
|
+
idx = int(i)
|
|
50
|
+
if 0 <= idx < len(parts):
|
|
51
|
+
return parts[idx]
|
|
52
|
+
|
|
53
|
+
if default:
|
|
54
|
+
return string if default is True else default
|
|
55
|
+
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def safe_slice(
|
|
60
|
+
obj: Any,
|
|
61
|
+
i: Optional[int] = None,
|
|
62
|
+
k: Optional[int] = None,
|
|
63
|
+
default: Union[bool, Any] = False
|
|
64
|
+
) -> Any:
|
|
65
|
+
"""
|
|
66
|
+
Safely slice an iterable object or string, with fallback behavior on invalid indices.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
obj: Iterable or string-like object.
|
|
70
|
+
i: Start index (can be negative).
|
|
71
|
+
k: End index (can be negative).
|
|
72
|
+
default: If True, returns the original object on error.
|
|
73
|
+
If any other value, return that value on error.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
The sliced object, or default behavior on error.
|
|
77
|
+
"""
|
|
78
|
+
# Null or invalid base case
|
|
79
|
+
if obj is None or isinstance(obj, bool):
|
|
80
|
+
return obj if default is True else default if default else None
|
|
81
|
+
|
|
82
|
+
# Non-iterable guard
|
|
83
|
+
if not hasattr(obj, "__getitem__"):
|
|
84
|
+
return obj if default is True else default if default else None
|
|
85
|
+
|
|
86
|
+
obj_len = len(obj)
|
|
87
|
+
|
|
88
|
+
# Normalize negative indices
|
|
89
|
+
if isinstance(i, int) and i < 0:
|
|
90
|
+
i = obj_len + i
|
|
91
|
+
if isinstance(k, int) and k < 0:
|
|
92
|
+
k = obj_len + k
|
|
93
|
+
|
|
94
|
+
# Bound indices
|
|
95
|
+
if i is not None:
|
|
96
|
+
i = max(0, min(i, obj_len))
|
|
97
|
+
if k is not None:
|
|
98
|
+
k = max(0, min(k, obj_len))
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
return obj[i:k]
|
|
102
|
+
except Exception:
|
|
103
|
+
return obj if default is True else default if default else None
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def safe_get(
|
|
107
|
+
obj: Any,
|
|
108
|
+
key: Union[int, str, None] = None,
|
|
109
|
+
default: Union[bool, Any] = False
|
|
110
|
+
) -> Any:
|
|
111
|
+
"""
|
|
112
|
+
Generalized safe getter for both indexable and mapping types.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
obj: The object to access (list, dict, string, etc.).
|
|
116
|
+
key: Index or key to retrieve.
|
|
117
|
+
default: Fallback value or True for "return obj".
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Retrieved element, or default value on failure.
|
|
121
|
+
"""
|
|
122
|
+
if obj is None or key is None:
|
|
123
|
+
return obj if default is True else default if default else None
|
|
124
|
+
|
|
125
|
+
try:
|
|
126
|
+
if isinstance(obj, dict):
|
|
127
|
+
return obj.get(key, obj if default is True else default if default else None)
|
|
128
|
+
return obj[key]
|
|
129
|
+
except Exception:
|
|
130
|
+
return obj if default is True else default if default else None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: abstract_utilities
|
|
3
|
-
Version: 0.2.2.
|
|
3
|
+
Version: 0.2.2.438
|
|
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
|
|
@@ -19,6 +19,7 @@ src/abstract_utilities/math_utils.py
|
|
|
19
19
|
src/abstract_utilities/parse_utils.py
|
|
20
20
|
src/abstract_utilities/path_utils.py
|
|
21
21
|
src/abstract_utilities/read_write_utils.py
|
|
22
|
+
src/abstract_utilities/safe_utils.py
|
|
22
23
|
src/abstract_utilities/string_clean.py
|
|
23
24
|
src/abstract_utilities/tetsts.py
|
|
24
25
|
src/abstract_utilities/thread_utils.py
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
read_write_utils.py
|
|
3
|
-
|
|
4
|
-
This module, 'read_write_utils.py', provides utility functions for reading and writing to files.
|
|
5
|
-
These include functions to:
|
|
6
|
-
|
|
7
|
-
Usage:
|
|
8
|
-
import abstract_utilities.read_write_utils as read_write_utils
|
|
9
|
-
|
|
10
|
-
1. Write content to a file.
|
|
11
|
-
2. Read content from a file.
|
|
12
|
-
3. Check if a string has a file extension.
|
|
13
|
-
4. Read from or write to a file depending on the number of arguments.
|
|
14
|
-
5. Create a file if it does not exist, then read from it.
|
|
15
|
-
|
|
16
|
-
Each function includes a docstring to further explain its purpose, input parameters, and return values.
|
|
17
|
-
import os
|
|
18
|
-
|
|
19
|
-
# File and Directory Operations
|
|
20
|
-
os.rename(src, dst) # Rename a file or directory
|
|
21
|
-
os.remove(path) # Remove a file
|
|
22
|
-
os.unlink(path) # Alias for os.remove()
|
|
23
|
-
os.rmdir(path) # Remove an empty directory
|
|
24
|
-
os.makedirs(path) # Create directories recursively
|
|
25
|
-
os.makedirs(path, exist_ok=True) # Create directories, ignore if exists
|
|
26
|
-
os.mkdir(path) # Create a single directory
|
|
27
|
-
os.listdir(path) # List files and directories in a path
|
|
28
|
-
os.chdir(path) # Change current working directory
|
|
29
|
-
os.getcwd() # Get current working directory
|
|
30
|
-
os.stat(path) # Get file/directory information
|
|
31
|
-
os.lstat(path) # Get symbolic link information
|
|
32
|
-
os.symlink(src, dst) # Create a symbolic link
|
|
33
|
-
os.readlink(path) # Read the target of a symbolic link
|
|
34
|
-
os.getcwd() # Get current working directory
|
|
35
|
-
os.chdir(path) # Change current working directory
|
|
36
|
-
|
|
37
|
-
# File and Directory Information
|
|
38
|
-
os.path.exists(path) # Check if a path exists
|
|
39
|
-
os.path.isfile(path) # Check if a path points to a file
|
|
40
|
-
os.path.isdir(path) # Check if a path points to a directory
|
|
41
|
-
os.path.islink(path) # Check if a path points to a symbolic link
|
|
42
|
-
os.path.abspath(path) # Get the absolute path of a file/directory
|
|
43
|
-
os.path.basename(path) # Get the base name of a path
|
|
44
|
-
os.path.dirname(path) # Get the directory name of a path
|
|
45
|
-
os.path.join(path1, path2, ...) # Join path components into a single path
|
|
46
|
-
|
|
47
|
-
# File Permissions
|
|
48
|
-
os.chmod(path, mode) # Change file permissions
|
|
49
|
-
os.access(path, mode) # Check if a file is accessible with given mode
|
|
50
|
-
|
|
51
|
-
# File Times
|
|
52
|
-
os.path.getatime(path) # Get last access time of a file
|
|
53
|
-
os.path.getmtime(path) # Get last modification time of a file
|
|
54
|
-
os.path.getctime(path) # Get creation time of a file
|
|
55
|
-
os.utime(path, times) # Set access and modification times
|
|
56
|
-
|
|
57
|
-
# Working with Paths
|
|
58
|
-
os.path.split(path) # Split a path into (head, tail)
|
|
59
|
-
os.path.splitext(path) # Split a path into (root, ext)
|
|
60
|
-
os.path.normpath(path) # Normalize a path (e.g., convert slashes)
|
|
61
|
-
|
|
62
|
-
# Other
|
|
63
|
-
os.path.samefile(path1, path2) # Check if two paths refer to the same file
|
|
64
|
-
|
|
65
|
-
# Directory Traversal
|
|
66
|
-
for root, dirs, files in os.walk(top, topdown=True):
|
|
67
|
-
# Traverse a directory tree, yielding root, dirs, and files lists
|
|
68
|
-
|
|
69
|
-
# Temporary Files and Directories
|
|
70
|
-
import tempfile
|
|
71
|
-
tempfile.mkstemp() # Create a temporary file
|
|
72
|
-
tempfile.mkdtemp() # Create a temporary directory
|
|
73
|
-
tempfile.TemporaryFile() # Create a temporary file object
|
|
74
|
-
|
|
75
|
-
# Environment Variables
|
|
76
|
-
os.environ # Dictionary of environment variables
|
|
77
|
-
os.environ['VAR_NAME'] # Access an environment variable
|
|
78
|
-
os.environ.get('VAR_NAME') # Access an environment variable (with default)
|
|
79
|
-
|
|
80
|
-
# Path Manipulation
|
|
81
|
-
os.path.abspath(path) # Convert relative path to absolute path
|
|
82
|
-
os.path.join(path1, path2, ...) # Join paths together
|
|
83
|
-
os.path.split(path) # Split a path into directory and filename
|
|
84
|
-
os.path.dirname(path) # Get the directory part of a path
|
|
85
|
-
os.path.basename(path) # Get the filename part of a path
|
|
86
|
-
os.path.exists(path) # Check if a path exists
|
|
87
|
-
os.path.isfile(path) # Check if a path points to a file
|
|
88
|
-
os.path.isdir(path) # Check if a path points to a directory
|
|
89
|
-
|
|
90
|
-
# File Permissions
|
|
91
|
-
os.chmod(path, mode) # Change file permissions
|
|
92
|
-
|
|
93
|
-
# Miscellaneous
|
|
94
|
-
os.getpid() # Get the current process ID
|
|
95
|
-
os.getlogin() # Get the name of the logged-in user
|
|
96
|
-
|
|
97
|
-
"""
|
|
98
|
-
import os
|
|
99
|
-
def break_down_find_existing(path):
|
|
100
|
-
test_path = ''
|
|
101
|
-
for part in path.split(os.sep):
|
|
102
|
-
test_path = os.path.join(test_path, part)
|
|
103
|
-
if not os.path.exists(test_path):
|
|
104
|
-
return test_path if test_path else None
|
|
105
|
-
return test_path
|
|
106
|
-
|
|
107
|
-
def string_in_keys(strings, kwargs):
|
|
108
|
-
return next((key for key in kwargs if any(s.lower() in key.lower() for s in strings)), None)
|
|
109
|
-
|
|
110
|
-
def get_path(paths):
|
|
111
|
-
for path in paths:
|
|
112
|
-
if isinstance(path,str):
|
|
113
|
-
if os.path.isfile(path):
|
|
114
|
-
return path
|
|
115
|
-
dirname = os.path.dirname(path)
|
|
116
|
-
if os.path.exists(dirname):
|
|
117
|
-
return path
|
|
118
|
-
return None
|
|
119
|
-
|
|
120
|
-
def check_read_write_params(*args, **kwargs):
|
|
121
|
-
file_path = kwargs.get('file_path', None)
|
|
122
|
-
contents = kwargs.get('contents', None)
|
|
123
|
-
if contents is None:
|
|
124
|
-
contents = kwargs.get('data', None)
|
|
125
|
-
|
|
126
|
-
# Handle positional arguments
|
|
127
|
-
if file_path is None and len(args) > 0:
|
|
128
|
-
file_path = args[0]
|
|
129
|
-
if contents is None and len(args) > 1:
|
|
130
|
-
contents = args[1]
|
|
131
|
-
elif contents is None and len(args) > 0 and file_path != args[0]:
|
|
132
|
-
contents = args[0]
|
|
133
|
-
|
|
134
|
-
if file_path is None or contents is None:
|
|
135
|
-
raise ValueError("Both 'file_path' and 'contents' (or 'data') are required.")
|
|
136
|
-
|
|
137
|
-
return file_path, contents
|
|
138
|
-
|
|
139
|
-
def write_to_file(file_path=None, contents=None,*args, **kwargs):
|
|
140
|
-
"""
|
|
141
|
-
Write contents to a file. If the file does not exist, it is created.
|
|
142
|
-
|
|
143
|
-
Args:
|
|
144
|
-
file_path: The path of the file to write to.
|
|
145
|
-
contents: The content to write to the file.
|
|
146
|
-
|
|
147
|
-
Returns:
|
|
148
|
-
The contents that were written to the file.
|
|
149
|
-
"""
|
|
150
|
-
params = check_read_write_params(file_path=file_path, contents=contents,*args, **kwargs)
|
|
151
|
-
if params:
|
|
152
|
-
with open(params[0], 'w', encoding='UTF-8') as f:
|
|
153
|
-
f.write(params[1])
|
|
154
|
-
return contents
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
def read_from_file(file_path) -> str:
|
|
158
|
-
"""
|
|
159
|
-
Read the contents of a file.
|
|
160
|
-
|
|
161
|
-
Args:
|
|
162
|
-
file_path: The path of the file to read from.
|
|
163
|
-
|
|
164
|
-
Returns:
|
|
165
|
-
The contents of the file.
|
|
166
|
-
"""
|
|
167
|
-
with open(file_path, 'r', encoding='UTF-8') as f:
|
|
168
|
-
return f.read()
|
|
169
|
-
|
|
170
|
-
def create_and_read_file(file_path=None, contents:str='',*args, **kwargs) -> str:
|
|
171
|
-
"""
|
|
172
|
-
Create a file if it does not exist, then read from it.
|
|
173
|
-
|
|
174
|
-
Args:
|
|
175
|
-
file_path: The path of the file to create and read from.
|
|
176
|
-
contents: The content to write to the file if it does not exist.
|
|
177
|
-
|
|
178
|
-
Returns:
|
|
179
|
-
The contents of the file.
|
|
180
|
-
"""
|
|
181
|
-
if not os.path.isfile(file_path):
|
|
182
|
-
write_to_file(contents, file_path)
|
|
183
|
-
return read_from_file(file_path)
|
|
184
|
-
def is_file_extension(obj: str) -> bool:
|
|
185
|
-
"""
|
|
186
|
-
Check if a string has a file extension.
|
|
187
|
-
|
|
188
|
-
Args:
|
|
189
|
-
obj: The string to check.
|
|
190
|
-
|
|
191
|
-
Returns:
|
|
192
|
-
True if the string has a file extension, False otherwise.
|
|
193
|
-
"""
|
|
194
|
-
return len(obj) >= 4 and '.' in obj[-4:-3]
|
|
195
|
-
|
|
196
|
-
def delete_file(file_path: str):
|
|
197
|
-
if os.path.isfile(file_path):
|
|
198
|
-
os.remove(file_path)
|
|
199
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/doit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/error_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/global_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/hash_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/json_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/list_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/math_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/parse_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/string_clean.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/tetsts.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/thread_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/time_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/type_utils.py
RENAMED
|
File without changes
|
{abstract_utilities-0.2.2.436 → abstract_utilities-0.2.2.438}/src/abstract_utilities/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|