pythagoras 0.20.3__tar.gz → 0.20.4__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.
- {pythagoras-0.20.3 → pythagoras-0.20.4}/PKG-INFO +1 -1
- {pythagoras-0.20.3 → pythagoras-0.20.4}/pyproject.toml +1 -1
- pythagoras-0.20.4/src/pythagoras/_070_protected_code_portals/package_manager.py +76 -0
- pythagoras-0.20.3/src/pythagoras/_070_protected_code_portals/package_manager.py +0 -38
- {pythagoras-0.20.3 → pythagoras-0.20.4}/README.md +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/basic_portal_core_classes.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/exceptions.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/long_infoname.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/not_picklable_class.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/portal_tester.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/post_init_metaclass.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/code_normalizer.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/function_processing.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/ordinary_decorator.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/ordinary_portal_core_classes.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/data_portal_core_classes.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/ready_and_get.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/storable_decorator.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/exception_processing_tracking.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/execution_environment_summary.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/kw_args.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/logging_decorator.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/logging_portal_core_classes.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/notebook_checker.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/output_capturer.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/uncaught_exceptions.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_050_safe_code_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_050_safe_code_portals/safe_decorator.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_050_safe_code_portals/safe_portal_core_classes.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/autonomous_decorators.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/autonomous_portal_core_classes.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/names_usage_analyzer.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/GPU_guards.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/OK_const.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/RAM_guards.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/fn_arg_names_checker.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/list_flattener.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/protected_decorators.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/protected_portal_core_classes.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/python_packages_guards.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_080_pure_code_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_080_pure_code_portals/pure_core_classes.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_080_pure_code_portals/pure_decorator.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/output_suppressor.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/swarming_portals.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/system_utils.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_100_top_level_API/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_100_top_level_API/default_local_portal.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_100_top_level_API/top_level_API.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/base_16_32_convertors.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/current_date_gmt_str.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/hash_signatures.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/node_signatures.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/random_signatures.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_900_project_stats_collector/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_900_project_stats_collector/project_analyzer.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/__init__.py +0 -0
- {pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/core/__init__.py +0 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
import subprocess
|
2
|
+
import importlib
|
3
|
+
import sys
|
4
|
+
from typing import Optional
|
5
|
+
|
6
|
+
_uv_and_pip_installation_needed:bool = True
|
7
|
+
|
8
|
+
def _install_uv_and_pip() -> None:
|
9
|
+
global _uv_and_pip_installation_needed
|
10
|
+
if not _uv_and_pip_installation_needed:
|
11
|
+
return
|
12
|
+
_uv_pip_installation_attempted = False
|
13
|
+
|
14
|
+
try:
|
15
|
+
importlib.import_module("uv")
|
16
|
+
except:
|
17
|
+
install_package("uv", use_uv=False)
|
18
|
+
|
19
|
+
try:
|
20
|
+
importlib.import_module("pip")
|
21
|
+
except:
|
22
|
+
install_package("pip", use_uv=True)
|
23
|
+
|
24
|
+
|
25
|
+
def install_package(package_name:str
|
26
|
+
, upgrade:bool=False
|
27
|
+
, version:Optional[str]=None
|
28
|
+
, use_uv:bool = True
|
29
|
+
) -> None:
|
30
|
+
"""Install package using pip."""
|
31
|
+
|
32
|
+
if package_name == "pip":
|
33
|
+
assert use_uv
|
34
|
+
elif package_name == "uv":
|
35
|
+
assert not use_uv
|
36
|
+
else:
|
37
|
+
_install_uv_and_pip()
|
38
|
+
|
39
|
+
if use_uv:
|
40
|
+
command = [sys.executable, "-m", "uv", "pip", "install"]
|
41
|
+
else:
|
42
|
+
command = [sys.executable, "-m", "pip", "install"]
|
43
|
+
|
44
|
+
if upgrade:
|
45
|
+
command += ["--upgrade"]
|
46
|
+
|
47
|
+
package_spec = f"{package_name}=={version}" if version else package_name
|
48
|
+
command += [package_spec]
|
49
|
+
|
50
|
+
subprocess.run(command, check=True, stdout=subprocess.PIPE
|
51
|
+
, stderr=subprocess.STDOUT, text=True)
|
52
|
+
|
53
|
+
importlib.import_module(package_name)
|
54
|
+
|
55
|
+
|
56
|
+
def uninstall_package(package_name:str, use_uv:bool=True)->None:
|
57
|
+
"""Uninstall package using uv or pip."""
|
58
|
+
|
59
|
+
assert package_name not in ["pip", "uv"]
|
60
|
+
|
61
|
+
if use_uv:
|
62
|
+
command = [sys.executable, "-m", "uv", "pip", "uninstall", package_name]
|
63
|
+
else:
|
64
|
+
command = [sys.executable, "-m", "pip", "uninstall", "-y", package_name]
|
65
|
+
|
66
|
+
subprocess.run(command, check=True, stdout=subprocess.PIPE
|
67
|
+
, stderr=subprocess.STDOUT, text=True)
|
68
|
+
|
69
|
+
try:
|
70
|
+
package = importlib.import_module(package_name)
|
71
|
+
importlib.reload(package)
|
72
|
+
except:
|
73
|
+
pass
|
74
|
+
else:
|
75
|
+
raise Exception(
|
76
|
+
f"Failed to validate package uninstallation for '{package_name}'. ")
|
@@ -1,38 +0,0 @@
|
|
1
|
-
import subprocess
|
2
|
-
import importlib
|
3
|
-
import sys
|
4
|
-
from typing import Optional
|
5
|
-
|
6
|
-
def install_package(package_name:str
|
7
|
-
, upgrade:bool=False
|
8
|
-
, version:Optional[str]=None
|
9
|
-
) -> None:
|
10
|
-
"""Install package using pip."""
|
11
|
-
command = [sys.executable, "-m", "uv", "pip", "install"]
|
12
|
-
|
13
|
-
if upgrade:
|
14
|
-
command += ["--upgrade"]
|
15
|
-
|
16
|
-
package_spec = f"{package_name}=={version}" if version else package_name
|
17
|
-
command += [package_spec]
|
18
|
-
|
19
|
-
subprocess.run(command, check=True, stdout=subprocess.PIPE
|
20
|
-
, stderr=subprocess.STDOUT, text=True)
|
21
|
-
|
22
|
-
importlib.import_module(package_name)
|
23
|
-
|
24
|
-
def uninstall_package(package_name:str)->None:
|
25
|
-
"""Uninstall package using pip."""
|
26
|
-
|
27
|
-
command = [sys.executable, "-m", "uv", "pip", "uninstall", package_name]
|
28
|
-
subprocess.run(command, check=True, stdout=subprocess.PIPE
|
29
|
-
, stderr=subprocess.STDOUT, text=True)
|
30
|
-
|
31
|
-
try:
|
32
|
-
package = importlib.import_module(package_name)
|
33
|
-
importlib.reload(package)
|
34
|
-
except:
|
35
|
-
pass
|
36
|
-
else:
|
37
|
-
raise Exception(
|
38
|
-
f"Failed to validate package uninstallation for '{package_name}'. ")
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/not_picklable_class.py
RENAMED
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_010_basic_portals/post_init_metaclass.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/__init__.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_020_ordinary_code_portals/code_normalizer.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/data_portal_core_classes.py
RENAMED
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_030_data_portals/storable_decorator.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/notebook_checker.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_040_logging_code_portals/output_capturer.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_050_safe_code_portals/safe_decorator.py
RENAMED
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_060_autonomous_code_portals/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/GPU_guards.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/OK_const.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/RAM_guards.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/__init__.py
RENAMED
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_070_protected_code_portals/list_flattener.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_080_pure_code_portals/pure_core_classes.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_080_pure_code_portals/pure_decorator.py
RENAMED
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/output_suppressor.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/swarming_portals.py
RENAMED
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_090_swarming_portals/system_utils.py
RENAMED
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_100_top_level_API/default_local_portal.py
RENAMED
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_800_signatures_and_converters/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{pythagoras-0.20.3 → pythagoras-0.20.4}/src/pythagoras/_900_project_stats_collector/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|