osbot-utils 2.33.0__py3-none-any.whl → 2.35.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.
Files changed (64) hide show
  1. osbot_utils/helpers/Local_Cache.py +5 -7
  2. osbot_utils/helpers/Local_Caches.py +5 -5
  3. osbot_utils/helpers/llms/__init__.py +0 -0
  4. osbot_utils/helpers/llms/actions/LLM_Request__Execute.py +31 -0
  5. osbot_utils/helpers/llms/actions/Type_Safe__Schema_For__LLMs.py +213 -0
  6. osbot_utils/helpers/llms/actions/__init__.py +0 -0
  7. osbot_utils/helpers/llms/builders/LLM_Request__Builder.py +41 -0
  8. osbot_utils/helpers/llms/builders/LLM_Request__Builder__Open_AI.py +54 -0
  9. osbot_utils/helpers/llms/builders/LLM_Request__Factory.py +95 -0
  10. osbot_utils/helpers/llms/builders/__init__.py +0 -0
  11. osbot_utils/helpers/llms/cache/LLM_Cache__Path_Generator.py +83 -0
  12. osbot_utils/helpers/llms/cache/LLM_Request__Cache.py +112 -0
  13. osbot_utils/helpers/llms/cache/LLM_Request__Cache__File_System.py +237 -0
  14. osbot_utils/helpers/llms/cache/LLM_Request__Cache__Storage.py +85 -0
  15. osbot_utils/helpers/llms/cache/Virtual_Storage__Local__Folder.py +64 -0
  16. osbot_utils/helpers/llms/cache/Virtual_Storage__Sqlite.py +72 -0
  17. osbot_utils/helpers/llms/cache/__init__.py +0 -0
  18. osbot_utils/helpers/llms/platforms/__init__.py +0 -0
  19. osbot_utils/helpers/llms/platforms/open_ai/API__LLM__Open_AI.py +55 -0
  20. osbot_utils/helpers/llms/platforms/open_ai/__init__.py +0 -0
  21. osbot_utils/helpers/llms/schemas/Schema__LLM_Cache__Index.py +9 -0
  22. osbot_utils/helpers/llms/schemas/Schema__LLM_Request.py +7 -0
  23. osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Data.py +14 -0
  24. osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Function_Call.py +8 -0
  25. osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Content.py +6 -0
  26. osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Role.py +9 -0
  27. osbot_utils/helpers/llms/schemas/Schema__LLM_Response.py +9 -0
  28. osbot_utils/helpers/llms/schemas/Schema__LLM_Response__Cache.py +13 -0
  29. osbot_utils/helpers/llms/schemas/__init__.py +0 -0
  30. osbot_utils/helpers/safe_str/Safe_Str.py +50 -0
  31. osbot_utils/helpers/safe_str/Safe_Str__File__Name.py +8 -0
  32. osbot_utils/helpers/safe_str/Safe_Str__File__Path.py +12 -0
  33. osbot_utils/helpers/safe_str/Safe_Str__Hash.py +14 -0
  34. osbot_utils/helpers/safe_str/Safe_Str__Text.py +9 -0
  35. osbot_utils/helpers/safe_str/Safe_Str__Text__Dangerous.py +9 -0
  36. osbot_utils/helpers/safe_str/__init__.py +0 -0
  37. osbot_utils/helpers/sqlite/Sqlite__Cursor.py +4 -6
  38. osbot_utils/helpers/sqlite/Sqlite__Database.py +1 -1
  39. osbot_utils/helpers/sqlite/Sqlite__Field.py +3 -8
  40. osbot_utils/helpers/sqlite/Sqlite__Table.py +1 -3
  41. osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py +6 -2
  42. osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py +2 -2
  43. osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py +5 -5
  44. osbot_utils/helpers/ssh/SSH__Execute.py +0 -1
  45. osbot_utils/helpers/ssh/SSH__Health_Check.py +4 -5
  46. osbot_utils/testing/performance/Performance_Measure__Session.py +1 -1
  47. osbot_utils/type_safe/Type_Safe__Base.py +38 -3
  48. osbot_utils/type_safe/Type_Safe__Dict.py +2 -8
  49. osbot_utils/type_safe/Type_Safe__List.py +8 -4
  50. osbot_utils/type_safe/Type_Safe__Method.py +46 -5
  51. osbot_utils/type_safe/Type_Safe__Tuple.py +1 -1
  52. osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py +3 -2
  53. osbot_utils/type_safe/shared/Type_Safe__Validation.py +6 -4
  54. osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py +0 -2
  55. osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py +16 -0
  56. osbot_utils/type_safe/steps/Type_Safe__Step__Init.py +57 -1
  57. osbot_utils/utils/Files.py +8 -8
  58. osbot_utils/utils/Objects.py +0 -1
  59. osbot_utils/version +1 -1
  60. {osbot_utils-2.33.0.dist-info → osbot_utils-2.35.0.dist-info}/METADATA +2 -2
  61. {osbot_utils-2.33.0.dist-info → osbot_utils-2.35.0.dist-info}/RECORD +63 -30
  62. osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py +0 -11
  63. {osbot_utils-2.33.0.dist-info → osbot_utils-2.35.0.dist-info}/LICENSE +0 -0
  64. {osbot_utils-2.33.0.dist-info → osbot_utils-2.35.0.dist-info}/WHEEL +0 -0
@@ -3,6 +3,7 @@ import types
3
3
  from decimal import Decimal
4
4
  from enum import EnumMeta
5
5
  from osbot_utils.helpers.Obj_Id import Obj_Id
6
+ from osbot_utils.helpers.safe_str.Safe_Str__Hash import Safe_Str__Hash
6
7
  from osbot_utils.type_safe.Type_Safe import Type_Safe
7
8
  from osbot_utils.type_safe.Type_Safe__List import Type_Safe__List
