osbot-utils 1.81.0__py3-none-any.whl → 1.83.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.
@@ -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
- TYPE_SAFE__CONVERT_VALUE__SUPPORTED_TYPES = [Safe_Id, Random_Guid, Timestamp_Now]
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
- class __(SimpleNamespace):
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 tomllib is None:
43
- raise NotImplementedError("TOML parsing is not supported in Python versions earlier than 3.11")
44
- return tomllib.loads(str_toml)
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)
osbot_utils/version CHANGED
@@ -1 +1 @@
1
- v1.81.0
1
+ v1.83.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: osbot_utils
3
- Version: 1.81.0
3
+ Version: 1.83.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
- ![Current Release](https://img.shields.io/badge/release-v1.81.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v1.83.0-blue)
27
27
  [![codecov](https://codecov.io/gh/owasp-sbot/OSBot-Utils/graph/badge.svg?token=GNVW0COX1N)](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=lAWsPoNGoLIrzjJ5xIHP_rlpTmeTP0eXbvnBKGEB1s0,22335
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=NUzc1l9SXezypfDuqxykFX4-kuD36m9w_nOsOGL70Ug,697
19
- osbot_utils/decorators/lists/index_by.py,sha256=BEbfd13l11zROhXAb0vkB_aZi9P2Zt4pExLpvHwuCtQ,850
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=sW2NLW1rxSrssuLbgua68ZshX0mvrOGTbr2Wed1q26M,3709
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=vPJswDH-QsiYsdHAalM7zF_Hgqk40W4SbhyVAGkr5mE,1163
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=hBBcjetZMYgdagWbkS1j7AYAQ5k6JFbDpbPBi9gTj1A,373
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=Vmdsm-pgvxkkQ_Qj_9Watr8rXXSvc-aBxWMPFGQx8Z0,371
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
@@ -170,7 +170,7 @@ osbot_utils/helpers/flows/models/Flow_Run__Event_Data.py,sha256=Xvv_vtOL-siSdt5n
170
170
  osbot_utils/helpers/flows/models/Flow_Run__Event_Type.py,sha256=-iHKNQ-Ar2UfiCraFYQNHdBQ9fNcTTRoh3kRpXRS_Gc,375
171
171
  osbot_utils/helpers/flows/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
172
172
  osbot_utils/helpers/generators/Generator_Context_Manager.py,sha256=STpCn2Zh5G2TmyYMjeLMjfpkSYUUeU6mzV_O6Hu4g4Q,863
173
- osbot_utils/helpers/generators/Generator_Manager.py,sha256=LEGfSdilxvocAEdP7q6qUdL4QnmrRk138VMPuel7Y3k,11074
173
+ osbot_utils/helpers/generators/Generator_Manager.py,sha256=eQzyZVxZjglzPmoxLJ7ib1pD8187YcKBIr7mljpSUF4,11731
174
174
  osbot_utils/helpers/generators/Model__Generator_State.py,sha256=cS9tigdBIAvexip2VC8B0meegslzlu-cOosTDiEpe54,903
175
175
  osbot_utils/helpers/generators/Model__Generator_Target.py,sha256=JKa_PEQeVNZDSMBAobADaor4zXAhM_XWPHrQ2NMApZs,819
176
176
  osbot_utils/helpers/generators/__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=AAUaUXABiL1GE7urg20YpwbFGbRvRxqvv4D7IgCgvYw,5594
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=IyAbtHrpovNkIXaJKQ2vcg3yqF70XLQ-5mdIiN3vSK0,1696
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=qd6HpF1olvlQ9BU3-gvxRdnP0l7w7noCXpF561gkyUk,3305
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=HibpQutYy_iG8gGV8g1GztxNN4l29E4Bi7UZaVL6-L8,1203
292
- osbot_utils/utils/Env.py,sha256=XMwF5BrtpoPJdOraswAFPrcQ3tRTocjqvA8I61eOCJw,5741
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=7fdqbfFyo6Ow5Repi_dZAzHqGb0XYh6tDALYAy42pBY,22522
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=8fpYFXzNPSrwYfXMt3eGKpe-lhxh1kEaCRae1X1943A,6662
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=A8AzI1M912NDxNpPRrW1lPrwIIjVOoGUQHzyyRCEMFU,17102
302
- osbot_utils/utils/Objects.py,sha256=RiViT25vuh9zk_gveV2VzSKYg6vUaF2wwyAPPsj1qyw,19426
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=-_Yv5T8ZhGGoDSSoNEdFhSsXiK_JPjGkPijm4JoeHSk,1669
310
+ osbot_utils/utils/Toml.py,sha256=Nmd0NW8Y_t1c58ZRuk1Fdole9L7gneY_cBKeuzHWrog,1629
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=h-Uo2U3D4mEo2b9rHQuDlErmdEghJO_FoJlm3AyGWlY,8
315
- osbot_utils-1.81.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
316
- osbot_utils-1.81.0.dist-info/METADATA,sha256=PoEUhxqSAekTRQc75B-ZTh4VCTkkkjKQDOFFX4urRaQ,1317
317
- osbot_utils-1.81.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
318
- osbot_utils-1.81.0.dist-info/RECORD,,
314
+ osbot_utils/version,sha256=CgxshiGcWCucYScq5IL-HjA4Msf0MVeaUv4WDK8W7xU,8
315
+ osbot_utils-1.83.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
316
+ osbot_utils-1.83.0.dist-info/METADATA,sha256=cmvFfxr5uWc7sf1A-BIReN0mgtv8mtTD91E_-oqLMJM,1317
317
+ osbot_utils-1.83.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
318
+ osbot_utils-1.83.0.dist-info/RECORD,,