@@ -679,15 +679,19 @@ def _normalize_entity_schema(self, tablename: str) -> str:
679679 return tablename
680680 return f"new_{ self ._to_pascal (tablename )} "
681681
682- def _get_entity_by_schema (self , schema_name : str ) -> Optional [Dict [str , Any ]]:
682+ def _get_entity_by_schema (
683+ self ,
684+ schema_name : str ,
685+ headers : Optional [Dict [str , str ]] = None ,
686+ ) -> Optional [Dict [str , Any ]]:
683687 url = f"{ self .api } /EntityDefinitions"
684688 # Escape single quotes in schema name
685689 schema_escaped = self ._escape_odata_quotes (schema_name )
686690 params = {
687691 "$select" : "MetadataId,LogicalName,SchemaName,EntitySetName" ,
688692 "$filter" : f"SchemaName eq '{ schema_escaped } '" ,
689693 }
690- r = self ._request ("get" , url , params = params )
694+ r = self ._request ("get" , url , params = params , headers = headers )
691695 items = r .json ().get ("value" , [])
692696 return items [0 ] if items else None
693697
@@ -697,7 +701,7 @@ def _create_entity(
697701 display_name : str ,
698702 attributes : List [Dict [str , Any ]],
699703 solution_unique_name : Optional [str ] = None ,
700- ) -> str :
704+ ) -> Dict [ str , Any ] :
701705 url = f"{ self .api } /EntityDefinitions"
702706 payload = {
703707 "@odata.type" : "Microsoft.Dynamics.CRM.EntityMetadata" ,
@@ -715,23 +719,18 @@ def _create_entity(
715719 if solution_unique_name :
716720 params = {"SolutionUniqueName" : solution_unique_name }
717721 self ._request ("post" , url , json = payload , params = params )
718- ent = self ._wait_for_entity_ready (schema_name )
722+ ent = self ._get_entity_by_schema (
723+ schema_name ,
724+ headers = {"Consistency" : "Strong" },
725+ )
719726 if not ent or not ent .get ("EntitySetName" ):
720727 raise RuntimeError (
721728 f"Failed to create or retrieve entity '{ schema_name } ' (EntitySetName not available)."
722729 )
723- return ent ["MetadataId" ]
724-
725- def _wait_for_entity_ready (self , schema_name : str , delays : Optional [List [int ]] = None ) -> Optional [Dict [str , Any ]]:
726- import time
727- delays = delays or [0 , 2 , 5 , 10 , 20 , 30 ]
728- ent : Optional [Dict [str , Any ]] = None
729- for idx , delay in enumerate (delays ):
730- if idx > 0 and delay > 0 :
731- time .sleep (delay )
732- ent = self ._get_entity_by_schema (schema_name )
733- if ent and ent .get ("EntitySetName" ):
734- return ent
730+ if not ent .get ("MetadataId" ):
731+ raise RuntimeError (
732+ f"MetadataId missing after creating entity '{ schema_name } '."
733+ )
735734 return ent
736735
737736 def _normalize_attribute_schema (self , entity_schema : str , column_name : str ) -> str :
@@ -1189,20 +1188,18 @@ def _create_table(
11891188 if not solution_unique_name :
11901189 raise ValueError ("solution_unique_name cannot be empty" )
11911190
1192- metadata_id = self ._create_entity (
1191+ metadata = self ._create_entity (
11931192 entity_schema ,
11941193 tablename ,
11951194 attributes ,
11961195 solution_unique_name ,
11971196 )
1198- ent2 : Dict [str , Any ] = self ._wait_for_entity_ready (entity_schema ) or {}
1199- logical_name = ent2 .get ("LogicalName" )
12001197
12011198 return {
12021199 "entity_schema" : entity_schema ,
1203- "entity_logical_name" : logical_name ,
1204- "entity_set_name" : ent2 .get ("EntitySetName" ) if ent2 else None ,
1205- "metadata_id" : metadata_id ,
1200+ "entity_logical_name" : metadata . get ( "LogicalName" ) ,
1201+ "entity_set_name" : metadata .get ("EntitySetName" ),
1202+ "metadata_id" : metadata . get ( "MetadataId" ) ,
12061203 "columns_created" : created_cols ,
12071204 }
12081205
0 commit comments