@@ -622,7 +622,7 @@ def read_field(
622622 table : dict [str | int , object ],
623623 ) -> tuple [str | int , object ]:
624624 """Read a table field value."""
625- assert value .name in {"Field" , "Assignment" }
625+ assert value .name in {"Field" , "Assignment" }, f" { value . name = } "
626626 if value .name == "Assignment" :
627627 return read_assignment (value )
628628 # if value.name == "Indexed":
@@ -675,5 +675,43 @@ def read_keyword(value: Value[str]) -> object:
675675 # return value.unpack_join()
676676
677677
678+ def convert_lists (table_data : dict [Any , Any ]) -> dict [Any , Any ]:
679+ """Convert internal numeric tables to lists."""
680+
681+ def convert_dict (data : dict [Any , T ]) -> dict [Any , T ] | list [T ]:
682+ if all (isinstance (key , int ) for key in data ):
683+ return [data [i + 1 ] for i in range (len (data ))]
684+ new = {}
685+ for k , v in data .items ():
686+ if isinstance (v , dict ):
687+ new [k ] = convert_dict (v )
688+ else :
689+ new [k ] = v
690+ return new
691+
692+ value = convert_dict (table_data )
693+ assert isinstance (value , dict )
694+ return value
695+
696+
697+ def undo_convert_lists (table_data : dict [Any , Any ]) -> dict [Any , Any ]:
698+ """Convert internal lists to numeric tables."""
699+
700+ def convert_dict (data : dict [Any , T ] | list [T ]) -> dict [Any , T ]:
701+ if isinstance (data , list ):
702+ return {i + 1 : value for i , value in enumerate (data )}
703+ new = {}
704+ for k , v in data .items ():
705+ if isinstance (v , dict | list ):
706+ new [k ] = convert_dict (v )
707+ else :
708+ new [k ] = v
709+ return new
710+
711+ value = convert_dict (table_data )
712+ assert isinstance (value , dict )
713+ return value
714+
715+
678716if __name__ == "__main__" :
679717 print (f"{ __title__ } \n Programmed by { __author__ } .\n " )
0 commit comments