8
9
  from osbot_utils.helpers.Random_Guid import Random_Guid
@@ -93,6 +94,7 @@ class Type_Safe__Step__From_Json:
93
94
  value = enum_from_value(enum_type, value) # Try to resolve the value into the enum
94
95
 
95
96
  # todo: refactor these special cases into a separate method to class
97
+ # in fact find a better way to handle these classes that need to be converted
96
98
  elif type_safe_annotations.obj_is_attribute_annotation_of_type(_self, key, Decimal): # handle Decimals
97
99
  value = Decimal(value)
98
100
  elif type_safe_annotations.obj_is_attribute_annotation_of_type(_self, key, Safe_Id): # handle Safe_Id
@@ -105,6 +107,12 @@ class Type_Safe__Step__From_Json:
105
107
  value = Timestamp_Now(value)
106
108
  elif type_safe_annotations.obj_is_attribute_annotation_of_type(_self, key, Obj_Id ): # handle Obj_Id
107
109
  value = Obj_Id(value)
110
+ elif type_safe_annotations.obj_is_attribute_annotation_of_type(_self, key, Safe_Str__Hash ): # handle Obj_Id
111
+ value = Safe_Str__Hash(value)
112
+ # else:
113
+ # from osbot_utils.utils.Dev import pprint
114
+ # pprint(value)
115
+
108
116
 
109
117
  setattr(_self, key, value) # Direct assignment for primitive types and other structures
110
118
 
@@ -119,6 +127,14 @@ class Type_Safe__Step__From_Json:
119
127
  else:
120
128
  module = __import__(module_name, fromlist=[type_name])
121
129
  value = getattr(module, type_name)
130
+ if isinstance(value, type) is False:
131
+ raise ValueError(f"Security alert, in deserialize_type__using_value only classes are allowed")
132
+
133
+ # todo: figure out a way to do this
134
+ # supported_types = (Type_Safe, str, int, type, dict)
135
+ # if issubclass(value, supported_types) is False:
136
+ # raise ValueError(f"Security alert, in deserialize_type__using_value only class of {supported_types} are allowed and it was {value}")
137
+
122
138
  except (ValueError, ImportError, AttributeError) as e:
123
139
  raise ValueError(f"Could not reconstruct type from '{value}': {str(e)}")
124
140
  return value
@@ -1,9 +1,14 @@
1
+ from enum import EnumMeta
2
+ from osbot_utils.type_safe.shared.Type_Safe__Annotations import type_safe_annotations
3
+ from osbot_utils.type_safe.steps.Type_Safe__Step__Default_Value import type_safe_step_default_value, get_args
4
+
5
+
1
6
  class Type_Safe__Step__Init:
2
7
 
3
8
  def init(self, __self ,
4
9
  __class_kwargs ,
5
10
  **kwargs
6
- ) -> None:
11
+ ) -> None:
7
12
 
8
13
  for (key, value) in __class_kwargs.items(): # assign all default values to target
9
14
  if hasattr(__self, key):
@@ -16,9 +21,60 @@ class Type_Safe__Step__Init:
16
21
  for (key, value) in kwargs.items(): # overwrite with values provided in ctor
17
22
  if hasattr(__self, key):
18
23
  if value is not None: # prevent None values from overwriting existing values, which is quite common in default constructors
24
+ value = self.convert_value_to_type_safe_objects(__self, key, value)
19
25
  setattr(__self, key, value)
20
26
  else:
21
27
  raise ValueError(f"{__self.__class__.__name__} has no attribute '{key}' and cannot be assigned the value '{value}'. "
22
28
  f"Use {__self.__class__.__name__}.__default_kwargs__() see what attributes are available")
23
29
 
30
+ def convert_value_to_type_safe_objects(self, __self, key, value):
31
+ annotation = type_safe_annotations.obj_attribute_annotation(__self, key)
32
+ if annotation:
33
+ if isinstance(annotation, EnumMeta) and type(value) is str:
34
+ value = annotation[value]
35
+ else:
36
+
37
+ origin = type_safe_annotations.get_origin(annotation)
38
+ # If the value is an empty container, create proper type-safe container
39
+ if ((isinstance(value, list ) and len(value) == 0) or
40
+ (isinstance(value, dict ) and len(value) == 0) or
41
+ (isinstance(value, set ) and len(value) == 0) or
42
+ (isinstance(value, tuple) and len(value) == 0)):
43
+ value = type_safe_step_default_value.default_value(__self.__class__, annotation) # Use default_value to create the proper type-safe container
44
+ # Handle non-empty list
45
+ elif origin is list and isinstance(value, list):
46
+ from osbot_utils.type_safe.Type_Safe__List import Type_Safe__List
47
+ item_type = get_args(annotation)[0]
48
+ type_safe_list = Type_Safe__List(expected_type=item_type)
49
+ for item in value:
50
+ type_safe_list.append(item)
51
+ return type_safe_list
52
+
53
+ # Handle non-empty set
54
+ elif origin is set and isinstance(value, set):
55
+ from osbot_utils.type_safe.Type_Safe__Set import Type_Safe__Set
56
+ item_type = get_args(annotation)[0]
57
+ type_safe_set = Type_Safe__Set(expected_type=item_type)
58
+ for item in value:
59
+ type_safe_set.add(item)
60
+ return type_safe_set
61
+
62
+ # Handle non-empty tuple
63
+ elif origin is tuple and isinstance(value, tuple):
64
+ from osbot_utils.type_safe.Type_Safe__Tuple import Type_Safe__Tuple
65
+ item_types = get_args(annotation)
66
+ return Type_Safe__Tuple(expected_types=item_types, items=value)
67
+
68
+ # Handle non-empty dict
69
+ elif origin is dict and isinstance(value, dict):
70
+ from osbot_utils.type_safe.Type_Safe__Dict import Type_Safe__Dict
71
+ key_type, value_type = get_args(annotation)
72
+ type_safe_dict = Type_Safe__Dict(expected_key_type=key_type, expected_value_type=value_type)
73
+ for k, v in value.items():
74
+ type_safe_dict[k] = v
75
+ return type_safe_dict
76
+
77
+
78
+ return value
79
+
24
80
  type_safe_step_init = Type_Safe__Step__Init()
