osbot-utils 2.66.0__py3-none-any.whl → 2.67.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.
@@ -93,7 +93,8 @@ class Type_Safe__Method:
93
93
  self.sig.parameters[param_name].default is not inspect._empty) # Check has non-empty default
94
94
 
95
95
  def validate_none_value(self, param_name: str, # Validate None value
96
- is_optional: bool, has_default: bool): # Optional and default flags
96
+ is_optional: bool,
97
+ has_default: bool):
97
98
  if not (is_optional or has_default): # If neither optional nor default
98
99
  raise ValueError(f"Parameter '{param_name}' is not optional but got None") # Raise error for None value
99
100
 
@@ -1,4 +1,5 @@
1
1
  from typing import get_origin, Annotated, get_args
2
+ from osbot_utils.type_safe.Type_Safe__List import Type_Safe__List
2
3
  from osbot_utils.type_safe.Type_Safe__Primitive import Type_Safe__Primitive
3
4
  from osbot_utils.type_safe.shared.Type_Safe__Cache import type_safe_cache
4
5
  from osbot_utils.type_safe.shared.Type_Safe__Convert import type_safe_convert
@@ -10,6 +11,8 @@ class Type_Safe__Step__Set_Attr:
10
11
  def resolve_value(self, _self, annotations, name, value):
11
12
  if type(value) is dict:
12
13
  value = self.resolve_value__dict(_self, name, value)
14
+ elif type(value) is list:
15
+ value = self.resolve_value__list(_self, name, value)
13
16
  elif isinstance(annotations.get(name), type) and issubclass(annotations.get(name), Type_Safe__Primitive) and type(value) in (int, str, float):
14
17
  return annotations.get(name)(value)
15
18
  elif type(value) in (int, str): # for now only a small number of str and int classes are supported (until we understand the full implications of this)
@@ -31,6 +34,23 @@ class Type_Safe__Step__Set_Attr:
31
34
 
32
35
  return type_safe_convert.convert_to_value_from_obj_annotation(_self, name, value)
33
36
 
37
+ def resolve_value__list(self, _self, name, value): # Convert regular lists to Type_Safe__List instances
38
+ annotations = type_safe_cache.get_obj_annotations(_self)
39
+ annotation = annotations.get(name)
40
+
41
+ if annotation:
42
+ origin = type_safe_cache.get_origin(annotation)
43
+ if origin is list:
44
+ args = get_args(annotation) # Get the list element type
45
+ if args:
46
+ element_type = args[0]
47
+
48
+ type_safe_list = Type_Safe__List(element_type) # Create a Type_Safe__List with the expected type
49
+ for item in value: # Validate and add each element
50
+ type_safe_list.append(item) # This will validate the type
51
+ return type_safe_list
52
+
53
+ return value
34
54
  def resolve_value__from_origin(self, value):
35
55
  #origin = type_safe_cache.get_origin(value) # todo: figure out why this is the only place that the type_safe_cache.get_origin doesn't work (due to WeakKeyDictionary key error on value)
36
56
  origin = get_origin(value)
osbot_utils/version CHANGED
@@ -1 +1 @@
1
- v2.66.0
1
+ v2.67.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: osbot_utils
3
- Version: 2.66.0
3
+ Version: 2.67.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.66.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.67.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
 
@@ -374,7 +374,7 @@ osbot_utils/type_safe/Type_Safe.py,sha256=LOWRGOGpnRU2iTRLP47vUoyalK0vjFrWlnaghB
374
374
  osbot_utils/type_safe/Type_Safe__Base.py,sha256=UTMipTL6mXoetAEUCI5hs8RqXp4NDYOvoAiYoFOt5jg,8807
375
375
  osbot_utils/type_safe/Type_Safe__Dict.py,sha256=QB200L5eNWT3FnUv8sm5kncj1wXJsJ9uRycNFl9xb6Y,3077
376
376
  osbot_utils/type_safe/Type_Safe__List.py,sha256=y_lp7Ai0HfQCqC8Bxn0g6_M9MP5lPOXy5Dhkuj2fJvQ,1891
