pythagoras 0.23.6__py3-none-any.whl → 0.23.8__py3-none-any.whl
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/_030_data_portals/data_portal_core_classes.py +1 -1
- pythagoras/_040_logging_code_portals/logging_portal_core_classes.py +1 -1
- pythagoras/_050_safe_code_portals/safe_portal_core_classes.py +1 -1
- pythagoras/_060_autonomous_code_portals/autonomous_portal_core_classes.py +16 -11
- pythagoras/_070_protected_code_portals/basic_pre_validators.py +14 -4
- pythagoras/_070_protected_code_portals/protected_portal_core_classes.py +34 -24
- pythagoras/_080_pure_code_portals/pure_core_classes.py +1 -1
- pythagoras/_090_swarming_portals/swarming_portals.py +1 -1
- pythagoras/_800_signatures_and_converters/__init__.py +1 -1
- pythagoras/_800_signatures_and_converters/{node_signatures.py → node_signature.py} +2 -0
- {pythagoras-0.23.6.dist-info → pythagoras-0.23.8.dist-info}/METADATA +1 -1
- {pythagoras-0.23.6.dist-info → pythagoras-0.23.8.dist-info}/RECORD +13 -13
- {pythagoras-0.23.6.dist-info → pythagoras-0.23.8.dist-info}/WHEEL +0 -0
|
@@ -4,6 +4,8 @@ import builtins
|
|
|
4
4
|
from typing import Callable, Any
|
|
5
5
|
|
|
6
6
|
from persidict import PersiDict, Joker, KEEP_CURRENT
|
|
7
|
+
|
|
8
|
+
from .._010_basic_portals import PortalAwareClass
|
|
7
9
|
from .._020_ordinary_code_portals.code_normalizer import _pythagoras_decorator_names
|
|
8
10
|
from .._030_data_portals import DataPortal
|
|
9
11
|
from .._040_logging_code_portals import KwArgs
|
|
@@ -29,7 +31,7 @@ class AutonomousCodePortal(SafeCodePortal):
|
|
|
29
31
|
|
|
30
32
|
class AutonomousFn(SafeFn):
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
_fixed_kwargs_cache: KwArgs | None
|
|
33
35
|
_fixed_kwargs_packed: KwArgs | None
|
|
34
36
|
|
|
35
37
|
def __init__(self, fn: Callable|str|SafeFn
|
|
@@ -46,9 +48,9 @@ class AutonomousFn(SafeFn):
|
|
|
46
48
|
|
|
47
49
|
if isinstance(fn, AutonomousFn):
|
|
48
50
|
self._fixed_kwargs_packed.update(fixed_kwargs_packed)
|
|
49
|
-
self.
|
|
51
|
+
self._fixed_kwargs_cache = KwArgs(**{**fn.fixed_kwargs, **fixed_kwargs})
|
|
50
52
|
else:
|
|
51
|
-
self.
|
|
53
|
+
self._fixed_kwargs_cache = fixed_kwargs
|
|
52
54
|
self._fixed_kwargs_packed = fixed_kwargs_packed
|
|
53
55
|
|
|
54
56
|
fn_name = self.name
|
|
@@ -88,10 +90,10 @@ class AutonomousFn(SafeFn):
|
|
|
88
90
|
|
|
89
91
|
@property
|
|
90
92
|
def fixed_kwargs(self) -> KwArgs:
|
|
91
|
-
if not hasattr(self, "
|
|
93
|
+
if not hasattr(self, "_fixed_kwargs_cache"):
|
|
92
94
|
with self.portal:
|
|
93
|
-
self.
|
|
94
|
-
return self.
|
|
95
|
+
self._fixed_kwargs_cache = self._fixed_kwargs_packed.unpack()
|
|
96
|
+
return self._fixed_kwargs_cache
|
|
95
97
|
|
|
96
98
|
|
|
97
99
|
def execute(self, **kwargs) -> Any:
|
|
@@ -120,9 +122,12 @@ class AutonomousFn(SafeFn):
|
|
|
120
122
|
|
|
121
123
|
def _first_visit_to_portal(self, portal: DataPortal) -> None:
|
|
122
124
|
super()._first_visit_to_portal(portal)
|
|
123
|
-
if hasattr(self,"
|
|
125
|
+
if hasattr(self,"_fixed_kwargs_cache"):
|
|
124
126
|
with portal:
|
|
125
|
-
|
|
127
|
+
for v in self._fixed_kwargs_cache.values():
|
|
128
|
+
if isinstance(v, PortalAwareClass):
|
|
129
|
+
v._first_visit_to_portal(portal)
|
|
130
|
+
_ = self._fixed_kwargs_cache.pack()
|
|
126
131
|
|
|
127
132
|
|
|
128
133
|
def __getstate__(self):
|
|
@@ -140,7 +145,7 @@ class AutonomousFn(SafeFn):
|
|
|
140
145
|
|
|
141
146
|
@property
|
|
142
147
|
def portal(self) -> AutonomousCodePortal:
|
|
143
|
-
return
|
|
148
|
+
return super().portal
|
|
144
149
|
|
|
145
150
|
|
|
146
151
|
def _invalidate_cache(self):
|
|
@@ -151,8 +156,8 @@ class AutonomousFn(SafeFn):
|
|
|
151
156
|
This method should delete all such attributes.
|
|
152
157
|
"""
|
|
153
158
|
super()._invalidate_cache()
|
|
154
|
-
if hasattr(self, "
|
|
159
|
+
if hasattr(self, "_fixed_kwargs_cache"):
|
|
155
160
|
if not hasattr(self, "_fixed_kwargs_packed"):
|
|
156
161
|
raise AttributeError("Premature cache invalidation: "
|
|
157
162
|
"fixed_kwargs_packed is missing.")
|
|
158
|
-
del self.
|
|
163
|
+
del self._fixed_kwargs_cache
|
|
@@ -26,21 +26,31 @@ def unused_ram(Gb:int) -> SimplePreValidatorFn:
|
|
|
26
26
|
return SimplePreValidatorFn(_at_least_X_G_RAM_free_check).fix_kwargs(x=Gb)
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def _check_python_package_and_install_if_needed(
|
|
29
|
+
def _check_python_package_and_install_if_needed(
|
|
30
|
+
package_name)-> ValidationSuccessClass | None:
|
|
30
31
|
assert isinstance(package_name, str)
|
|
31
|
-
import importlib
|
|
32
|
+
import importlib, time
|
|
32
33
|
try:
|
|
33
34
|
importlib.import_module(package_name)
|
|
34
35
|
return pth.VALIDATION_SUCCESSFUL
|
|
35
36
|
except:
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
portal = self.portal
|
|
38
|
+
address = (pth.get_node_signature()
|
|
39
|
+
, package_name
|
|
40
|
+
, "installation_attempt")
|
|
41
|
+
# allow installation retries every 10 minutes
|
|
42
|
+
if (not address in portal._config_settings
|
|
43
|
+
or portal._config_settings[address] < time.time() - 600):
|
|
44
|
+
portal._config_settings[address] = time.time()
|
|
45
|
+
pth.install_package(package_name)
|
|
46
|
+
return pth.VALIDATION_SUCCESSFUL
|
|
38
47
|
|
|
39
48
|
|
|
40
49
|
def installed_packages(*args) -> list[SimplePreValidatorFn]:
|
|
41
50
|
validators = []
|
|
42
51
|
for package_name in args:
|
|
43
52
|
assert isinstance(package_name, str)
|
|
53
|
+
#TODO: check if the package is available on pypi.org
|
|
44
54
|
new_validator = SimplePreValidatorFn(_check_python_package_and_install_if_needed)
|
|
45
55
|
new_validator = new_validator.fix_kwargs(package_name=package_name)
|
|
46
56
|
validators.append(new_validator)
|
|
@@ -48,8 +48,8 @@ class ProtectedCodePortal(AutonomousCodePortal):
|
|
|
48
48
|
|
|
49
49
|
class ProtectedFn(AutonomousFn):
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
_pre_validators_cache: list[ValidatorFn] | None
|
|
52
|
+
_post_validators_cache: list[ValidatorFn] | None
|
|
53
53
|
_pre_validators_addrs: list[ValueAddr]
|
|
54
54
|
_post_validators_addrs: list[ValueAddr]
|
|
55
55
|
|
|
@@ -57,8 +57,8 @@ class ProtectedFn(AutonomousFn):
|
|
|
57
57
|
pre_validators_arg_names = ["packed_kwargs", "fn_addr"]
|
|
58
58
|
|
|
59
59
|
def __init__(self, fn: Callable | str
|
|
60
|
-
, pre_validators: list[ValidatorFn] | list[Callable] | None = None
|
|
61
|
-
, post_validators: list[ValidatorFn] | list[Callable] | None = None
|
|
60
|
+
, pre_validators: list[ValidatorFn] | list[Callable] | ValidatorFn | Callable | None = None
|
|
61
|
+
, post_validators: list[ValidatorFn] | list[Callable] | ValidatorFn | Callable | None = None
|
|
62
62
|
, excessive_logging: bool | Joker = KEEP_CURRENT
|
|
63
63
|
, fixed_kwargs: dict[str,Any] | None = None
|
|
64
64
|
, portal: ProtectedCodePortal | None = None):
|
|
@@ -84,12 +84,12 @@ class ProtectedFn(AutonomousFn):
|
|
|
84
84
|
pre_validators = self._normalize_validators(pre_validators, PreValidatorFn)
|
|
85
85
|
post_validators = self._normalize_validators(post_validators, PostValidatorFn)
|
|
86
86
|
|
|
87
|
-
self.
|
|
88
|
-
self.
|
|
87
|
+
self._pre_validators_cache = pre_validators
|
|
88
|
+
self._post_validators_cache = post_validators
|
|
89
89
|
self._pre_validators_addrs = [ValueAddr(g, store=False)
|
|
90
|
-
for g in self.
|
|
90
|
+
for g in self._pre_validators_cache]
|
|
91
91
|
self._post_validators_addrs = [ValueAddr(v, store=False)
|
|
92
|
-
for v in self.
|
|
92
|
+
for v in self._post_validators_cache]
|
|
93
93
|
|
|
94
94
|
|
|
95
95
|
def __getstate__(self):
|
|
@@ -112,27 +112,37 @@ class ProtectedFn(AutonomousFn):
|
|
|
112
112
|
"""Register an object in a portal that the object has not seen before."""
|
|
113
113
|
super()._first_visit_to_portal(portal)
|
|
114
114
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
for f in self.pre_validators:
|
|
116
|
+
f._first_visit_to_portal(portal)
|
|
117
|
+
for f in self.post_validators:
|
|
118
|
+
f._first_visit_to_portal(portal)
|
|
118
119
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
|
|
121
|
+
# if hasattr(self,"_pre_validators_cache"):
|
|
122
|
+
# with portal:
|
|
123
|
+
# _ = [ValueAddr(g) for g in self._pre_validators_cache]
|
|
124
|
+
# else:
|
|
125
|
+
# raise AttributeError("Missing pre-validators: ")
|
|
126
|
+
#
|
|
127
|
+
# if hasattr(self,"_post_validators_cache"):
|
|
128
|
+
# with portal:
|
|
129
|
+
# _ = [ValueAddr(g) for g in self._post_validators_cache]
|
|
130
|
+
# else:
|
|
131
|
+
# raise AttributeError("Missing post-validators: ")
|
|
122
132
|
|
|
123
133
|
|
|
124
134
|
@property
|
|
125
135
|
def pre_validators(self) -> list[AutonomousFn]:
|
|
126
|
-
if not hasattr(self, "
|
|
127
|
-
self.
|
|
128
|
-
return self.
|
|
136
|
+
if not hasattr(self, "_pre_validators_cache"):
|
|
137
|
+
self._pre_validators_cache = [addr.get() for addr in self._pre_validators_addrs]
|
|
138
|
+
return self._pre_validators_cache
|
|
129
139
|
|
|
130
140
|
|
|
131
141
|
@property
|
|
132
142
|
def post_validators(self) -> list[AutonomousFn]:
|
|
133
|
-
if not hasattr(self, "
|
|
134
|
-
self.
|
|
135
|
-
return self.
|
|
143
|
+
if not hasattr(self, "_post_validators_cache"):
|
|
144
|
+
self._post_validators_cache = [addr.get() for addr in self._post_validators_addrs]
|
|
145
|
+
return self._post_validators_cache
|
|
136
146
|
|
|
137
147
|
|
|
138
148
|
def can_be_executed(self, kw_args: KwArgs) -> bool:
|
|
@@ -173,7 +183,7 @@ class ProtectedFn(AutonomousFn):
|
|
|
173
183
|
|
|
174
184
|
|
|
175
185
|
def _normalize_validators(self
|
|
176
|
-
, validators: list[ValidatorFn] | None
|
|
186
|
+
, validators: list[ValidatorFn] | ValidatorFn | None
|
|
177
187
|
, validator_type: type
|
|
178
188
|
) -> list[ValidatorFn]:
|
|
179
189
|
"""Return list of validators in a normalized form.
|
|
@@ -210,7 +220,7 @@ class ProtectedFn(AutonomousFn):
|
|
|
210
220
|
|
|
211
221
|
@property
|
|
212
222
|
def portal(self) -> ProtectedCodePortal:
|
|
213
|
-
return
|
|
223
|
+
return super().portal
|
|
214
224
|
|
|
215
225
|
|
|
216
226
|
def _invalidate_cache(self):
|
|
@@ -225,9 +235,9 @@ class ProtectedFn(AutonomousFn):
|
|
|
225
235
|
if not hasattr(self, "_post_validators_addrs"):
|
|
226
236
|
raise AttributeError("Premature cache invalidation: "
|
|
227
237
|
"_post_validators_addrs is missing.")
|
|
228
|
-
del self.
|
|
238
|
+
del self._post_validators_cache
|
|
229
239
|
if hasattr(self, "_pre_validators_cached"):
|
|
230
240
|
if not hasattr(self, "_pre_validators_addrs"):
|
|
231
241
|
raise AttributeError("Premature cache invalidation: "
|
|
232
242
|
"_pre_validators_addrs is missing.")
|
|
233
|
-
del self.
|
|
243
|
+
del self._pre_validators_cache
|
|
@@ -27,7 +27,7 @@ from .._010_basic_portals.basic_portal_core_classes import _describe_runtime_cha
|
|
|
27
27
|
from persidict import OverlappingMultiDict
|
|
28
28
|
from .._080_pure_code_portals.pure_core_classes import (
|
|
29
29
|
PureCodePortal, PureFnExecutionResultAddr)
|
|
30
|
-
from .._800_signatures_and_converters.
|
|
30
|
+
from .._800_signatures_and_converters.node_signature import get_node_signature
|
|
31
31
|
|
|
32
32
|
from multiprocessing import get_context
|
|
33
33
|
|
|
@@ -12,7 +12,7 @@ pythagoras/_020_ordinary_code_portals/function_processing.py,sha256=ae5841d1da5a
|
|
|
12
12
|
pythagoras/_020_ordinary_code_portals/ordinary_decorator.py,sha256=278ab1d37344120a585af8380fc52400bd0f76d02ddac43230dd68a7a2cc16c0,1028
|
|
13
13
|
pythagoras/_020_ordinary_code_portals/ordinary_portal_core_classes.py,sha256=6d8d87cf2d7d9537b3bfde9d49cd65e52b1a1b13643133aaf08b1f9e4755d706,9743
|
|
14
14
|
pythagoras/_030_data_portals/__init__.py,sha256=7ff17d0c29ae5603cc833c118ee363e8523add2de85eeee58f7cd4eba370ec77,1427
|
|
15
|
-
pythagoras/_030_data_portals/data_portal_core_classes.py,sha256=
|
|
15
|
+
pythagoras/_030_data_portals/data_portal_core_classes.py,sha256=e8c3ecf61233bd2ae8fba50159afcf875c0e42c8238fca704da7ab545fabe1b1,20406
|
|
16
16
|
pythagoras/_030_data_portals/ready_and_get.py,sha256=838004869475dd877a1158a7cb6c20f2f922b97e1ac174286ce30ce287fb6520,2002
|
|
17
17
|
pythagoras/_030_data_portals/storable_decorator.py,sha256=97c5b71a156622c7208e80931aaded99d7a12860cb2159c56d333e196fb51b88,578
|
|
18
18
|
pythagoras/_040_logging_code_portals/__init__.py,sha256=ab6855c8e56013ef51bb7c9c8a52bdf184bd45ab7cb5273a7ab77b02d1b1a5a0,996
|
|
@@ -20,46 +20,46 @@ pythagoras/_040_logging_code_portals/exception_processing_tracking.py,sha256=b14
|
|
|
20
20
|
pythagoras/_040_logging_code_portals/execution_environment_summary.py,sha256=853bd36da75802d8ac6781fcaeafa7fe1b0a3c24b7f23b12cfc970fc0d4322a6,2268
|
|
21
21
|
pythagoras/_040_logging_code_portals/kw_args.py,sha256=cf513ce2e8621e13f552e449930c57d4867279f3aa3e7ca0d796197751eae9d7,2604
|
|
22
22
|
pythagoras/_040_logging_code_portals/logging_decorator.py,sha256=d3bf70dbf6791e15c52eb8325d07a48ee39bcbd09d5201541916d14f9969ba35,891
|
|
23
|
-
pythagoras/_040_logging_code_portals/logging_portal_core_classes.py,sha256=
|
|
23
|
+
pythagoras/_040_logging_code_portals/logging_portal_core_classes.py,sha256=aa44a1349736850e0a42fd1d96d28b09bca0252c410771bea7f9882c9135ebf0,21852
|
|
24
24
|
pythagoras/_040_logging_code_portals/notebook_checker.py,sha256=e654090c80f38512114a65f54fcf2701110c10ca030c57f438829cbd3a678739,541
|
|
25
25
|
pythagoras/_040_logging_code_portals/output_capturer.py,sha256=a210a9eaaab12fb22e2467e716e088823e4e7381e60bc73bb99184feecd69199,4216
|
|
26
26
|
pythagoras/_040_logging_code_portals/uncaught_exceptions.py,sha256=0776cfbd7e679c9271e098cb486765d715ce054da9aa8dc23fe32898901f5da1,3121
|
|
27
27
|
pythagoras/_050_safe_code_portals/__init__.py,sha256=611f95e96d96675ed28ea993c98db1758d7ac5354412e2ecd8c75d263fd60995,557
|
|
28
28
|
pythagoras/_050_safe_code_portals/safe_decorator.py,sha256=653b08326b5bdde180592a7074c6174662326898aa57a99d15b07f32a9e0efce,804
|
|
29
|
-
pythagoras/_050_safe_code_portals/safe_portal_core_classes.py,sha256=
|
|
29
|
+
pythagoras/_050_safe_code_portals/safe_portal_core_classes.py,sha256=e8566522619b39f3e966032ceed935aa0644641a977c185ef8ecb9011071fc45,2010
|
|
30
30
|
pythagoras/_060_autonomous_code_portals/__init__.py,sha256=7308e1db007167f22096e0c59701784a4ecc5d5fb776ae016a50dc3b6d100285,1747
|
|
31
31
|
pythagoras/_060_autonomous_code_portals/autonomous_decorators.py,sha256=762597d378d96889dce798c0837f75651061f92b797b12512c36624bb76a62f8,2895
|
|
32
|
-
pythagoras/_060_autonomous_code_portals/autonomous_portal_core_classes.py,sha256=
|
|
32
|
+
pythagoras/_060_autonomous_code_portals/autonomous_portal_core_classes.py,sha256=5f4387176ba2e4bd4ed5ea7b17b5b8fa6332c75933a7fb5f070f53105c47cb8e,6228
|
|
33
33
|
pythagoras/_060_autonomous_code_portals/names_usage_analyzer.py,sha256=9aaaf3010c37b46c4f617b0c03c1347e1848a49a29bd116bce47353154ac3d74,7474
|
|
34
34
|
pythagoras/_070_protected_code_portals/__init__.py,sha256=4ef19c25acf6d10aac9aff26da903876e06d167fc274229f9126ce485a094bc9,989
|
|
35
|
-
pythagoras/_070_protected_code_portals/basic_pre_validators.py,sha256=
|
|
35
|
+
pythagoras/_070_protected_code_portals/basic_pre_validators.py,sha256=8a3a1727bb4acdf95ea897810092e0d09c8df2b81d8014e3f1f9f585761b5301,2071
|
|
36
36
|
pythagoras/_070_protected_code_portals/fn_arg_names_checker.py,sha256=e858ce5099868030a39057177f93a893e13d7a210582e6ab636aaaccec898fb0,1230
|
|
37
37
|
pythagoras/_070_protected_code_portals/list_flattener.py,sha256=9a54b512ad9dc201db348e7908f5ca5f36d171ae3da433511d38023a6ba8d4b5,331
|
|
38
38
|
pythagoras/_070_protected_code_portals/package_manager.py,sha256=4111d71886adcf1e8d28f3c2d3a08c8a352601297f9ab3f08a4541586ed9d376,1965
|
|
39
39
|
pythagoras/_070_protected_code_portals/protected_decorators.py,sha256=956ed45870004246d77d6e364015b3a0d936bd8b919dfa9a56c97d69713a9b80,1627
|
|
40
|
-
pythagoras/_070_protected_code_portals/protected_portal_core_classes.py,sha256=
|
|
40
|
+
pythagoras/_070_protected_code_portals/protected_portal_core_classes.py,sha256=81c202261209e6e0feeaa2edeaf5e965aa2b78e8e8e0761ac86e5c39f584f48b,9802
|
|
41
41
|
pythagoras/_070_protected_code_portals/system_utils.py,sha256=878a22110140c852b3aaf774cb0c0023458360a4ae221fef89ff3a5d02176301,2360
|
|
42
42
|
pythagoras/_070_protected_code_portals/validation_succesful_const.py,sha256=602cd3598dd43a71421eb547f1e80f411e30df616deb26912a741a2898d06754,300
|
|
43
43
|
pythagoras/_070_protected_code_portals/validator_fn_classes.py,sha256=4afa4bf0629f68e4b1623003272ffd7111ac9cbb739e81fde601049d19b84269,3232
|
|
44
44
|
pythagoras/_080_pure_code_portals/__init__.py,sha256=aa8564346e1701934310dd5eca92424f5784e0be49c6bad97459f4bab1bdad73,1082
|
|
45
|
-
pythagoras/_080_pure_code_portals/pure_core_classes.py,sha256=
|
|
45
|
+
pythagoras/_080_pure_code_portals/pure_core_classes.py,sha256=d8399addccd7cec09586660bc958f1cbfac08fe7ce6cab4c8f5ae16d5ec996ce,19439
|
|
46
46
|
pythagoras/_080_pure_code_portals/pure_decorator.py,sha256=587650ce6cb1802a402c7aea7de88e32b33a4c391972fd18d9bef9e9ecf84369,2279
|
|
47
47
|
pythagoras/_090_swarming_portals/__init__.py,sha256=4ee035ecf7ed4c1b9da6d01b94db41943e3a06a5228ad92c3ad7f7cb4d502a6d,514
|
|
48
48
|
pythagoras/_090_swarming_portals/output_suppressor.py,sha256=83e6cc9bcc62a226babb1165912ef5095ea948499ce5136a7516ac8b54522607,626
|
|
49
|
-
pythagoras/_090_swarming_portals/swarming_portals.py,sha256=
|
|
49
|
+
pythagoras/_090_swarming_portals/swarming_portals.py,sha256=5e54bc77538bf949aa7438944d0be36b03382f9e6192bf20397700ba106ad693,12484
|
|
50
50
|
pythagoras/_100_top_level_API/__init__.py,sha256=b392edc2c918da7c2444f14accfd0fac2cd0d5cf6849c64ed2433dfdb58b8b75,64
|
|
51
51
|
pythagoras/_100_top_level_API/default_local_portal.py,sha256=4a7ca44e94d78352ae4f5ab00e7ac067ade562c84ccbed27362520a0e54cc42b,339
|
|
52
52
|
pythagoras/_100_top_level_API/top_level_API.py,sha256=4b63575b86df2fdf28e93c67e8d33411e05bd67cf016d3d297ec9635ebc04081,906
|
|
53
|
-
pythagoras/_800_signatures_and_converters/__init__.py,sha256=
|
|
53
|
+
pythagoras/_800_signatures_and_converters/__init__.py,sha256=580ce93def1fb21ff0ffb1e15712592c189dee0c675b7a663d95bce9f6272639,166
|
|
54
54
|
pythagoras/_800_signatures_and_converters/base_16_32_convertors.py,sha256=66356d2a38e33203201d484cfb543da8b6160832a1965aaaf73e1880a2f4a828,1236
|
|
55
55
|
pythagoras/_800_signatures_and_converters/current_date_gmt_str.py,sha256=2beac61f2ad112cc8175832aeef5abbf715d01a71ea56429bce7d3fe6ad9a8d3,268
|
|
56
56
|
pythagoras/_800_signatures_and_converters/hash_signatures.py,sha256=02c5080ff67bc9e174e899a4f2428015722ec6817484dd0ec0e4b54f99eeeff9,989
|
|
57
|
-
pythagoras/_800_signatures_and_converters/
|
|
57
|
+
pythagoras/_800_signatures_and_converters/node_signature.py,sha256=a52678c81e1a5cd1faca18b343a6779b8b9172e0cd92bffe959f34db835b67bc,592
|
|
58
58
|
pythagoras/_800_signatures_and_converters/random_signatures.py,sha256=c174f28c04ccf08c0c5eadaf1e1a00aba4fec88ec370def64afcadd39123141a,323
|
|
59
59
|
pythagoras/_900_project_stats_collector/__init__.py,sha256=11a82df8184f3ed046829332c31da590b0cad7ad3763db7f40176d1ca5071c56,71
|
|
60
60
|
pythagoras/_900_project_stats_collector/project_analyzer.py,sha256=ba1c9c14a8d421712961c6589da937ca7e0916172197ea19ef0b7ab291718686,3574
|
|
61
61
|
pythagoras/__init__.py,sha256=4cc3ed25d4a2fd64a10a9267b1555d3b8f1672fb3bf0631b522e601dcd5e30bc,1233
|
|
62
62
|
pythagoras/core/__init__.py,sha256=11c3616471c79550d69a0d3b3b49a45b90087919b82477db5de99c8ebc6ba5c0,298
|
|
63
|
-
pythagoras-0.23.
|
|
64
|
-
pythagoras-0.23.
|
|
65
|
-
pythagoras-0.23.
|
|
63
|
+
pythagoras-0.23.8.dist-info/WHEEL,sha256=607c46fee47e440c91332c738096ff0f5e54ca3b0818ee85462dd5172a38e793,79
|
|
64
|
+
pythagoras-0.23.8.dist-info/METADATA,sha256=20330bc6ac1e9c95a092ebf66c5af3c45f3405de19e850063b3516c9068b92c9,4902
|
|
65
|
+
pythagoras-0.23.8.dist-info/RECORD,,
|
|
File without changes
|