@@ -1,5 +1,5 @@
1
1
  import os
2
- from typing import Union
2
+ from typing import Union
3
3
 
4
4
  class Files:
5
5
  @staticmethod
@@ -18,7 +18,7 @@ class Files:
18
18
  @staticmethod
19
19
  def contains(path, content):
20
20
  text = Files.contents(path)
21
- if type(content) is list:
21
+ if isinstance(content, list):
22
22
  for item in content:
23
23
  if item not in text:
24
24
  return False
@@ -183,7 +183,7 @@ class Files:
183
183
  import shutil
184
184
 
185
185
  if ignore_pattern:
186
- if type(ignore_pattern) is str:
186
+ if isinstance(ignore_pattern, str):
187
187
  ignore_pattern = [ignore_pattern]
188
188
  ignore = shutil.ignore_patterns(*ignore_pattern) # for example ignore_pattern = ['*.pyc','.DS_Store']
189
189
  else:
@@ -274,7 +274,7 @@ class Files:
274
274
 
275
275
  if isinstance(target, Path):
276
276
  return target.is_file()
277
- if type(target) is str:
277
+ if isinstance(target, str):
278
278
  if len(target) < 4096: # max file size in Linux (handle the cases when the file contents was used as target)
279
279
  return os.path.isfile(target)
280
280
  return False
@@ -285,7 +285,7 @@ class Files:
285
285
 
286
286
  if isinstance(target, Path):
287
287
  return target.is_dir()
288
- if type(target) is str:
288
+ if isinstance(target, str):
289
289
  return os.path.isdir(target)
290
290
  return False
291
291
 
@@ -391,9 +391,9 @@ class Files:
391
391
 
392
392
  @staticmethod
393
393
  def sub_folders(target):
394
- if type(target) is list:
394
+ if isinstance(target, list):
395
395
  return Files.folders_sub_folders(target)
396
- if type(target) is str:
396
+ if isinstance(target, str):
397
397
  return Files.folder_sub_folders(target)
398
398
  return []
399
399
 
@@ -471,7 +471,7 @@ class Files:
471
471
 
472
472
  path = path or temp_file(extension='.gz')
473
473
  contents = contents or ''
474
- if type(contents) is str:
474
+ if isinstance(contents, str):
475
475
  contents = contents.encode()
476
476
  with gzip.open(path, "w") as file:
477
477
  file.write(contents)
@@ -1,5 +1,4 @@
1
1
  # todo add tests
2
- import sys
3
2
  from types import SimpleNamespace
4
3
 
5
4
  class __(SimpleNamespace):
osbot_utils/version CHANGED
@@ -1 +1 @@
1
- v2.33.0
1
+ v2.35.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: osbot_utils
3
- Version: 2.33.0
3
+ Version: 2.35.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.33.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.35.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
 
@@ -36,8 +36,8 @@ osbot_utils/helpers/Dependency_Manager.py,sha256=79YRYnVfchewq8iSMJ5dzwW2D5u8chW
36
36
  osbot_utils/helpers/Dict_To_Attr.py,sha256=NdhXl5mJH7-NaBk213amzc5Nfy3tJgW-N_uYIRE4hoc,208
37
37
  osbot_utils/helpers/Guid.py,sha256=0Ay3TYYk2nPr-JRVRCMFxbr8OvoQomv5HjT7o5B7cos,827
38
38
  osbot_utils/helpers/Hashicorp_Secrets.py,sha256=e2fWWHK6bubpAm1sw5y8X5kh2Hk5d4JyZCnUovZip5A,4232
39
- osbot_utils/helpers/Local_Cache.py,sha256=0JZZX3fFImcwtbBvxAQl-EbBegSNJRhRMYF6ovTH6zY,3141
40
- osbot_utils/helpers/Local_Caches.py,sha256=aQmi1HSM0TH6WQPedG2fbz4KCCJ3DQTU9d18rB1jR0M,1885
39
+ osbot_utils/helpers/Local_Cache.py,sha256=67qmeVXUBhfqLUQhjFBE9Pjt5dcjpQYhqCTGQNWgVSU,3232
40
+ osbot_utils/helpers/Local_Caches.py,sha256=LUeNJX07Ccnp1SIhYvhqqQFVF6r_Ez7bWha8ssomuvY,1957
41
41
  osbot_utils/helpers/Obj_Id.py,sha256=sdKlSmEUpie0kn9X4pnM0MjUr6sLu4WZLSNqsD8ynBg,926
42
42
  osbot_utils/helpers/Print_Table.py,sha256=LEXbyqGg_6WSraI4cob4bNNSu18ddqvALp1zGK7bPhs,19126
43
43
  osbot_utils/helpers/Python_Audit.py,sha256=shpZlluJwqJBAlad6xN01FkgC1TsQ48RLvR5ZjmrKa4,1539
@@ -133,7 +133,6 @@ osbot_utils/helpers/cache_requests/Cache__Requests__Invoke.py,sha256=q50s2Y6sGh3
133
133
  osbot_utils/helpers/cache_requests/Cache__Requests__Row.py,sha256=Sb7E_zDB-LPlWI8TiPRF99BmX_RYA3cheyCCf3c3Dfo,3179
134
134
  osbot_utils/helpers/cache_requests/Cache__Requests__Table.py,sha256=BW7tXM0TFYma3Db4M-58IKpx0vevLuFsH7QQeiggPaI,388