377
- osbot_utils/type_safe/Type_Safe__Method.py,sha256=cvFYoR42SPU4qQPG45CCHQw7i-sq7R6gHECcsncGGL4,16653
377
+ osbot_utils/type_safe/Type_Safe__Method.py,sha256=K100jAq1wmskuXcTd_9vt-XodSKJkDowJselmnDFCN8,16643
378
378
  osbot_utils/type_safe/Type_Safe__Primitive.py,sha256=CJ4LP2W5i9utSSzuiiJrwqvwdMv1DeQ6dIZICtYfLTY,3635
379
379
  osbot_utils/type_safe/Type_Safe__Set.py,sha256=j12fc8cbd9-s_a13ysaz723rNEW4Dt6hObCd0S-AjIg,1432
380
380
  osbot_utils/type_safe/Type_Safe__Tuple.py,sha256=Kx7C4YfHybRbMmVMcmV6yFLi4T48pb592vEZfjjyLxo,1710
@@ -398,7 +398,7 @@ osbot_utils/type_safe/steps/Type_Safe__Step__Default_Kwargs.py,sha256=tzKXDUc0HV
398
398
  osbot_utils/type_safe/steps/Type_Safe__Step__Default_Value.py,sha256=b5vsgM8eg9yq2KM0wRMntVHma6OhN_HnU76LxhEIpoA,4483
399
399
  osbot_utils/type_safe/steps/Type_Safe__Step__From_Json.py,sha256=AguNcZwKKnyNY87bSAF1xLwYW5h_IDfUad70QqIiK3I,14622
400
400
  osbot_utils/type_safe/steps/Type_Safe__Step__Init.py,sha256=wBdShMavx8Ja5IACyW8dP3_fq_iqrMp8HHziOqjgxqU,4483
401
- osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py,sha256=Nm1cleC-IDez6HFDejTfMprrnOfTvmEopO_pW6w1vFM,5507
401
+ osbot_utils/type_safe/steps/Type_Safe__Step__Set_Attr.py,sha256=k7GX3q0ps4R1Z3w5JMFHB0w19zVXtO1VS11wpFVI19o,6680
402
402
  osbot_utils/type_safe/steps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
403
403
  osbot_utils/type_safe/validators/Type_Safe__Validator.py,sha256=cJIPSBarjV716SZUOLvz7Mthjk-aUYKUQtRDtKUBmN4,779
404
404
  osbot_utils/type_safe/validators/Validator__Max.py,sha256=pCvYF5Jb_cBgn1ArGhf6FNUB-NGCXPq3D36oYDCyAzg,1275
@@ -432,8 +432,8 @@ osbot_utils/utils/Toml.py,sha256=Rxl8gx7mni5CvBAK-Ai02EKw-GwtJdd3yeHT2kMloik,166
432
432
  osbot_utils/utils/Version.py,sha256=Ww6ChwTxqp1QAcxOnztkTicShlcx6fbNsWX5xausHrg,422
433
433
  osbot_utils/utils/Zip.py,sha256=pR6sKliUY0KZXmqNzKY2frfW-YVQEVbLKiyqQX_lc-8,14052
434
434
  osbot_utils/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
435
- osbot_utils/version,sha256=I-tXq-4G9hvb1JqQfc9x8xB8ZmzgFoAtCtq_ER_YmZE,8
436
- osbot_utils-2.66.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
437
- osbot_utils-2.66.0.dist-info/METADATA,sha256=00ICakDJcjSd_dw6IXnHIY4Uvc3o_kVtbfV0Z25XN54,1329
438
- osbot_utils-2.66.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
439
- osbot_utils-2.66.0.dist-info/RECORD,,
435
+ osbot_utils/version,sha256=c6L9xxoyMql0emsdEbUgj7ng8gzCDcVgYkJG0iDe484,8
436
+ osbot_utils-2.67.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
437
+ osbot_utils-2.67.0.dist-info/METADATA,sha256=bemaemZYec52lrfkkWRpf9HbtcwERuynDCoY6TFH-Vw,1329
438
+ osbot_utils-2.67.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
439
+ osbot_utils-2.67.0.dist-info/RECORD,,