Skip to content

Commit a53eb1c

Browse files
committed
Cleanup
1 parent b650867 commit a53eb1c

File tree

2 files changed

+43
-34
lines changed

2 files changed

+43
-34
lines changed

dataikuapi/dss/recipe.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,11 @@ def obj_payload(self):
277277
self._payload_to_obj()
278278
return self._obj_payload
279279

280+
@property
281+
def raw_params(self):
282+
"""The raw 'params' field of the recipe settings, as a dict"""
283+
return self.recipe_settings["params"]
284+
280285
def _payload_to_str(self):
281286
if self._obj_payload is not None:
282287
self._str_payload = json.dumps(self._obj_payload)

dataikuapi/dss/tools/codegen.py

Lines changed: 38 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@ class FlowCodeGenerator(object):
2020
def __init__(self):
2121
self.code = ""
2222
self.cur_indent = 0
23+
self.remove_metrics_on_datasets = False
24+
self.remove_display_width_on_prepare = False
2325

24-
def set_options(self, remove_metrics_on_datasets=False):
26+
def set_options(self, remove_metrics_on_datasets=False, remove_display_width_on_prepare=False):
2527
self.remove_metrics_on_datasets = remove_metrics_on_datasets
28+
self.remove_display_width_on_prepare = remove_display_width_on_prepare
2629
pass
2730

28-
2931
def generate_code_for_dataset(self, dataset):
3032
entrypoint_name = "create_dataset_%s" % dataset.dataset_name
3133
self._generate_code_for_dataset(dataset, entrypoint_name)
@@ -99,8 +101,6 @@ def _generate_code_for_dataset(self, dataset, entrypoint_name):
99101
self.gen(" settings = dataset.get_settings()")
100102
self.lf()
101103

102-
#self.gen(" settings.set_connection_and_path(%s, %s)" % \
103-
# (self.objstr(srcp.get("connection")), self.objstr(srcp.get("path"))))
104104
self.codegen_object_fields(srcp, templates["abstractFSConfig"],
105105
["connection", "path"], "settings.get_raw_params()")
106106
do_not_copy.append("params")
@@ -210,7 +210,6 @@ def _generate_code_for_recipe(self, recipe, entrypoint_name):
210210
self.gen(" settings.add_output(%s, %s, %s)" % (self.objstr(output_role),
211211
self.objstr(output_item["ref"]),
212212
self.objstr(output_item["appendMode"])))
213-
#self.codegen_object_fields_explicit(raw, template, ["inputs", "outputs"], "settings.get_recipe_raw_definition()")
214213
self.lf()
215214

216215
types_with_obj_payload = ["join", "grouping", "shaker"]
@@ -226,6 +225,7 @@ def _generate_code_for_recipe(self, recipe, entrypoint_name):
226225
if rp.get("mode", "?") == "AUTO":
227226
rp["map"] = {}
228227

228+
# And some per-type cleanup
229229
def cleanup_grouping():
230230
for grouping_key in settings.obj_payload.get("keys", []):
231231
for item in ["count", "last", "min", "max", "sum", "countDistinct", "stddev", "avg", "concat", "first"]:
@@ -237,55 +237,57 @@ def cleanup_grouping():
237237
if item in aggregation and aggregation.get(item, None) == False:
238238
del aggregation[item]
239239

240+
def cleanup_join():
241+
for vi in settings.raw_virtual_inputs:
242+
if not vi["preFilter"]["enabled"]:
243+
del vi["preFilter"]
244+
245+
def cleanup_shaker():
246+
if self.remove_display_width_on_prepare:
247+
if "columnWidthsByName" in settings.obj_payload:
248+
del settings.obj_payload["columnWidthsByName"]
249+
240250
cleanup_by_type = {
241-
"grouping": cleanup_grouping
251+
"grouping": cleanup_grouping,
252+
"join": cleanup_join,
253+
"shaker": cleanup_shaker
242254
}
243255

244256
if settings.type in cleanup_by_type:
245257
cleanup_by_type[settings.type]()
246258

259+
# Output payload, either globally for code
247260
if isinstance(settings, CodeRecipeSettings):
248261
code = settings.get_code()
249262
self.gen(" # Recipe code")
250-
self.gen(" settings.set_code(\"\"\"%s\n\"\"\")" % code)
251-
252-
elif isinstance(settings, PrepareRecipeSettings):
253-
self.gen(" # Prepare script")
254-
payload = settings.obj_payload
255-
payload_template = templates["payloadsByType"]["shaker"]
256-
self.gen(" settings.set_payload(\"{}\")")
257-
self.codegen_object_fields(payload, payload_template, [], "settings.obj_payload")
258-
259-
elif isinstance(settings, JoinRecipeSettings):
260-
self.gen(" # Join details")
261-
payload = settings.obj_payload
262-
263-
for vi in settings.raw_virtual_inputs:
264-
if not vi["preFilter"]["enabled"]:
265-
del vi["preFilter"]
266-
267-
payload_template = templates["payloadsByType"]["join"]
268-
self.gen(" settings.set_payload(\"{}\")")
269-
self.codegen_object_fields(payload, payload_template, [], "settings.obj_payload")
263+
self.gen(" settings.set_payload(%s)" % self.payloadstr(code))
270264

265+
# per-field for recipes with JSON payload
271266
elif settings.type in types_with_obj_payload:
272-
self.gen(" # Recipe payload")
267+
prefix_by_type = {
268+
"join": "Join details",
269+
"shaker": "Prepare script"
270+
}
271+
self.gen(" # %s" % (prefix_by_type.get(settings.type, "Recipe payload")))
273272
payload = settings.obj_payload
274273
payload_template = templates["payloadsByType"][settings.type]
275274
self.gen(" settings.set_payload(\"{}\")")
276275
self.codegen_object_fields(payload, payload_template, [], "settings.obj_payload")
277276

278-
else:
277+
# Or as string for others
278+
elif len(settings.get_payload()) > 0:
279279
self.gen(" # Recipe payload")
280-
self.gen(" settings.set_payload(\"\"\"%s\n\"\"\")" % settings.get_payload())
280+
self.gen(" settings.set_payload(%s)" % self.payloadstr(settings.get_payload()))
281281

282+
# Then params
282283
if settings.type in templates["paramsByType"] and "params" in raw:
283284
self.lf()
284285
self.gen(" # Type-specific parameters")
285286
self.codegen_object_fields(raw["params"], templates["paramsByType"][settings.type], [],
286-
"settings.get_recipe_raw_definition()[\"params\"]")
287+
"settings.raw_params")
287288
do_not_copy.append("params")
288289

290+
# And finally other recipe fields that are not params
289291
self.lf()
290292
self.gen(" # Other parameters")
291293
self.codegen_object_fields(raw, template, do_not_copy, "settings.get_recipe_raw_definition()")
@@ -301,13 +303,15 @@ def gen(self, code):
301303
def lf(self):
302304
self.code += "\n"
303305

306+
def payloadstr(self, payload):
307+
if payload.endswith("\n"):
308+
return "\"\"\"%s\"\"\"" % payload
309+
else:
310+
return "\"\"\"%s\n\"\"\"" % payload
311+
304312
def objstr(self, obj):
305-
#if isinstance(obj, basestring):
306-
# return "\"%s\"" % obj
307-
#else:
308313
return ObjectFieldFormatter(self.cur_indent + 1).format(obj)
309314

310-
311315
def codegen_object_fields_explicit(self, object, template, copy, prefix):
312316
for key in copy:
313317
if not key in object:

0 commit comments

Comments
 (0)