135
135
  osbot_utils/helpers/cache_requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
- osbot_utils/helpers/cache_requests/flows/flow__Cache__Requests.py,sha256=xgx_oExxkcvRwQN1UCobimECIMUKGoIX5oGdCmp8Nyw,243
137
136
  osbot_utils/helpers/duration/Duration.py,sha256=KvHaAB6NWa40DXQl2gC9m98gM-arVP-aYqFrmAyQQzM,2306
138
137
  osbot_utils/helpers/duration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
138
  osbot_utils/helpers/duration/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -190,6 +189,33 @@ osbot_utils/helpers/html/Tag__Html.py,sha256=W_QFUF27vpR109g9rpca0zoQis1wkMjGuAt
190
189
  osbot_utils/helpers/html/Tag__Link.py,sha256=rQ-gZN8EkSv5x1S-smdjvFflwMQHACHQXiOdx0MFke8,437
191
190
  osbot_utils/helpers/html/Tag__Style.py,sha256=LPPlIN7GyMvfCUlbs2eXVMUr9jS0PX5M94A5Ig_jXIs,846
192
191
  osbot_utils/helpers/html/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
+ osbot_utils/helpers/llms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
+ osbot_utils/helpers/llms/actions/LLM_Request__Execute.py,sha256=JljneiEJ1ETlCBaH4cmd-bwIlIq_kFi2n2TD1bVGugU,1821
194
+ osbot_utils/helpers/llms/actions/Type_Safe__Schema_For__LLMs.py,sha256=em9RoSZqSSo6BQBZvEKH8Qv8f8f8oubNpy0LIDsak-E,12024
195
+ osbot_utils/helpers/llms/actions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
+ osbot_utils/helpers/llms/builders/LLM_Request__Builder.py,sha256=FrrDTqivHXMaDifi8xDRvAbUju6a8CHnd1VleoQhp2Q,2601
197
+ osbot_utils/helpers/llms/builders/LLM_Request__Builder__Open_AI.py,sha256=7CUnNyGqyiD0-jX0pESQJichjx_0ttMmhO7OmqZWHl4,2918
198
+ osbot_utils/helpers/llms/builders/LLM_Request__Factory.py,sha256=M-c_odsTjTfWo45LzL8Zkr9gd0LLl2brcwMKoeZNOnc,6292
199
+ osbot_utils/helpers/llms/builders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
+ osbot_utils/helpers/llms/cache/LLM_Cache__Path_Generator.py,sha256=7kDY-aaUWR4Da6lj5RPwjqTLUTGrOUYhbNfOPM30e40,4442
201
+ osbot_utils/helpers/llms/cache/LLM_Request__Cache.py,sha256=8Ayz26bteYhc4GNLpItNYlTwF4_yKvhFridDVA61fPo,6783
202
+ osbot_utils/helpers/llms/cache/LLM_Request__Cache__File_System.py,sha256=m4guw6yoo8Q05PQea6SJnET5xpJMwmmXhdN-kaRvX5s,15306
203
+ osbot_utils/helpers/llms/cache/LLM_Request__Cache__Storage.py,sha256=0ok7z2kGiK3edlgD0hwD5z2hYFZ91Viar1JgD7SNoxg,5434
204
+ osbot_utils/helpers/llms/cache/Virtual_Storage__Local__Folder.py,sha256=xNM2xy0-2ROvhEFXa_jwqth7eApIcRTqcRUDxo0THXI,3214
205
+ osbot_utils/helpers/llms/cache/Virtual_Storage__Sqlite.py,sha256=j8EWuKFVMtDBxrCEi8yNdpzwvTxO6Bri2Bi4-KwO-3s,4638
206
+ osbot_utils/helpers/llms/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
207
+ osbot_utils/helpers/llms/platforms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
+ osbot_utils/helpers/llms/platforms/open_ai/API__LLM__Open_AI.py,sha256=Yyy2ZnIS6CfxXepP9pZNsOYx02d-5EnK1IFeFf8myyk,2148
209
+ osbot_utils/helpers/llms/platforms/open_ai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
+ osbot_utils/helpers/llms/schemas/Schema__LLM_Cache__Index.py,sha256=12dUUSFhWRZvqEkNivqajqMPApPWhfSI7jWnHyBuxNw,717
211
+ osbot_utils/helpers/llms/schemas/Schema__LLM_Request.py,sha256=7IXCf9AflRlUeFjDSqRR9CiBWlaAa1FgMzrS292e9Po,376
212
+ osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Data.py,sha256=1D9zoDHbICpaxpAq4VTlYOF0-4Jys8Ohi5CrxTlEXQI,1260
213
+ osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Function_Call.py,sha256=VJgWi4aK-DJmuJvfY2qZUZuLkrLlmu5lgyzxZrrp3hM,440
214
+ osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Content.py,sha256=nl-16yz4G_72ViACKE9CvGStrKxw2Gm_JcaU8wVcJXI,521
215
+ osbot_utils/helpers/llms/schemas/Schema__LLM_Request__Message__Role.py,sha256=T99w0cRrDPXQqPT-Nw7_14tMr4vKpUlhw74UJZL6w6w,168
216
+ osbot_utils/helpers/llms/schemas/Schema__LLM_Response.py,sha256=R62zjoUqu9sbtbFcOX7vG1t0vTaAhS_3Z9CkxESrTjI,298
217
+ osbot_utils/helpers/llms/schemas/Schema__LLM_Response__Cache.py,sha256=ZlD3DeKeS-29n9qiMVrsnj0M4lkZWknnP-Wn8wanu6E,786
218
+ osbot_utils/helpers/llms/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
219
  osbot_utils/helpers/pubsub/Event__Queue.py,sha256=bCtIdVlAuG-jvFEnz14oNhgRScEUrd8v9BqLcZleGks,5038
