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.

Files changed (112) hide show
  1. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/PKG-INFO +1 -1
  2. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/setup.py +1 -1
  3. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/__init__.py +0 -1
  4. {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
  5. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/constants.py +6 -0
  6. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/imports.py +1 -1
  7. abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/imports/module_imports.py +12 -0
  8. {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
  9. {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
  10. {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
  11. {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
  12. {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
  13. abstract_utilities-0.2.2.499/src/abstract_utilities/file_utils/src/filter_params.py +155 -0
  14. {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
  15. 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
  16. {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
  17. {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
  18. {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
  19. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/__init__.py +2 -0
  20. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/__init__.py +4 -0
  21. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/constants.py +2 -0
  22. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/imports.py +4 -0
  23. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/module_imports.py +6 -0
  24. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/imports/utils.py +30 -0
  25. {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
  26. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/clean_imports.py +122 -0
  27. {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
  28. 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
  29. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/import_functions.py +46 -0
  30. {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
  31. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/__init__.py +139 -0
  32. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/context_utils.py +27 -0
  33. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/import_collectors.py +53 -0
  34. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/path_utils.py +28 -0
  35. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils/safe_import.py +27 -0
  36. abstract_utilities-0.2.2.499/src/abstract_utilities/import_utils/src/package_utils.py +140 -0
  37. {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
  38. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/path_utils.py +1 -12
  39. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/read_write_utils.py +113 -60
  40. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/PKG-INFO +1 -1
  41. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/SOURCES.txt +32 -33
  42. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/top_level.txt +1 -0
  43. abstract_utilities-0.2.2.499/src/imports/__init__.py +36 -0
  44. abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/__init__.py +0 -3
  45. abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/filter_params.py +0 -89
  46. abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/imports/__init__.py +0 -3
  47. abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/imports/constants.py +0 -39
  48. abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/imports/imports.py +0 -39
  49. abstract_utilities-0.2.2.481/src/abstract_utilities/file_utils/file_utils/imports/module_imports.py +0 -14
  50. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/__init__.py +0 -2
  51. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/file_reader2.py +0 -629
  52. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/file_readers.py +0 -629
  53. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/imports/imports.py +0 -3
  54. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_reader/sadfsad.py +0 -625
  55. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/__init__.py +0 -2
  56. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/clean_imports.py +0 -175
  57. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/impot_functions.py +0 -70
  58. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/safe_import_utils.py +0 -68
  59. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/import_utils/utils.py +0 -25
  60. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/imports.py +0 -8
  61. abstract_utilities-0.2.2.481/src/abstract_utilities/robust_readers/initFuncGen.py +0 -151
  62. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/README.md +0 -0
  63. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/pyproject.toml +0 -0
  64. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/setup.cfg +0 -0
  65. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/abstract_classes.py +0 -0
  66. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/class_utils.py +0 -0
  67. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/__init__.py +0 -0
  68. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/cmd_utils.py +0 -0
  69. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/imports/__init__.py +0 -0
  70. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/imports/imports.py +0 -0
  71. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/pexpect_utils.py +0 -0
  72. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/cmd_utils/user_utils.py +0 -0
  73. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/collator_utils.py +0 -0
  74. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/__init__.py +0 -0
  75. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/best_match.py +0 -0
  76. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/compare_utils.py +0 -0
  77. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/compare_utils/find_value.py +0 -0
  78. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/doit.py +0 -0
  79. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/dynimport.py +0 -0
  80. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/__init__.py +0 -0
  81. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/abstractEnv.py +0 -0
  82. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/envy_it.py +0 -0
  83. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/__init__.py +0 -0
  84. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/imports.py +0 -0
  85. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/env_utils/imports/utils.py +0 -0
  86. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/error_utils.py +0 -0
  87. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/__init__.py +0 -0
  88. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/classes.py +0 -0
  89. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/file_utils/imports/clean_imps.py +0 -0
  90. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/global_utils.py +0 -0
  91. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/hash_utils.py +0 -0
  92. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/history_utils.py +0 -0
  93. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/json_utils.py +0 -0
  94. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/list_utils.py +0 -0
  95. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/log_utils.py +0 -0
  96. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/math_utils.py +0 -0
  97. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/parse_utils.py +0 -0
  98. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/safe_utils.py +0 -0
  99. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/__init__.py +0 -0
  100. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/classes.py +0 -0
  101. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/imports.py +0 -0
  102. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/pexpect_utils.py +0 -0
  103. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/ssh_utils/utils.py +0 -0
  104. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/string_clean.py +0 -0
  105. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/string_utils.py +0 -0
  106. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/tetsts.py +0 -0
  107. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/thread_utils.py +0 -0
  108. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/time_utils.py +0 -0
  109. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/type_utils.py +0 -0
  110. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities/utils.py +0 -0
  111. {abstract_utilities-0.2.2.481 → abstract_utilities-0.2.2.499}/src/abstract_utilities.egg-info/dependency_links.txt +0 -0
  112. {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.481
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.481',
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.',
@@ -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="*"
@@ -6,7 +6,7 @@
6
6
  # ============================================================
7
7
 
8
8
 
9
- import os
9
+ import os,re
10
10
  import sys, importlib,os
11
11
  import sys, importlib, os, inspect
12
12
  from pathlib import Path
@@ -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
@@ -10,4 +10,3 @@ from ...log_utils import get_logFile
10
10
  from ...class_utils import get_caller, get_caller_path, get_caller_dir
11
11
  from ...ssh_utils import run_cmd
12
12
 
13
- __all__ = [name for name in globals() if not name.startswith("_")]
@@ -6,3 +6,5 @@ from .pdf_utils import *
6
6
  from .file_reader import *
7
7
  from .find_collect import *
8
8
  from .type_checks import *
9
+ from .initFunctionsGen import call_for_all_tabs,get_for_all_tabs
10
+
@@ -1,4 +1,4 @@
1
- from .imports import *
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
- allowed_exts=allowed_exts,
20
- unallowed_exts=unallowed_exts,
21
- exclude_types=exclude_types,
22
- exclude_dirs=exclude_dirs,
23
- exclude_patterns=exclude_patterns,
24
- add = add
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,5 +1,5 @@
1
1
  # file_reader.py
2
- from .imports import *
2
+ from ..imports import *
3
3
  # -------- Public API drop-ins that mirror your originals --------
4
4
  from .filter_params import *
5
5
  from .file_filters import *
@@ -1,7 +1,6 @@
1
1
 
2
2
  from .filter_params import *
3
- from .imports import *
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
- allowed_exts=allowed_exts,
71
- unallowed_exts=unallowed_exts,
72
- exclude_types=exclude_types,
73
- exclude_dirs=exclude_dirs,
74
- exclude_patterns=exclude_patterns,
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
- # A) directories
104
+
105
+ # --------------------
106
+ # A) directory filters
107
+ # --------------------
96
108
  if cfg.exclude_dirs:
97
109
  for dpat in cfg.exclude_dirs:
98
- if dpat in path_str or fnmatch.fnmatch(name, dpat.lower()):
99
- if p.is_dir() or dpat in path_str:
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
- # C) extension gates
134
+ # --------------------
135
+ # C) extension filters
136
+ # --------------------
109
137
  if p.is_file():
110
138
  ext = p.suffix.lower()
111
- if (cfg.allowed_exts and ext not in cfg.allowed_exts) or (cfg.unallowed_exts and ext in cfg.unallowed_exts):
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
- allowed_exts=allowed_exts,
129
- unallowed_exts=unallowed_exts,
130
- exclude_types=exclude_types,
131
- exclude_dirs=exclude_dirs,
132
- exclude_patterns=exclude_patterns,
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)
@@ -1,4 +1,4 @@
1
- from .imports import *
1
+ from ..imports import *
2
2
  from .filter_params import *
3
3
  from .file_filters import enumerate_source_files
4
4
 
@@ -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 .imports import *
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
- def clean_imports():
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,4 +1,4 @@
1
- from .imports import MIME_TYPES,make_list,os
1
+ from ..imports import MIME_TYPES,make_list,os
2
2
  from .file_filters import get_globs
3
3
  def get_file_type(file_path,types=None,default=None):
4
4
  mime_types = {}
@@ -1,4 +1,4 @@
1
- from .imports import *
1
+ from ..imports import *
2
2
  def if_none_return(obj: object, obj_2: object) -> object:
3
3
  """
4
4
  Return obj if obj_2 is None, otherwise return obj_2.
@@ -1,8 +1,9 @@
1
- from .imports import *
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
- values,kwargs = get_from_kwargs(*args,**kwargs,del_kwarg=False)
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,2 @@
1
+ from .imports import *
2
+ from .src import *
@@ -0,0 +1,4 @@
1
+ from .imports import *
2
+ from .module_imports import *
3
+ from .constants import *
4
+ from .utils import *
@@ -0,0 +1,2 @@
1
+ IMPORT_TAG = 'import '
2
+ FROM_TAG = 'from '
@@ -0,0 +1,4 @@
1
+ from pathlib import Path
2
+ from typing import *
3
+ from types import MethodType
4
+ import os, sys, importlib, os, inspect, re, importlib.util, hashlib
@@ -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 .function_utils import *
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 *