osbot-utils 1.57.0__py3-none-any.whl → 1.58.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/helpers/flows/Flow.py +14 -2
- osbot_utils/helpers/flows/Task.py +3 -1
- osbot_utils/utils/Objects.py +2 -1
- osbot_utils/version +1 -1
- {osbot_utils-1.57.0.dist-info → osbot_utils-1.58.0.dist-info}/METADATA +2 -2
- {osbot_utils-1.57.0.dist-info → osbot_utils-1.58.0.dist-info}/RECORD +8 -8
- {osbot_utils-1.57.0.dist-info → osbot_utils-1.58.0.dist-info}/LICENSE +0 -0
- {osbot_utils-1.57.0.dist-info → osbot_utils-1.58.0.dist-info}/WHEEL +0 -0
@@ -2,6 +2,8 @@ import asyncio
|
|
2
2
|
import logging
|
3
3
|
import typing
|
4
4
|
|
5
|
+
from osbot_utils.helpers.Dependency_Manager import Dependency_Manager
|
6
|
+
|
5
7
|
from osbot_utils.base_classes.Type_Safe import Type_Safe
|
6
8
|
from osbot_utils.helpers.CFormat import CFormat, f_dark_grey, f_magenta, f_bold
|
7
9
|
from osbot_utils.helpers.flows.models.Flow__Config import Flow__Config
|
@@ -33,6 +35,8 @@ class Flow(Type_Safe):
|
|
33
35
|
logger : Python_Logger
|
34
36
|
cformat : CFormat
|
35
37
|
executed_tasks : typing.List
|
38
|
+
resolved_args : tuple
|
39
|
+
resolved_kwargs : dict
|
36
40
|
|
37
41
|
def add_flow_artifact(self, description=None, key=None, data=None, artifact_type=None): # todo: figure out how to make this work since at the moment most are showing an unknown type
|
38
42
|
result_data = dict(flow_run_id = self.flow_id,
|
@@ -69,6 +73,7 @@ class Flow(Type_Safe):
|
|
69
73
|
self.logger.add_memory_logger() # todo: move to method that does pre-execute tasks
|
70
74
|
|
71
75
|
self.log_debug(f"Executing flow run '{self.f__flow_id()}'")
|
76
|
+
self.resolve_args_and_kwargs()
|
72
77
|
try:
|
73
78
|
with Stdout() as stdout:
|
74
79
|
self.invoke_flow_target()
|
@@ -93,14 +98,14 @@ class Flow(Type_Safe):
|
|
93
98
|
|
94
99
|
|
95
100
|
async def invoke_flow_target__thread(self, flow): # this is a REALLY important method which is used to pin the flow object to the call stack
|
96
|
-
return await flow.flow_target(*flow.
|
101
|
+
return await flow.flow_target(*flow.resolved_args, **flow.resolved_kwargs) # which is then used by the Task.find_flow method to find it
|
97
102
|
|
98
103
|
def invoke_flow_target(self):
|
99
104
|
if asyncio.iscoroutinefunction(self.flow_target):
|
100
105
|
async_coroutine = self.invoke_flow_target__thread(self) # use this special method to pin the flow object to the call stack
|
101
106
|
self.flow_return_value = invoke_in_new_event_loop(async_coroutine) # this will start a complete new thread to execute the flow (which is exactly what we want)
|
102
107
|
else:
|
103
|
-
self.flow_return_value = self.flow_target(*self.
|
108
|
+
self.flow_return_value = self.flow_target(*self.resolved_args, **self.resolved_kwargs) # if the flow is sync, just execute the flow target
|
104
109
|
|
105
110
|
def f__flow_id(self):
|
106
111
|
return self.cformat.green(self.flow_id)
|
@@ -178,6 +183,13 @@ class Flow(Type_Safe):
|
|
178
183
|
def random_flow_name(self):
|
179
184
|
return lower(random_id(prefix=FLOW__RANDOM_NAME__PREFIX))
|
180
185
|
|
186
|
+
def resolve_args_and_kwargs(self):
|
187
|
+
dependency_manager = Dependency_Manager()
|
188
|
+
dependency_manager.add_dependency('this_flow', self)
|
189
|
+
dependency_manager.add_dependency('flow_data', self.data)
|
190
|
+
self.resolved_args, self.resolved_kwargs = dependency_manager.resolve_dependencies(self.flow_target,
|
191
|
+
*self.flow_args,
|
192
|
+
**self.flow_kwargs)
|
181
193
|
|
182
194
|
def set_flow_target(self, target, *args, **kwargs):
|
183
195
|
self.flow_target = target
|
@@ -61,6 +61,9 @@ class Task(Type_Safe):
|
|
61
61
|
|
62
62
|
self.task_flow.executed_tasks.append(self)
|
63
63
|
self.log_debug(f"Executing task '{f_blue(self.task_name)}'")
|
64
|
+
self.resolve_args_and_kwargs()
|
65
|
+
|
66
|
+
def resolve_args_and_kwargs(self):
|
64
67
|
dependency_manager = Dependency_Manager()
|
65
68
|
dependency_manager.add_dependency('this_task', self )
|
66
69
|
dependency_manager.add_dependency('this_flow', self.task_flow )
|
@@ -68,7 +71,6 @@ class Task(Type_Safe):
|
|
68
71
|
dependency_manager.add_dependency('flow_data', self.task_flow.data)
|
69
72
|
self.resolved_args, self.resolved_kwargs = dependency_manager.resolve_dependencies(self.task_target, *self.task_args, **self.task_kwargs)
|
70
73
|
|
71
|
-
|
72
74
|
def execute__task_target__sync(self):
|
73
75
|
try:
|
74
76
|
with Stdout() as stdout:
|
osbot_utils/utils/Objects.py
CHANGED
@@ -4,6 +4,7 @@ import pickle
|
|
4
4
|
import sys
|
5
5
|
import types
|
6
6
|
import typing
|
7
|
+
from collections.abc import Mapping
|
7
8
|
|
8
9
|
from typing import Union
|
9
10
|
from types import SimpleNamespace
|
@@ -124,7 +125,7 @@ def dict_remove(data, target):
|
|
124
125
|
|
125
126
|
def dict_to_obj(target, class_name="_"):
|
126
127
|
DynamicClass = type(class_name, (SimpleNamespace,), {})
|
127
|
-
if isinstance(target,
|
128
|
+
if isinstance(target, Mapping):
|
128
129
|
new_dict = {}
|
129
130
|
for key, value in target.items():
|
130
131
|
new_dict[key] = dict_to_obj(value, class_name=class_name) # Recursively convert elements in the dict
|
osbot_utils/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
v1.
|
1
|
+
v1.58.0
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: osbot_utils
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.58.0
|
4
4
|
Summary: OWASP Security Bot - Utils
|
5
5
|
Home-page: https://github.com/owasp-sbot/OSBot-Utils
|
6
6
|
License: MIT
|
@@ -22,7 +22,7 @@ Description-Content-Type: text/markdown
|
|
22
22
|
|
23
23
|
Powerful Python util methods and classes that simplify common apis and tasks.
|
24
24
|
|
25
|
-

|
26
26
|
[](https://codecov.io/gh/owasp-sbot/OSBot-Utils)
|
27
27
|
|
28
28
|
|
@@ -154,9 +154,9 @@ osbot_utils/helpers/cache_requests/Cache__Requests__Row.py,sha256=h-yc7NkpScbHww
|
|
154
154
|
osbot_utils/helpers/cache_requests/Cache__Requests__Table.py,sha256=RgxAYhm-FIrXXteQRtD91pOLq8JXhSzxb51Jb6MTUdY,391
|
155
155
|
osbot_utils/helpers/cache_requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
156
156
|
osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py,sha256=xgx_oExxkcvRwQN1UCobimECIMUKGoIX5oGdCmp8Nyw,243
|
157
|
-
osbot_utils/helpers/flows/Flow.py,sha256=
|
157
|
+
osbot_utils/helpers/flows/Flow.py,sha256=m5j9OxR_xDgMh2z9u2FVQN_cQTQV_juJjbbNiNS8BuI,9645
|
158
158
|
osbot_utils/helpers/flows/Flow__Events.py,sha256=u9GzVNd08Hr49ZRIpoRDhwJnAHUFB-XzFzmNw-r3_Q0,2535
|
159
|
-
osbot_utils/helpers/flows/Task.py,sha256=
|
159
|
+
osbot_utils/helpers/flows/Task.py,sha256=ifPm0aqUG4sWAUTaYwT7ig-7Y9JmG9YTiNyC3dOX5sw,4887
|
160
160
|
osbot_utils/helpers/flows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
161
161
|
osbot_utils/helpers/flows/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
162
162
|
osbot_utils/helpers/flows/decorators/flow.py,sha256=LUL7bHjZ_lC3QoTNh-KsDZHzjE2u4mU-5EpZnfsEGuc,738
|
@@ -290,7 +290,7 @@ osbot_utils/utils/Json.py,sha256=7COxBlZRnpxtpNqpmzMPYkcKTnCok-s686nT27oiKEQ,648
|
|
290
290
|
osbot_utils/utils/Json_Cache.py,sha256=mLPkkDZN-3ZVJiDvV1KBJXILtKkTZ4OepzOsDoBPhWg,2006
|
291
291
|
osbot_utils/utils/Lists.py,sha256=tPz5x5s3sRO97WZ_nsxREBPC5cwaHrhgaYBhsrffTT8,5599
|
292
292
|
osbot_utils/utils/Misc.py,sha256=nODZT6p44B4xYiIiqfEeKYEErQiKR9SGthhGtZWGhkI,16804
|
293
|
-
osbot_utils/utils/Objects.py,sha256=
|
293
|
+
osbot_utils/utils/Objects.py,sha256=60OFmwQZgqyfmOGS_WtD59-b0lB7rGhqWoh0tgkBKOc,17367
|
294
294
|
osbot_utils/utils/Png.py,sha256=V1juGp6wkpPigMJ8HcxrPDIP4bSwu51oNkLI8YqP76Y,1172
|
295
295
|
osbot_utils/utils/Process.py,sha256=lr3CTiEkN3EiBx3ZmzYmTKlQoPdkgZBRjPulMxG-zdo,2357
|
296
296
|
osbot_utils/utils/Python_Logger.py,sha256=tx8N6wRKL3RDHboDRKZn8SirSJdSAE9cACyJkxrThZ8,12792
|
@@ -302,8 +302,8 @@ osbot_utils/utils/Toml.py,sha256=SD6IA4-mrtoBXcI0dIGKV9POMQNd6WYKvmDQq7GQ6ZQ,143
|
|
302
302
|
osbot_utils/utils/Version.py,sha256=Ww6ChwTxqp1QAcxOnztkTicShlcx6fbNsWX5xausHrg,422
|
303
303
|
osbot_utils/utils/Zip.py,sha256=G6Hk_hDcm9yvWzhTKzhT0R_6f0NBIAchHqMxGb3kfh4,14037
|
304
304
|
osbot_utils/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
305
|
-
osbot_utils/version,sha256
|
306
|
-
osbot_utils-1.
|
307
|
-
osbot_utils-1.
|
308
|
-
osbot_utils-1.
|
309
|
-
osbot_utils-1.
|
305
|
+
osbot_utils/version,sha256=3zcuCY19oU6Xohxuk7cSp-mCBuuGU7OwYkdC8RVRMgw,8
|
306
|
+
osbot_utils-1.58.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
307
|
+
osbot_utils-1.58.0.dist-info/METADATA,sha256=jOtdSqjuFy3-p5D93fRccvYUYdAyQuM3irMTOpltDhw,1266
|
308
|
+
osbot_utils-1.58.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
309
|
+
osbot_utils-1.58.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|