194
220
  osbot_utils/helpers/pubsub/PubSub__Client.py,sha256=6K3l4H-Tc0DhktrxpYzLVur1uZ532pQsHWprLNRXFJE,2316
195
221
  osbot_utils/helpers/pubsub/PubSub__Room.py,sha256=3drJIAVSAzXB_0Q9dXxwhYWxNaEUaMiWiXLY9Mh02DM,481
@@ -207,12 +233,19 @@ osbot_utils/helpers/pubsub/schemas/Schema__PubSub__Client.py,sha256=yOQSn4o1bIsE
207
233
  osbot_utils/helpers/pubsub/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
234
  osbot_utils/helpers/python_compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
235
  osbot_utils/helpers/python_compatibility/python_3_8.py,sha256=kh846vs3ir8xD0RSARJBOL0xufnt3L_Td3K45lDfqng,161
236
+ osbot_utils/helpers/safe_str/Safe_Str.py,sha256=BKyS0hTRvP-f0uLFtT8KCE9rVQBzhWKNoSxlttEjrEE,3261
237
+ osbot_utils/helpers/safe_str/Safe_Str__File__Name.py,sha256=ncjkQ2hAhw0a3UulrCuQsA9ytrFwg5CT1XRJIGChMpY,289
238
+ osbot_utils/helpers/safe_str/Safe_Str__File__Path.py,sha256=K0yBcvH_Ncqiw7tMqjGqaNyWQh1Zs9qxZ-TR8nEIAow,550
239
+ osbot_utils/helpers/safe_str/Safe_Str__Hash.py,sha256=AE-CvX0_lYKpPfszisOanb_IYt366Mkf90UIwSZ9vxY,812
240
+ osbot_utils/helpers/safe_str/Safe_Str__Text.py,sha256=QxuWqF8hNYdOPDn3Yac86h_1ZaX-THbTBDakberiJcs,313
241
+ osbot_utils/helpers/safe_str/Safe_Str__Text__Dangerous.py,sha256=6-fkXBuWgjz70eQicD07f38eEuKqNzJzaFFY6hozhNQ,388
242
+ osbot_utils/helpers/safe_str/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
243
  osbot_utils/helpers/sqlite/Capture_Sqlite_Error.py,sha256=GSuRYgs1yKQjxMszPoaI7fsfMfuUqhb64AaIysRE6Cs,1747
211
- osbot_utils/helpers/sqlite/Sqlite__Cursor.py,sha256=k5G9Tkk3nx6nHoSanLmpuJG_TceAmN7uRBCt0bo6sIc,3364
212
- osbot_utils/helpers/sqlite/Sqlite__Database.py,sha256=Ts0qM3Nakot5o9wbFaaW3iq2pDl9USfXGS8GFUBD2wY,5613
213
- osbot_utils/helpers/sqlite/Sqlite__Field.py,sha256=oBWglAOKN0EWVtaRwiQFxmR1FQ61lQ35yKkWXjSiihs,2911
244
+ osbot_utils/helpers/sqlite/Sqlite__Cursor.py,sha256=4Im0pCOiERX6Nnf6iagRlSvTR3CPjyPVkdx4NMQV0P0,3342
245
+ osbot_utils/helpers/sqlite/Sqlite__Database.py,sha256=ORjRUD-xSvf89kDMQ70q7wBlbV5pdKtDerjE6gDN_fg,5616
246
+ osbot_utils/helpers/sqlite/Sqlite__Field.py,sha256=26Pn5Tz0z__PfOsv-pu901SvlWf9AkKbkapIh4ed918,2889
214
247
  osbot_utils/helpers/sqlite/Sqlite__Globals.py,sha256=aP6uIy_y4xzl2soTUCFIJRjsb8JyfxfL6qIEZKIWy_4,230
215
- osbot_utils/helpers/sqlite/Sqlite__Table.py,sha256=FsFSolFN2N5V8DfZPp4gZL9xmCXaOhmG38wQmgRrvp8,15145
248
+ osbot_utils/helpers/sqlite/Sqlite__Table.py,sha256=z6CfulnULHj64vmcvRe_YVXpwvwjblhEOUclRisLaic,15132
216
249
  osbot_utils/helpers/sqlite/Sqlite__Table__Create.py,sha256=Kkp0KbAF9mYOMz6LCmo10aa1n3rci0fFDlV7DPA-gxs,3932
217
250
  osbot_utils/helpers/sqlite/Temp_Sqlite__Database__Disk.py,sha256=-BhK0_3lSJPWDt-QS8IQDfrw2K_drjtn-yXyf9GbER4,520
218
251
  osbot_utils/helpers/sqlite/Temp_Sqlite__Table.py,sha256=Na2dOHlYSVUKK7STHwdzBYbQgvW2a6cEhUnlC0-T8wk,729
@@ -226,13 +259,13 @@ osbot_utils/helpers/sqlite/cache/Sqlite__DB__Requests.py,sha256=CWB-hTcgly2T_7HO
226
259
  osbot_utils/helpers/sqlite/cache/TestCase__Sqlite__Cache__Requests.py,sha256=TLUdQC6vsf5BcDP15CCeoYkipVG30bzqFcqEJpH4dWg,1645
227
260
  osbot_utils/helpers/sqlite/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
228
261
  osbot_utils/helpers/sqlite/domains/Sqlite__DB.py,sha256=xyXnt4-GLYqMEPBZrNPI0dZnkl61KwLEIuYjebO20Jc,1210
229
- osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py,sha256=ueXi6_gzbbpJcr-OuApoVbBch8_lDviDhu_AXXh8lvU,1735
262
+ osbot_utils/helpers/sqlite/domains/Sqlite__DB__Files.py,sha256=FmxyR3YU9-nJXW_tKFgETZt2PXAmfobxe5OveLPBokQ,1961
230
263
  osbot_utils/helpers/sqlite/domains/Sqlite__DB__Graph.py,sha256=aGykK4Qll5Rn0xJR4RvF5bN6llNEjx-Vst52XTVSNio,1751
