osbot-utils 1.82.0__py3-none-any.whl → 1.84.0__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.
- osbot_utils/base_classes/Type_Safe.py +58 -31
- osbot_utils/decorators/lists/group_by.py +2 -1
- osbot_utils/decorators/lists/index_by.py +3 -3
- osbot_utils/decorators/methods/cache_on_self.py +28 -28
- osbot_utils/decorators/methods/remove_return_value.py +3 -6
- osbot_utils/helpers/Random_Guid.py +3 -1
- osbot_utils/helpers/Timestamp_Now.py +4 -1
- osbot_utils/helpers/sqlite/Sqlite__Database.py +9 -9
- osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +6 -4
- osbot_utils/helpers/trace/Trace_Call__Config.py +5 -3
- osbot_utils/utils/Dev.py +10 -5
- osbot_utils/utils/Env.py +40 -10
- osbot_utils/utils/Files.py +46 -13
- osbot_utils/utils/Json.py +28 -6
- osbot_utils/utils/Misc.py +62 -26
- osbot_utils/utils/Objects.py +36 -21
- osbot_utils/utils/Toml.py +7 -7
- osbot_utils/version +1 -1
- {osbot_utils-1.82.0.dist-info → osbot_utils-1.84.0.dist-info}/METADATA +2 -2
- {osbot_utils-1.82.0.dist-info → osbot_utils-1.84.0.dist-info}/RECORD +22 -22
- {osbot_utils-1.82.0.dist-info → osbot_utils-1.84.0.dist-info}/LICENSE +0 -0
- {osbot_utils-1.82.0.dist-info → osbot_utils-1.84.0.dist-info}/WHEEL +0 -0
osbot_utils/utils/Objects.py
CHANGED
@@ -1,24 +1,14 @@
|
|
1
1
|
# todo add tests
|
2
|
-
import inspect
|
3
|
-
import json
|
4
|
-
import pickle
|
5
2
|
import sys
|
6
|
-
import types
|
7
|
-
import typing
|
8
|
-
from collections.abc import Mapping
|
9
|
-
from typing import Union
|
10
3
|
from types import SimpleNamespace
|
11
|
-
from osbot_utils.helpers.Safe_Id import Safe_Id
|
12
|
-
from osbot_utils.helpers.Timestamp_Now import Timestamp_Now
|
13
|
-
from osbot_utils.helpers.Random_Guid import Random_Guid
|
14
|
-
from osbot_utils.utils.Misc import list_set
|
15
|
-
from osbot_utils.utils.Str import str_unicode_escape, str_max_width
|
16
4
|
|
17
|
-
|
5
|
+
class __(SimpleNamespace):
|
6
|
+
pass
|
18
7
|
|
19
8
|
# Backport implementations of get_origin and get_args for Python 3.7
|
20
9
|
if sys.version_info < (3, 8):
|
21
10
|
def get_origin(tp):
|
11
|
+
import typing
|
22
12
|
if isinstance(tp, typing._GenericAlias):
|
23
13
|
return tp.__origin__
|
24
14
|
elif tp is typing.Generic:
|
@@ -27,6 +17,7 @@ if sys.version_info < (3, 8):
|
|
27
17
|
return None
|
28
18
|
|
29
19
|
def get_args(tp):
|
20
|
+
import typing
|
30
21
|
if isinstance(tp, typing._GenericAlias):
|
31
22
|
return tp.__args__
|
32
23
|
else:
|
@@ -36,6 +27,9 @@ else:
|
|
36
27
|
|
37
28
|
|
38
29
|
def are_types_compatible_for_assigment(source_type, target_type):
|
30
|
+
import types
|
31
|
+
import typing
|
32
|
+
|
39
33
|
if source_type is target_type:
|
40
34
|
return True
|
41
35
|
if source_type is int and target_type is float:
|
@@ -80,9 +74,13 @@ def base_classes_names(cls):
|
|
80
74
|
return [cls.__name__ for cls in base_classes(cls)]
|
81
75
|
|
82
76
|
def class_functions_names(target):
|
77
|
+
from osbot_utils.utils.Misc import list_set
|
78
|
+
|
83
79
|
return list_set(class_functions(target))
|
84
80
|
|
85
81
|
def class_functions(target):
|
82
|
+
import inspect
|
83
|
+
|
86
84
|
functions = {}
|
87
85
|
for function_name, function_ref in inspect.getmembers(type(target), predicate=inspect.isfunction):
|
88
86
|
functions[function_name] = function_ref
|
@@ -110,6 +108,13 @@ def convert_dict_to_value_from_obj_annotation(target, attr_name, value):
|
|
110
108
|
return value
|
111
109
|
|
112
110
|
def convert_to_value_from_obj_annotation(target, attr_name, value): # todo: see the side effects of doing this for all ints and floats
|
111
|
+
|
112
|
+
from osbot_utils.helpers.Safe_Id import Safe_Id
|
113
|
+
from osbot_utils.helpers.Timestamp_Now import Timestamp_Now
|
114
|
+
from osbot_utils.helpers.Random_Guid import Random_Guid
|
115
|
+
|
116
|
+
TYPE_SAFE__CONVERT_VALUE__SUPPORTED_TYPES = [Safe_Id, Random_Guid, Timestamp_Now]
|
117
|
+
|
113
118
|
if target is not None and attr_name is not None:
|
114
119
|
if hasattr(target, '__annotations__'):
|
115
120
|
obj_annotations = target.__annotations__
|
@@ -138,10 +143,11 @@ def dict_remove(data, target):
|
|
138
143
|
del data[target]
|
139
144
|
return data
|
140
145
|
|
141
|
-
|
142
|
-
pass
|
146
|
+
|
143
147
|
|
144
148
|
def dict_to_obj(target):
|
149
|
+
from collections.abc import Mapping
|
150
|
+
|
145
151
|
if isinstance(target, Mapping):
|
146
152
|
new_dict = {}
|
147
153
|
for key, value in target.items():
|
@@ -168,6 +174,8 @@ def obj_to_dict(target):
|
|
168
174
|
return target # Return non-object types as is
|
169
175
|
|
170
176
|
def str_to_obj(target):
|
177
|
+
import json
|
178
|
+
|
171
179
|
if hasattr(target, 'json'):
|
172
180
|
return dict_to_obj(target.json())
|
173
181
|
return dict_to_obj(json.loads(target))
|
@@ -255,6 +263,8 @@ def obj_base_classes(obj):
|
|
255
263
|
return [obj_type for obj_type in type_base_classes(type(obj))]
|
256
264
|
|
257
265
|
def type_mro(target):
|
266
|
+
import inspect
|
267
|
+
|
258
268
|
if type(target) is type:
|
259
269
|
cls = target
|
260
270
|
else:
|
@@ -278,6 +288,10 @@ def obj_base_classes_names(obj, show_module=False):
|
|
278
288
|
return names
|
279
289
|
|
280
290
|
def obj_data(target, convert_value_to_str=True, name_width=30, value_width=100, show_private=False, show_internals=False, show_value_class=False, show_methods=False, only_show_methods=False):
|
291
|
+
import inspect
|
292
|
+
import types
|
293
|
+
from osbot_utils.utils.Str import str_unicode_escape, str_max_width
|
294
|
+
|
281
295
|
result = {}
|
282
296
|
if show_internals:
|
283
297
|
show_private = True # show_private will skip all internals, so need to make sure it is True
|
@@ -301,12 +315,6 @@ def obj_data(target, convert_value_to_str=True, name_width=30, value_width=100,
|
|
301
315
|
result[name] = value
|
302
316
|
return result
|
303
317
|
|
304
|
-
# def obj_data(target=None):
|
305
|
-
# data = {}
|
306
|
-
# for key,value in obj_items(target):
|
307
|
-
# data[key] = value
|
308
|
-
# return data
|
309
|
-
|
310
318
|
def obj_dict(target=None):
|
311
319
|
if target and hasattr(target,'__dict__'):
|
312
320
|
return target.__dict__
|
@@ -358,6 +366,8 @@ def obj_is_attribute_annotation_of_type(target, attr_name, expected_type):
|
|
358
366
|
return False
|
359
367
|
|
360
368
|
def obj_is_type_union_compatible(var_type, compatible_types):
|
369
|
+
from typing import Union
|
370
|
+
|
361
371
|
origin = get_origin(var_type)
|
362
372
|
if origin is Union: # For Union types, including Optionals
|
363
373
|
args = get_args(var_type) # Get the argument types
|
@@ -368,6 +378,7 @@ def obj_is_type_union_compatible(var_type, compatible_types):
|
|
368
378
|
return var_type in compatible_types or var_type is type(None) # Check for direct compatibility or type(None) for non-Union types
|
369
379
|
|
370
380
|
def value_type_matches_obj_annotation_for_union_attr(target, attr_name, value):
|
381
|
+
from typing import Union
|
371
382
|
value_type = type(value)
|
372
383
|
attribute_annotation = obj_attribute_annotation(target,attr_name)
|
373
384
|
origin = get_origin(attribute_annotation)
|
@@ -378,9 +389,11 @@ def value_type_matches_obj_annotation_for_union_attr(target, attr_name, value):
|
|
378
389
|
|
379
390
|
|
380
391
|
def pickle_save_to_bytes(target: object) -> bytes:
|
392
|
+
import pickle
|
381
393
|
return pickle.dumps(target)
|
382
394
|
|
383
395
|
def pickle_load_from_bytes(pickled_data: bytes):
|
396
|
+
import pickle
|
384
397
|
if type(pickled_data) is bytes:
|
385
398
|
try:
|
386
399
|
return pickle.loads(pickled_data)
|
@@ -388,6 +401,8 @@ def pickle_load_from_bytes(pickled_data: bytes):
|
|
388
401
|
return {}
|
389
402
|
|
390
403
|
def value_type_matches_obj_annotation_for_attr(target, attr_name, value):
|
404
|
+
import typing
|
405
|
+
|
391
406
|
if hasattr(target, '__annotations__'):
|
392
407
|
obj_annotations = target.__annotations__
|
393
408
|
if hasattr(obj_annotations,'get'):
|
osbot_utils/utils/Toml.py
CHANGED
@@ -2,10 +2,6 @@ import sys
|
|
2
2
|
from osbot_utils.utils.Files import file_create, file_contents
|
3
3
|
from osbot_utils.utils.Objects import dict_to_obj
|
4
4
|
|
5
|
-
if sys.version_info >= (3, 11):
|
6
|
-
import tomllib
|
7
|
-
else:
|
8
|
-
tomllib = None
|
9
5
|
|
10
6
|
def dict_to_toml(data, indent_level=0):
|
11
7
|
toml_str = ""
|
@@ -39,9 +35,11 @@ def toml_dict_from_file(toml_file):
|
|
39
35
|
|
40
36
|
|
41
37
|
def toml_to_dict(str_toml):
|
42
|
-
if
|
43
|
-
|
44
|
-
|
38
|
+
if sys.version_info >= (3, 11):
|
39
|
+
import tomllib
|
40
|
+
return tomllib.loads(str_toml)
|
41
|
+
raise NotImplementedError("TOML parsing is not supported in Python versions earlier than 3.11")
|
42
|
+
|
45
43
|
|
46
44
|
def toml_obj_from_file(toml_file):
|
47
45
|
data = toml_dict_from_file(toml_file)
|
@@ -49,5 +47,7 @@ def toml_obj_from_file(toml_file):
|
|
49
47
|
|
50
48
|
json_load_file = toml_dict_from_file
|
51
49
|
toml_file_load = toml_dict_from_file
|
50
|
+
|
51
|
+
toml_from_file = toml_dict_from_file
|
52
52
|
toml_load = toml_dict_from_file
|
53
53
|
toml_load_obj = toml_obj_from_file
|
osbot_utils/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
v1.
|
1
|
+
v1.84.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: osbot_utils
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.84.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
Home-page: https://github.com/owasp-sbot/OSBot-Utils
|
6
6
|
License: MIT
|
@@ -23,7 +23,7 @@ Description-Content-Type: text/markdown
|
|
23
23
|
|
24
24
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
25
25
|
|
26
|
-

|
27
27
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
28
28
|
|
29
29
|
|
@@ -2,7 +2,7 @@ osbot_utils/__init__.py,sha256=DdJDmQc9zbQUlPVyTJOww6Ixrn9n4bD3ami5ItQfzJI,16
|
|
2
2
|
osbot_utils/base_classes/Cache_Pickle.py,sha256=kPCwrgUbf_dEdxUz7vW1GuvIPwlNXxuRhb-H3AbSpII,5884
|
3
3
|
osbot_utils/base_classes/Kwargs_To_Disk.py,sha256=HHoy05NC_w35WcT-OnSKoSIV_cLqaU9rdjH0_KNTM0E,1096
|
4
4
|
osbot_utils/base_classes/Kwargs_To_Self.py,sha256=weFNsBfBNV9W_qBkN-IdBD4yYcJV_zgTxBRO-ZlcPS4,141
|
5
|
-
osbot_utils/base_classes/Type_Safe.py,sha256=
|
5
|
+
osbot_utils/base_classes/Type_Safe.py,sha256=VeNkr6BD9iA9LyQ2FiduHIMM8nS0iaALpwYC2Y-KWy4,23445
|
6
6
|
osbot_utils/base_classes/Type_Safe__List.py,sha256=iWyoc2xjHkTJrZTVnPse9Rljte2tF67oNq8yA7jnAhY,5996
|
7
7
|
osbot_utils/base_classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
osbot_utils/context_managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -15,12 +15,12 @@ osbot_utils/decorators/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
|
|
15
15
|
osbot_utils/decorators/classes/singleton.py,sha256=ZBYw2W4Qmo0mlHQQqDJyScaXO6pmbftru9YBBdUowjY,332
|
16
16
|
osbot_utils/decorators/lists/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
17
17
|
osbot_utils/decorators/lists/filter_list.py,sha256=ME-Ojknb60yn13LQNkY2ixqrkl6MfXUtxlnLis9qw3Y,694
|
18
|
-
osbot_utils/decorators/lists/group_by.py,sha256=
|
19
|
-
osbot_utils/decorators/lists/index_by.py,sha256=
|
18
|
+
osbot_utils/decorators/lists/group_by.py,sha256=TDqLBlmp2S8nMPsDf7R0fGlMe_j5q5Uv6RhHFYZVB40,702
|
19
|
+
osbot_utils/decorators/lists/index_by.py,sha256=Awk3ebtYVywxnb51V-ZGE8pd1fwd8J42x9Y1OR1ApMw,858
|
20
20
|
osbot_utils/decorators/methods/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
21
|
osbot_utils/decorators/methods/cache.py,sha256=IMmHBeR6qtaOfBNgZUeI1SVLoexQQy6vk1LDW-20_5w,1062
|
22
22
|
osbot_utils/decorators/methods/cache_on_function.py,sha256=sDebxWjJnusb_w4R26OTYcmTF6CCeWrpesn-dgzEu8g,2694
|
23
|
-
osbot_utils/decorators/methods/cache_on_self.py,sha256=
|
23
|
+
osbot_utils/decorators/methods/cache_on_self.py,sha256=Zf3rhUkoU9ucpkZyN0jZ8i4JTX3cwYwfUpUfExWDyRM,3628
|
24
24
|
osbot_utils/decorators/methods/cache_on_tmp.py,sha256=8wLnRAUUkHobu6-B2Q8aAE8jLeIu3b-CQuMtXcnIN9w,3102
|
25
25
|
osbot_utils/decorators/methods/capture_exception.py,sha256=r6d1TPibAVLL7B4I0oXtnHQwFFdLBZbDnytYWO6PxS4,1174
|
26
26
|
osbot_utils/decorators/methods/capture_status.py,sha256=5xklG0usO3hGTjedhrmIucXtUjPd2pkuvA5jsty0a5E,659
|
@@ -29,7 +29,7 @@ osbot_utils/decorators/methods/context.py,sha256=oeHvVTAv6G2PTPkmzaez96hSDSYM4cL
|
|
29
29
|
osbot_utils/decorators/methods/depreciated.py,sha256=cDXxTCx_8HnAymXcWwR16dqVAonMDg3nxJihQPHeDn8,2288
|
30
30
|
osbot_utils/decorators/methods/function_type_check.py,sha256=o8Je6k-tXd3UmbgVL0ggVq5sYMEpkTDhWlFTZs9VLcM,2757
|
31
31
|
osbot_utils/decorators/methods/obj_as_context.py,sha256=59JgxUvEruh_4ROoWHXK22Jv8C4_E5mSxb4aG3JbL50,104
|
32
|
-
osbot_utils/decorators/methods/remove_return_value.py,sha256=
|
32
|
+
osbot_utils/decorators/methods/remove_return_value.py,sha256=EerRwBFDJ3ICKA0BrNzelRECb3n2NUMoFzcn0rQyCUY,1162
|
33
33
|
osbot_utils/decorators/methods/required_fields.py,sha256=PZd9LKd4qBeqxgP9FgTtLNNJ0coZx99hFJyNEKmF1K0,783
|
34
34
|
osbot_utils/fluent/Fluent_Dict.py,sha256=nZ2z91s39sU2a-TLYpBirRoWgDXHrs0tQ9Bi_ZdKeW0,481
|
35
35
|
osbot_utils/fluent/Fluent_List.py,sha256=PfDDC9sm16CFnNQ8gkhCEsmKcZp8iyQ0YBpSHvYssG8,1089
|
@@ -65,11 +65,11 @@ osbot_utils/helpers/Local_Cache.py,sha256=0JZZX3fFImcwtbBvxAQl-EbBegSNJRhRMYF6ov
|
|
65
65
|
osbot_utils/helpers/Local_Caches.py,sha256=aQmi1HSM0TH6WQPedG2fbz4KCCJ3DQTU9d18rB1jR0M,1885
|
66
66
|
osbot_utils/helpers/Print_Table.py,sha256=LEXbyqGg_6WSraI4cob4bNNSu18ddqvALp1zGK7bPhs,19126
|
67
67
|
osbot_utils/helpers/Python_Audit.py,sha256=shpZlluJwqJBAlad6xN01FkgC1TsQ48RLvR5ZjmrKa4,1539
|
68
|
-
osbot_utils/helpers/Random_Guid.py,sha256=
|
68
|
+
osbot_utils/helpers/Random_Guid.py,sha256=GBh3lQ854c0_DICRJE8dDRNH81DiO8F6bxNu0YkzUrU,383
|
69
69
|
osbot_utils/helpers/Random_Guid_Short.py,sha256=YP_k5OLuYvXWGU2OEnQHk_OGViBQofTWKm3pUdQaJao,404
|
70
70
|
osbot_utils/helpers/Random_Seed.py,sha256=14btja8LDN9cMGWaz4fCNcMRU_eyx49gas-_PQvHgy4,634
|
71
71
|
osbot_utils/helpers/Safe_Id.py,sha256=JbpBWF57Inoq8MgSx1NUy_fjQdpXDjYEp00_MrS5yjs,364
|
72
|
-
osbot_utils/helpers/Timestamp_Now.py,sha256=
|
72
|
+
osbot_utils/helpers/Timestamp_Now.py,sha256=k3-SUGYx2jLTXvgZYeECqPRJhVxqWPmW7co1l6r12jk,438
|
73
73
|
osbot_utils/helpers/Type_Registry.py,sha256=Ajk3SyMSKDi2g9SJYUtTgg7PZkAgydaHcpbGuEN3S94,311
|
74
74
|
osbot_utils/helpers/Zip_Bytes.py,sha256=KB5zWfCf6ET4alNfqNrSp5DxZ3Jp9oDHpc6tK2iO_qg,4320
|
75
75
|
osbot_utils/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -206,7 +206,7 @@ osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py,sha256=yOQSn4o1bIsE
|
|
206
206
|
osbot_utils/helpers/pubsub/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
207
207
|
osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py,sha256=GSuRYgs1yKQjxMszPoaI7fsfMfuUqhb64AaIysRE6Cs,1747
|
208
208
|
osbot_utils/helpers/sqlite/Sqlite__Cursor.py,sha256=k5G9Tkk3nx6nHoSanLmpuJG_TceAmN7uRBCt0bo6sIc,3364
|
209
|
-
osbot_utils/helpers/sqlite/Sqlite__Database.py,sha256=
|
209
|
+
osbot_utils/helpers/sqlite/Sqlite__Database.py,sha256=YSuppFFiR-RcGiAXxhS-Oygw5PvdbV94wm4ybQ7cOF8,5616
|
210
210
|
osbot_utils/helpers/sqlite/Sqlite__Field.py,sha256=oBWglAOKN0EWVtaRwiQFxmR1FQ61lQ35yKkWXjSiihs,2911
|
211
211
|
osbot_utils/helpers/sqlite/Sqlite__Globals.py,sha256=aP6uIy_y4xzl2soTUCFIJRjsb8JyfxfL6qIEZKIWy_4,230
|
212
212
|
osbot_utils/helpers/sqlite/Sqlite__Table.py,sha256=FsFSolFN2N5V8DfZPp4gZL9xmCXaOhmG38wQmgRrvp8,15145
|
@@ -223,7 +223,7 @@ osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py,sha256=CWB-hTcgly2T_7HO
|
|
223
223
|
osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py,sha256=TLUdQC6vsf5BcDP15CCeoYkipVG30bzqFcqEJpH4dWg,1645
|
224
224
|
osbot_utils/helpers/sqlite/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
225
225
|
osbot_utils/helpers/sqlite/domains/Sqlite__DB.py,sha256=xyXnt4-GLYqMEPBZrNPI0dZnkl61KwLEIuYjebO20Jc,1210
|
226
|
-
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py,sha256=
|
226
|
+
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py,sha256=ueXi6_gzbbpJcr-OuApoVbBch8_lDviDhu_AXXh8lvU,1735
|
227
227
|
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py,sha256=aGykK4Qll5Rn0xJR4RvF5bN6llNEjx-Vst52XTVSNio,1751
|
228
228
|
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py,sha256=ILx1wOsmwmvV2yb_fMzLzo18uGNub8cxhBrRfYxCCqA,3808
|
229
229
|
osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py,sha256=liN_0gyXmQyqnsmiz0RYanSCRI0VoIbwSBf4buM0l-w,1093
|
@@ -252,7 +252,7 @@ osbot_utils/helpers/ssh/SSH__Python.py,sha256=O2DAwkbXzwkis8lffoqIL2NPSfYcN44Mr8
|
|
252
252
|
osbot_utils/helpers/ssh/TestCase__SSH.py,sha256=MD8sq0_kI4f6pEmEO0cLq2mQOhIqbP45ZxFJNG44Jg4,1773
|
253
253
|
osbot_utils/helpers/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
254
254
|
osbot_utils/helpers/trace/Trace_Call.py,sha256=O_y6cncgneYrj3ARDMz-o9Yi1LjsESibUqkGFAg0Jk0,8886
|
255
|
-
osbot_utils/helpers/trace/Trace_Call__Config.py,sha256=
|
255
|
+
osbot_utils/helpers/trace/Trace_Call__Config.py,sha256=UAjdsDEqsPBBsu-h4_QKYL4UMukJmQYBBWGYTmSKS40,3361
|
256
256
|
osbot_utils/helpers/trace/Trace_Call__Graph.py,sha256=HCrXRKQI42DIQxxyFLcaosWiOcUyoITbeV17ICdXcXM,1156
|
257
257
|
osbot_utils/helpers/trace/Trace_Call__Handler.py,sha256=hdgiawoC4K2DrMAHbz2706SfEcxPdX9kK0gjyWqjSzQ,12400
|
258
258
|
osbot_utils/helpers/trace/Trace_Call__Print_Lines.py,sha256=cy7zLv0_JNxdOIQPfZk6J9bv6AkIW6O643w0ykClXbw,4820
|
@@ -288,18 +288,18 @@ osbot_utils/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
288
288
|
osbot_utils/utils/Assert.py,sha256=u9XLgYn91QvNWZGyPi29SjPJSXRHlm9andIn3NJEVog,1745
|
289
289
|
osbot_utils/utils/Call_Stack.py,sha256=awhWstC2mJCrOjNqNheTe2B7at-JFP6XG7VkMPpPNOE,6647
|
290
290
|
osbot_utils/utils/Csv.py,sha256=oHLVpjRJqrLMz9lubMCNEoThXWju5rNTprcwHc1zq2c,1012
|
291
|
-
osbot_utils/utils/Dev.py,sha256=
|
292
|
-
osbot_utils/utils/Env.py,sha256=
|
291
|
+
osbot_utils/utils/Dev.py,sha256=eaQ87ZcMRRcxgzA-f7OO8HjjWhbE6L_edwvXiwFZvIQ,1291
|
292
|
+
osbot_utils/utils/Env.py,sha256=rBksAy6k-J5oAJp-S_JedVlcj1b2VK8V3zsQbacopMc,6076
|
293
293
|
osbot_utils/utils/Exceptions.py,sha256=KyOUHkXQ_6jDTq04Xm261dbEZuRidtsM4dgzNwSG8-8,389
|
294
|
-
osbot_utils/utils/Files.py,sha256=
|
294
|
+
osbot_utils/utils/Files.py,sha256=yxteAcyhDcUy1_r9Eihx80V16lV_UAE6cvoOe2Dc7DU,23001
|
295
295
|
osbot_utils/utils/Functions.py,sha256=0E6alPJ0fJpBiJgFOWooCOi265wSRyxxXAJ5CELBnso,3498
|
296
296
|
osbot_utils/utils/Http.py,sha256=Cm_-b2EgxKoQJ47ThZp-dgHCdeGv4UcCNLfTOH94-7s,7790
|
297
297
|
osbot_utils/utils/Int.py,sha256=PmlUdU4lSwf4gJdmTVdqclulkEp7KPCVUDO6AcISMF4,116
|
298
|
-
osbot_utils/utils/Json.py,sha256=
|
298
|
+
osbot_utils/utils/Json.py,sha256=0DZGlCU7Nqte5n0r7ctPXFybqA5MRfSrTz5zuK_6UFk,7095
|
299
299
|
osbot_utils/utils/Json_Cache.py,sha256=mLPkkDZN-3ZVJiDvV1KBJXILtKkTZ4OepzOsDoBPhWg,2006
|
300
300
|
osbot_utils/utils/Lists.py,sha256=tPz5x5s3sRO97WZ_nsxREBPC5cwaHrhgaYBhsrffTT8,5599
|
301
|
-
osbot_utils/utils/Misc.py,sha256=
|
302
|
-
osbot_utils/utils/Objects.py,sha256=
|
301
|
+
osbot_utils/utils/Misc.py,sha256=VT-utruCLnZNER5-gYhoGjqe3t-H57SuXcShsJnUSaM,17364
|
302
|
+
osbot_utils/utils/Objects.py,sha256=hanzmc1WR8i3I3btE4uAM0vWTGnnjwEKABbBXdqSeT8,19449
|
303
303
|
osbot_utils/utils/Png.py,sha256=V1juGp6wkpPigMJ8HcxrPDIP4bSwu51oNkLI8YqP76Y,1172
|
304
304
|
osbot_utils/utils/Process.py,sha256=lr3CTiEkN3EiBx3ZmzYmTKlQoPdkgZBRjPulMxG-zdo,2357
|
305
305
|
osbot_utils/utils/Python_Logger.py,sha256=tx8N6wRKL3RDHboDRKZn8SirSJdSAE9cACyJkxrThZ8,12792
|
@@ -307,12 +307,12 @@ osbot_utils/utils/Regex.py,sha256=0ubgp8HKsS3PNe2H6XlzMIcUuV7jhga3VkQVDNOJWuA,86
|
|
307
307
|
osbot_utils/utils/Status.py,sha256=Yq4s0TelXgn0i2QjCP9V8mP30GabXp_UL-jjM6Iwiw4,4305
|
308
308
|
osbot_utils/utils/Str.py,sha256=pHcPE3xZ0aBz35aXIW2hdA5WN6vhRqsNT8A-7MNNIY0,3252
|
309
309
|
osbot_utils/utils/Threads.py,sha256=lnh4doZWYUIoWBZRU_780QPeAIKGDh7INuqmU8Fzmdc,3042
|
310
|
-
osbot_utils/utils/Toml.py,sha256
|
310
|
+
osbot_utils/utils/Toml.py,sha256=Rxl8gx7mni5CvBAK-Ai02EKw-GwtJdd3yeHT2kMloik,1667
|
311
311
|
osbot_utils/utils/Version.py,sha256=Ww6ChwTxqp1QAcxOnztkTicShlcx6fbNsWX5xausHrg,422
|
312
312
|
osbot_utils/utils/Zip.py,sha256=pR6sKliUY0KZXmqNzKY2frfW-YVQEVbLKiyqQX_lc-8,14052
|
313
313
|
osbot_utils/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
314
|
-
osbot_utils/version,sha256=
|
315
|
-
osbot_utils-1.
|
316
|
-
osbot_utils-1.
|
317
|
-
osbot_utils-1.
|
318
|
-
osbot_utils-1.
|
314
|
+
osbot_utils/version,sha256=aIpUVrKdZ8WBavSOG1FUg01Gps1EABCHbRtrG7K2mBk,8
|
315
|
+
osbot_utils-1.84.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
316
|
+
osbot_utils-1.84.0.dist-info/METADATA,sha256=y-gphRxS5LdJTqqZCA4uGJGGzwp74C2deUs7ZJP4NX8,1317
|
317
|
+
osbot_utils-1.84.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
318
|
+
osbot_utils-1.84.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|