def _db2job(self, dbinfo): ''' Convert a dictionary of DB key value into arc Job object ''' j = arc.Job() for attr in self.jobattrs: if attr not in dbinfo or dbinfo[attr] is None: continue # Some object types need special treatment if self.jobattrs[attr] == arc.StringList: l = arc.StringList() for item in dbinfo[attr].encode('utf-8').split('|'): l.append(item) setattr(j, attr, l) continue if self.jobattrs[attr] == arc.StringStringMap: m = arc.StringStringMap() d = eval(dbinfo[attr]) if not isinstance(d, dict): continue for (k,v) in d.items(): m[k] = v setattr(j, attr, m) continue setattr(j, attr, self.jobattrs[attr](str(dbinfo[attr]))) return j
def workspec2arcjob(workspec): '''Convert WorkSpec.workAttributes to arc.Job object''' job = arc.Job() try: wsattrs = workspec.workAttributes['arcjob'] proxyrole = workspec.workAttributes['proxyrole'] except: # Job was not submitted yet return (job, arc.Time(), None) for attr in dir(job): if attr not in wsattrs or attr == 'CreationTime': continue attrtype = type(getattr(job, attr)) # Some object types need special treatment if attrtype == arc.StringList: strlist = arc.StringList() for item in wsattrs[attr].split('|'): strlist.append(str(item)) setattr(job, attr, strlist) elif attrtype == arc.StringStringMap: ssm = arc.StringStringMap() for (k, v) in json.loads(wsattrs[attr]).items(): ssm[str(k)] = str(v) setattr(job, attr, ssm) else: setattr(job, attr, attrtype(str(wsattrs[attr]))) return (job, arc.Time(str(wsattrs['ModificationTime'])), proxyrole)