231
264
  osbot_utils/helpers/sqlite/domains/Sqlite__DB__Json.py,sha256=ILx1wOsmwmvV2yb_fMzLzo18uGNub8cxhBrRfYxCCqA,3808
232
265
  osbot_utils/helpers/sqlite/domains/Sqlite__DB__Local.py,sha256=liN_0gyXmQyqnsmiz0RYanSCRI0VoIbwSBf4buM0l-w,1093
233
266
  osbot_utils/helpers/sqlite/domains/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
234
267
  osbot_utils/helpers/sqlite/domains/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
235
- osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py,sha256=4xsnRLrU13ZT1GisVQZYFn3m7sw6DbY6pg3cg3Ug2cI,1114
268
+ osbot_utils/helpers/sqlite/models/Sqlite__Field__Type.py,sha256=QFCfjCRHzsVC3j_homVf5CUCslIcIpDoa-fXZF0RVS0,1175
236
269
  osbot_utils/helpers/sqlite/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
237
270
  osbot_utils/helpers/sqlite/sample_data/Sqlite__Sample_Data__Chinook.py,sha256=ouymaJaaWLP6ZVWOj-OmkeSyDQQadsPQT0B_S9fodD4,5190
238
271
  osbot_utils/helpers/sqlite/sample_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -241,14 +274,14 @@ osbot_utils/helpers/sqlite/sql_builder/SQL_Builder__Select.py,sha256=_5fszoWTknE
241
274
  osbot_utils/helpers/sqlite/sql_builder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
242
275
  osbot_utils/helpers/sqlite/tables/Sqlite__Table__Config.py,sha256=M-h6fYQgmX7Yaq3cSmpePutajLVeVy_IDUrDk97EH6U,2061
243
276
  osbot_utils/helpers/sqlite/tables/Sqlite__Table__Edges.py,sha256=YwlWj9GYBDeotqDFdjMOb6MyuHhPZKasndAtuHiLrkQ,1635
244
- osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py,sha256=4YguiuqzcfTadPWV67lN4IU_8xJzJF--ZRMqbEyzXqw,3800
277
+ osbot_utils/helpers/sqlite/tables/Sqlite__Table__Files.py,sha256=jYa4B9Z7bmZoR5uLoXXNMC6YD49LLKXfsp6P3S61r04,4000
245
278
  osbot_utils/helpers/sqlite/tables/Sqlite__Table__Nodes.py,sha256=GT8h3wD4hGvEtqQuBs0sBbcu2ydktRHTi95PEL2ffHQ,1721
246
279
  osbot_utils/helpers/sqlite/tables/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
247
280
  osbot_utils/helpers/ssh/SCP.py,sha256=pMrb0S3xTFNrJsGLlTe6OnvAWVXiXgVv3Q5VWs_J52I,3396
248
281
  osbot_utils/helpers/ssh/SSH.py,sha256=KPmIewh-ucGqubrwZoZILhX60MCV9UEw8do8JKrZ91s,1542
249
282
  osbot_utils/helpers/ssh/SSH__Cache__Requests.py,sha256=Dqh4biVcuaXbQVvn3Tx-kSGBGHiF-2wVsgu96EhD6gU,3359
250
- osbot_utils/helpers/ssh/SSH__Execute.py,sha256=Z0W-cgVxwwSwVTBCrycRe6kyTPz19AgpcWmPVxbAO_w,7090
251
- osbot_utils/helpers/ssh/SSH__Health_Check.py,sha256=WDmBD6ejNcBeicXfjpsiNzH-WR3Jejx0re3WfwjSWyQ,2083
283
+ osbot_utils/helpers/ssh/SSH__Execute.py,sha256=i-AnZBerOAz9aF0n6224_wP4_6GrdQM5i4r_TMgtiA4,7012
284
+ osbot_utils/helpers/ssh/SSH__Health_Check.py,sha256=j5pfmR2512wHhduhiJPsERW3tV4IgU6iw4Unfl6XFw8,2126
252
285
  osbot_utils/helpers/ssh/SSH__Linux.py,sha256=O1uyKcklaj2tHqQZln7dVinzjl9-EI52KzP8ojQr244,4330
253
286
  osbot_utils/helpers/ssh/SSH__Linux__Amazon.py,sha256=ZJFb7LFTvclAuhH5OoOtJ361NoX9ecHTaFX-iSmnzmk,596
254
287
  osbot_utils/helpers/ssh/SSH__Python.py,sha256=MoihfGU1qhl4tdM4s0AifjRVQP75gEuJk-OYSC3F_XI,2063
@@ -299,18 +332,18 @@ osbot_utils/testing/Temp_Zip_In_Memory.py,sha256=ibDIWt3K4CX558PbkLbX3InHyWYZcwQ
299
332
  osbot_utils/testing/Unit_Test.py,sha256=MReR_wDGbbXFDPz7cmuGflcTxRB6TBnO9mYqRpSq8Pk,1304
300
333
  osbot_utils/testing/Unzip_File.py,sha256=V5H97XO9rlvG5EYOSzAH4kTtAH1ohZ8R8ImvJh46ZNg,1177
301
334
  osbot_utils/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
302
- osbot_utils/testing/performance/Performance_Measure__Session.py,sha256=_Nq9oVilWaFn-tjvakCw7ojYVzRas9XmQY66DJT1clk,9108
335
+ osbot_utils/testing/performance/Performance_Measure__Session.py,sha256=CWce0vJAZH_PDbIgK5bNcNFr1qsB37FQJKd05K-63kk,9108
303
336
  osbot_utils/testing/performance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
