dataiku-sdk 0.10.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/packages/types/src/index.d.ts +19 -2
- package/dist/packages/types/src/index.js +13 -1
- package/dist/src/cli/coerce.d.ts +36 -0
- package/dist/src/cli/coerce.js +239 -0
- package/dist/src/cli/commands/analysis.d.ts +2 -0
- package/dist/src/cli/commands/analysis.js +66 -0
- package/dist/src/cli/commands/api-deployer.d.ts +2 -0
- package/dist/src/cli/commands/api-deployer.js +170 -0
- package/dist/src/cli/commands/api-service.d.ts +2 -0
- package/dist/src/cli/commands/api-service.js +121 -0
- package/dist/src/cli/commands/app.d.ts +2 -0
- package/dist/src/cli/commands/app.js +78 -0
- package/dist/src/cli/commands/bundle.d.ts +2 -0
- package/dist/src/cli/commands/bundle.js +107 -0
- package/dist/src/cli/commands/business-app.d.ts +2 -0
- package/dist/src/cli/commands/business-app.js +76 -0
- package/dist/src/cli/commands/code-env.d.ts +2 -0
- package/dist/src/cli/commands/code-env.js +255 -0
- package/dist/src/cli/commands/code.d.ts +2 -0
- package/dist/src/cli/commands/code.js +63 -0
- package/dist/src/cli/commands/connection.d.ts +2 -0
- package/dist/src/cli/commands/connection.js +54 -0
- package/dist/src/cli/commands/continuous-activity.d.ts +2 -0
- package/dist/src/cli/commands/continuous-activity.js +38 -0
- package/dist/src/cli/commands/dashboard.d.ts +2 -0
- package/dist/src/cli/commands/dashboard.js +99 -0
- package/dist/src/cli/commands/data-quality.d.ts +2 -0
- package/dist/src/cli/commands/data-quality.js +235 -0
- package/dist/src/cli/commands/dataset.d.ts +2 -0
- package/dist/src/cli/commands/dataset.js +288 -0
- package/dist/src/cli/commands/discussion.d.ts +2 -0
- package/dist/src/cli/commands/discussion.js +47 -0
- package/dist/src/cli/commands/doctor.d.ts +2 -0
- package/dist/src/cli/commands/doctor.js +9 -0
- package/dist/src/cli/commands/flow-zone.d.ts +2 -0
- package/dist/src/cli/commands/flow-zone.js +282 -0
- package/dist/src/cli/commands/folder.d.ts +2 -0
- package/dist/src/cli/commands/folder.js +202 -0
- package/dist/src/cli/commands/future.d.ts +2 -0
- package/dist/src/cli/commands/future.js +57 -0
- package/dist/src/cli/commands/index.d.ts +2 -0
- package/dist/src/cli/commands/index.js +78 -0
- package/dist/src/cli/commands/insight.d.ts +2 -0
- package/dist/src/cli/commands/insight.js +156 -0
- package/dist/src/cli/commands/job.d.ts +2 -0
- package/dist/src/cli/commands/job.js +406 -0
- package/dist/src/cli/commands/meaning.d.ts +2 -0
- package/dist/src/cli/commands/meaning.js +115 -0
- package/dist/src/cli/commands/metrics.d.ts +2 -0
- package/dist/src/cli/commands/metrics.js +39 -0
- package/dist/src/cli/commands/ml-task.d.ts +2 -0
- package/dist/src/cli/commands/ml-task.js +171 -0
- package/dist/src/cli/commands/model-evaluation-store.d.ts +2 -0
- package/dist/src/cli/commands/model-evaluation-store.js +83 -0
- package/dist/src/cli/commands/notebook.d.ts +2 -0
- package/dist/src/cli/commands/notebook.js +242 -0
- package/dist/src/cli/commands/project-deployer.d.ts +2 -0
- package/dist/src/cli/commands/project-deployer.js +118 -0
- package/dist/src/cli/commands/project-library.d.ts +2 -0
- package/dist/src/cli/commands/project-library.js +197 -0
- package/dist/src/cli/commands/project.d.ts +2 -0
- package/dist/src/cli/commands/project.js +133 -0
- package/dist/src/cli/commands/recipe.d.ts +2 -0
- package/dist/src/cli/commands/recipe.js +659 -0
- package/dist/src/cli/commands/saved-model.d.ts +2 -0
- package/dist/src/cli/commands/saved-model.js +85 -0
- package/dist/src/cli/commands/scenario.d.ts +2 -0
- package/dist/src/cli/commands/scenario.js +190 -0
- package/dist/src/cli/commands/sql.d.ts +2 -0
- package/dist/src/cli/commands/sql.js +109 -0
- package/dist/src/cli/commands/statistics.d.ts +2 -0
- package/dist/src/cli/commands/statistics.js +165 -0
- package/dist/src/cli/commands/streaming-endpoint.d.ts +2 -0
- package/dist/src/cli/commands/streaming-endpoint.js +50 -0
- package/dist/src/cli/commands/variable.d.ts +2 -0
- package/dist/src/cli/commands/variable.js +49 -0
- package/dist/src/cli/commands/webapp.d.ts +2 -0
- package/dist/src/cli/commands/webapp.js +67 -0
- package/dist/src/cli/commands/wiki.d.ts +2 -0
- package/dist/src/cli/commands/wiki.js +123 -0
- package/dist/src/cli/commands/workspace.d.ts +2 -0
- package/dist/src/cli/commands/workspace.js +68 -0
- package/dist/src/cli/contract.d.ts +104 -0
- package/dist/src/cli/contract.js +2041 -0
- package/dist/src/cli/doctor.d.ts +104 -0
- package/dist/src/cli/doctor.js +356 -0
- package/dist/src/cli/env.d.ts +2 -0
- package/dist/src/cli/env.js +37 -0
- package/dist/src/cli/flags.d.ts +16 -0
- package/dist/src/cli/flags.js +272 -0
- package/dist/src/cli/helpers/cleanup.d.ts +3 -0
- package/dist/src/cli/helpers/cleanup.js +204 -0
- package/dist/src/cli/helpers/dataset.d.ts +2 -0
- package/dist/src/cli/helpers/dataset.js +17 -0
- package/dist/src/cli/helpers/flow-zone.d.ts +69 -0
- package/dist/src/cli/helpers/flow-zone.js +420 -0
- package/dist/src/cli/helpers/recipe.d.ts +11 -0
- package/dist/src/cli/helpers/recipe.js +83 -0
- package/dist/src/cli/output.d.ts +38 -0
- package/dist/src/cli/output.js +159 -0
- package/dist/src/cli/runtime.d.ts +15 -0
- package/dist/src/cli/runtime.js +59 -0
- package/dist/src/cli/types.d.ts +25 -0
- package/dist/src/cli/types.js +1 -0
- package/dist/src/cli/usage.d.ts +16 -0
- package/dist/src/cli/usage.js +84 -0
- package/dist/src/cli/version.d.ts +14 -0
- package/dist/src/cli/version.js +63 -0
- package/dist/src/cli.js +671 -8254
- package/dist/src/client.d.ts +13 -1
- package/dist/src/client.js +34 -13
- package/dist/src/errors.d.ts +6 -0
- package/dist/src/errors.js +102 -4
- package/dist/src/index.d.ts +7 -3
- package/dist/src/index.js +6 -2
- package/dist/src/resources/analyses.d.ts +34 -0
- package/dist/src/resources/analyses.js +31 -0
- package/dist/src/resources/api-services.d.ts +2 -0
- package/dist/src/resources/api-services.js +10 -0
- package/dist/src/resources/applications.d.ts +1 -1
- package/dist/src/resources/applications.js +27 -1
- package/dist/src/resources/continuous-activities.js +1 -0
- package/dist/src/resources/data-quality.js +5 -3
- package/dist/src/resources/datasets.d.ts +3 -0
- package/dist/src/resources/datasets.js +10 -5
- package/dist/src/resources/flow-zones.d.ts +2 -2
- package/dist/src/resources/flow-zones.js +4 -1
- package/dist/src/resources/meanings.d.ts +2 -0
- package/dist/src/resources/meanings.js +4 -0
- package/dist/src/resources/ml-tasks.d.ts +91 -0
- package/dist/src/resources/ml-tasks.js +130 -0
- package/dist/src/resources/model-evaluation-stores.d.ts +41 -0
- package/dist/src/resources/model-evaluation-stores.js +36 -0
- package/dist/src/resources/notebooks.d.ts +5 -7
- package/dist/src/resources/notebooks.js +10 -7
- package/dist/src/resources/projects.d.ts +1 -1
- package/dist/src/resources/projects.js +2 -2
- package/dist/src/resources/recipes.d.ts +3 -3
- package/dist/src/resources/recipes.js +198 -38
- package/dist/src/resources/saved-models.d.ts +41 -0
- package/dist/src/resources/saved-models.js +40 -0
- package/dist/src/resources/scenarios.js +67 -26
- package/dist/src/resources/statistics.js +9 -0
- package/dist/src/schemas.d.ts +2 -2
- package/dist/src/schemas.js +1 -1
- package/dist/src/skill.js +2 -2
- package/dist/src/utils/sanitize.js +2 -1
- package/package.json +1 -1
- package/packages/types/dist/index.d.ts +19 -2
- package/packages/types/dist/index.js +13 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { requiredJsonInput, requiredStringFlag, } from "../coerce.js";
|
|
2
|
+
import { requireArgs, UsageError, } from "../usage.js";
|
|
3
|
+
function optionalStringFlag(flags, name) {
|
|
4
|
+
const value = flags[name];
|
|
5
|
+
if (value === undefined)
|
|
6
|
+
return undefined;
|
|
7
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
8
|
+
throw new UsageError(`--${name} requires a non-empty value.`, "usage_error");
|
|
9
|
+
}
|
|
10
|
+
return value.trim();
|
|
11
|
+
}
|
|
12
|
+
function taskType(flags, usage) {
|
|
13
|
+
const normalized = requiredStringFlag(flags, "task-type", usage).toUpperCase();
|
|
14
|
+
if (normalized === "PREDICTION" || normalized === "CLUSTERING")
|
|
15
|
+
return normalized;
|
|
16
|
+
throw new UsageError("--task-type must be PREDICTION or CLUSTERING.", "invalid_enum");
|
|
17
|
+
}
|
|
18
|
+
export const mlTaskCommands = {
|
|
19
|
+
create: {
|
|
20
|
+
handler: async (c, a, f) => {
|
|
21
|
+
const usage = "dss ml-task create <analysisId> --task-type PREDICTION|CLUSTERING [--target COLUMN] [--prediction-type TYPE] [--backend-type TYPE] [--guess-policy POLICY] [--project-key KEY]";
|
|
22
|
+
requireArgs(a, 1, usage);
|
|
23
|
+
const projectKey = f["project-key"];
|
|
24
|
+
const normalizedTaskType = taskType(f, usage);
|
|
25
|
+
const targetVariable = optionalStringFlag(f, "target");
|
|
26
|
+
if (normalizedTaskType === "PREDICTION" && targetVariable === undefined) {
|
|
27
|
+
throw new UsageError("--target is required for PREDICTION ML tasks.", "missing_required_flag");
|
|
28
|
+
}
|
|
29
|
+
const options = {
|
|
30
|
+
analysisId: a[0],
|
|
31
|
+
taskType: normalizedTaskType,
|
|
32
|
+
targetVariable,
|
|
33
|
+
predictionType: optionalStringFlag(f, "prediction-type"),
|
|
34
|
+
backendType: optionalStringFlag(f, "backend-type"),
|
|
35
|
+
guessPolicy: optionalStringFlag(f, "guess-policy"),
|
|
36
|
+
projectKey,
|
|
37
|
+
};
|
|
38
|
+
const created = await c.mlTasks.create(options);
|
|
39
|
+
return { created: created.mlTaskId, resource: "ml-task", analysisId: a[0], ...created, };
|
|
40
|
+
},
|
|
41
|
+
usage: "dss ml-task create <analysisId> --task-type PREDICTION|CLUSTERING [--target COLUMN] [--prediction-type TYPE] [--backend-type TYPE] [--guess-policy POLICY] [--project-key KEY]",
|
|
42
|
+
description: "Create a prediction or clustering task in an analysis.",
|
|
43
|
+
examples: [
|
|
44
|
+
"dss ml-task create ANALYSIS_ID --task-type prediction --target churn --project-key PROJECT",
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
status: {
|
|
48
|
+
handler: (c, a, f) => {
|
|
49
|
+
requireArgs(a, 2, "dss ml-task status <analysisId> <mlTaskId> [--project-key KEY]");
|
|
50
|
+
return c.mlTasks.status(a[0], a[1], f["project-key"]);
|
|
51
|
+
},
|
|
52
|
+
usage: "dss ml-task status <analysisId> <mlTaskId> [--project-key KEY]",
|
|
53
|
+
description: "Get a Visual ML task's current status.",
|
|
54
|
+
examples: ["dss ml-task status ANALYSIS_ID TASK_ID --project-key PROJECT",],
|
|
55
|
+
},
|
|
56
|
+
"get-settings": {
|
|
57
|
+
handler: (c, a, f) => {
|
|
58
|
+
requireArgs(a, 2, "dss ml-task get-settings <analysisId> <mlTaskId> [--project-key KEY]");
|
|
59
|
+
return c.mlTasks.getSettings(a[0], a[1], f["project-key"]);
|
|
60
|
+
},
|
|
61
|
+
usage: "dss ml-task get-settings <analysisId> <mlTaskId> [--project-key KEY]",
|
|
62
|
+
description: "Get a Visual ML task's settings.",
|
|
63
|
+
examples: ["dss ml-task get-settings ANALYSIS_ID TASK_ID --project-key PROJECT",],
|
|
64
|
+
},
|
|
65
|
+
"set-settings": {
|
|
66
|
+
handler: (c, a, f) => {
|
|
67
|
+
const usage = "dss ml-task set-settings <analysisId> <mlTaskId> (--data JSON|--data-file PATH|--stdin) [--project-key KEY]";
|
|
68
|
+
requireArgs(a, 2, usage);
|
|
69
|
+
const settings = requiredJsonInput(f, "--data, --data-file, or --stdin is required (ML task settings).");
|
|
70
|
+
const projectKey = f["project-key"];
|
|
71
|
+
return c.mlTasks.saveSettings(a[0], a[1], settings, projectKey);
|
|
72
|
+
},
|
|
73
|
+
usage: "dss ml-task set-settings <analysisId> <mlTaskId> (--data JSON|--data-file PATH|--stdin) [--project-key KEY]",
|
|
74
|
+
description: "Replace a Visual ML task's settings from JSON input.",
|
|
75
|
+
examples: [
|
|
76
|
+
"dss ml-task set-settings ANALYSIS_ID TASK_ID --data-file settings.json --project-key PROJECT",
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
train: {
|
|
80
|
+
handler: (c, a, f) => {
|
|
81
|
+
requireArgs(a, 2, "dss ml-task train <analysisId> <mlTaskId> [--session-name NAME] [--wait] [--project-key KEY]");
|
|
82
|
+
const options = {
|
|
83
|
+
analysisId: a[0],
|
|
84
|
+
mlTaskId: a[1],
|
|
85
|
+
sessionName: optionalStringFlag(f, "session-name"),
|
|
86
|
+
wait: f["wait"] === true,
|
|
87
|
+
projectKey: f["project-key"],
|
|
88
|
+
};
|
|
89
|
+
return c.mlTasks.train(options);
|
|
90
|
+
},
|
|
91
|
+
usage: "dss ml-task train <analysisId> <mlTaskId> [--session-name NAME] [--wait] [--project-key KEY]",
|
|
92
|
+
description: "Start ML task training, optionally waiting for trained model IDs.",
|
|
93
|
+
examples: [
|
|
94
|
+
"dss ml-task train ANALYSIS_ID TASK_ID --session-name baseline --wait --project-key PROJECT",
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
"list-models": {
|
|
98
|
+
handler: (c, a, f) => {
|
|
99
|
+
requireArgs(a, 2, "dss ml-task list-models <analysisId> <mlTaskId> [--project-key KEY]");
|
|
100
|
+
return c.mlTasks.listTrainedModels(a[0], a[1], f["project-key"]);
|
|
101
|
+
},
|
|
102
|
+
usage: "dss ml-task list-models <analysisId> <mlTaskId> [--project-key KEY]",
|
|
103
|
+
description: "List trained models for a Visual ML task.",
|
|
104
|
+
examples: ["dss ml-task list-models ANALYSIS_ID TASK_ID --project-key PROJECT",],
|
|
105
|
+
},
|
|
106
|
+
"model-details": {
|
|
107
|
+
handler: (c, a, f) => {
|
|
108
|
+
requireArgs(a, 3, "dss ml-task model-details <analysisId> <mlTaskId> <modelId> [--project-key KEY]");
|
|
109
|
+
return c.mlTasks.trainedModelDetails(a[0], a[1], a[2], f["project-key"]);
|
|
110
|
+
},
|
|
111
|
+
usage: "dss ml-task model-details <analysisId> <mlTaskId> <modelId> [--project-key KEY]",
|
|
112
|
+
description: "Get details for one trained model.",
|
|
113
|
+
examples: [
|
|
114
|
+
"dss ml-task model-details ANALYSIS_ID TASK_ID MODEL_ID --project-key PROJECT",
|
|
115
|
+
],
|
|
116
|
+
},
|
|
117
|
+
deploy: {
|
|
118
|
+
handler: async (c, a, f) => {
|
|
119
|
+
const usage = "dss ml-task deploy <analysisId> <mlTaskId> <modelId> --model-name NAME --train-dataset DATASET [--test-dataset DATASET] [--dry-run] [--project-key KEY]";
|
|
120
|
+
requireArgs(a, 3, usage);
|
|
121
|
+
const options = {
|
|
122
|
+
analysisId: a[0],
|
|
123
|
+
mlTaskId: a[1],
|
|
124
|
+
modelId: a[2],
|
|
125
|
+
modelName: requiredStringFlag(f, "model-name", usage),
|
|
126
|
+
trainDatasetRef: requiredStringFlag(f, "train-dataset", usage),
|
|
127
|
+
testDatasetRef: optionalStringFlag(f, "test-dataset"),
|
|
128
|
+
projectKey: f["project-key"],
|
|
129
|
+
};
|
|
130
|
+
if (f["dry-run"] === true) {
|
|
131
|
+
return {
|
|
132
|
+
dryRun: true,
|
|
133
|
+
action: "deploy",
|
|
134
|
+
resource: "ml-task",
|
|
135
|
+
...options,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return c.mlTasks.deployToFlow(options);
|
|
139
|
+
},
|
|
140
|
+
usage: "dss ml-task deploy <analysisId> <mlTaskId> <modelId> --model-name NAME --train-dataset DATASET [--test-dataset DATASET] [--dry-run] [--project-key KEY]",
|
|
141
|
+
description: "Deploy a trained model to the Flow as a saved model.",
|
|
142
|
+
examples: [
|
|
143
|
+
"dss ml-task deploy ANALYSIS_ID TASK_ID MODEL_ID --model-name churn-model --train-dataset train --test-dataset test --project-key PROJECT",
|
|
144
|
+
"dss ml-task deploy ANALYSIS_ID TASK_ID MODEL_ID --model-name churn-model --train-dataset train --dry-run --project-key PROJECT",
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
delete: {
|
|
148
|
+
handler: async (c, a, f) => {
|
|
149
|
+
requireArgs(a, 2, "dss ml-task delete <analysisId> <mlTaskId> [--dry-run] [--project-key KEY]");
|
|
150
|
+
const projectKey = f["project-key"];
|
|
151
|
+
if (f["dry-run"] === true) {
|
|
152
|
+
return {
|
|
153
|
+
dryRun: true,
|
|
154
|
+
action: "delete",
|
|
155
|
+
resource: "ml-task",
|
|
156
|
+
analysisId: a[0],
|
|
157
|
+
mlTaskId: a[1],
|
|
158
|
+
projectKey,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
await c.mlTasks.delete(a[0], a[1], projectKey);
|
|
162
|
+
return { deleted: a[1], resource: "ml-task", analysisId: a[0], };
|
|
163
|
+
},
|
|
164
|
+
usage: "dss ml-task delete <analysisId> <mlTaskId> [--dry-run] [--project-key KEY]",
|
|
165
|
+
description: "Delete a Visual ML task.",
|
|
166
|
+
examples: [
|
|
167
|
+
"dss ml-task delete ANALYSIS_ID TASK_ID --project-key PROJECT",
|
|
168
|
+
"dss ml-task delete ANALYSIS_ID TASK_ID --dry-run --project-key PROJECT",
|
|
169
|
+
],
|
|
170
|
+
},
|
|
171
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { requiredStringFlag, } from "../coerce.js";
|
|
2
|
+
import { readIfExists, skipResult, } from "../output.js";
|
|
3
|
+
import { requireArgs, } from "../usage.js";
|
|
4
|
+
export const modelEvaluationStoreCommands = {
|
|
5
|
+
list: {
|
|
6
|
+
handler: (c, _a, f) => c.modelEvaluationStores.list(f["project-key"]),
|
|
7
|
+
usage: "dss model-evaluation-store list [--project-key KEY]",
|
|
8
|
+
description: "List model evaluation stores in a project.",
|
|
9
|
+
examples: ["dss model-evaluation-store list --project-key PROJECT",],
|
|
10
|
+
},
|
|
11
|
+
get: {
|
|
12
|
+
handler: (c, a, f) => {
|
|
13
|
+
requireArgs(a, 1, "dss model-evaluation-store get <storeId> [--project-key KEY]");
|
|
14
|
+
return c.modelEvaluationStores.get(a[0], f["project-key"]);
|
|
15
|
+
},
|
|
16
|
+
usage: "dss model-evaluation-store get <storeId> [--project-key KEY]",
|
|
17
|
+
description: "Get a model evaluation store.",
|
|
18
|
+
examples: ["dss model-evaluation-store get STORE_ID --project-key PROJECT",],
|
|
19
|
+
},
|
|
20
|
+
create: {
|
|
21
|
+
handler: async (c, _a, f) => {
|
|
22
|
+
const usage = "dss model-evaluation-store create --name NAME [--dry-run] [--project-key KEY]";
|
|
23
|
+
const name = requiredStringFlag(f, "name", usage);
|
|
24
|
+
const projectKey = f["project-key"];
|
|
25
|
+
const options = { name, projectKey, };
|
|
26
|
+
if (f["dry-run"] === true) {
|
|
27
|
+
return {
|
|
28
|
+
dryRun: true,
|
|
29
|
+
action: "create",
|
|
30
|
+
resource: "model-evaluation-store",
|
|
31
|
+
payload: options,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const created = await c.modelEvaluationStores.create(options);
|
|
35
|
+
return { created: created.id, resource: "model-evaluation-store", ...created, };
|
|
36
|
+
},
|
|
37
|
+
usage: "dss model-evaluation-store create --name NAME [--dry-run] [--project-key KEY]",
|
|
38
|
+
description: "Create an empty model evaluation store.",
|
|
39
|
+
examples: [
|
|
40
|
+
"dss model-evaluation-store create --name production-evaluations --project-key PROJECT",
|
|
41
|
+
"dss model-evaluation-store create --name production-evaluations --dry-run --project-key PROJECT",
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
"list-evaluations": {
|
|
45
|
+
handler: (c, a, f) => {
|
|
46
|
+
requireArgs(a, 1, "dss model-evaluation-store list-evaluations <storeId> [--project-key KEY]");
|
|
47
|
+
return c.modelEvaluationStores.listEvaluations(a[0], f["project-key"]);
|
|
48
|
+
},
|
|
49
|
+
usage: "dss model-evaluation-store list-evaluations <storeId> [--project-key KEY]",
|
|
50
|
+
description: "List evaluations in a model evaluation store.",
|
|
51
|
+
examples: [
|
|
52
|
+
"dss model-evaluation-store list-evaluations STORE_ID --project-key PROJECT",
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
delete: {
|
|
56
|
+
handler: async (c, a, f) => {
|
|
57
|
+
requireArgs(a, 1, "dss model-evaluation-store delete <storeId> [--if-exists] [--dry-run] [--project-key KEY]");
|
|
58
|
+
const projectKey = f["project-key"];
|
|
59
|
+
if (f["dry-run"] === true || f["if-exists"] === true) {
|
|
60
|
+
const current = await readIfExists(() => c.modelEvaluationStores.get(a[0], projectKey));
|
|
61
|
+
if (!current)
|
|
62
|
+
return skipResult("model-evaluation-store", a[0], "missing");
|
|
63
|
+
if (f["dry-run"] === true) {
|
|
64
|
+
return {
|
|
65
|
+
dryRun: true,
|
|
66
|
+
action: "delete",
|
|
67
|
+
resource: "model-evaluation-store",
|
|
68
|
+
id: a[0],
|
|
69
|
+
current,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
await c.modelEvaluationStores.delete(a[0], projectKey);
|
|
74
|
+
return { deleted: a[0], resource: "model-evaluation-store", };
|
|
75
|
+
},
|
|
76
|
+
usage: "dss model-evaluation-store delete <storeId> [--if-exists] [--dry-run] [--project-key KEY]",
|
|
77
|
+
description: "Delete a model evaluation store.",
|
|
78
|
+
examples: [
|
|
79
|
+
"dss model-evaluation-store delete STORE_ID --if-exists --project-key PROJECT",
|
|
80
|
+
"dss model-evaluation-store delete STORE_ID --dry-run --project-key PROJECT",
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
};
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { jsonInput, num, } from "../coerce.js";
|
|
2
|
+
import { encodedProjectEndpoint, isNotFoundError, readIfExists, skipResult, } from "../output.js";
|
|
3
|
+
import { requireArgs, UsageError, } from "../usage.js";
|
|
4
|
+
export const notebookCommands = {
|
|
5
|
+
"list-jupyter": {
|
|
6
|
+
handler: (c, _a, f) => c.notebooks.listJupyter(f["project-key"]),
|
|
7
|
+
usage: "dss notebook list-jupyter [--project-key KEY]",
|
|
8
|
+
description: "List Jupyter notebooks.",
|
|
9
|
+
examples: ["dss notebook list-jupyter",],
|
|
10
|
+
},
|
|
11
|
+
"get-jupyter": {
|
|
12
|
+
handler: (c, a, f) => {
|
|
13
|
+
requireArgs(a, 1, "dss notebook get-jupyter <name>");
|
|
14
|
+
return c.notebooks.getJupyter(a[0], f["project-key"]);
|
|
15
|
+
},
|
|
16
|
+
usage: "dss notebook get-jupyter <name> [--project-key KEY]",
|
|
17
|
+
description: "Get a Jupyter notebook.",
|
|
18
|
+
examples: ["dss notebook get-jupyter my_notebook",],
|
|
19
|
+
},
|
|
20
|
+
"delete-jupyter": {
|
|
21
|
+
handler: async (c, a, f) => {
|
|
22
|
+
requireArgs(a, 1, "dss notebook delete-jupyter <name>");
|
|
23
|
+
const pk = f["project-key"];
|
|
24
|
+
if (f["dry-run"] === true || f["if-exists"] === true) {
|
|
25
|
+
const current = await readIfExists(() => c.notebooks.getJupyter(a[0], pk));
|
|
26
|
+
if (!current)
|
|
27
|
+
return skipResult("jupyter-notebook", a[0], "missing");
|
|
28
|
+
if (f["dry-run"] === true) {
|
|
29
|
+
return { dryRun: true, action: "delete", resource: "jupyter-notebook", name: a[0], current, };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
await c.notebooks.deleteJupyter(a[0], pk);
|
|
33
|
+
return { deleted: a[0], resource: "jupyter-notebook", };
|
|
34
|
+
},
|
|
35
|
+
usage: "dss notebook delete-jupyter <name> [--if-exists] [--dry-run] [--project-key KEY]",
|
|
36
|
+
description: "Delete a Jupyter notebook.",
|
|
37
|
+
examples: ["dss notebook delete-jupyter my_notebook --dry-run",],
|
|
38
|
+
},
|
|
39
|
+
"clear-jupyter-outputs": {
|
|
40
|
+
handler: async (c, a, f) => {
|
|
41
|
+
requireArgs(a, 1, "dss notebook clear-jupyter-outputs <name>");
|
|
42
|
+
const pk = f["project-key"];
|
|
43
|
+
if (f["dry-run"] === true) {
|
|
44
|
+
const current = await c.notebooks.getJupyter(a[0], pk);
|
|
45
|
+
const next = {
|
|
46
|
+
...current,
|
|
47
|
+
cells: current.cells.map((cell) => ({ ...cell, outputs: [], execution_count: null, })),
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
dryRun: true,
|
|
51
|
+
action: "clear-jupyter-outputs",
|
|
52
|
+
resource: "jupyter-notebook",
|
|
53
|
+
name: a[0],
|
|
54
|
+
current,
|
|
55
|
+
next,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
await c.notebooks.clearJupyterOutputs(a[0], pk);
|
|
59
|
+
return { cleared: a[0], resource: "jupyter-notebook", };
|
|
60
|
+
},
|
|
61
|
+
usage: "dss notebook clear-jupyter-outputs <name> [--dry-run] [--project-key KEY]",
|
|
62
|
+
description: "Clear all cell outputs from a Jupyter notebook.",
|
|
63
|
+
examples: ["dss notebook clear-jupyter-outputs my_notebook --dry-run",],
|
|
64
|
+
},
|
|
65
|
+
"sessions-jupyter": {
|
|
66
|
+
handler: (c, a, f) => {
|
|
67
|
+
requireArgs(a, 1, "dss notebook sessions-jupyter <name>");
|
|
68
|
+
return c.notebooks.listJupyterSessions(a[0], f["project-key"]);
|
|
69
|
+
},
|
|
70
|
+
usage: "dss notebook sessions-jupyter <name> [--project-key KEY]",
|
|
71
|
+
description: "List active kernel sessions for a Jupyter notebook.",
|
|
72
|
+
examples: ["dss notebook sessions-jupyter my_notebook",],
|
|
73
|
+
},
|
|
74
|
+
"unload-jupyter": {
|
|
75
|
+
handler: async (c, a, f) => {
|
|
76
|
+
requireArgs(a, 2, "dss notebook unload-jupyter <name> <sessionId>");
|
|
77
|
+
const pk = f["project-key"];
|
|
78
|
+
if (f["dry-run"] === true) {
|
|
79
|
+
const sessions = await c.notebooks.listJupyterSessions(a[0], pk);
|
|
80
|
+
const current = sessions.find((session) => session.sessionId === a[1]);
|
|
81
|
+
return {
|
|
82
|
+
dryRun: true,
|
|
83
|
+
action: "unload-jupyter",
|
|
84
|
+
resource: "jupyter-notebook",
|
|
85
|
+
name: a[0],
|
|
86
|
+
sessionId: a[1],
|
|
87
|
+
current,
|
|
88
|
+
endpoint: encodedProjectEndpoint(c, pk, `/jupyter-notebooks/${encodeURIComponent(a[0])}/sessions/${encodeURIComponent(a[1])}`),
|
|
89
|
+
method: "DELETE",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
await c.notebooks.unloadJupyter(a[0], a[1], pk);
|
|
93
|
+
return { unloaded: a[0], sessionId: a[1], resource: "jupyter-notebook", };
|
|
94
|
+
},
|
|
95
|
+
usage: "dss notebook unload-jupyter <name> <sessionId> [--dry-run] [--project-key KEY]",
|
|
96
|
+
description: "Unload a Jupyter notebook kernel session.",
|
|
97
|
+
examples: ["dss notebook unload-jupyter my_notebook SESSION_ID --dry-run",],
|
|
98
|
+
},
|
|
99
|
+
"list-sql": {
|
|
100
|
+
handler: (c, _a, f) => c.notebooks.listSql(f["project-key"]),
|
|
101
|
+
usage: "dss notebook list-sql [--project-key KEY]",
|
|
102
|
+
description: "List SQL notebooks.",
|
|
103
|
+
examples: ["dss notebook list-sql",],
|
|
104
|
+
},
|
|
105
|
+
"get-sql": {
|
|
106
|
+
handler: (c, a, f) => {
|
|
107
|
+
requireArgs(a, 1, "dss notebook get-sql <id>");
|
|
108
|
+
return c.notebooks.getSql(a[0], f["project-key"]);
|
|
109
|
+
},
|
|
110
|
+
usage: "dss notebook get-sql <id> [--project-key KEY]",
|
|
111
|
+
description: "Get a SQL notebook.",
|
|
112
|
+
examples: ["dss notebook get-sql my_sql_notebook",],
|
|
113
|
+
},
|
|
114
|
+
"delete-sql": {
|
|
115
|
+
handler: async (c, a, f) => {
|
|
116
|
+
requireArgs(a, 1, "dss notebook delete-sql <id>");
|
|
117
|
+
const pk = f["project-key"];
|
|
118
|
+
if (f["dry-run"] === true || f["if-exists"] === true) {
|
|
119
|
+
const current = await readIfExists(() => c.notebooks.getSql(a[0], pk));
|
|
120
|
+
if (!current)
|
|
121
|
+
return skipResult("sql-notebook", a[0], "missing");
|
|
122
|
+
if (f["dry-run"] === true) {
|
|
123
|
+
return { dryRun: true, action: "delete", resource: "sql-notebook", id: a[0], current, };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
await c.notebooks.deleteSql(a[0], pk);
|
|
127
|
+
return { deleted: a[0], resource: "sql-notebook", };
|
|
128
|
+
},
|
|
129
|
+
usage: "dss notebook delete-sql <id> [--if-exists] [--dry-run] [--project-key KEY]",
|
|
130
|
+
description: "Delete a SQL notebook.",
|
|
131
|
+
examples: ["dss notebook delete-sql my_sql_notebook --dry-run",],
|
|
132
|
+
},
|
|
133
|
+
"history-sql": {
|
|
134
|
+
handler: (c, a, f) => {
|
|
135
|
+
requireArgs(a, 1, "dss notebook history-sql <id>");
|
|
136
|
+
return c.notebooks.getSqlHistory(a[0], f["project-key"]);
|
|
137
|
+
},
|
|
138
|
+
usage: "dss notebook history-sql <id> [--project-key KEY]",
|
|
139
|
+
description: "Get query history for a SQL notebook.",
|
|
140
|
+
examples: ["dss notebook history-sql my_sql_notebook",],
|
|
141
|
+
},
|
|
142
|
+
"save-jupyter": {
|
|
143
|
+
handler: async (c, a, f) => {
|
|
144
|
+
requireArgs(a, 1, "dss notebook save-jupyter <name> [--data '{...}' | --data-file PATH | --stdin]");
|
|
145
|
+
const data = jsonInput(f);
|
|
146
|
+
if (!data) {
|
|
147
|
+
throw new UsageError("--data, --data-file, or --stdin is required (notebook JSON content).");
|
|
148
|
+
}
|
|
149
|
+
const pk = f["project-key"];
|
|
150
|
+
if (f["dry-run"] === true) {
|
|
151
|
+
const current = await readIfExists(() => c.notebooks.getJupyter(a[0], pk));
|
|
152
|
+
return {
|
|
153
|
+
dryRun: true,
|
|
154
|
+
action: "save-jupyter",
|
|
155
|
+
resource: "jupyter-notebook",
|
|
156
|
+
name: a[0],
|
|
157
|
+
current,
|
|
158
|
+
next: data,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
await c.notebooks.saveJupyter(a[0], data, pk);
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
if (!isNotFoundError(error))
|
|
166
|
+
throw error;
|
|
167
|
+
await c.notebooks.createJupyter(a[0], data, pk);
|
|
168
|
+
}
|
|
169
|
+
return { saved: a[0], resource: "jupyter-notebook", };
|
|
170
|
+
},
|
|
171
|
+
usage: "dss notebook save-jupyter <name> [--data '{...}' | --data-file PATH | --stdin] [--dry-run] [--project-key KEY]",
|
|
172
|
+
description: "Save content to a Jupyter notebook, creating it if missing.",
|
|
173
|
+
examples: [
|
|
174
|
+
"dss notebook save-jupyter my_notebook --data-file notebook.json --dry-run",
|
|
175
|
+
"cat notebook.json | dss notebook save-jupyter my_notebook --stdin",
|
|
176
|
+
],
|
|
177
|
+
},
|
|
178
|
+
"save-sql": {
|
|
179
|
+
handler: async (c, a, f) => {
|
|
180
|
+
requireArgs(a, 1, "dss notebook save-sql <id> [--data '{...}' | --data-file PATH | --stdin]");
|
|
181
|
+
const data = jsonInput(f);
|
|
182
|
+
if (!data) {
|
|
183
|
+
throw new UsageError("--data, --data-file, or --stdin is required (SQL notebook content JSON).");
|
|
184
|
+
}
|
|
185
|
+
const pk = f["project-key"];
|
|
186
|
+
if (f["dry-run"] === true) {
|
|
187
|
+
const current = await readIfExists(() => c.notebooks.getSql(a[0], pk));
|
|
188
|
+
return {
|
|
189
|
+
dryRun: true,
|
|
190
|
+
action: "save-sql",
|
|
191
|
+
resource: "sql-notebook",
|
|
192
|
+
id: a[0],
|
|
193
|
+
current,
|
|
194
|
+
next: data,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const current = await readIfExists(() => c.notebooks.getSql(a[0], pk));
|
|
198
|
+
if (current) {
|
|
199
|
+
await c.notebooks.saveSql(a[0], data, pk);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
await c.notebooks.createSql(a[0], data, pk);
|
|
203
|
+
}
|
|
204
|
+
return { saved: a[0], resource: "sql-notebook", };
|
|
205
|
+
},
|
|
206
|
+
usage: "dss notebook save-sql <id> [--data '{...}' | --data-file PATH | --stdin] [--dry-run] [--project-key KEY]",
|
|
207
|
+
description: "Save content to a SQL notebook, creating it if missing.",
|
|
208
|
+
examples: ["dss notebook save-sql my_sql_notebook --data-file content.json --dry-run",],
|
|
209
|
+
},
|
|
210
|
+
"clear-sql-history": {
|
|
211
|
+
handler: async (c, a, f) => {
|
|
212
|
+
requireArgs(a, 1, "dss notebook clear-sql-history <id>");
|
|
213
|
+
const pk = f["project-key"];
|
|
214
|
+
const options = {
|
|
215
|
+
cellId: f["cell-id"],
|
|
216
|
+
numRunsToRetain: num(f["retain"]),
|
|
217
|
+
projectKey: pk,
|
|
218
|
+
};
|
|
219
|
+
if (f["dry-run"] === true) {
|
|
220
|
+
const current = await c.notebooks.getSqlHistory(a[0], pk);
|
|
221
|
+
return {
|
|
222
|
+
dryRun: true,
|
|
223
|
+
action: "clear-sql-history",
|
|
224
|
+
resource: "sql-notebook",
|
|
225
|
+
id: a[0],
|
|
226
|
+
current,
|
|
227
|
+
next: options,
|
|
228
|
+
endpoint: encodedProjectEndpoint(c, pk, `/sql-notebooks/${encodeURIComponent(a[0])}/history/clear`),
|
|
229
|
+
method: "POST",
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
await c.notebooks.clearSqlHistory(a[0], options);
|
|
233
|
+
return { cleared: a[0], resource: "sql-notebook", };
|
|
234
|
+
},
|
|
235
|
+
usage: "dss notebook clear-sql-history <id> [--cell-id CID] [--retain N] [--dry-run] [--project-key KEY]",
|
|
236
|
+
description: "Clear query history for a SQL notebook.",
|
|
237
|
+
examples: [
|
|
238
|
+
"dss notebook clear-sql-history my_sql_notebook --dry-run",
|
|
239
|
+
"dss notebook clear-sql-history my_sql_notebook --cell-id CELL1 --retain 5",
|
|
240
|
+
],
|
|
241
|
+
},
|
|
242
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { requiredJsonInput, } from "../coerce.js";
|
|
2
|
+
import { requireArgs, } from "../usage.js";
|
|
3
|
+
export const projectDeployerCommands = {
|
|
4
|
+
"list-projects": {
|
|
5
|
+
handler: (c) => c.projectDeployer.listProjects(),
|
|
6
|
+
usage: "dss project-deployer list-projects",
|
|
7
|
+
description: "List published projects on the Project Deployer.",
|
|
8
|
+
examples: ["dss project-deployer list-projects",],
|
|
9
|
+
},
|
|
10
|
+
"create-project": {
|
|
11
|
+
handler: (c, _a, f) => {
|
|
12
|
+
const body = requiredJsonInput(f, "--data, --data-file, or --stdin is required (published project settings).");
|
|
13
|
+
return c.projectDeployer.createProject(body);
|
|
14
|
+
},
|
|
15
|
+
usage: "dss project-deployer create-project (--data JSON|--data-file PATH|--stdin)",
|
|
16
|
+
description: "Create a published project on the Project Deployer.",
|
|
17
|
+
examples: ["dss project-deployer create-project --data-file project.json",],
|
|
18
|
+
},
|
|
19
|
+
"upload-bundle": {
|
|
20
|
+
handler: async (c, a) => {
|
|
21
|
+
requireArgs(a, 1, "dss project-deployer upload-bundle <filePath>");
|
|
22
|
+
await c.projectDeployer.uploadBundle(a[0]);
|
|
23
|
+
return { uploaded: true, };
|
|
24
|
+
},
|
|
25
|
+
usage: "dss project-deployer upload-bundle <filePath>",
|
|
26
|
+
description: "Upload a project bundle archive to the Project Deployer.",
|
|
27
|
+
examples: ["dss project-deployer upload-bundle ./v1.zip",],
|
|
28
|
+
},
|
|
29
|
+
"project-status": {
|
|
30
|
+
handler: (c, a) => {
|
|
31
|
+
requireArgs(a, 1, "dss project-deployer project-status <publishedProjectKey>");
|
|
32
|
+
return c.projectDeployer.getProjectStatus(a[0]);
|
|
33
|
+
},
|
|
34
|
+
usage: "dss project-deployer project-status <publishedProjectKey>",
|
|
35
|
+
description: "Get a published project's status and available bundles.",
|
|
36
|
+
examples: ["dss project-deployer project-status MYPROJ",],
|
|
37
|
+
},
|
|
38
|
+
"list-deployments": {
|
|
39
|
+
handler: (c) => c.projectDeployer.listDeployments(),
|
|
40
|
+
usage: "dss project-deployer list-deployments",
|
|
41
|
+
description: "List Project Deployer deployments.",
|
|
42
|
+
examples: ["dss project-deployer list-deployments",],
|
|
43
|
+
},
|
|
44
|
+
"create-deployment": {
|
|
45
|
+
handler: (c, _a, f) => {
|
|
46
|
+
const body = requiredJsonInput(f, "--data, --data-file, or --stdin is required (deployment settings).");
|
|
47
|
+
return c.projectDeployer.createDeployment(body);
|
|
48
|
+
},
|
|
49
|
+
usage: "dss project-deployer create-deployment (--data JSON|--data-file PATH|--stdin)",
|
|
50
|
+
description: "Create a Project Deployer deployment (bundle to infra mapping).",
|
|
51
|
+
examples: ["dss project-deployer create-deployment --data-file deployment.json",],
|
|
52
|
+
},
|
|
53
|
+
"get-deployment": {
|
|
54
|
+
handler: (c, a) => {
|
|
55
|
+
requireArgs(a, 1, "dss project-deployer get-deployment <deploymentId>");
|
|
56
|
+
return c.projectDeployer.getDeployment(a[0]);
|
|
57
|
+
},
|
|
58
|
+
usage: "dss project-deployer get-deployment <deploymentId>",
|
|
59
|
+
description: "Get a Project Deployer deployment.",
|
|
60
|
+
examples: ["dss project-deployer get-deployment my-deployment",],
|
|
61
|
+
},
|
|
62
|
+
"deployment-status": {
|
|
63
|
+
handler: (c, a) => {
|
|
64
|
+
requireArgs(a, 1, "dss project-deployer deployment-status <deploymentId>");
|
|
65
|
+
return c.projectDeployer.getDeploymentStatus(a[0]);
|
|
66
|
+
},
|
|
67
|
+
usage: "dss project-deployer deployment-status <deploymentId>",
|
|
68
|
+
description: "Get a Project Deployer deployment's full health/status.",
|
|
69
|
+
examples: ["dss project-deployer deployment-status my-deployment",],
|
|
70
|
+
},
|
|
71
|
+
"save-deployment-settings": {
|
|
72
|
+
handler: async (c, a, f) => {
|
|
73
|
+
requireArgs(a, 1, "dss project-deployer save-deployment-settings <deploymentId> (--data JSON|--data-file PATH|--stdin)");
|
|
74
|
+
const body = requiredJsonInput(f, "--data, --data-file, or --stdin is required (deployment settings).");
|
|
75
|
+
await c.projectDeployer.saveDeploymentSettings(a[0], body);
|
|
76
|
+
return { saved: true, };
|
|
77
|
+
},
|
|
78
|
+
usage: "dss project-deployer save-deployment-settings <deploymentId> (--data JSON|--data-file PATH|--stdin)",
|
|
79
|
+
description: "Save a Project Deployer deployment's settings (e.g. bundleId).",
|
|
80
|
+
examples: [
|
|
81
|
+
"dss project-deployer save-deployment-settings my-deployment --data-file settings.json",
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
deploy: {
|
|
85
|
+
handler: (c, a) => {
|
|
86
|
+
requireArgs(a, 1, "dss project-deployer deploy <deploymentId>");
|
|
87
|
+
return c.projectDeployer.startUpdate(a[0]);
|
|
88
|
+
},
|
|
89
|
+
usage: "dss project-deployer deploy <deploymentId>",
|
|
90
|
+
description: "Apply a deployment to the Automation node (start update).",
|
|
91
|
+
examples: ["dss project-deployer deploy my-deployment",],
|
|
92
|
+
},
|
|
93
|
+
"delete-deployment": {
|
|
94
|
+
handler: async (c, a) => {
|
|
95
|
+
requireArgs(a, 1, "dss project-deployer delete-deployment <deploymentId>");
|
|
96
|
+
await c.projectDeployer.deleteDeployment(a[0]);
|
|
97
|
+
return { deleted: true, };
|
|
98
|
+
},
|
|
99
|
+
usage: "dss project-deployer delete-deployment <deploymentId>",
|
|
100
|
+
description: "Delete a Project Deployer deployment.",
|
|
101
|
+
examples: ["dss project-deployer delete-deployment my-deployment",],
|
|
102
|
+
},
|
|
103
|
+
"list-infras": {
|
|
104
|
+
handler: (c) => c.projectDeployer.listInfras(),
|
|
105
|
+
usage: "dss project-deployer list-infras",
|
|
106
|
+
description: "List Project Deployer infrastructures.",
|
|
107
|
+
examples: ["dss project-deployer list-infras",],
|
|
108
|
+
},
|
|
109
|
+
"create-infra": {
|
|
110
|
+
handler: (c, _a, f) => {
|
|
111
|
+
const body = requiredJsonInput(f, "--data, --data-file, or --stdin is required (infra settings).");
|
|
112
|
+
return c.projectDeployer.createInfra(body);
|
|
113
|
+
},
|
|
114
|
+
usage: "dss project-deployer create-infra (--data JSON|--data-file PATH|--stdin)",
|
|
115
|
+
description: "Create a Project Deployer infrastructure.",
|
|
116
|
+
examples: ["dss project-deployer create-infra --data-file infra.json",],
|
|
117
|
+
},
|
|
118
|
+
};
|