osbot-utils 2.4.0__py3-none-any.whl → 2.5.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.
@@ -88,7 +88,7 @@ class Type_Safe:
88
88
  from osbot_utils.utils.Objects import convert_to_value_from_obj_annotation
89
89
  from osbot_utils.utils.Objects import value_type_matches_obj_annotation_for_attr
90
90
  from osbot_utils.utils.Objects import value_type_matches_obj_annotation_for_union_and_annotated
91
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
91
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
92
92
 
93
93
  annotations = all_annotations(self)
94
94
  if not annotations: # can't do type safety checks if the class does not have annotations
@@ -3,7 +3,7 @@ from enum import Enum
3
3
  from typing import get_args, get_origin, Union, List, Any # For type hinting utilities
4
4
 
5
5
 
6
- class Type_Safe_Method: # Class to handle method type safety validation
6
+ class Type_Safe__Method: # Class to handle method type safety validation
7
7
  def __init__(self, func): # Initialize with function
8
8
  self.func = func # Store original function
9
9
  self.sig = inspect.signature(func) # Get function signature
@@ -1,10 +1,10 @@
1
1
  import functools # For wrapping functions
2
- from osbot_utils.type_safe.Type_Safe_Method import Type_Safe_Method
2
+ from osbot_utils.type_safe.Type_Safe__Method import Type_Safe__Method
3
3
 
4
4
  def type_safe(func): # Main decorator function
5
5
  @functools.wraps(func) # Preserve function metadata
6
6
  def wrapper(*args, **kwargs): # Wrapper function
7
- type_checker = Type_Safe_Method(func) # Create type checker instance
7
+ type_checker = Type_Safe__Method(func) # Create type checker instance
8
8
  bound_args = type_checker.handle_type_safety(args, kwargs) # Validate type safety
9
9
  return func(**bound_args.arguments) # Call original function
10
10
 
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
2
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
3
3
 
4
4
 
5
5
  class Validator__Max(Type_Safe__Validator): # Validates that a numeric value is at most the specified maximum."""
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
2
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
3
3
 
4
4
  class Validator__Min(Type_Safe__Validator): # Validates that a value is at least the specified minimum. Works with any type that supports the < operator (numbers, strings, lists, etc.)
5
5
  min_value: Any
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
2
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
3
3
 
4
4
 
5
5
  class Validator__One_Of(Type_Safe__Validator): # Validates that a value is one of a set of allowed values."""
@@ -1,5 +1,5 @@
1
1
  from typing import Any
2
- from osbot_utils.type_safe.Type_Safe__Validator import Type_Safe__Validator
2
+ from osbot_utils.type_safe.validators.Type_Safe__Validator import Type_Safe__Validator
3
3
 
4
4
  class Validator__Regex(Type_Safe__Validator): # Validates that a string matches the specified regex pattern.
5
5
  pattern : str
@@ -25,7 +25,7 @@ if sys.version_info < (3, 8):
25
25
  else:
26
26
  return ()
27
27
  else:
28
- from typing import get_origin, get_args, List, Tuple, Dict, Type, _GenericAlias
28
+ from typing import get_origin, get_args, List, Tuple, Dict, Type, _GenericAlias, ForwardRef
29
29
 
30
30
 
31
31
  def are_types_compatible_for_assigment(source_type, target_type):
@@ -469,6 +469,8 @@ def value_type_matches_obj_annotation_for_attr(target, attr_name, value):
469
469
  origin_attr_type = get_origin(attr_type) # to handle when type definition contains a generic
470
470
  if origin_attr_type is type: # Add handling for Type[T]
471
471
  type_arg = get_args(attr_type)[0] # Get T from Type[T]
472
+ if isinstance(type_arg, (str, ForwardRef)): # Handle forward reference
473
+ type_arg = target.__class__ # If it's a forward reference, the target class should be the containing class
472
474
  return isinstance(value, type) and issubclass(value, type_arg) # Check that value is a type and is subclass of type_arg
473
475
  if origin_attr_type is Annotated: # if the type is Annotated
474
476
  args = get_args(attr_type)
