def test_optional_schema_to_dataclass(): schema = [ SchemaField("string_field", "STRING", "NULLABLE", "This field is a STRING field.", ()), SchemaField("bytes_field", "BYTES", "NULLABLE", None, ()), SchemaField("int_field", "INT64", "NULLABLE", None, ()), SchemaField("float_field", "FLOAT64", "NULLABLE", None, ()), SchemaField("numeric_field", "NUMERIC", "NULLABLE", None, ()), SchemaField("bool_field", "BOOL", "NULLABLE", None, ()), SchemaField("timestamp_field", "TIMESTAMP", "NULLABLE", None, ()), SchemaField("date_field", "DATE", "NULLABLE", None, ()), SchemaField("time_field", "TIME", "NULLABLE", None, ()), SchemaField("datetime_field", "DATETIME", "NULLABLE", None, ()), SchemaField( "nullable_nested_field", "STRUCT", "NULLABLE", "This field is a STRUCT field.", (SchemaField("int_field", "INT64", "NULLABLE", "This field is an INT field.", ()), ), ), ] expected = (f"@dataclass\n{inspect.getsource(NullableNestedField)}\n" f"@dataclass\n{inspect.getsource(NullableSchema)}") assert schema_to_dataclass("NullableSchema", schema) == expected.strip()
def test_required_schema_to_dataclass(): schema = [ SchemaField( "string_field", "STRING", "REQUIRED", "This field is a STRING field.", () ), SchemaField("bytes_field", "BYTES", "REQUIRED", None, ()), SchemaField("int_field", "INT64", "REQUIRED", None, ()), SchemaField("float_field", "FLOAT64", "REQUIRED", None, ()), SchemaField("numeric_field", "NUMERIC", "REQUIRED", None, ()), SchemaField("bool_field", "BOOL", "REQUIRED", None, ()), SchemaField("timestamp_field", "TIMESTAMP", "REQUIRED", None, ()), SchemaField("date_field", "DATE", "REQUIRED", None, ()), SchemaField("time_field", "TIME", "REQUIRED", None, ()), SchemaField("datetime_field", "DATETIME", "REQUIRED", None, ()), SchemaField("geography_field", "GEOGRAPHY", "REQUIRED", None, ()), SchemaField( "required_nested_field", "STRUCT", "REQUIRED", "This field is a STRUCT field.", ( SchemaField( "int_field", "INT64", "REQUIRED", "This field is an INT field.", () ), ), ), ] expected = ( f"@dataclass\n{inspect.getsource(RequiredNestedField)}\n" f"@dataclass\n{inspect.getsource(RequiredSchema)}" ) assert schema_to_dataclass("RequiredSchema", schema).strip() == expected.strip()
def main(project: str, dataset: str, table_name: str) -> None: client = create_connection() table = client.get_table(f"{project}.{dataset}.{table_name}") print("from dataclasses import dataclass") print(schema_to_dataclass(table_name, table.schema))