42
42
43
43
44
44
class TResourceHintsBase (TypedDict , total = False ):
45
+ table_name : Optional [TTableHintTemplate [str ]]
45
46
write_disposition : Optional [TTableHintTemplate [TWriteDispositionConfig ]]
46
47
parent : Optional [TTableHintTemplate [str ]]
47
48
primary_key : Optional [TTableHintTemplate [TColumnNames ]]
49
+ columns : Optional [TTableHintTemplate [TAnySchemaColumns ]]
48
50
schema_contract : Optional [TTableHintTemplate [TSchemaContract ]]
49
51
table_format : Optional [TTableHintTemplate [TTableFormat ]]
52
+ file_format : TTableHintTemplate [TFileFormat ]
50
53
merge_key : Optional [TTableHintTemplate [TColumnNames ]]
54
+ nested_hints : Optional [Dict [TColumnNames , "TResourceHintsBase" ]]
51
55
52
56
53
57
class TResourceHints (TResourceHintsBase , total = False ):
54
- name : TTableHintTemplate [str ]
55
58
# description: TTableHintTemplate[str]
56
- # table_sealed: Optional[bool]
57
- columns : TTableHintTemplate [TTableSchemaColumns ]
58
- incremental : Incremental [Any ]
59
- file_format : TTableHintTemplate [TFileFormat ]
59
+ incremental : Optional [Incremental [Any ]]
60
60
validator : ValidateItem
61
- original_columns : TTableHintTemplate [TAnySchemaColumns ]
61
+ original_columns : Optional [ TTableHintTemplate [TAnySchemaColumns ] ]
62
62
63
63
64
64
class HintsMeta :
@@ -98,7 +98,7 @@ def make_hints(
98
98
file_format = file_format , # type: ignore
99
99
)
100
100
if not table_name :
101
- new_template .pop ("name " )
101
+ new_template .pop ("table_name " )
102
102
if not write_disposition and "write_disposition" in new_template :
103
103
new_template .pop ("write_disposition" )
104
104
# remember original columns and set template columns
@@ -139,7 +139,7 @@ def table_name(self) -> TTableHintTemplate[str]:
139
139
if self ._table_name_hint_fun :
140
140
return self ._table_name_hint_fun
141
141
# get table name or default name
142
- return self ._hints .get ("name " ) or self .name if self ._hints else self .name
142
+ return self ._hints .get ("table_name " ) or self .name if self ._hints else self .name
143
143
144
144
@table_name .setter
145
145
def table_name (self , value : TTableHintTemplate [str ]) -> None :
@@ -158,7 +158,7 @@ def write_disposition(self, value: TTableHintTemplate[TWriteDispositionConfig])
158
158
@property
159
159
def columns (self ) -> TTableHintTemplate [TTableSchemaColumns ]:
160
160
"""Gets columns' schema that can be modified in place"""
161
- return None if self ._hints is None else self ._hints .get ("columns" )
161
+ return None if self ._hints is None else self ._hints .get ("columns" ) # type: ignore[return-value]
162
162
163
163
@property
164
164
def schema_contract (self ) -> TTableHintTemplate [TSchemaContract ]:
@@ -187,8 +187,8 @@ def compute_table_schema(self, item: TDataItem = None, meta: Any = None) -> TTab
187
187
188
188
# resolve a copy of a held template
189
189
table_template = self ._clone_hints (table_template )
190
- if "name " not in table_template :
191
- table_template ["name " ] = self .name
190
+ if "table_name " not in table_template :
191
+ table_template ["table_name " ] = self .name
192
192
193
193
# if table template present and has dynamic hints, the data item must be provided.
194
194
if self ._table_name_hint_fun and item is None :
@@ -276,9 +276,9 @@ def apply_hints(
276
276
t = self ._clone_hints (t )
277
277
if table_name is not None :
278
278
if table_name :
279
- t ["name " ] = table_name
279
+ t ["table_name " ] = table_name
280
280
else :
281
- t .pop ("name " , None )
281
+ t .pop ("table_name " , None )
282
282
if parent_table_name is not None :
283
283
if parent_table_name :
284
284
t ["parent" ] = parent_table_name
@@ -296,6 +296,7 @@ def apply_hints(
296
296
# normalize columns
297
297
columns = ensure_table_schema_columns (columns )
298
298
# this updates all columns with defaults
299
+ assert isinstance (t ["columns" ], dict )
299
300
t ["columns" ] = merge_columns (t ["columns" ], columns , merge_columns = True )
300
301
else :
301
302
# set to empty columns
@@ -354,7 +355,8 @@ def _set_hints(
354
355
DltResourceHints .validate_dynamic_hints (hints_template )
355
356
DltResourceHints .validate_write_disposition_hint (hints_template .get ("write_disposition" ))
356
357
if create_table_variant :
357
- table_name : str = hints_template ["name" ] # type: ignore[assignment]
358
+ # for table variants, table name must be a str
359
+ table_name : str = hints_template ["table_name" ] # type: ignore[assignment]
358
360
# incremental cannot be specified in variant
359
361
if hints_template .get ("incremental" ):
360
362
raise InconsistentTableTemplate (
@@ -388,7 +390,7 @@ def merge_hints(
388
390
self , hints_template : TResourceHints , create_table_variant : bool = False
389
391
) -> None :
390
392
self .apply_hints (
391
- table_name = hints_template .get ("name " ),
393
+ table_name = hints_template .get ("table_name " ),
392
394
parent_table_name = hints_template .get ("parent" ),
393
395
write_disposition = hints_template .get ("write_disposition" ),
394
396
columns = hints_template .get ("original_columns" ),
0 commit comments