@@ -151,86 +151,6 @@ class Status(IntEnum):
151151 if metadata_id :
152152 table_info ["metadata_id" ] = metadata_id
153153
154- # 6) Column metadata helpers: column create/delete
155- print ("Column metadata helpers (create/delete column):" )
156- scratch_column = f"scratch_{ int (time .time ())} "
157- column_payload = {scratch_column : "string" }
158- try :
159- log_call (f"client.create_column('{ entity_schema } ', { repr (column_payload )} )" )
160- column_create = client .create_columns (entity_schema , column_payload )
161- if not isinstance (column_create , list ) or not column_create :
162- raise RuntimeError ("create_column did not return schema list" )
163- created_details = column_create
164- if not all (isinstance (item , str ) for item in created_details ):
165- raise RuntimeError ("create_column entries were not schema strings" )
166- attribute_schema = created_details [0 ]
167- odata_client = client ._get_odata ()
168- exists_after_create = None
169- exists_after_delete = None
170- attr_type_before = None
171- attr_type_before_norm = None
172- if metadata_id and attribute_schema :
173- _ready_message = "Column metadata not yet available"
174- def _metadata_after_create ():
175- meta = odata_client ._get_attribute_metadata (
176- metadata_id ,
177- attribute_schema ,
178- extra_select = "@odata.type,AttributeType" ,
179- )
180- if not meta or not meta .get ("MetadataId" ):
181- raise RuntimeError (_ready_message )
182- return meta
183-
184- ready_meta = backoff_retry (
185- _metadata_after_create ,
186- delays = (0 , 1 , 2 , 4 , 8 ),
187- retry_http_statuses = (),
188- retry_if = lambda exc : isinstance (exc , RuntimeError ) and str (exc ) == _ready_message ,
189- )
190- exists_after_create = bool (ready_meta )
191- raw_type = ready_meta .get ("@odata.type" ) or ready_meta .get ("AttributeType" )
192- if isinstance (raw_type , str ):
193- attr_type_before = raw_type
194- lowered = raw_type .lower ()
195- attr_type_before_norm = lowered .rsplit ("." , 1 )[- 1 ] if "." in lowered else lowered
196- log_call (f"client.delete_column('{ entity_schema } ', '{ scratch_column } ')" )
197- column_delete = client .delete_columns (entity_schema , scratch_column )
198- if not isinstance (column_delete , list ) or not column_delete :
199- raise RuntimeError ("delete_column did not return schema list" )
200- deleted_details = column_delete
201- if not all (isinstance (item , str ) for item in deleted_details ):
202- raise RuntimeError ("delete_column entries were not schema strings" )
203- if attribute_schema not in deleted_details :
204- raise RuntimeError ("delete_columns response missing expected schema name" )
205- if metadata_id and attribute_schema :
206- _delete_message = "Column metadata still present after delete"
207- def _ensure_removed ():
208- meta = odata_client ._get_attribute_metadata (metadata_id , attribute_schema )
209- if meta :
210- raise RuntimeError (_delete_message )
211- return True
212-
213- removed = backoff_retry (
214- _ensure_removed ,
215- delays = (0 , 1 , 2 , 4 , 8 ),
216- retry_http_statuses = (),
217- retry_if = lambda exc : isinstance (exc , RuntimeError ) and str (exc ) == _delete_message ,
218- )
219- exists_after_delete = not removed
220- print ({
221- "created_column" : scratch_column ,
222- "create_summary" : created_details ,
223- "delete_summary" : deleted_details ,
224- "attribute_type_before_delete" : attr_type_before ,
225- "exists_after_create" : exists_after_create ,
226- "exists_after_delete" : exists_after_delete ,
227- })
228- except MetadataError as meta_err :
229- print ({"column_metadata_error" : str (meta_err )})
230- except Exception as exc :
231- print ({"column_metadata_unexpected" : str (exc )})
232- sys .exit (0 )
233-
234154# Derive attribute logical name prefix from the entity logical name (segment before first underscore)
235155attr_prefix = logical .split ("_" , 1 )[0 ] if "_" in logical else logical
236156code_key = f"{ attr_prefix } _code"
0 commit comments