Skip to content

Commit fd02766

Browse files
committed
unifies ResourceHints typed dict
1 parent 875bf29 commit fd02766

File tree

3 files changed

+18
-18
lines changed

3 files changed

+18
-18
lines changed

dlt/extract/extractors.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ def write_items(self, resource: DltResource, items: TDataItems, meta: Any) -> No
130130
# convert to table meta if created table variant so item is assigned to this table
131131
if meta.create_table_variant:
132132
# name in hints meta must be a string, otherwise merge_hints would fail
133-
meta = TableNameMeta(meta.hints["name"]) # type: ignore[arg-type]
133+
meta = TableNameMeta(meta.hints["table_name"]) # type: ignore[arg-type]
134134
self._reset_contracts_cache()
135135

136136
if table_name := self._get_static_table_name(resource, meta):

dlt/extract/hints.py

+17-15
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,23 @@
4242

4343

4444
class TResourceHintsBase(TypedDict, total=False):
45+
table_name: Optional[TTableHintTemplate[str]]
4546
write_disposition: Optional[TTableHintTemplate[TWriteDispositionConfig]]
4647
parent: Optional[TTableHintTemplate[str]]
4748
primary_key: Optional[TTableHintTemplate[TColumnNames]]
49+
columns: Optional[TTableHintTemplate[TAnySchemaColumns]]
4850
schema_contract: Optional[TTableHintTemplate[TSchemaContract]]
4951
table_format: Optional[TTableHintTemplate[TTableFormat]]
52+
file_format: TTableHintTemplate[TFileFormat]
5053
merge_key: Optional[TTableHintTemplate[TColumnNames]]
54+
nested_hints: Optional[Dict[TColumnNames, "TResourceHintsBase"]]
5155

5256

5357
class TResourceHints(TResourceHintsBase, total=False):
54-
name: TTableHintTemplate[str]
5558
# 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]]
6060
validator: ValidateItem
61-
original_columns: TTableHintTemplate[TAnySchemaColumns]
61+
original_columns: Optional[TTableHintTemplate[TAnySchemaColumns]]
6262

6363

6464
class HintsMeta:
@@ -98,7 +98,7 @@ def make_hints(
9898
file_format=file_format, # type: ignore
9999
)
100100
if not table_name:
101-
new_template.pop("name")
101+
new_template.pop("table_name")
102102
if not write_disposition and "write_disposition" in new_template:
103103
new_template.pop("write_disposition")
104104
# remember original columns and set template columns
@@ -139,7 +139,7 @@ def table_name(self) -> TTableHintTemplate[str]:
139139
if self._table_name_hint_fun:
140140
return self._table_name_hint_fun
141141
# 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
143143

144144
@table_name.setter
145145
def table_name(self, value: TTableHintTemplate[str]) -> None:
@@ -158,7 +158,7 @@ def write_disposition(self, value: TTableHintTemplate[TWriteDispositionConfig])
158158
@property
159159
def columns(self) -> TTableHintTemplate[TTableSchemaColumns]:
160160
"""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]
162162

163163
@property
164164
def schema_contract(self) -> TTableHintTemplate[TSchemaContract]:
@@ -187,8 +187,8 @@ def compute_table_schema(self, item: TDataItem = None, meta: Any = None) -> TTab
187187

188188
# resolve a copy of a held template
189189
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
192192

193193
# if table template present and has dynamic hints, the data item must be provided.
194194
if self._table_name_hint_fun and item is None:
@@ -276,9 +276,9 @@ def apply_hints(
276276
t = self._clone_hints(t)
277277
if table_name is not None:
278278
if table_name:
279-
t["name"] = table_name
279+
t["table_name"] = table_name
280280
else:
281-
t.pop("name", None)
281+
t.pop("table_name", None)
282282
if parent_table_name is not None:
283283
if parent_table_name:
284284
t["parent"] = parent_table_name
@@ -296,6 +296,7 @@ def apply_hints(
296296
# normalize columns
297297
columns = ensure_table_schema_columns(columns)
298298
# this updates all columns with defaults
299+
assert isinstance(t["columns"], dict)
299300
t["columns"] = merge_columns(t["columns"], columns, merge_columns=True)
300301
else:
301302
# set to empty columns
@@ -354,7 +355,8 @@ def _set_hints(
354355
DltResourceHints.validate_dynamic_hints(hints_template)
355356
DltResourceHints.validate_write_disposition_hint(hints_template.get("write_disposition"))
356357
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]
358360
# incremental cannot be specified in variant
359361
if hints_template.get("incremental"):
360362
raise InconsistentTableTemplate(
@@ -388,7 +390,7 @@ def merge_hints(
388390
self, hints_template: TResourceHints, create_table_variant: bool = False
389391
) -> None:
390392
self.apply_hints(
391-
table_name=hints_template.get("name"),
393+
table_name=hints_template.get("table_name"),
392394
parent_table_name=hints_template.get("parent"),
393395
write_disposition=hints_template.get("write_disposition"),
394396
columns=hints_template.get("original_columns"),

dlt/sources/rest_api/typing.py

-2
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,7 @@ class ProcessingSteps(TypedDict):
254254
class ResourceBase(TResourceHintsBase, total=False):
255255
"""Defines hints that may be passed to `dlt.resource` decorator"""
256256

257-
table_name: Optional[TTableHintTemplate[str]]
258257
max_table_nesting: Optional[int]
259-
columns: Optional[TTableHintTemplate[TAnySchemaColumns]]
260258
selected: Optional[bool]
261259
parallelized: Optional[bool]
262260
processing_steps: Optional[List[ProcessingSteps]]

0 commit comments

Comments
 (0)