osbot-utils 2.27.0__py3-none-any.whl → 2.29.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.
@@ -50,7 +50,10 @@ class Task(Type_Safe):
50
50
  return self.execute__after()
51
51
 
52
52
  def execute__before(self):
53
- self.task_flow = self.find_flow()
53
+ flow_from_stack = self.find_flow()
54
+ if flow_from_stack:
55
+ self.task_flow = flow_from_stack
56
+
54
57
  if self.task_flow is None:
55
58
  raise Exception("No Flow found for Task")
56
59
 
@@ -62,7 +62,7 @@ class Type_Safe:
62
62
  def json(self):
63
63
  return self.serialize_to_dict()
64
64
 
65
- def json__compress(self):
65
+ def json__compress(self): # todo: see if this is the best place to put these Type_Safe__Json_Compressor methods
66
66
  from osbot_utils.type_safe.shared.Type_Safe__Json_Compressor import Type_Safe__Json_Compressor
67
67
  return Type_Safe__Json_Compressor().compress(self)
68
68
 
@@ -97,7 +97,7 @@ class Type_Safe:
97
97
 
98
98
  return dict_to_obj(self.json())
99
99
 
100
- def serialize_to_dict(self): # todo: see if we need this method or if the .json() is enough
100
+ def serialize_to_dict(self): # todo: see if we need this method or if the .json() is enough
101
101
  return serialize_to_dict(self)
102
102
 
103
103
  def print(self):
@@ -110,4 +110,8 @@ class Type_Safe:
110
110
  from osbot_utils.type_safe.steps.Type_Safe__Step__From_Json import type_safe_step_from_json # circular dependency on Type_Safe
111
111
  return type_safe_step_from_json.from_json(cls, json_data, raise_on_not_found)
112
112
 
113
-
113
+ @classmethod
114
+ def from_json__compressed(cls, json_data): # todo: see if this is the best place to put these Type_Safe__Json_Compressor methods
115
+ from osbot_utils.type_safe.shared.Type_Safe__Json_Compressor import Type_Safe__Json_Compressor
116
+ json_data__decompressed = Type_Safe__Json_Compressor().decompress(json_data)
117
+ return cls.from_json(json_data__decompressed)
@@ -1,3 +1,5 @@
1
+ from typing import Type
2
+
1
3
  from osbot_utils.type_safe.Type_Safe__Base import Type_Safe__Base
2
4
 
3
5
  class Type_Safe__Dict(Type_Safe__Base, dict):
@@ -27,6 +29,10 @@ class Type_Safe__Dict(Type_Safe__Base, dict):
27
29
 
28
30
  result = {}
29
31
  for key, value in self.items():
32
+
33
+ if isinstance(key, (type, Type)): # Handle Type objects as keys
34
+ key = f"{key.__module__}.{key.__name__}"
35
+
30
36
  if isinstance(value, Type_Safe): # Handle Type_Safe objects in values
31
37
  result[key] = value.json()
32
38
  elif isinstance(value, (list, tuple)): # Handle lists/tuples that might contain Type_Safe objects
@@ -110,7 +110,7 @@ class Type_Safe__Step__From_Json:
110
110
 
111
111
  return _self
112
112
 
113
- def deserialize_type__using_value(self, value):
113
+ def deserialize_type__using_value(self, value): # TODO: Check the security implications of this deserialisation
114
114
  if value:
115
115
  try:
116
116
  module_name, type_name = value.rsplit('.', 1)
@@ -139,6 +139,8 @@ class Type_Safe__Step__From_Json:
139
139
  for dict_key, dict_value in value.items():
140
140
  key_origin = type_safe_cache.get_origin(key_class)
141
141
  if key_origin is type:
142
+ if type(dict_key) is str:
143
+ dict_key = self.deserialize_type__using_value(dict_key)
142
144
  expected_dict_type = get_args(key_class)[0]
143
145
  if dict_key != expected_dict_type and not issubclass(dict_key,expected_dict_type):
144
146
  raise TypeError(f"Expected {expected_dict_type} class for key but got instance: {dict_key}")
@@ -284,7 +284,15 @@ def serialize_to_dict(obj):
284
284
  elif isinstance(obj, set):
285
285
  return [serialize_to_dict(item) for item in obj]
286
286
  elif isinstance(obj, dict):
