abstract-utilities 0.2.2.639__tar.gz → 0.2.2.671__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.
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/PKG-INFO +1 -1
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/setup.py +1 -1
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/__init__.py +2 -1
- abstract_utilities-0.2.2.671/src/abstract_utilities/class_utils/abstract_classes.py +144 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/caller_utils.py +38 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/imports/imports.py +1 -1
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/imports/classes.py +59 -55
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/file_filters/ensure_utils.py +7 -4
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/imports/__init__.py +1 -1
- abstract_utilities-0.2.2.671/src/abstract_utilities/import_utils/imports/init_imports.py +3 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/imports/module_imports.py +1 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/imports/utils.py +1 -1
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/__init__.py +1 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/import_utils.py +39 -0
- abstract_utilities-0.2.2.671/src/abstract_utilities/import_utils/src/layze_import_utils/__init__.py +2 -0
- abstract_utilities-0.2.2.671/src/abstract_utilities/import_utils/src/layze_import_utils/lazy_utils.py +41 -0
- abstract_utilities-0.2.2.671/src/abstract_utilities/import_utils/src/layze_import_utils/nullProxy.py +37 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/imports.py +5 -2
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/json_utils/json_utils.py +29 -3
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/log_utils/log_file.py +81 -30
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/path_utils/imports/module_imports.py +1 -1
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/path_utils/path_utils.py +7 -12
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/read_write_utils/read_write_utils.py +26 -24
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities.egg-info/PKG-INFO +1 -1
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities.egg-info/SOURCES.txt +4 -1
- abstract_utilities-0.2.2.639/src/abstract_utilities/class_utils/abstract_classes.py +0 -74
- abstract_utilities-0.2.2.639/src/abstract_utilities/import_utils/imports/imports.py +0 -4
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/README.md +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/pyproject.toml +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/setup.cfg +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/class_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/function_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/global_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/imports/utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/class_utils/module_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/compare_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/compare_utils/best_match.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/compare_utils/compare_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/compare_utils/find_value.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/src/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/src/directory_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/src/name_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/src/size_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/directory_utils/src/utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/env_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/env_utils/abstractEnv.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/env_utils/envy_it.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/env_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/env_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/env_utils/imports/utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/error_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/error_utils/error_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/error_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/error_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/error_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/imports/clean_imps.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/imports/constants.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/file_filters/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/file_filters/filter_params.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/file_filters/filter_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/file_filters/predicate_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/find_collect.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/find_content.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/initFunctionsGen.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/initFunctionsGens.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/map_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/reader_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/reader_utils/directory_reader.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/reader_utils/file_reader.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/reader_utils/file_readers.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/reader_utils/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils/src/reader_utils/pdf_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/constants.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/imports/constants.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/utils/classes.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/utils/clean_imps.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/imports/utils/filter_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/src/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/src/file_filters.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/src/file_reader.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/src/find_collect.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/src/map_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/file_utils (2)/src/pdf_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/hash_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/hash_utils/hash_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/hash_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/hash_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/hash_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/history_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/history_utils/history_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/history_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/history_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/history_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/circular_import_finder.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/circular_import_finder2.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/imports/constants.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/clean_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/dot_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/extract_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/import_functions.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/package_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/package_utils/context_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/package_utils/import_collectors.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/package_utils/path_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/package_utils/safe_import.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/pkg_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/import_utils/src/sysroot_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/json_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/json_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/json_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/json_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/list_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/list_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/list_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/list_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/list_utils/list_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/log_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/log_utils/abstractLogManager.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/log_utils/call_response.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/log_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/log_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/log_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/log_utils/logger_callable.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/math_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/math_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/math_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/math_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/math_utils/math_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/parse_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/parse_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/parse_utils/imports/constants.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/parse_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/parse_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/parse_utils/parse_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/path_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/path_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/path_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/read_write_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/read_write_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/read_write_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/read_write_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/safe_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/safe_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/safe_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/safe_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/safe_utils/safe_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/classes.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/cmd_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/imports/utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/pexpect_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/ssh_utils/type_checks.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/string_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/string_utils/clean_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/string_utils/eat_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/string_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/string_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/string_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/string_utils/imports/utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/string_utils/replace_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/thread_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/thread_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/thread_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/thread_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/thread_utils/thread_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/time_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/time_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/time_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/time_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/time_utils/time_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/alpha_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/get_type.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/imports/constants.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/imports/module_imports.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/is_type.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/make_type.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/mime_types.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/num_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/type_utils/type_utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/utils.py +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities.egg-info/dependency_links.txt +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities.egg-info/requires.txt +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities.egg-info/top_level.txt +0 -0
- {abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/tests/test.py +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.671
|
|
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.671',
|
|
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.',
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
from .imports import *
|
|
2
|
+
class SingletonMeta(type):
|
|
3
|
+
_instances = {}
|
|
4
|
+
def __call__(cls, *args, **kwargs):
|
|
5
|
+
if cls not in cls._instances:
|
|
6
|
+
cls._instances[cls] = super(SingletonMeta, cls).__call__(*args, **kwargs)
|
|
7
|
+
return cls._instances[cls]
|
|
8
|
+
|
|
9
|
+
def get_inputs(cls, *args, **kwargs):
|
|
10
|
+
"""
|
|
11
|
+
Dynamically construct a dataclass instance from args and kwargs,
|
|
12
|
+
filling missing values from defaults in the dataclass.
|
|
13
|
+
"""
|
|
14
|
+
fields = list(cls.__annotations__.keys())
|
|
15
|
+
values = {}
|
|
16
|
+
|
|
17
|
+
args = list(args)
|
|
18
|
+
for field in fields:
|
|
19
|
+
if field in kwargs:
|
|
20
|
+
values[field] = kwargs[field]
|
|
21
|
+
elif args:
|
|
22
|
+
values[field] = args.pop(0)
|
|
23
|
+
else:
|
|
24
|
+
values[field] = getattr(cls(), field) # default from dataclass
|
|
25
|
+
|
|
26
|
+
return cls(**values)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
from abstract_utilities import *
|
|
30
|
+
class SingletonMeta(type):
|
|
31
|
+
_instances = {}
|
|
32
|
+
def __call__(cls, *args, **kwargs):
|
|
33
|
+
if cls not in cls._instances:
|
|
34
|
+
cls._instances[cls] = super(SingletonMeta, cls).__call__(*args, **kwargs)
|
|
35
|
+
return cls._instances[cls]
|
|
36
|
+
|
|
37
|
+
def get_inputs(cls, *args, **kwargs):
|
|
38
|
+
"""
|
|
39
|
+
Dynamically construct a dataclass instance from args and kwargs,
|
|
40
|
+
filling missing values from defaults in the dataclass.
|
|
41
|
+
"""
|
|
42
|
+
fields = list(cls.__annotations__.keys())
|
|
43
|
+
values = {}
|
|
44
|
+
|
|
45
|
+
args = list(args)
|
|
46
|
+
for field in fields:
|
|
47
|
+
if field in kwargs:
|
|
48
|
+
values[field] = kwargs[field]
|
|
49
|
+
elif args:
|
|
50
|
+
values[field] = args.pop(0)
|
|
51
|
+
else:
|
|
52
|
+
values[field] = getattr(cls(), field) # default from dataclass
|
|
53
|
+
|
|
54
|
+
return cls(*args,**values)
|
|
55
|
+
def get_input_params(func):
|
|
56
|
+
sig = inspect.signature(func)
|
|
57
|
+
return sig.parameters
|
|
58
|
+
def get_args(func, *args,**kwargs):
|
|
59
|
+
parameters = get_input_params(func)
|
|
60
|
+
parameters = dict(parameters)
|
|
61
|
+
for key,value in parameters.items():
|
|
62
|
+
value = str(value)
|
|
63
|
+
if value.startswith('**'):
|
|
64
|
+
kwargs_key = key
|
|
65
|
+
elif value.startswith('*'):
|
|
66
|
+
args_key = key
|
|
67
|
+
kwargs_copy = kwargs.copy()
|
|
68
|
+
for k_key,k_value in kwargs.items():
|
|
69
|
+
if args_key == k_key and isinstance(k_value,list or tuple or set):
|
|
70
|
+
args = args | tuple(k_value)
|
|
71
|
+
del kwargs[k_key]
|
|
72
|
+
return args,kwargs
|
|
73
|
+
|
|
74
|
+
def prune_inputs(func, *args, **kwargs):
|
|
75
|
+
"""
|
|
76
|
+
Smart argument adapter:
|
|
77
|
+
- Detects if func accepts *args or **kwargs
|
|
78
|
+
- Builds new positional arguments from kwargs when appropriate
|
|
79
|
+
- Handles explicit {"args": [...]} convention
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
sig = inspect.signature(func)
|
|
83
|
+
params = sig.parameters
|
|
84
|
+
|
|
85
|
+
has_varargs = any(p.kind == inspect.Parameter.VAR_POSITIONAL for p in params.values())
|
|
86
|
+
has_varkw = any(p.kind == inspect.Parameter.VAR_KEYWORD for p in params.values())
|
|
87
|
+
|
|
88
|
+
new_args = list(args)
|
|
89
|
+
new_kwargs = dict(kwargs)
|
|
90
|
+
|
|
91
|
+
# -----------------------------------------------------------
|
|
92
|
+
# 1. If user provided explicit args: {"args": [...]}
|
|
93
|
+
# -----------------------------------------------------------
|
|
94
|
+
if "args" in new_kwargs:
|
|
95
|
+
explicit_args = new_kwargs.pop("args")
|
|
96
|
+
if isinstance(explicit_args, (list, tuple)):
|
|
97
|
+
new_args.extend(explicit_args)
|
|
98
|
+
else:
|
|
99
|
+
new_args.append(explicit_args)
|
|
100
|
+
|
|
101
|
+
# -----------------------------------------------------------
|
|
102
|
+
# 2. If function has *args, infer which kwargs belong there
|
|
103
|
+
# -----------------------------------------------------------
|
|
104
|
+
if has_varargs:
|
|
105
|
+
|
|
106
|
+
# Heuristic rules for upgrading kwargs to args:
|
|
107
|
+
# - if the function has NO named params, treat all scalar kwargs as positional
|
|
108
|
+
# - common param names like "file_path" also qualify
|
|
109
|
+
preferred_as_args = {"path", "file", "file_path", "filename", "value"}
|
|
110
|
+
|
|
111
|
+
positional_candidates = []
|
|
112
|
+
|
|
113
|
+
for k in list(new_kwargs.keys()):
|
|
114
|
+
v = new_kwargs[k]
|
|
115
|
+
|
|
116
|
+
# candidate rules:
|
|
117
|
+
if k in preferred_as_args:
|
|
118
|
+
positional_candidates.append(v)
|
|
119
|
+
del new_kwargs[k]
|
|
120
|
+
|
|
121
|
+
# scalars but not mappings/lists (optional)
|
|
122
|
+
elif isinstance(v, (str, int, float)) and len(positional_candidates) == 0:
|
|
123
|
+
positional_candidates.append(v)
|
|
124
|
+
del new_kwargs[k]
|
|
125
|
+
|
|
126
|
+
new_args.extend(positional_candidates)
|
|
127
|
+
|
|
128
|
+
# -----------------------------------------------------------
|
|
129
|
+
# 3. If function does NOT accept **kwargs → strip extras
|
|
130
|
+
# -----------------------------------------------------------
|
|
131
|
+
if not has_varkw:
|
|
132
|
+
allowed = {
|
|
133
|
+
name for name, p in params.items()
|
|
134
|
+
if p.kind in (
|
|
135
|
+
inspect.Parameter.POSITIONAL_OR_KEYWORD,
|
|
136
|
+
inspect.Parameter.KEYWORD_ONLY
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
new_kwargs = {k: v for k, v in new_kwargs.items() if k in allowed}
|
|
140
|
+
|
|
141
|
+
return tuple(new_args), new_kwargs
|
|
142
|
+
def run_pruned_func(func, *args, **kwargs):
|
|
143
|
+
args,kwargs = prune_inputs(func, *args, **kwargs)
|
|
144
|
+
return func(*args, **kwargs)
|
|
@@ -52,3 +52,41 @@ def get_caller_dir(i: Optional[int] = None) -> str:
|
|
|
52
52
|
depth = 1 if i is None else int(i)
|
|
53
53
|
abspath = get_caller_path(depth + 1)
|
|
54
54
|
return os.path.dirname(abspath)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def get_original_caller_dir(levels_up: int = None) -> Path:
|
|
58
|
+
"""
|
|
59
|
+
Return the directory of the *original* caller in the call stack.
|
|
60
|
+
|
|
61
|
+
levels_up:
|
|
62
|
+
- None → automatically goes to the bottom-most user-level caller.
|
|
63
|
+
- N → manually walk up N frames for custom behavior.
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
Path object pointing to caller's directory.
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
stack = inspect.stack()
|
|
70
|
+
|
|
71
|
+
# If the user specifies an exact depth
|
|
72
|
+
if levels_up is not None:
|
|
73
|
+
target = min(levels_up + 1, len(stack) - 1)
|
|
74
|
+
frame = stack[target]
|
|
75
|
+
return Path(frame.filename).resolve().parent
|
|
76
|
+
|
|
77
|
+
# Otherwise, auto-detect the FIRST file that isn't inside site-packages or abstract_* utilities
|
|
78
|
+
for frameinfo in reversed(stack):
|
|
79
|
+
file_path = Path(frameinfo.filename).resolve()
|
|
80
|
+
|
|
81
|
+
# Skip internal interpreter/frame files
|
|
82
|
+
if "site-packages" in str(file_path):
|
|
83
|
+
continue
|
|
84
|
+
if "abstract_" in file_path.name:
|
|
85
|
+
continue
|
|
86
|
+
if file_path.name.startswith("<"):
|
|
87
|
+
continue
|
|
88
|
+
|
|
89
|
+
return file_path.parent
|
|
90
|
+
|
|
91
|
+
# Fallback: last entry in the stack
|
|
92
|
+
return Path(stack[-1].filename).resolve().parent
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
from ...imports import inspect,os,json,functools,inspect,glob,sys
|
|
1
|
+
from ...imports import inspect,os,json,functools,inspect,glob,sys,Path
|
|
2
2
|
from typing import *
|
|
@@ -50,19 +50,20 @@ def is_file(
|
|
|
50
50
|
env_path=None,
|
|
51
51
|
**kwargs
|
|
52
52
|
):
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
53
|
+
if path:
|
|
54
|
+
contingencies = list(set([user_at_host,password,key,env_path]))
|
|
55
|
+
len_contingencies = len(contingencies)
|
|
56
|
+
is_potential = (len_contingencies >1 or (None not in contingencies))
|
|
57
|
+
if not is_potential:
|
|
58
|
+
return os.path.isfile(path)
|
|
59
|
+
cmd = get_item_check_cmd(path,file=True)
|
|
60
|
+
return run_cmd(cmd=cmd,
|
|
61
|
+
user_at_host=user_at_host,
|
|
62
|
+
password=password,
|
|
63
|
+
key=key,
|
|
64
|
+
env_path=env_path,
|
|
65
|
+
**kwargs
|
|
66
|
+
)
|
|
66
67
|
def is_dir(
|
|
67
68
|
path,
|
|
68
69
|
user_at_host=None,
|
|
@@ -71,34 +72,13 @@ def is_dir(
|
|
|
71
72
|
env_path=None,
|
|
72
73
|
**kwargs
|
|
73
74
|
):
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
user_at_host=user_at_host,
|
|
82
|
-
password=password,
|
|
83
|
-
key=key,
|
|
84
|
-
env_path=env_path,
|
|
85
|
-
**kwargs
|
|
86
|
-
)
|
|
87
|
-
def is_exists(
|
|
88
|
-
path,
|
|
89
|
-
user_at_host=None,
|
|
90
|
-
password=None,
|
|
91
|
-
key=None,
|
|
92
|
-
env_path=None,
|
|
93
|
-
**kwargs
|
|
94
|
-
):
|
|
95
|
-
contingencies = list(set([user_at_host,password,key,env_path]))
|
|
96
|
-
len_contingencies = len(contingencies)
|
|
97
|
-
is_potential = (len_contingencies >1 or (None not in contingencies))
|
|
98
|
-
if not is_potential:
|
|
99
|
-
return os.path.exists(path)
|
|
100
|
-
if is_potential == True:
|
|
101
|
-
cmd = get_item_check_cmd(path,exists=True)
|
|
75
|
+
if path:
|
|
76
|
+
contingencies = list(set([user_at_host,password,key,env_path]))
|
|
77
|
+
len_contingencies = len(contingencies)
|
|
78
|
+
is_potential = (len_contingencies >1 or (None not in contingencies))
|
|
79
|
+
if not is_potential:
|
|
80
|
+
return os.path.isdir(path)
|
|
81
|
+
cmd = get_item_check_cmd(path,file=False,directory=True)
|
|
102
82
|
return run_cmd(cmd=cmd,
|
|
103
83
|
user_at_host=user_at_host,
|
|
104
84
|
password=password,
|
|
@@ -106,7 +86,7 @@ def is_exists(
|
|
|
106
86
|
env_path=env_path,
|
|
107
87
|
**kwargs
|
|
108
88
|
)
|
|
109
|
-
def
|
|
89
|
+
def is_exists(
|
|
110
90
|
path,
|
|
111
91
|
user_at_host=None,
|
|
112
92
|
password=None,
|
|
@@ -114,25 +94,49 @@ def is_any(
|
|
|
114
94
|
env_path=None,
|
|
115
95
|
**kwargs
|
|
116
96
|
):
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
97
|
+
if path:
|
|
98
|
+
contingencies = list(set([user_at_host,password,key,env_path]))
|
|
99
|
+
len_contingencies = len(contingencies)
|
|
100
|
+
is_potential = (len_contingencies >1 or (None not in contingencies))
|
|
101
|
+
if not is_potential:
|
|
102
|
+
return os.path.exists(path)
|
|
103
|
+
if is_potential == True:
|
|
104
|
+
cmd = get_item_check_cmd(path,exists=True)
|
|
105
|
+
return run_cmd(cmd=cmd,
|
|
126
106
|
user_at_host=user_at_host,
|
|
127
107
|
password=password,
|
|
128
108
|
key=key,
|
|
129
109
|
env_path=env_path,
|
|
130
110
|
**kwargs
|
|
131
111
|
)
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
112
|
+
def is_any(
|
|
113
|
+
path,
|
|
114
|
+
user_at_host=None,
|
|
115
|
+
password=None,
|
|
116
|
+
key=None,
|
|
117
|
+
env_path=None,
|
|
118
|
+
**kwargs
|
|
119
|
+
):
|
|
120
|
+
if path:
|
|
121
|
+
contingencies = list(set([user_at_host,password,key,env_path]))
|
|
122
|
+
len_contingencies = len(contingencies)
|
|
123
|
+
is_potential = (len_contingencies >1 or (None not in contingencies))
|
|
124
|
+
if not is_potential:
|
|
125
|
+
return os.path.exists(path)
|
|
126
|
+
if is_potential == True:
|
|
127
|
+
out_js = get_all_item_check_cmd(path,file=True,directory=True,exists=True)
|
|
128
|
+
for typ,cmd in out_js.items():
|
|
129
|
+
response = run_cmd(cmd=cmd,
|
|
130
|
+
user_at_host=user_at_host,
|
|
131
|
+
password=password,
|
|
132
|
+
key=key,
|
|
133
|
+
env_path=env_path,
|
|
134
|
+
**kwargs
|
|
135
|
+
)
|
|
136
|
+
result = "__OK__" in (response or "")
|
|
137
|
+
if result:
|
|
138
|
+
return typ
|
|
139
|
+
|
|
136
140
|
class PathBackend(Protocol):
|
|
137
141
|
def join(self, *parts: str) -> str: ...
|
|
138
142
|
def isfile(self, path: str) -> bool: ...
|
|
@@ -119,14 +119,17 @@ def ensure_directories(*args,**kwargs):
|
|
|
119
119
|
|
|
120
120
|
if run_pruned_func(is_dir,arg_str,**kwargs):
|
|
121
121
|
directories.append(arg_str)
|
|
122
|
+
|
|
122
123
|
elif run_pruned_func(is_file,arg_str,**kwargs):
|
|
123
124
|
dirname = os.path.dirname(arg_str)
|
|
124
125
|
directories.append(dirname)
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
if not directories:
|
|
127
|
+
safe_directories = get_dir_filter_kwargs(**kwargs)
|
|
128
|
+
safe_dirs = safe_directories.get('directories')
|
|
129
|
+
safe_dirs = if_none_change(safe_dirs or None,get_initial_caller_dir())
|
|
130
|
+
directories+= make_list(safe_dirs)
|
|
129
131
|
return list(set([r for r in directories if r]))
|
|
132
|
+
|
|
130
133
|
def get_proper_type_str(string):
|
|
131
134
|
if not string:
|
|
132
135
|
return None
|
|
@@ -297,3 +297,42 @@ def attach_self_functions(
|
|
|
297
297
|
attached[out_name] = bound
|
|
298
298
|
|
|
299
299
|
return attached
|
|
300
|
+
def initFuncs(self, mode=None):
|
|
301
|
+
"""
|
|
302
|
+
Load functions in either dev (dynamic) or prod (static) mode.
|
|
303
|
+
"""
|
|
304
|
+
mode = mode or "dev"
|
|
305
|
+
|
|
306
|
+
logger = get_logFile(__name__)
|
|
307
|
+
|
|
308
|
+
try:
|
|
309
|
+
base_pkg = self.__class__.__module__.rsplit('.', 1)[0]
|
|
310
|
+
|
|
311
|
+
if mode == "prod":
|
|
312
|
+
# All imports come from the auto-generated import script
|
|
313
|
+
imports_mod = importlib.import_module(f"{base_pkg}.imports.funcs_imports")
|
|
314
|
+
|
|
315
|
+
# Attach all exports
|
|
316
|
+
for name in getattr(imports_mod, "__all__", []):
|
|
317
|
+
func = getattr(imports_mod, name)
|
|
318
|
+
setattr(self, name, func.__get__(self))
|
|
319
|
+
|
|
320
|
+
return self
|
|
321
|
+
|
|
322
|
+
# --- DEV MODE: your existing dynamic loader ---
|
|
323
|
+
import inspect, pkgutil, importlib
|
|
324
|
+
pkg = importlib.import_module(base_pkg + ".functions")
|
|
325
|
+
|
|
326
|
+
existing = set(self.__dict__) | set(dir(self))
|
|
327
|
+
|
|
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))
|
|
334
|
+
|
|
335
|
+
except Exception as e:
|
|
336
|
+
logger.error(f"initFuncs({mode}) error: {e}")
|
|
337
|
+
|
|
338
|
+
return self
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from ...imports import *
|
|
2
|
+
from .nullProxy import nullProxy,nullProxy_logger
|
|
3
|
+
@lru_cache(maxsize=None)
|
|
4
|
+
def lazy_import_single(name: str,fallback=None):
|
|
5
|
+
"""
|
|
6
|
+
Import module safely. If unavailable, return NullProxy.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
if name in sys.modules:
|
|
10
|
+
return sys.modules[name]
|
|
11
|
+
|
|
12
|
+
try:
|
|
13
|
+
module = importlib.import_module(name)
|
|
14
|
+
return module
|
|
15
|
+
except Exception as e:
|
|
16
|
+
nullProxy_logger.warning(
|
|
17
|
+
"[lazy_import] Failed to import '%s': %s",
|
|
18
|
+
name,
|
|
19
|
+
e,
|
|
20
|
+
)
|
|
21
|
+
return nullProxy(name,fallback=fallback)
|
|
22
|
+
|
|
23
|
+
def get_lazy_attr(module_name: str, *attrs,fallback=None):
|
|
24
|
+
obj = lazy_import(module_name,fallback=fallback)
|
|
25
|
+
|
|
26
|
+
for attr in attrs:
|
|
27
|
+
try:
|
|
28
|
+
obj = getattr(obj, attr)
|
|
29
|
+
except Exception:
|
|
30
|
+
return nullProxy(module_name, attrs,fallback=fallback)
|
|
31
|
+
|
|
32
|
+
return obj
|
|
33
|
+
def lazy_import(name: str, *attrs,fallback=None):
|
|
34
|
+
"""
|
|
35
|
+
Import module safely. If unavailable, return NullProxy.
|
|
36
|
+
"""
|
|
37
|
+
if attrs:
|
|
38
|
+
obj = get_lazy_attr(name, *attrs,fallback=fallback)
|
|
39
|
+
else:
|
|
40
|
+
obj = lazy_import_single(name,fallback=fallback)
|
|
41
|
+
return obj
|
abstract_utilities-0.2.2.671/src/abstract_utilities/import_utils/src/layze_import_utils/nullProxy.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from ...imports import *
|
|
2
|
+
nullProxy_logger = logging.getLogger("abstract.lazy_import")
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class nullProxy:
|
|
6
|
+
"""
|
|
7
|
+
Safe, chainable, callable placeholder for missing modules/attributes.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
def __init__(self, name, path=(),fallback=None):
|
|
11
|
+
self._name = name
|
|
12
|
+
self._path = path
|
|
13
|
+
self.fallback=fallback
|
|
14
|
+
def __getattr__(self, attr):
|
|
15
|
+
return nullProxy(self._name, self._path + (attr,))
|
|
16
|
+
|
|
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}")
|
|
23
|
+
nullProxy_logger.warning(
|
|
24
|
+
"[lazy_import] Call to missing module/attr: %s.%s args=%s kwargs=%s",
|
|
25
|
+
self._name,
|
|
26
|
+
".".join(self._path),
|
|
27
|
+
args,
|
|
28
|
+
kwargs,
|
|
29
|
+
)
|
|
30
|
+
return None
|
|
31
|
+
|
|
32
|
+
def __repr__(self):
|
|
33
|
+
full = ".".join((self._name, *self._path))
|
|
34
|
+
return f"<nullProxy {full}>"
|
|
35
|
+
|
|
36
|
+
def __bool__(self):
|
|
37
|
+
return False # safe in conditionals
|
{abstract_utilities-0.2.2.639 → abstract_utilities-0.2.2.671}/src/abstract_utilities/imports.py
RENAMED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
import re,pexpect,shlex,ezodf,tiktoken,geopandas as gpd,os,PyPDF2,json,tempfile,requests
|
|
3
3
|
import textwrap,pdfplumber,math,hashlib,pandas as pd,platform,textwrap as tw,glob,asyncio
|
|
4
|
-
import fnmatch,importlib,shutil,sys,time,threading,posixpath,importlib.util,types
|
|
4
|
+
import fnmatch,importlib,shutil,sys,time,threading,posixpath,importlib.util,types, logging
|
|
5
5
|
import subprocess,pytesseract,queue,logging,functools,pathlib,pkgutil,inspect
|
|
6
6
|
from typing import *
|
|
7
7
|
from datetime import timedelta,datetime
|
|
8
8
|
from flask import jsonify
|
|
9
9
|
from logging.handlers import RotatingFileHandler
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from functools import reduce
|
|
11
|
+
from functools import reduce,lru_cache
|
|
12
12
|
from types import MethodType,ModuleType
|
|
13
13
|
from werkzeug.utils import secure_filename
|
|
14
14
|
from werkzeug.datastructures import FileStorage
|
|
@@ -16,3 +16,6 @@ from pdf2image import convert_from_path # only used for OCR fallback
|
|
|
16
16
|
from dataclasses import dataclass,field,asdict
|
|
17
17
|
from pprint import pprint
|
|
18
18
|
from dotenv import load_dotenv
|
|
19
|
+
from types import MethodType
|
|
20
|
+
from datetime import datetime, date
|
|
21
|
+
from decimal import Decimal
|
|
@@ -123,11 +123,11 @@ def safe_dump_to_file(data, file_path=None, ensure_ascii=False, indent=4, *args,
|
|
|
123
123
|
else:
|
|
124
124
|
logger.error("file_path and data must be provided to safe_dump_to_file")
|
|
125
125
|
|
|
126
|
-
def safe_read_from_json(
|
|
126
|
+
def safe_read_from_json(file_path,*args,**kwargs):
|
|
127
127
|
is_read=True
|
|
128
|
-
file_path,_ = check_read_write_params(*args, **kwargs)
|
|
129
128
|
|
|
130
|
-
|
|
129
|
+
|
|
130
|
+
valid_file_path = get_file_path(file_path,*args,is_read=is_read,**kwargs)
|
|
131
131
|
if valid_file_path:
|
|
132
132
|
file_path = valid_file_path
|
|
133
133
|
try:
|
|
@@ -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)
|