11from __future__ import annotations
22
3+ import importlib
34import json
45import 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
67
78from pydantic .v1 import Field , PrivateAttr
89
@@ -651,7 +652,7 @@ def applicable_entity_types(self, entity_types: EntityTypes):
651652 self .options .applicable_entity_types = json .dumps (list (entity_types ))
652653
653654 @property
654- def applicable_asset_types (self ) -> AssetTypes :
655+ def applicable_asset_types (self ) -> Union [ Set [ str ], AssetTypes ] :
655656 """
656657 Asset type names to which to restrict the attribute.
657658 Only assets of one of these types will have this attribute available.
@@ -662,16 +663,26 @@ def applicable_asset_types(self) -> AssetTypes:
662663 return set ()
663664
664665 @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 ] ):
666667 if self .options is None :
667668 raise ErrorCode .MISSING_OPTIONS .exception_with_parameters ()
669+
668670 if not isinstance (asset_types , set ):
669671 raise ErrorCode .INVALID_PARAMETER_TYPE .exception_with_parameters (
670672 "applicable_asset_types" , AssetTypes
671673 )
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 :
673684 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"
675686 )
676687 self .options .applicable_asset_types = json .dumps (list (asset_types ))
677688
@@ -826,7 +837,7 @@ def create(
826837 multi_valued : bool = False ,
827838 options_name : Optional [str ] = None ,
828839 applicable_connections : Optional [Set [str ]] = None ,
829- applicable_asset_types : Optional [AssetTypes ] = None ,
840+ applicable_asset_types : Optional [Union [ Set [ str ], AssetTypes ] ] = None ,
830841 applicable_glossaries : Optional [Set [str ]] = None ,
831842 applicable_glossary_types : Optional [GlossaryTypes ] = None ,
832843 applicable_other_asset_types : Optional [OtherAssetTypes ] = None ,
0 commit comments