Skip to content

Commit 1c188e4

Browse files
author
Elias Kassell
authored
Fix notebook dependency targets (#1792)
* Add better tests, fix proto conversion from config to compiled graph * Tidy, fix some tests * Extract target conversion for pure targets and action configs to separate functions, to fix include on dependency assertions * Tidy * Fix lint * Force check retry
1 parent 8dcccd8 commit 1c188e4

11 files changed

Lines changed: 207 additions & 123 deletions

File tree

core/actions/assertion.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import * as Path from "df/core/path";
55
import { Session } from "df/core/session";
66
import {
77
actionConfigToCompiledGraphTarget,
8+
configTargetToCompiledGraphTarget,
89
nativeRequire,
910
resolvableAsTarget,
1011
resolveActionsConfigFilename,
@@ -78,7 +79,7 @@ export class Assertion extends ActionBuilder<dataform.Assertion> {
7879
if (config.dependencyTargets) {
7980
this.dependencies(
8081
config.dependencyTargets.map(dependencyTarget =>
81-
actionConfigToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
82+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
8283
)
8384
);
8485
}

core/actions/data_preparation.ts

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import { Resolvable } from "df/core/common";
44
import * as Path from "df/core/path";
55
import { Session } from "df/core/session";
66
import {
7+
actionConfigToCompiledGraphTarget,
78
addDependenciesToActionDependencyTargets,
9+
configTargetToCompiledGraphTarget,
810
nativeRequire,
911
resolveActionsConfigFilename
1012
} from "df/core/utils";
@@ -37,22 +39,27 @@ export class DataPreparation extends ActionBuilder<dataform.DataPreparation> {
3739
this.proto.dataPreparation = dataPreparationDefinition;
3840

3941
// Find targets
40-
const targets = getTargets(dataPreparationDefinition)
41-
this.proto.targets = targets.map((target) => this.applySessionToTarget(
42-
target,
43-
session.projectConfig,
44-
config.filename,
45-
true
46-
));
47-
this.proto.canonicalTargets = targets.map((target) => this.applySessionToTarget(target, session.canonicalProjectConfig));
42+
const targets = getTargets(dataPreparationDefinition);
43+
this.proto.targets = targets.map(target =>
44+
this.applySessionToTarget(target, session.projectConfig, config.filename, true)
45+
);
46+
this.proto.canonicalTargets = targets.map(target =>
47+
this.applySessionToTarget(target, session.canonicalProjectConfig)
48+
);
4849

4950
// Set the unique target key as the first target defined.
5051
// TODO: Remove once multiple targets are supported.
5152
this.proto.target = this.proto.targets[0];
5253
this.proto.canonicalTarget = this.proto.canonicalTargets[0];
5354

5455
this.proto.tags = config.tags;
55-
this.dependencies(config.dependencyTargets);
56+
if (config.dependencyTargets) {
57+
this.dependencies(
58+
config.dependencyTargets.map(dependencyTarget =>
59+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
60+
)
61+
);
62+
}
5663
this.proto.fileName = config.filename;
5764
if (config.disabled) {
5865
this.proto.disabled = config.disabled;
@@ -72,7 +79,7 @@ export class DataPreparation extends ActionBuilder<dataform.DataPreparation> {
7279
public dependencies(value: Resolvable | Resolvable[]) {
7380
const newDependencies = Array.isArray(value) ? value : [value];
7481
newDependencies.forEach(resolvable =>
75-
addDependenciesToActionDependencyTargets(this, resolvable)
82+
addDependenciesToActionDependencyTargets(this, resolvable)
7683
);
7784
return this;
7885
}
@@ -101,17 +108,18 @@ export class DataPreparation extends ActionBuilder<dataform.DataPreparation> {
101108
}
102109
}
103110

104-
function parseDataPreparationDefinitionJson(
105-
dataPreparationAsJson: { [key: string]: unknown }): dataform.DataPreparationDefinition {
111+
function parseDataPreparationDefinitionJson(dataPreparationAsJson: {
112+
[key: string]: unknown;
113+
}): dataform.DataPreparationDefinition {
106114
try {
107115
return dataform.DataPreparationDefinition.create(
108-
verifyObjectMatchesProto(
109-
dataform.DataPreparationDefinition,
110-
dataPreparationAsJson as {
111-
[key: string]: any;
112-
},
113-
VerifyProtoErrorBehaviour.SHOW_DOCS_LINK
114-
)
116+
verifyObjectMatchesProto(
117+
dataform.DataPreparationDefinition,
118+
dataPreparationAsJson as {
119+
[key: string]: any;
120+
},
121+
VerifyProtoErrorBehaviour.SHOW_DOCS_LINK
122+
)
115123
);
116124
} catch (e) {
117125
if (e instanceof ReferenceError) {
@@ -121,20 +129,18 @@ function parseDataPreparationDefinitionJson(
121129
}
122130
}
123131

124-
function getTargets(
125-
definition: dataform.DataPreparationDefinition
126-
): dataform.Target[] {
132+
function getTargets(definition: dataform.DataPreparationDefinition): dataform.Target[] {
127133
const targets: dataform.Target[] = [];
128134

129135
definition.nodes.forEach(node => {
130136
const table = node.destination?.table;
131137
if (table) {
132138
const compiledGraphTarget: dataform.ITarget = {
133139
database: table.project,
134-
schema:table.dataset,
140+
schema: table.dataset,
135141
name: table.table
136142
};
137-
targets.push(dataform.Target.create(compiledGraphTarget))
143+
targets.push(dataform.Target.create(compiledGraphTarget));
138144
}
139145
});
140146

core/actions/incremental_table.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { Session } from "df/core/session";
99
import {
1010
actionConfigToCompiledGraphTarget,
1111
addDependenciesToActionDependencyTargets,
12+
configTargetToCompiledGraphTarget,
1213
nativeRequire,
1314
resolvableAsTarget,
1415
resolveActionsConfigFilename,
@@ -104,7 +105,11 @@ export class IncrementalTable extends ActionBuilder<dataform.Table> {
104105
this.setDependOnDependencyAssertions(config.dependOnDependencyAssertions);
105106
}
106107
if (config.dependencyTargets) {
107-
this.dependencies(config.dependencyTargets);
108+
this.dependencies(
109+
config.dependencyTargets.map(dependencyTarget =>
110+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
111+
)
112+
);
108113
}
109114
if (config.hermetic !== undefined) {
110115
this.hermetic(config.hermetic);

core/actions/notebook.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Session } from "df/core/session";
66
import {
77
actionConfigToCompiledGraphTarget,
88
addDependenciesToActionDependencyTargets,
9+
configTargetToCompiledGraphTarget,
910
nativeRequire,
1011
resolveActionsConfigFilename
1112
} from "df/core/utils";
@@ -46,7 +47,13 @@ export class Notebook extends ActionBuilder<dataform.Notebook> {
4647
this.proto.canonicalTarget = this.applySessionToTarget(target, session.canonicalProjectConfig);
4748
this.proto.tags = config.tags;
4849
this.dependOnDependencyAssertions = config.dependOnDependencyAssertions;
49-
this.dependencies(config.dependencyTargets);
50+
if (config.dependencyTargets) {
51+
this.dependencies(
52+
config.dependencyTargets.map(dependencyTarget =>
53+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
54+
)
55+
);
56+
}
5057
this.proto.fileName = config.filename;
5158
if (config.disabled) {
5259
this.proto.disabled = config.disabled;

core/actions/operation.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Session } from "df/core/session";
77
import {
88
actionConfigToCompiledGraphTarget,
99
addDependenciesToActionDependencyTargets,
10+
configTargetToCompiledGraphTarget,
1011
nativeRequire,
1112
resolvableAsTarget,
1213
resolveActionsConfigFilename,
@@ -77,7 +78,7 @@ export class Operation extends ActionBuilder<dataform.Operation> {
7778
if (config.dependencyTargets) {
7879
this.dependencies(
7980
config.dependencyTargets.map(dependencyTarget =>
80-
actionConfigToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
81+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
8182
)
8283
);
8384
}

core/actions/table.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
actionConfigToCompiledGraphTarget,
2020
addDependenciesToActionDependencyTargets,
2121
checkExcessProperties,
22+
configTargetToCompiledGraphTarget,
2223
nativeRequire,
2324
resolvableAsTarget,
2425
resolveActionsConfigFilename,
@@ -345,7 +346,7 @@ export class Table extends ActionBuilder<dataform.Table> {
345346
this.config({
346347
type: "table",
347348
dependencies: config.dependencyTargets.map(dependencyTarget =>
348-
actionConfigToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
349+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
349350
),
350351
tags: config.tags,
351352
disabled: config.disabled,
@@ -377,7 +378,7 @@ export class Table extends ActionBuilder<dataform.Table> {
377378
this.config({
378379
type: "view",
379380
dependencies: config.dependencyTargets.map(dependencyTarget =>
380-
actionConfigToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
381+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
381382
),
382383
disabled: config.disabled,
383384
materialized: config.materialized,
@@ -431,7 +432,7 @@ export class Table extends ActionBuilder<dataform.Table> {
431432
this.config({
432433
type: "incremental",
433434
dependencies: config.dependencyTargets.map(dependencyTarget =>
434-
actionConfigToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
435+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
435436
),
436437
disabled: config.disabled,
437438
protected: config.protected,

core/actions/view.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { Session } from "df/core/session";
99
import {
1010
actionConfigToCompiledGraphTarget,
1111
addDependenciesToActionDependencyTargets,
12+
configTargetToCompiledGraphTarget,
1213
nativeRequire,
1314
resolvableAsTarget,
1415
resolveActionsConfigFilename,
@@ -96,7 +97,11 @@ export class View extends ActionBuilder<dataform.Table> {
9697
this.setDependOnDependencyAssertions(config.dependOnDependencyAssertions);
9798
}
9899
if (config.dependencyTargets) {
99-
this.dependencies(config.dependencyTargets);
100+
this.dependencies(
101+
config.dependencyTargets.map(dependencyTarget =>
102+
configTargetToCompiledGraphTarget(dataform.ActionConfig.Target.create(dependencyTarget))
103+
)
104+
);
100105
}
101106
if (config.hermetic !== undefined) {
102107
this.hermetic(config.hermetic);

0 commit comments

Comments
 (0)