def convert_dict(obj,defaultdict): if not isinstance(obj, (str, int, float, list, dict, tuple, extends.EObject)): return None # if isinstance(obj,) if isinstance(obj, extends.EObject): d={} typename = extends.get_type_name(obj); for key, value in obj.__dict__.items(): if typename in defaultdict: default = defaultdict[typename]; if value== default.get(key,None): continue; if key.startswith('__'): continue; p =convert_dict(value,defaultdict) if p is not None: d[key]=p if isinstance(obj,ETLTool): d['Type']= typename; return d; elif isinstance(obj, list): return [convert_dict(r,defaultdict) for r in obj]; elif isinstance(obj,dict): return {key: convert_dict(value,defaultdict) for key,value in obj.items()} return obj; return d
def etl_factory(item,proj): if isinstance(item,str): item=eval('%s()'%item); else: item=item; import copy name = extends.get_type_name(item) if name not in proj.__defaultdict__: proj.__defaultdict__[name]=copy.deepcopy( item.__dict__); return item;
def task_DumpLinq(tools): array=[]; for t in tools: typename= extends.get_type_name(t); newcolumn=getattr(t,'NewColumn',''); s='%s,%s'%(typename,t.Column); s+='=>%s,'%newcolumn if newcolumn!='' else ','; attrs=[]; defaultdict= t.__proj__.__defaultdict__[typename]; for att in t.__dict__: value=t.__dict__[att]; if att in ['NewColumn','Column','IsMultiYield']: continue if not isinstance(value,(str,int,bool,float)): continue; if value is None or att not in defaultdict or defaultdict[att]==value: continue; attrs.append('%s=%s'%(att,value)); s+=','.join(attrs) array.append(s) return '\n'.join(array);