@@ -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