1
1
from __future__ import annotations
2
2
3
+ import importlib
3
4
import json
4
5
import time
5
- from typing import Any , Callable , ClassVar , Dict , List , Optional , Set , cast
6
+ from typing import Any , Callable , ClassVar , Dict , List , Optional , Set , Union , cast
6
7
7
8
from pydantic .v1 import Field , PrivateAttr
8
9
@@ -651,7 +652,7 @@ def applicable_entity_types(self, entity_types: EntityTypes):
651
652
self .options .applicable_entity_types = json .dumps (list (entity_types ))
652
653
653
654
@property
654
- def applicable_asset_types (self ) -> AssetTypes :
655
+ def applicable_asset_types (self ) -> Union [ Set [ str ], AssetTypes ] :
655
656
"""
656
657
Asset type names to which to restrict the attribute.
657
658
Only assets of one of these types will have this attribute available.
@@ -662,16 +663,26 @@ def applicable_asset_types(self) -> AssetTypes:
662
663
return set ()
663
664
664
665
@applicable_asset_types .setter
665
- def applicable_asset_types (self , asset_types : AssetTypes ):
666
+ def applicable_asset_types (self , asset_types : Union [ Set [ str ], AssetTypes ] ):
666
667
if self .options is None :
667
668
raise ErrorCode .MISSING_OPTIONS .exception_with_parameters ()
669
+
668
670
if not isinstance (asset_types , set ):
669
671
raise ErrorCode .INVALID_PARAMETER_TYPE .exception_with_parameters (
670
672
"applicable_asset_types" , AssetTypes
671
673
)
672
- if not asset_types .issubset (_complete_type_list ):
674
+
675
+ # Validate asset type names against SDK asset classes
676
+ invalid_types = {
677
+ asset_type
678
+ for asset_type in asset_types
679
+ if not getattr (
680
+ importlib .import_module ("pyatlan.model.assets" ), asset_type , None
681
+ )
682
+ }
683
+ if invalid_types :
673
684
raise ErrorCode .INVALID_PARAMETER_VALUE .exception_with_parameters (
674
- asset_types , "applicable_asset_types" , _complete_type_list
685
+ invalid_types , "applicable_asset_types" , "SDK asset types"
675
686
)
676
687
self .options .applicable_asset_types = json .dumps (list (asset_types ))
677
688
@@ -826,7 +837,7 @@ def create(
826
837
multi_valued : bool = False ,
827
838
options_name : Optional [str ] = None ,
828
839
applicable_connections : Optional [Set [str ]] = None ,
829
- applicable_asset_types : Optional [AssetTypes ] = None ,
840
+ applicable_asset_types : Optional [Union [ Set [ str ], AssetTypes ] ] = None ,
830
841
applicable_glossaries : Optional [Set [str ]] = None ,
831
842
applicable_glossary_types : Optional [GlossaryTypes ] = None ,
832
843
applicable_other_asset_types : Optional [OtherAssetTypes ] = None ,
0 commit comments