304
337
  osbot_utils/testing/performance/models/Model__Performance_Measure__Measurement.py,sha256=xT_uKzbSYo9AGiJgNmCHSt3ApneNNyKh8vsMVN6IJQ0,1127
305
338
  osbot_utils/testing/performance/models/Model__Performance_Measure__Result.py,sha256=k9HJYNLmW6sjRVsfpduSxHFiVANc1zmYtO_Oz9azpW8,755
306
339
  osbot_utils/testing/performance/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
307
340
  osbot_utils/type_safe/Type_Safe.py,sha256=LOWRGOGpnRU2iTRLP47vUoyalK0vjFrWlnaghBIogWg,6267
308
- osbot_utils/type_safe/Type_Safe__Base.py,sha256=Bzrh8TxFglB0FEUAQTlgovlnFHnBN4lOX1Vu327r1Vc,5223
309
- osbot_utils/type_safe/Type_Safe__Dict.py,sha256=yEswrqWcYoL97eeeSXRAdIqsz9MjLdC1F6nnuq7JS3s,2700
310
- osbot_utils/type_safe/Type_Safe__List.py,sha256=SzSIBkwSOAEpW_V2qh4-f0YHzmgB0T8PczBLbDgZGvg,1340
311
- osbot_utils/type_safe/Type_Safe__Method.py,sha256=LOG2sqQyKBNNEiJxk_jngH6IWvpyVueouAzNTlj-_pY,12676
341
+ osbot_utils/type_safe/Type_Safe__Base.py,sha256=9VfmZzY7aE5rNES7F38YYB7U4BqcUqXET1tABuZDsCk,7634
342
+ osbot_utils/type_safe/Type_Safe__Dict.py,sha256=9TExQtFHQNLdw_ASfQ49i1YhC7fSyCiGdVkK8n-hGlc,2407
343
+ osbot_utils/type_safe/Type_Safe__List.py,sha256=6PIo52QUBu83KhPlvlVOT8tpPpQQkDUGswKKhOxoymg,1707
344
+ osbot_utils/type_safe/Type_Safe__Method.py,sha256=PRV4enbwuD81QKP_5UtUA3OAp0m0xSiUhwkCoseZoq4,15687
312
345
  osbot_utils/type_safe/Type_Safe__Set.py,sha256=j12fc8cbd9-s_a13ysaz723rNEW4Dt6hObCd0S-AjIg,1432
313
- osbot_utils/type_safe/Type_Safe__Tuple.py,sha256=A7CuAy_Hz1iUMSojumReOG-OwPQqEO7MSiCHL2sJRKU,1709
346
+ osbot_utils/type_safe/Type_Safe__Tuple.py,sha256=Kx7C4YfHybRbMmVMcmV6yFLi4T48pb592vEZfjjyLxo,1710
314
347
  osbot_utils/type_safe/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
315
348
  osbot_utils/type_safe/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
316
349
  osbot_utils/type_safe/decorators/type_safe.py,sha256=ERFfJuAIo5qLp03YEDu2zu5wxu65OhR7hOybwuTfLlc,1006
@@ -323,14 +356,14 @@ osbot_utils/type_safe/shared/Type_Safe__Json_Compressor.py,sha256=TDbot_NNzCPXBQ
323
356
  osbot_utils/type_safe/shared/Type_Safe__Json_Compressor__Type_Registry.py,sha256=wYOCg7F1nTrRn8HlnZvrs_8A8WL4gxRYRLnXZpGIiuk,1119
324
357
  osbot_utils/type_safe/shared/Type_Safe__Not_Cached.py,sha256=25FAl6SOLxdStco_rm9tgOYLfuKyBWheGdl7vVa56UU,800
325
358
  osbot_utils/type_safe/shared/Type_Safe__Raise_Exception.py,sha256=pbru8k8CTQMNUfmFBndiJhg2KkqEYzFvJAPcNZHeHfQ,829
326
- osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py,sha256=A2ztu-9EYjkzrW2NqCl7cdr2ivVl0n9nZXCZHWfl8W4,302
327
- osbot_utils/type_safe/shared/Type_Safe__Validation.py,sha256=1oamgApW2Pug0vvTqMLPxBLFvtcnp1bFnjSUByfJBrs,19192
359
+ osbot_utils/type_safe/shared/Type_Safe__Shared__Variables.py,sha256=TgF2MK__81YZaY19YWF4q1rE65BqU3HNmmN139OVcK0,409
360
+ osbot_utils/type_safe/shared/Type_Safe__Validation.py,sha256=s6yRSWY6zYKEQBwlDEGFwFRO9v8T7UOaz5fsz6ih0cw,19342
328
361
  osbot_utils/type_safe/shared/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
329
362
  osbot_utils/type_safe/steps/Type_Safe__Step__Class_Kwargs.py,sha256=snoyJKvZ1crgF2fp0zexwNPnV_E63RfyRIsMAZdrKNY,6995
330
363
  osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py,sha256=tzKXDUc0HVP5QvCWsmcPuuZodNvQZ9FeMDNI2x00Ngw,1943
331
- osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py,sha256=K_tkVQyLUbbWYzDnzoPLCgDBAFYyUjAG4VdLsvjzL1g,4485
332
- osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py,sha256=mf0HvluDy-TgNiQy-SCdZcG2v3MXP7GHhmsrgyq8WfM,13043
333
- osbot_utils/type_safe/steps/Type_Safe__Step__Init.py,sha256=v4FD7zxQiOFLiOF1Ma8wZMP8aLgRlXwJZnsIfBu2zeg,1266
364
+ osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py,sha256=b5vsgM8eg9yq2KM0wRMntVHma6OhN_HnU76LxhEIpoA,4483
365
+ osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py,sha256=y6iet08nQboMPZ1ymrPA61oaSVE3YB1EvPn8a8PiqOE,14133
366
+ osbot_utils/type_safe/steps/Type_Safe__Step__Init.py,sha256=Ds_u5BzLYDGLsoQkPXVTac8HkUF96p2x_HDpVmWlvho,4321
334
367
  osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py,sha256=VuKHH9QEYlbAL9R4zwQ5dwexx2sFY6wMx52QmF7eqcg,5219
