def check_reply_field_type(ctxt: IDLCompatibilityContext, old_field_type: Optional[Union[syntax.Enum, syntax.Struct, syntax.Type]], new_field_type: Optional[Union[syntax.Enum, syntax.Struct, syntax.Type]], cmd_name: str, field_name: str, old_idl_file: syntax.IDLParsedSpec, new_idl_file: syntax.IDLParsedSpec, old_idl_file_path: str, new_idl_file_path: str): """Check compatibility between old and new reply field type.""" # pylint: disable=too-many-arguments,too-many-branches if check_array_type(ctxt, "reply_field", old_field_type, new_field_type, cmd_name, 'type', old_idl_file_path, new_idl_file_path): old_field_type = old_field_type.element_type new_field_type = new_field_type.element_type if old_field_type is None: ctxt.add_reply_field_type_invalid_error(cmd_name, field_name, old_idl_file_path) ctxt.errors.dump_errors() sys.exit(1) if new_field_type is None: ctxt.add_reply_field_type_invalid_error(cmd_name, field_name, new_idl_file_path) ctxt.errors.dump_errors() sys.exit(1) if isinstance(old_field_type, syntax.Type): check_reply_field_type_recursive(ctxt, old_field_type, new_field_type, cmd_name, field_name, old_idl_file, new_idl_file, old_idl_file_path, new_idl_file_path) elif isinstance(old_field_type, syntax.Enum): if isinstance(new_field_type, syntax.Enum): check_subset(ctxt, cmd_name, field_name, new_field_type.name, new_field_type.values, old_field_type.values, new_idl_file_path) else: ctxt.add_new_reply_field_type_not_enum_error( cmd_name, field_name, new_field_type.name, old_field_type.name, new_idl_file_path) elif isinstance(old_field_type, syntax.Struct): if isinstance(new_field_type, syntax.Struct): check_reply_fields(ctxt, old_field_type, new_field_type, cmd_name, old_idl_file, new_idl_file, old_idl_file_path, new_idl_file_path) else: ctxt.add_new_reply_field_type_not_struct_error( cmd_name, field_name, new_field_type.name, old_field_type.name, new_idl_file_path)
def check_reply_field_type(ctxt: IDLCompatibilityContext, old_field_type: Optional[Union[syntax.Enum, syntax.Struct, syntax.Type]], new_field_type: Optional[Union[syntax.Enum, syntax.Struct, syntax.Type]], cmd_name: str, field_name: str, old_idl_file_path: str, new_idl_file_path: str): """Check compatibility between old and new reply field type.""" # pylint: disable=too-many-arguments,too-many-branches if old_field_type is None: ctxt.add_reply_field_type_invalid_error(cmd_name, field_name, old_idl_file_path) ctxt.errors.dump_errors() sys.exit(1) if new_field_type is None: ctxt.add_reply_field_type_invalid_error(cmd_name, field_name, new_idl_file_path) ctxt.errors.dump_errors() sys.exit(1) if isinstance(old_field_type, syntax.Type): if isinstance(new_field_type, syntax.Type): if "any" in old_field_type.bson_serialization_type: ctxt.add_old_reply_field_bson_any_error(cmd_name, field_name, old_field_type.name, old_idl_file_path) elif "any" in new_field_type.bson_serialization_type: ctxt.add_new_reply_field_bson_any_error(cmd_name, field_name, new_field_type.name, new_idl_file_path) else: check_subset(ctxt, cmd_name, field_name, new_field_type.name, new_field_type.bson_serialization_type, old_field_type.bson_serialization_type, new_idl_file_path) else: ctxt.add_new_reply_field_type_enum_or_struct_error( cmd_name, field_name, new_field_type.name, old_field_type.name, new_idl_file_path) elif isinstance(old_field_type, syntax.Enum): if isinstance(new_field_type, syntax.Enum): check_subset(ctxt, cmd_name, field_name, new_field_type.name, new_field_type.values, old_field_type.values, new_idl_file_path) else: ctxt.add_new_reply_field_type_not_enum_error(cmd_name, field_name, new_field_type.name, old_field_type.name, new_idl_file_path) elif isinstance(old_field_type, syntax.Struct): if not isinstance(new_field_type, syntax.Struct): ctxt.add_new_reply_field_type_not_struct_error( cmd_name, field_name, new_field_type.name, old_field_type.name, new_idl_file_path)