abstract-utilities 0.2.2.481__tar.gz → 0.2.2.499__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.481 → abstract_utilities-0.2.2.499}/PKG-INFO +1 -1
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/setup.py +1 -1
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/__init__.py +0 -1
- {abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/imports → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils}/__init__.py +1 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/constants.py +6 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/imports.py +1 -1
- abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/imports/module_imports.py +12 -0
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/imports → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils}/module_imports.py +0 -1
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/__init__.py +2 -0
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/file_filters.py +14 -8
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/file_reader.py +1 -1
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/file_utils.py +84 -18
- abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src/filter_params.py +155 -0
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/find_collect.py +1 -1
- abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/req.py → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src/initFunctionsGen.py +2 -45
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/map_utils.py +1 -1
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/pdf_utils.py +1 -1
- {abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src}/type_checks.py +3 -2
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/__init__.py +2 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/__init__.py +4 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/constants.py +2 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/imports.py +4 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/module_imports.py +6 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/utils.py +30 -0
- {abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src}/__init__.py +4 -4
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/clean_imports.py +122 -0
- {abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src}/dot_utils.py +1 -4
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/function_utils.py → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/extract_utils.py +1 -4
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/import_functions.py +46 -0
- {abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src}/import_utils.py +14 -8
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/__init__.py +139 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/context_utils.py +27 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/import_collectors.py +53 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/path_utils.py +28 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/safe_import.py +27 -0
- abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils.py +140 -0
- {abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils → abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src}/sysroot_utils.py +4 -17
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/path_utils.py +1 -12
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/read_write_utils.py +113 -60
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/PKG-INFO +1 -1
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/SOURCES.txt +32 -33
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/top_level.txt +1 -0
- abstract_utilities-0.2.2.499/src/imports/__init__.py +36 -0
- abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/__init__.py +0 -3
- abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/filter_params.py +0 -89
- abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/imports/__init__.py +0 -3
- abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/imports/constants.py +0 -39
- abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/imports/imports.py +0 -39
- abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/imports/module_imports.py +0 -14
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/__init__.py +0 -2
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/file_reader2.py +0 -629
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/file_readers.py +0 -629
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/imports/imports.py +0 -3
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/sadfsad.py +0 -625
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/__init__.py +0 -2
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/clean_imports.py +0 -175
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/impot_functions.py +0 -70
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/safe_import_utils.py +0 -68
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/utils.py +0 -25
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/imports.py +0 -8
- abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/initFuncGen.py +0 -151
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/README.md +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/pyproject.toml +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/setup.cfg +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/abstract_classes.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/class_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/cmd_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/pexpect_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/user_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/collator_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/best_match.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/compare_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/find_value.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/doit.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/dynimport.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/abstractEnv.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/envy_it.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/imports.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/error_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/__init__.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/classes.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/clean_imps.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/global_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/hash_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/history_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/json_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/list_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/log_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/math_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/parse_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/safe_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/__init__.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/classes.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/imports.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/pexpect_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/string_clean.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/string_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/tetsts.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/thread_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/time_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/type_utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/utils.py +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/dependency_links.txt +0 -0
- {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/requires.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.499
|
|
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.499',
|
|
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.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/__init__.py
RENAMED
|
@@ -4,7 +4,6 @@ from datetime import datetime
|
|
|
4
4
|
from typing import *
|
|
5
5
|
from .hash_utils import *
|
|
6
6
|
##from .dynimport import get_abstract_import,import_symbols_to_parent,call_for_all_tabs
|
|
7
|
-
from .robust_readers import *
|
|
8
7
|
from .dynimport import get_abstract_import
|
|
9
8
|
from .json_utils import (unified_json_loader,
|
|
10
9
|
find_keys,
|
|
@@ -4,8 +4,11 @@ from .module_imports import *
|
|
|
4
4
|
class ScanConfig:
|
|
5
5
|
allowed_exts: Set[str]
|
|
6
6
|
unallowed_exts: Set[str]
|
|
7
|
+
allowed_types: Set[str]
|
|
7
8
|
exclude_types: Set[str]
|
|
9
|
+
allowed_dirs: List[str] = field(default_factory=list)
|
|
8
10
|
exclude_dirs: List[str] = field(default_factory=list)
|
|
11
|
+
allowed_patterns: List[str] = field(default_factory=list)
|
|
9
12
|
exclude_patterns: List[str] = field(default_factory=list)
|
|
10
13
|
DEFAULT_ALLOWED_EXTS: Set[str] = {
|
|
11
14
|
".py", ".pyw", # python
|
|
@@ -37,3 +40,6 @@ DEFAULT_EXCLUDE_PATTERNS: Set[str] = {
|
|
|
37
40
|
REMOTE_RE = re.compile(r"^(?P<host>[^:\s]+@[^:\s]+):(?P<path>/.*)$")
|
|
38
41
|
AllowedPredicate = Optional[Callable[[str], bool]]
|
|
39
42
|
DEFAULT_EXCLUDE_FILE_PATTERNS=DEFAULT_EXCLUDE_PATTERNS
|
|
43
|
+
DEFAULT_ALLOWED_PATTENS="*"
|
|
44
|
+
DEFAULT_ALLOWED_DIRS="*"
|
|
45
|
+
DEFAULT_ALLOWED_TYPES="*"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
|
|
2
|
+
from ...string_clean import eatAll
|
|
3
|
+
from ...list_utils import make_list
|
|
4
|
+
from ...type_utils import get_media_exts, is_media_type, MIME_TYPES, is_str
|
|
5
|
+
from ...ssh_utils import *
|
|
6
|
+
from ...env_utils import *
|
|
7
|
+
from ...read_write_utils import read_from_file,write_to_file
|
|
8
|
+
from ...abstract_classes import SingletonMeta
|
|
9
|
+
from ...log_utils import get_logFile
|
|
10
|
+
from ...class_utils import get_caller, get_caller_path, get_caller_dir
|
|
11
|
+
from ...ssh_utils import run_cmd
|
|
12
|
+
from ...string_utils import get_from_kwargs
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from ..imports import *
|
|
2
2
|
from .filter_params import *
|
|
3
3
|
from .file_utils import *
|
|
4
4
|
##from abstract_utilities import make_list,get_media_exts, is_media_type
|
|
@@ -8,21 +8,27 @@ def collect_filepaths(
|
|
|
8
8
|
cfg: ScanConfig=None,
|
|
9
9
|
allowed_exts: Optional[Set[str]] = False,
|
|
10
10
|
unallowed_exts: Optional[Set[str]] = False,
|
|
11
|
+
allowed_types: Optional[Set[str]] = False,
|
|
11
12
|
exclude_types: Optional[Set[str]] = False,
|
|
13
|
+
allowed_dirs: Optional[List[str]] = False,
|
|
12
14
|
exclude_dirs: Optional[List[str]] = False,
|
|
15
|
+
allowed_patterns: Optional[List[str]] = False,
|
|
13
16
|
exclude_patterns: Optional[List[str]] = False,
|
|
14
17
|
add=False,
|
|
15
18
|
allowed: Optional[Callable[[str], bool]] = None,
|
|
16
19
|
**kwargs
|
|
17
20
|
) -> List[str]:
|
|
18
21
|
cfg = cfg or define_defaults(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
allowed_exts = allowed_exts,
|
|
23
|
+
unallowed_exts = unallowed_exts,
|
|
24
|
+
allowed_types = allowed_types,
|
|
25
|
+
exclude_types = exclude_types,
|
|
26
|
+
allowed_dirs = allowed_dirs,
|
|
27
|
+
exclude_dirs = exclude_dirs,
|
|
28
|
+
allowed_patterns = allowed_patterns,
|
|
29
|
+
exclude_patterns = exclude_patterns,
|
|
30
|
+
add = add
|
|
31
|
+
)
|
|
26
32
|
allowed = allowed or make_allowed_predicate(cfg)
|
|
27
33
|
directories = make_list(directory)
|
|
28
34
|
roots = [r for r in directories if r]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
from .filter_params import *
|
|
3
|
-
from
|
|
4
|
-
|
|
3
|
+
from ..imports import *
|
|
5
4
|
##from abstract_utilities import make_list,get_media_exts, is_media_type
|
|
6
5
|
def get_allowed_predicate(allowed=None):
|
|
7
6
|
if allowed != False:
|
|
@@ -58,8 +57,11 @@ def get_files_and_dirs(
|
|
|
58
57
|
cfg: Optional["ScanConfig"] = None,
|
|
59
58
|
allowed_exts: Optional[Set[str]] = False,
|
|
60
59
|
unallowed_exts: Optional[Set[str]] = False,
|
|
60
|
+
allowed_types: Optional[Set[str]] = False,
|
|
61
61
|
exclude_types: Optional[Set[str]] = False,
|
|
62
|
+
allowed_dirs: Optional[List[str]] = False,
|
|
62
63
|
exclude_dirs: Optional[List[str]] = False,
|
|
64
|
+
allowed_patterns: Optional[List[str]] = False,
|
|
63
65
|
exclude_patterns: Optional[List[str]] = False,
|
|
64
66
|
add = False,
|
|
65
67
|
recursive: bool = True,
|
|
@@ -67,11 +69,14 @@ def get_files_and_dirs(
|
|
|
67
69
|
**kwargs
|
|
68
70
|
):
|
|
69
71
|
cfg = cfg or define_defaults(
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
allowed_exts = allowed_exts,
|
|
73
|
+
unallowed_exts = unallowed_exts,
|
|
74
|
+
allowed_types = allowed_types,
|
|
75
|
+
exclude_types = exclude_types,
|
|
76
|
+
allowed_dirs = allowed_dirs,
|
|
77
|
+
exclude_dirs = exclude_dirs,
|
|
78
|
+
allowed_patterns = allowed_patterns,
|
|
79
|
+
exclude_patterns = exclude_patterns,
|
|
75
80
|
add=add
|
|
76
81
|
)
|
|
77
82
|
allowed = make_allowed_predicate(cfg)
|
|
@@ -88,48 +93,109 @@ def get_files_and_dirs(
|
|
|
88
93
|
files = get_allowed_files(items,allowed=allowed)
|
|
89
94
|
return dirs,files
|
|
90
95
|
def make_allowed_predicate(cfg: ScanConfig) -> Callable[[str], bool]:
|
|
96
|
+
"""
|
|
97
|
+
Build a predicate that returns True if a given path is considered allowed
|
|
98
|
+
under the given ScanConfig. Applies allowed_* and exclude_* logic symmetrically.
|
|
99
|
+
"""
|
|
91
100
|
def allowed(path: str) -> bool:
|
|
92
101
|
p = Path(path)
|
|
93
102
|
name = p.name.lower()
|
|
94
103
|
path_str = str(p).lower()
|
|
95
|
-
|
|
104
|
+
|
|
105
|
+
# --------------------
|
|
106
|
+
# A) directory filters
|
|
107
|
+
# --------------------
|
|
96
108
|
if cfg.exclude_dirs:
|
|
97
109
|
for dpat in cfg.exclude_dirs:
|
|
98
|
-
|
|
99
|
-
|
|
110
|
+
dpat_l = dpat.lower()
|
|
111
|
+
if dpat_l in path_str or fnmatch.fnmatch(name, dpat_l):
|
|
112
|
+
if p.is_dir() or dpat_l in path_str:
|
|
100
113
|
return False
|
|
101
114
|
|
|
115
|
+
if cfg.allowed_dirs and cfg.allowed_dirs != ["*"]:
|
|
116
|
+
# must be in at least one allowed dir
|
|
117
|
+
if not any(
|
|
118
|
+
fnmatch.fnmatch(path_str, f"*{dpat.lower()}*") for dpat in cfg.allowed_dirs
|
|
119
|
+
):
|
|
120
|
+
return False
|
|
121
|
+
|
|
122
|
+
# --------------------
|
|
123
|
+
# B) pattern filters
|
|
124
|
+
# --------------------
|
|
125
|
+
if cfg.allowed_patterns and cfg.allowed_patterns != ["*"]:
|
|
126
|
+
if not any(fnmatch.fnmatch(name, pat.lower()) for pat in cfg.allowed_patterns):
|
|
127
|
+
return False
|
|
128
|
+
|
|
102
129
|
if cfg.exclude_patterns:
|
|
103
|
-
# B) filename patterns
|
|
104
130
|
for pat in cfg.exclude_patterns:
|
|
105
131
|
if fnmatch.fnmatch(name, pat.lower()):
|
|
106
132
|
return False
|
|
107
133
|
|
|
108
|
-
#
|
|
134
|
+
# --------------------
|
|
135
|
+
# C) extension filters
|
|
136
|
+
# --------------------
|
|
109
137
|
if p.is_file():
|
|
110
138
|
ext = p.suffix.lower()
|
|
111
|
-
if
|
|
139
|
+
if cfg.allowed_exts and ext not in cfg.allowed_exts:
|
|
140
|
+
return False
|
|
141
|
+
if cfg.unallowed_exts and ext in cfg.unallowed_exts:
|
|
142
|
+
return False
|
|
143
|
+
|
|
144
|
+
# --------------------
|
|
145
|
+
# D) type filters (optional)
|
|
146
|
+
# --------------------
|
|
147
|
+
if cfg.allowed_types and cfg.allowed_types != {"*"}:
|
|
148
|
+
if not any(t in path_str for t in cfg.allowed_types):
|
|
112
149
|
return False
|
|
150
|
+
if cfg.exclude_types and cfg.exclude_types != {"*"}:
|
|
151
|
+
if any(t in path_str for t in cfg.exclude_types):
|
|
152
|
+
return False
|
|
153
|
+
|
|
113
154
|
return True
|
|
155
|
+
|
|
114
156
|
return allowed
|
|
157
|
+
def correct_kwargs(**kwargs):
|
|
158
|
+
for key,values in kwargs.items():
|
|
159
|
+
if key.startswith('excluded'):
|
|
160
|
+
post_fix = key.split('_')[-1]
|
|
161
|
+
correct_key = f'exclude_{post_fix}'
|
|
162
|
+
correct_vals = kwargs.get(correct_key)
|
|
163
|
+
kwargs[correct_key]=combine_params(correct_vals,values)
|
|
164
|
+
del kwargs[key]
|
|
165
|
+
|
|
115
166
|
def collect_filepaths(
|
|
116
167
|
directory: List[str],
|
|
117
168
|
cfg: ScanConfig=None,
|
|
118
169
|
allowed_exts: Optional[Set[str]] = False,
|
|
119
170
|
unallowed_exts: Optional[Set[str]] = False,
|
|
171
|
+
allowed_types: Optional[Set[str]] = False,
|
|
120
172
|
exclude_types: Optional[Set[str]] = False,
|
|
173
|
+
allowed_dirs: Optional[List[str]] = False,
|
|
121
174
|
exclude_dirs: Optional[List[str]] = False,
|
|
175
|
+
allowed_patterns: Optional[List[str]] = False,
|
|
122
176
|
exclude_patterns: Optional[List[str]] = False,
|
|
123
177
|
add=False,
|
|
124
178
|
allowed: Optional[Callable[[str], bool]] = None,
|
|
125
179
|
**kwargs
|
|
126
180
|
) -> List[str]:
|
|
181
|
+
kwargs = correct_kwargs(allowed_exts = allowed_exts,
|
|
182
|
+
unallowed_exts = unallowed_exts,
|
|
183
|
+
allowed_types = allowed_types,
|
|
184
|
+
exclude_types = exclude_types,
|
|
185
|
+
allowed_dirs = allowed_dirs,
|
|
186
|
+
exclude_dirs = exclude_dirs,
|
|
187
|
+
allowed_patterns = allowed_patterns,
|
|
188
|
+
exclude_patterns = exclude_patterns,
|
|
189
|
+
**kwargs)
|
|
127
190
|
cfg = cfg or define_defaults(
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
191
|
+
allowed_exts = allowed_exts,
|
|
192
|
+
unallowed_exts = unallowed_exts,
|
|
193
|
+
allowed_types = allowed_types,
|
|
194
|
+
exclude_types = exclude_types,
|
|
195
|
+
allowed_dirs = allowed_dirs,
|
|
196
|
+
exclude_dirs = exclude_dirs,
|
|
197
|
+
allowed_patterns = allowed_patterns,
|
|
198
|
+
exclude_patterns = exclude_patterns,
|
|
133
199
|
add = add
|
|
134
200
|
)
|
|
135
201
|
allowed = allowed or make_allowed_predicate(cfg)
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
|
|
2
|
+
from ..imports import *
|
|
3
|
+
import re
|
|
4
|
+
def combine_params(*values,typ=None):
|
|
5
|
+
nu_values = None
|
|
6
|
+
for value in values:
|
|
7
|
+
if value is not None:
|
|
8
|
+
if nu_values is None:
|
|
9
|
+
typ = typ or type(value)
|
|
10
|
+
nu_values = typ()
|
|
11
|
+
else:
|
|
12
|
+
if val_type is set:
|
|
13
|
+
nu_values = nu_values | typ(value)
|
|
14
|
+
if val_type is list:
|
|
15
|
+
nu_values += typ(value)
|
|
16
|
+
return nu_values
|
|
17
|
+
# -------------------------
|
|
18
|
+
# Default sets
|
|
19
|
+
# -------------------------
|
|
20
|
+
|
|
21
|
+
DEFAULT_ALLOWED_EXTS: Set[str] = {
|
|
22
|
+
".py", ".pyw", ".js", ".jsx", ".ts", ".tsx", ".mjs",
|
|
23
|
+
".html", ".htm", ".xml", ".css", ".scss", ".sass", ".less",
|
|
24
|
+
".json", ".yaml", ".yml", ".toml", ".ini", ".cfg",
|
|
25
|
+
".md", ".markdown", ".rst", ".sh", ".bash", ".env", ".txt"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
DEFAULT_EXCLUDE_TYPES: Set[str] = {
|
|
29
|
+
"image", "video", "audio", "presentation",
|
|
30
|
+
"spreadsheet", "archive", "executable"
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
_unallowed = set(get_media_exts(DEFAULT_EXCLUDE_TYPES)) | {
|
|
34
|
+
".bak", ".shp", ".cpg", ".dbf", ".shx", ".geojson",
|
|
35
|
+
".pyc", ".prj", ".sbn", ".sbx"
|
|
36
|
+
}
|
|
37
|
+
DEFAULT_UNALLOWED_EXTS = {e for e in _unallowed if e not in DEFAULT_ALLOWED_EXTS}
|
|
38
|
+
|
|
39
|
+
DEFAULT_EXCLUDE_DIRS: List[str] = [
|
|
40
|
+
"node_modules", "__pycache__", "backups", "backup",
|
|
41
|
+
"trash", "deprecated", "old", "__init__"
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
DEFAULT_EXCLUDE_PATTERNS: List[str] = [
|
|
45
|
+
"__init__*", "*.tmp", "*.log", "*.lock", "*.zip", "*~"
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
DEFAULT_ALLOWED_PATTERNS: List[str] = ["*"]
|
|
49
|
+
DEFAULT_ALLOWED_DIRS: List[str] = ["*"]
|
|
50
|
+
DEFAULT_ALLOWED_TYPES: List[str] = ["*"]
|
|
51
|
+
|
|
52
|
+
REMOTE_RE = re.compile(r"^(?P<host>[^:\s]+@[^:\s]+):(?P<path>/.*)$")
|
|
53
|
+
AllowedPredicate = Optional[Callable[[str], bool]]
|
|
54
|
+
|
|
55
|
+
# -------------------------
|
|
56
|
+
# Config dataclass
|
|
57
|
+
# -------------------------
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class ScanConfig:
|
|
61
|
+
allowed_exts: Set[str]
|
|
62
|
+
unallowed_exts: Set[str]
|
|
63
|
+
allowed_types: Set[str]
|
|
64
|
+
exclude_types: Set[str]
|
|
65
|
+
allowed_dirs: List[str] = field(default_factory=list)
|
|
66
|
+
exclude_dirs: List[str] = field(default_factory=list)
|
|
67
|
+
allowed_patterns: List[str] = field(default_factory=list)
|
|
68
|
+
exclude_patterns: List[str] = field(default_factory=list)
|
|
69
|
+
|
|
70
|
+
# -------------------------
|
|
71
|
+
# Utility functions
|
|
72
|
+
# -------------------------
|
|
73
|
+
|
|
74
|
+
def _normalize_listlike(value, typ=list, sep=','):
|
|
75
|
+
"""Normalize comma-separated or iterable values into the desired type."""
|
|
76
|
+
if value in [True, None, False]:
|
|
77
|
+
return value
|
|
78
|
+
if isinstance(value, str):
|
|
79
|
+
value = [v.strip() for v in value.split(sep) if v.strip()]
|
|
80
|
+
return typ(value)
|
|
81
|
+
|
|
82
|
+
def _ensure_exts(exts):
|
|
83
|
+
if exts in [True, None, False]:
|
|
84
|
+
return exts
|
|
85
|
+
out = []
|
|
86
|
+
for ext in _normalize_listlike(exts, list):
|
|
87
|
+
if not ext.startswith('.'):
|
|
88
|
+
ext = f".{ext}"
|
|
89
|
+
out.append(ext)
|
|
90
|
+
return set(out)
|
|
91
|
+
|
|
92
|
+
def _ensure_patterns(patterns):
|
|
93
|
+
"""Normalize pattern list and ensure they are valid globs."""
|
|
94
|
+
if patterns in [True, None, False]:
|
|
95
|
+
return patterns
|
|
96
|
+
patterns = _normalize_listlike(patterns, list)
|
|
97
|
+
out = []
|
|
98
|
+
for pattern in patterns:
|
|
99
|
+
if not pattern:
|
|
100
|
+
continue
|
|
101
|
+
if '*' not in pattern and '?' not in pattern:
|
|
102
|
+
# Implicitly make it a prefix match
|
|
103
|
+
if pattern.startswith('.') or pattern.startswith('~'):
|
|
104
|
+
pattern = f"*{pattern}"
|
|
105
|
+
else:
|
|
106
|
+
pattern = f"{pattern}*"
|
|
107
|
+
out.append(pattern)
|
|
108
|
+
return out
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _get_default_modular(value, default, add=False, typ=set):
|
|
112
|
+
"""Merge user and default values intelligently."""
|
|
113
|
+
if value in [True, None]:
|
|
114
|
+
return default
|
|
115
|
+
if value is False:
|
|
116
|
+
return typ()
|
|
117
|
+
if add:
|
|
118
|
+
return combine_params(value,default,typ=None)
|
|
119
|
+
|
|
120
|
+
return typ(value)
|
|
121
|
+
|
|
122
|
+
# -------------------------
|
|
123
|
+
# Default derivation logic
|
|
124
|
+
# -------------------------
|
|
125
|
+
|
|
126
|
+
def derive_file_defaults(
|
|
127
|
+
allowed_exts=False, unallowed_exts=False,
|
|
128
|
+
allowed_types=False, exclude_types=False,
|
|
129
|
+
allowed_dirs=False, exclude_dirs=False,
|
|
130
|
+
allowed_patterns=False, exclude_patterns=False,
|
|
131
|
+
add=False
|
|
132
|
+
):
|
|
133
|
+
allowed_exts = _get_default_modular(_ensure_exts(allowed_exts), DEFAULT_ALLOWED_EXTS, add, set)
|
|
134
|
+
unallowed_exts = _get_default_modular(_ensure_exts(unallowed_exts), DEFAULT_UNALLOWED_EXTS, add, set)
|
|
135
|
+
allowed_types = _get_default_modular(_normalize_listlike(allowed_types, set), DEFAULT_ALLOWED_TYPES, add, set)
|
|
136
|
+
exclude_types = _get_default_modular(_normalize_listlike(exclude_types, set), DEFAULT_EXCLUDE_TYPES, add, set)
|
|
137
|
+
allowed_dirs = _get_default_modular(_normalize_listlike(allowed_dirs, list), DEFAULT_ALLOWED_DIRS, add, list)
|
|
138
|
+
exclude_dirs = _get_default_modular(_normalize_listlike(exclude_dirs, list), DEFAULT_EXCLUDE_DIRS, add, list)
|
|
139
|
+
allowed_patterns = _get_default_modular(_ensure_patterns(allowed_patterns), DEFAULT_ALLOWED_PATTERNS, add, list)
|
|
140
|
+
exclude_patterns = _get_default_modular(_ensure_patterns(exclude_patterns), DEFAULT_EXCLUDE_PATTERNS, add, list)
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
"allowed_exts": allowed_exts,
|
|
144
|
+
"unallowed_exts": unallowed_exts,
|
|
145
|
+
"allowed_types": allowed_types,
|
|
146
|
+
"exclude_types": exclude_types,
|
|
147
|
+
"allowed_dirs": allowed_dirs,
|
|
148
|
+
"exclude_dirs": exclude_dirs,
|
|
149
|
+
"allowed_patterns": allowed_patterns,
|
|
150
|
+
"exclude_patterns": exclude_patterns,
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
def define_defaults(**kwargs):
|
|
154
|
+
defaults = derive_file_defaults(**kwargs)
|
|
155
|
+
return ScanConfig(**defaults)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# attach_dynamic.py
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
from .file_utils import define_defaults,get_files_and_dirs
|
|
5
|
-
from
|
|
5
|
+
from ..imports import *
|
|
6
6
|
ABSPATH = os.path.abspath(__file__)
|
|
7
7
|
ABSROOT = os.path.dirname(ABSPATH)
|
|
8
8
|
def caller_path():
|
|
@@ -103,47 +103,6 @@ def _discover_functions(base_pkg: str, *, hot_reload: bool) -> List[Tuple[str, C
|
|
|
103
103
|
results.append((name, fn, module_basename))
|
|
104
104
|
return results
|
|
105
105
|
|
|
106
|
-
def attach_functionss(
|
|
107
|
-
self,
|
|
108
|
-
*,
|
|
109
|
-
base_pkg: Optional[str] = None,
|
|
110
|
-
hot_reload: bool = False,
|
|
111
|
-
prefix_with_module: bool = False,
|
|
112
|
-
on_collision: str = "last_wins", # or "error" or "skip"
|
|
113
|
-
):
|
|
114
|
-
"""
|
|
115
|
-
Attach discovered functions from '<base_pkg>.functions' onto `self`.
|
|
116
|
-
|
|
117
|
-
- base_pkg: package containing either functions.py or functions/ (defaults to the class' package)
|
|
118
|
-
- hot_reload: reload modules each call (handy during development)
|
|
119
|
-
- prefix_with_module: if True, attach as '<module>_<funcname>' to avoid name clashes
|
|
120
|
-
- on_collision: how to handle duplicate names: 'last_wins' | 'error' | 'skip'
|
|
121
|
-
"""
|
|
122
|
-
if base_pkg is None:
|
|
123
|
-
# Infer from the class' module: e.g., "myapp.tabs.users.widgets" -> "myapp.tabs.users"
|
|
124
|
-
cls_mod = self.__class__.__module__
|
|
125
|
-
base_pkg = cls_mod.rsplit(".", 1)[0] if "." in cls_mod else cls_mod
|
|
126
|
-
|
|
127
|
-
discovered = _discover_functions(base_pkg, hot_reload=hot_reload)
|
|
128
|
-
seen: Dict[str, str] = {}
|
|
129
|
-
|
|
130
|
-
for name, fn, mod_base in discovered:
|
|
131
|
-
attr_name = f"{mod_base}_{name}" if prefix_with_module else name
|
|
132
|
-
|
|
133
|
-
if hasattr(self, attr_name):
|
|
134
|
-
if on_collision == "skip":
|
|
135
|
-
continue
|
|
136
|
-
if on_collision == "error":
|
|
137
|
-
raise RuntimeError(f"attach_functions collision on '{attr_name}' from module '{mod_base}'")
|
|
138
|
-
# last_wins: fall through
|
|
139
|
-
|
|
140
|
-
setattr(self, attr_name, fn)
|
|
141
|
-
seen[attr_name] = mod_base
|
|
142
|
-
|
|
143
|
-
# breadcrumb for debugging
|
|
144
|
-
setattr(self, "_attached_functions", sorted(seen.keys()))
|
|
145
|
-
return self
|
|
146
|
-
|
|
147
106
|
def attach_functions(
|
|
148
107
|
obj_or_cls,
|
|
149
108
|
base_pkg: str | None = None,
|
|
@@ -216,9 +175,7 @@ def attach_functions(
|
|
|
216
175
|
|
|
217
176
|
|
|
218
177
|
|
|
219
|
-
|
|
220
|
-
alls = str(list(set("""os,re,subprocess,sys,re,traceback,pydot, enum, inspect, sys, traceback, threading,json,traceback,logging,requests""".replace('\n','').replace(' ','').replace('\t','').split(','))))[1:-1].replace('"','').replace("'",'')
|
|
221
|
-
input(alls)
|
|
178
|
+
|
|
222
179
|
def isTab(item):
|
|
223
180
|
item_lower = item.lower()
|
|
224
181
|
for key in ['console','tab']:
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
from
|
|
1
|
+
from ..imports import *
|
|
2
2
|
|
|
3
3
|
def get_user_pass_host_key(**kwargs):
|
|
4
4
|
args = ['password','user_at_host','host','key','user']
|
|
5
|
-
|
|
5
|
+
kwargs['del_kwarg']=kwargs.get('del_kwarg',False)
|
|
6
|
+
values,kwargs = get_from_kwargs(*args,**kwargs)
|
|
6
7
|
return values
|
|
7
8
|
|
|
8
9
|
# --- Base remote checker -----------------------------------------------------
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
from ...read_write_utils import read_from_file,write_to_file,get_text_or_read
|
|
2
|
+
from ...string_clean import eatAll,eatInner,eatElse,clean_line
|
|
3
|
+
from ...class_utils import get_caller_path
|
|
4
|
+
from ...list_utils import make_list
|
|
5
|
+
from ...path_utils import get_file_parts
|
|
6
|
+
from ...type_utils import is_number,make_list
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from .constants import *
|
|
3
|
+
|
|
4
|
+
def is_line_import(line):
|
|
5
|
+
if line and (line.startswith(FROM_TAG) or line.startswith(IMPORT_TAG)):
|
|
6
|
+
return True
|
|
7
|
+
return False
|
|
8
|
+
def is_line_group_import(line):
|
|
9
|
+
if line and (line.startswith(FROM_TAG) and IMPORT_TAG in line):
|
|
10
|
+
return True
|
|
11
|
+
return False
|
|
12
|
+
|
|
13
|
+
def is_from_line_group(line):
|
|
14
|
+
if line and line.startswith(FROM_TAG) and IMPORT_TAG in line and '(' in line:
|
|
15
|
+
import_spl = line.split(IMPORT_TAG)[-1]
|
|
16
|
+
import_spl_clean = clean_line(line)
|
|
17
|
+
if not import_spl_clean.endswith(')'):
|
|
18
|
+
return True
|
|
19
|
+
return False
|
|
20
|
+
def get_unique_name(string,list_obj):
|
|
21
|
+
if isinstance(list_obj,dict):
|
|
22
|
+
list_obj = list(list_obj.keys())
|
|
23
|
+
if string in list_obj:
|
|
24
|
+
nustring = f"{string}"
|
|
25
|
+
for i in range(len(list_obj)):
|
|
26
|
+
nustring = f"{string}_{i}"
|
|
27
|
+
if nustring not in list_obj:
|
|
28
|
+
break
|
|
29
|
+
string = nustring
|
|
30
|
+
return string
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from .clean_imports import *
|
|
1
2
|
from .dot_utils import *
|
|
2
|
-
from .
|
|
3
|
+
from .extract_utils import *
|
|
3
4
|
from .import_utils import *
|
|
5
|
+
from .import_functions import *
|
|
6
|
+
from .package_utils import *
|
|
4
7
|
from .sysroot_utils import *
|
|
5
|
-
from .utils import *
|
|
6
|
-
from .safe_import_utils import *
|
|
7
|
-
from .clean_imports import *
|