335
368
  osbot_utils/type_safe/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
369
  osbot_utils/type_safe/validators/Type_Safe__Validator.py,sha256=cJIPSBarjV716SZUOLvz7Mthjk-aUYKUQtRDtKUBmN4,779
@@ -345,7 +378,7 @@ osbot_utils/utils/Csv.py,sha256=oHLVpjRJqrLMz9lubMCNEoThXWju5rNTprcwHc1zq2c,1012
345
378
  osbot_utils/utils/Dev.py,sha256=eaQ87ZcMRRcxgzA-f7OO8HjjWhbE6L_edwvXiwFZvIQ,1291
346
379
  osbot_utils/utils/Env.py,sha256=rBksAy6k-J5oAJp-S_JedVlcj1b2VK8V3zsQbacopMc,6076
347
380
  osbot_utils/utils/Exceptions.py,sha256=KyOUHkXQ_6jDTq04Xm261dbEZuRidtsM4dgzNwSG8-8,389
348
- osbot_utils/utils/Files.py,sha256=yxteAcyhDcUy1_r9Eihx80V16lV_UAE6cvoOe2Dc7DU,23001
381
+ osbot_utils/utils/Files.py,sha256=YwfXMeU1jfDzYvZJGy0bWHvvduTuTnftBNlAnpsXDzw,23013
349
382
  osbot_utils/utils/Functions.py,sha256=0E6alPJ0fJpBiJgFOWooCOi265wSRyxxXAJ5CELBnso,3498
350
383
  osbot_utils/utils/Http.py,sha256=ywjQlpKgklPnh7iLMGrbf4vbNMH50sUGX4crZHAfCQc,8201
351
384
  osbot_utils/utils/Int.py,sha256=PmlUdU4lSwf4gJdmTVdqclulkEp7KPCVUDO6AcISMF4,116
@@ -353,7 +386,7 @@ osbot_utils/utils/Json.py,sha256=TvfDoXwOkWzWH-9KMnme5C7iFsMZOleAeue92qmkH6g,883
353
386
  osbot_utils/utils/Json_Cache.py,sha256=mLPkkDZN-3ZVJiDvV1KBJXILtKkTZ4OepzOsDoBPhWg,2006
354
387
  osbot_utils/utils/Lists.py,sha256=tPz5x5s3sRO97WZ_nsxREBPC5cwaHrhgaYBhsrffTT8,5599
355
388
  osbot_utils/utils/Misc.py,sha256=H_xexJgiTxB3jDeDiW8efGQbO0Zuy8MM0iQ7qXC92JI,17363
356
- osbot_utils/utils/Objects.py,sha256=RqHzikmIDuqWUbnn7Lxd5ZkIa6smYJmRP6jM0Re5Awk,13471
389
+ osbot_utils/utils/Objects.py,sha256=kylrLHxWYcsYgA1tCoXYb-TpnuE2PRkhTj2iDleM5YQ,13460
357
390
  osbot_utils/utils/Png.py,sha256=V1juGp6wkpPigMJ8HcxrPDIP4bSwu51oNkLI8YqP76Y,1172
358
391
  osbot_utils/utils/Process.py,sha256=lr3CTiEkN3EiBx3ZmzYmTKlQoPdkgZBRjPulMxG-zdo,2357
359
392
  osbot_utils/utils/Python_Logger.py,sha256=M9Oi62LxfnRSlCN8GhaiwiBINvcSdGy39FCWjyDD-Xg,12792
@@ -365,8 +398,8 @@ osbot_utils/utils/Toml.py,sha256=Rxl8gx7mni5CvBAK-Ai02EKw-GwtJdd3yeHT2kMloik,166
365
398
  osbot_utils/utils/Version.py,sha256=Ww6ChwTxqp1QAcxOnztkTicShlcx6fbNsWX5xausHrg,422
366
399
  osbot_utils/utils/Zip.py,sha256=pR6sKliUY0KZXmqNzKY2frfW-YVQEVbLKiyqQX_lc-8,14052
367
400
  osbot_utils/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
368
- osbot_utils/version,sha256=UzPaV1nLfhdRXaPnxoRowDnXt8jTG9HI_R0xTg5g0TY,8
369
- osbot_utils-2.33.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
370
- osbot_utils-2.33.0.dist-info/METADATA,sha256=pDF4s4KDlDj62b11GuDqJN8C6qYse1VL6XrZTWmMHGI,1329
371
- osbot_utils-2.33.0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
372
- osbot_utils-2.33.0.dist-info/RECORD,,
401
+ osbot_utils/version,sha256=eP_sVuSlH7b9KQmXQnUcU4y9U9Ka6cF20Dtqvf3X-xA,8
402
+ osbot_utils-2.35.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
403
+ osbot_utils-2.35.0.dist-info/METADATA,sha256=ry_EjbTe4KMUskGynioO4m4VBX1aD7gNbwe_Z_cTcEs,1329
404
+ osbot_utils-2.35.0.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
405
+ osbot_utils-2.35.0.dist-info/RECORD,,
@@ -1,11 +0,0 @@
1
- import functools
2
-
3
- from osbot_utils.helpers.flows.Flow import flow
4
-
5
-
6
- class flow__Cache_Requests:
7
-
8
- @flow()
9
- def invoke_function(self, function, *args, **kwargs):
10
- print('in invoke function')
11
- return function(*args, **kwargs)