osbot_utils/version CHANGED
@@ -1 +1 @@
1
- v2.4.0
1
+ v2.5.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: osbot_utils
3
- Version: 2.4.0
3
+ Version: 2.5.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-v2.4.0-blue)
26
+ ![Current Release](https://img.shields.io/badge/release-v2.5.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
 
@@ -277,19 +277,19 @@ osbot_utils/testing/Temp_Zip_In_Memory.py,sha256=ibDIWt3K4CX558PbkLbX3InHyWYZcwQ
277
277
  osbot_utils/testing/Unit_Test.py,sha256=MReR_wDGbbXFDPz7cmuGflcTxRB6TBnO9mYqRpSq8Pk,1304
278
278
  osbot_utils/testing/Unzip_File.py,sha256=V5H97XO9rlvG5EYOSzAH4kTtAH1ohZ8R8ImvJh46ZNg,1177
279
279
  osbot_utils/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
280
- osbot_utils/type_safe/Type_Safe.py,sha256=asybUt2JqDP34b7s6clCcurJpaJg_4oOI4Qt10PQ2bM,30419
281
- osbot_utils/type_safe/Type_Safe_Method.py,sha256=JLB7NkeuY4x_lIWJyvG1bDApCM_VyAQqrzQXhH7Z-8A,10969
280
+ osbot_utils/type_safe/Type_Safe.py,sha256=icn7r8mS1hkeo30uJ3NVJ7kms8P6MeHbA0ldz_MMXps,30430
282
281
  osbot_utils/type_safe/Type_Safe__Base.py,sha256=mL8GMaR9tsaUfwk8d-8zp2g-A8kNKiN6kroEFaNvMOk,5518
283
282
  osbot_utils/type_safe/Type_Safe__Dict.py,sha256=I_Ac0JH-ahmQrkADFVyiobTlH1JI31MKHaNszQW4PBo,2396
284
283
  osbot_utils/type_safe/Type_Safe__List.py,sha256=SzSIBkwSOAEpW_V2qh4-f0YHzmgB0T8PczBLbDgZGvg,1340
285
- osbot_utils/type_safe/Type_Safe__Validator.py,sha256=cJIPSBarjV716SZUOLvz7Mthjk-aUYKUQtRDtKUBmN4,779
284
+ osbot_utils/type_safe/Type_Safe__Method.py,sha256=wn05pjmdnjhXVFIUaxm6YfWJZGoTzs-IhJ534JKFiV0,10970
286
285
  osbot_utils/type_safe/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
286
  osbot_utils/type_safe/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
288
- osbot_utils/type_safe/decorators/type_safe.py,sha256=yK1td-9WHFj2pe4dvBtw1cjYOE6z6-VnG5DCStGCO1c,1003
289
- osbot_utils/type_safe/validators/Validator__Max.py,sha256=ctsMADDqq9l9mxwedrOfI9Dg53nPxCsluB0cO8C6bT4,1264
290
- osbot_utils/type_safe/validators/Validator__Min.py,sha256=FfVoErZcibqYXvnH-Nl9c2pfPSKFH-CgAhUVBYsxVrc,1970
291
- osbot_utils/type_safe/validators/Validator__One_Of.py,sha256=RvEYjf2zT06LVucZeNhzFqTZOh-Bs-C9UNjXd_YLWa8,670
292
- osbot_utils/type_safe/validators/Validator__Regex.py,sha256=BZemPOU8XWc9bxk4jqPm_adnfhbOf6GD4-gatr_L0wo,997
287
+ osbot_utils/type_safe/decorators/type_safe.py,sha256=ERFfJuAIo5qLp03YEDu2zu5wxu65OhR7hOybwuTfLlc,1006
288
+ osbot_utils/type_safe/validators/Type_Safe__Validator.py,sha256=cJIPSBarjV716SZUOLvz7Mthjk-aUYKUQtRDtKUBmN4,779
289
+ osbot_utils/type_safe/validators/Validator__Max.py,sha256=pCvYF5Jb_cBgn1ArGhf6FNUB-NGCXPq3D36oYDCyAzg,1275
290
+ osbot_utils/type_safe/validators/Validator__Min.py,sha256=_-9MdAX2Jc2U0VzCHpEQLA8OVxuNe2y8uaJ6bQttimE,1981
291
+ osbot_utils/type_safe/validators/Validator__One_Of.py,sha256=YVdZv3Fw4vpJGXRSXFmTktFgzcLlUK7bkVSBV6Fxl-4,681
292
+ osbot_utils/type_safe/validators/Validator__Regex.py,sha256=oO_NKTcrcl7wjs5-HB-ovSV9S-3XOZjsa04rdUPsOMg,1008
293
293
  osbot_utils/type_safe/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
294
294
  osbot_utils/utils/Assert.py,sha256=u9XLgYn91QvNWZGyPi29SjPJSXRHlm9andIn3NJEVog,1745
295
295
  osbot_utils/utils/Call_Stack.py,sha256=awhWstC2mJCrOjNqNheTe2B7at-JFP6XG7VkMPpPNOE,6647
@@ -305,7 +305,7 @@ osbot_utils/utils/Json.py,sha256=0t7Hwefx8bg4JiZVr-xIbWP3BAk6_ZsnY7iV5pnRLDQ,713
305
305
  osbot_utils/utils/Json_Cache.py,sha256=mLPkkDZN-3ZVJiDvV1KBJXILtKkTZ4OepzOsDoBPhWg,2006
306
306
  osbot_utils/utils/Lists.py,sha256=tPz5x5s3sRO97WZ_nsxREBPC5cwaHrhgaYBhsrffTT8,5599
307
307
  osbot_utils/utils/Misc.py,sha256=H_xexJgiTxB3jDeDiW8efGQbO0Zuy8MM0iQ7qXC92JI,17363
308
- osbot_utils/utils/Objects.py,sha256=F3H0ux-IjfyMIA1ou-xc0Ra1Z7oON3fuYRH_qaGsQ4Y,23375
308
+ osbot_utils/utils/Objects.py,sha256=KN04fgKTlPtKr1d84ESDNlYMQikunyWJ3-I2VKZ8jjw,23661
309
309
  osbot_utils/utils/Png.py,sha256=V1juGp6wkpPigMJ8HcxrPDIP4bSwu51oNkLI8YqP76Y,1172
310
310
  osbot_utils/utils/Process.py,sha256=lr3CTiEkN3EiBx3ZmzYmTKlQoPdkgZBRjPulMxG-zdo,2357
311
311
  osbot_utils/utils/Python_Logger.py,sha256=M9Oi62LxfnRSlCN8GhaiwiBINvcSdGy39FCWjyDD-Xg,12792
@@ -317,8 +317,8 @@ osbot_utils/utils/Toml.py,sha256=Rxl8gx7mni5CvBAK-Ai02EKw-GwtJdd3yeHT2kMloik,166
317
317
  osbot_utils/utils/Version.py,sha256=Ww6ChwTxqp1QAcxOnztkTicShlcx6fbNsWX5xausHrg,422
318
318
  osbot_utils/utils/Zip.py,sha256=pR6sKliUY0KZXmqNzKY2frfW-YVQEVbLKiyqQX_lc-8,14052
319
319
  osbot_utils/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
320
- osbot_utils/version,sha256=p1zoKgZOpZRdZ0kkLKwgWGFUdRL6IoXVo1tPBL0f9tY,7
321
- osbot_utils-2.4.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
322
- osbot_utils-2.4.0.dist-info/METADATA,sha256=M41QEpJLyE3h5hjXubqfqshQ7-wn0ioHXjgt7AKFuOU,1315
323
- osbot_utils-2.4.0.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
324
- osbot_utils-2.4.0.dist-info/RECORD,,
320
+ osbot_utils/version,sha256=ry5x0al4PtQq-0dv-mNU4Gk_sTAHYopdKOQmdWyn-ZE,7
321
+ osbot_utils-2.5.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
322
+ osbot_utils-2.5.0.dist-info/METADATA,sha256=Ow8znW_Olql05eKUGfwxkJDw5XMf0o_wwXjdS7J2In0,1315
323
+ osbot_utils-2.5.0.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
324
+ osbot_utils-2.5.0.dist-info/RECORD,,