287
- return {key: serialize_to_dict(value) for key, value in obj.items()}
287
+ serialized_dict = {} # todo: refactor to separate method
288
+ for key, value in obj.items():
289
+ if isinstance(key, type): # Handle type keys by converting to fully qualified string
290
+ serialized_key = f"{key.__module__}.{key.__name__}"
291
+ else:
292
+ serialized_key = key
293
+ serialized_dict[serialized_key] = serialize_to_dict(value) # Recursively serialize the value
294
+ return serialized_dict
295
+ #return {key: serialize_to_dict(value) for key, value in obj.items()}
288
296
  elif hasattr(obj, "__dict__"):
289
297
  data = {} # todo: look at a more advanced version which saved the type of the object, for example with {'__type__': type(obj).__name__}
290
298
  for key, value in obj.__dict__.items():
osbot_utils/version CHANGED
@@ -1 +1 @@
1
- v2.27.0
1
+ v2.29.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: osbot_utils
3
- Version: 2.27.0
3
+ Version: 2.29.0
4
4
  Summary: OWASP Security Bot - Utils
5
5
  License: MIT
6
6
  Author: Dinis Cruz
@@ -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-v2.27.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.29.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
 
@@ -137,7 +137,7 @@ osbot_utils/helpers/cache_requests/Cache__Requests__Table.py,sha256=BW7tXM0TFYma
137
137
  osbot_utils/helpers/cache_requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
138
  osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py,sha256=xgx_oExxkcvRwQN1UCobimECIMUKGoIX5oGdCmp8Nyw,243
139
139
  osbot_utils/helpers/flows/Flow.py,sha256=eSqv_pY7vDC1XmX65RyW4swnhQNtMwZXkXnc4De2oc0,13239
140
- osbot_utils/helpers/flows/Task.py,sha256=14f51WEaOWIIEiZlMhUtJ3YzK4PnJzvcGs8SivdOfBQ,6530
140
+ osbot_utils/helpers/flows/Task.py,sha256=AQ69b97woemCZxxBxluV5pqOlBU0KW4OpculC5Ix4nw,6605
141
141
  osbot_utils/helpers/flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
142
  osbot_utils/helpers/flows/actions/Flow__Data.py,sha256=h9h5yVFIK0ZdXukNFgfRVV1XW0YQartVMcJTakwVqKY,5155
143
143
  osbot_utils/helpers/flows/actions/Flow__Events.py,sha256=g7KBafFeA7tV-v31v_m3MT__cZEX63gh8CehnZwRYU0,2840
@@ -294,9 +294,9 @@ osbot_utils/testing/performance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm
294
294
  osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py,sha256=xT_uKzbSYo9AGiJgNmCHSt3ApneNNyKh8vsMVN6IJQ0,1127
295
295
  osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py,sha256=k9HJYNLmW6sjRVsfpduSxHFiVANc1zmYtO_Oz9azpW8,755
296
296
  osbot_utils/testing/performance/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
297
- osbot_utils/type_safe/Type_Safe.py,sha256=tUz4rzghHSjyzIMuBYANJiTI87F9h9GZVkmvjh3hsQE,5707
297
+ osbot_utils/type_safe/Type_Safe.py,sha256=LOWRGOGpnRU2iTRLP47vUoyalK0vjFrWlnaghBIogWg,6267
298
298
  osbot_utils/type_safe/Type_Safe__Base.py,sha256=Bzrh8TxFglB0FEUAQTlgovlnFHnBN4lOX1Vu327r1Vc,5223
299
- osbot_utils/type_safe/Type_Safe__Dict.py,sha256=vE_Ut7MabBjOq5Hpr3vdFO5RNf-M-cL83S76CvxD-9g,2488
299
+ osbot_utils/type_safe/Type_Safe__Dict.py,sha256=yEswrqWcYoL97eeeSXRAdIqsz9MjLdC1F6nnuq7JS3s,2700
300
300
  osbot_utils/type_safe/Type_Safe__List.py,sha256=SzSIBkwSOAEpW_V2qh4-f0YHzmgB0T8PczBLbDgZGvg,1340
301
301
  osbot_utils/type_safe/Type_Safe__Method.py,sha256=LOG2sqQyKBNNEiJxk_jngH6IWvpyVueouAzNTlj-_pY,12676
302
302
  osbot_utils/type_safe/Type_Safe__Set.py,sha256=j12fc8cbd9-s_a13ysaz723rNEW4Dt6hObCd0S-AjIg,1432
@@ -319,7 +319,7 @@ osbot_utils/type_safe/shared/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
319
319
  osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py,sha256=snoyJKvZ1crgF2fp0zexwNPnV_E63RfyRIsMAZdrKNY,6995
320
320
  osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py,sha256=tzKXDUc0HVP5QvCWsmcPuuZodNvQZ9FeMDNI2x00Ngw,1943
321
321
  osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py,sha256=K_tkVQyLUbbWYzDnzoPLCgDBAFYyUjAG4VdLsvjzL1g,4485
322
- osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py,sha256=V-ipKwuQq2wjWXj3Nfq5VadxN8F8bPjjNFR5sVH4pRg,12567
322
+ osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py,sha256=Be3hZhmQCDKqRBERPfopeDH-re6fyOXM8lRkx5Ndzb8,12757
323
323
  osbot_utils/type_safe/steps/Type_Safe__Step__Init.py,sha256=v4FD7zxQiOFLiOF1Ma8wZMP8aLgRlXwJZnsIfBu2zeg,1266
324
324
  osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py,sha256=VuKHH9QEYlbAL9R4zwQ5dwexx2sFY6wMx52QmF7eqcg,5219
325
325
  osbot_utils/type_safe/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -343,7 +343,7 @@ osbot_utils/utils/Json.py,sha256=TvfDoXwOkWzWH-9KMnme5C7iFsMZOleAeue92qmkH6g,883
343
343
  osbot_utils/utils/Json_Cache.py,sha256=mLPkkDZN-3ZVJiDvV1KBJXILtKkTZ4OepzOsDoBPhWg,2006
344
344
  osbot_utils/utils/Lists.py,sha256=tPz5x5s3sRO97WZ_nsxREBPC5cwaHrhgaYBhsrffTT8,5599
345
345
  osbot_utils/utils/Misc.py,sha256=H_xexJgiTxB3jDeDiW8efGQbO0Zuy8MM0iQ7qXC92JI,17363
346
- osbot_utils/utils/Objects.py,sha256=pLES6h48qsbrPihF4VRKbwzxD9wwh49A8lpJkL2iMRk,12905
346
+ osbot_utils/utils/Objects.py,sha256=RqHzikmIDuqWUbnn7Lxd5ZkIa6smYJmRP6jM0Re5Awk,13471
347
347
  osbot_utils/utils/Png.py,sha256=V1juGp6wkpPigMJ8HcxrPDIP4bSwu51oNkLI8YqP76Y,1172
348
348
  osbot_utils/utils/Process.py,sha256=lr3CTiEkN3EiBx3ZmzYmTKlQoPdkgZBRjPulMxG-zdo,2357
349
349
  osbot_utils/utils/Python_Logger.py,sha256=M9Oi62LxfnRSlCN8GhaiwiBINvcSdGy39FCWjyDD-Xg,12792
@@ -355,8 +355,8 @@ osbot_utils/utils/Toml.py,sha256=Rxl8gx7mni5CvBAK-Ai02EKw-GwtJdd3yeHT2kMloik,166
355
355
  osbot_utils/utils/Version.py,sha256=Ww6ChwTxqp1QAcxOnztkTicShlcx6fbNsWX5xausHrg,422
356
356
  osbot_utils/utils/Zip.py,sha256=pR6sKliUY0KZXmqNzKY2frfW-YVQEVbLKiyqQX_lc-8,14052
357
357
  osbot_utils/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
358
- osbot_utils/version,sha256=2yKGk7vQk8voS72-fsPKVRYwaYPim2jqyO2XPZKS4PU,8
359
- osbot_utils-2.27.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
360
- osbot_utils-2.27.0.dist-info/METADATA,sha256=sH6l_FyHwMRoGTxMYy2eJOdKAkc_pk7FegSFT_ejO0U,1329
361
- osbot_utils-2.27.0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
362
- osbot_utils-2.27.0.dist-info/RECORD,,
358
+ osbot_utils/version,sha256=ON8CcGgOzXQTBlj0GoLWU4kJJ4NSmn3tfF8hCE1vYZ4,8
359
+ osbot_utils-2.29.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
360
+ osbot_utils-2.29.0.dist-info/METADATA,sha256=bP7-jWt9xctBc_Fa8lXhfnqxaWkMYRCAK6zwNCxx_Sg,1329
361
+ osbot_utils-2.29.0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
362
+ osbot_utils-2.29.0.dist-info/RECORD,,