def patch_and_report(connection, patch_d, skipped, uuid2patch, dryrun): # report and patch if dryrun: print('DRY RUN - nothing will be patched to database') if skipped: print('WARNING! - SKIPPING for', uuid2patch) for f, v in skipped.items(): print('Field: %s\tHAS: %s\tNOT ADDED: %s' % (f, v['new'], v['old'])) if not patch_d: print('NOTHING TO PATCH - ALL DONE!') else: print('PATCHING -', uuid2patch) for f, v in patch_d.items(): print(f, '\t', v) if not dryrun: # do the patch res = patch_FDN(uuid2patch, connection, patch_d) if res['status'] == 'success': print("SUCCESS!") return True else: print("FAILED TO PATCH", uuid2patch, "RESPONSE STATUS", res['status'], res['description']) return False return True
def main(): # pragma: no cover start = datetime.now() print(str(start)) args = get_args() try: connection = fdn_connection(args.keyfile, keyname=args.key) except Exception as e: print("Connection failed") sys.exit(1) # assumes a single line corresponds to json for single term if not args.dbupdate: print("DRY RUN - use --dbupdate to update the database") with open(args.infile) as items: for i in items: [iid, payload] = [t.strip() for t in i.split('\t')] payload = json.loads(payload) if args.dbupdate: e = patch_FDN(iid, connection, payload) else: print("DRY RUN\n\tPATCH: ", iid, " TO\n", payload) e = {'status': 'success'} status = e.get('status') if status and status == 'success': print(status) else: print('FAILED', e) end = datetime.now() print("FINISHED - START: ", str(start), "\tEND: ", str(end))
def do_patch(uid, type, patch, connection, dbupdate, cnts): if not dbupdate: print('DRY RUN - will update %s of type %s with %s' % (uid, type, patch)) cnts['not_patched'] += 1 return # import pdb; pdb.set_trace() res = patch_FDN(uid, connection, patch) # res = {'status': 'testing'} print('UPDATING - %s of type %s with %s' % (uid, type, patch)) rs = res['status'] print(rs) if rs == 'success': cnts['patched'] += 1 else: cnts['errors'] += 1 print(res) return
def main(): # pragma: no cover args = get_args() try: connection = fdn_connection(args.keyfile, keyname=args.key) except Exception as e: print("Connection failed") sys.exit(1) itemids = scu.get_item_ids_from_args(args.input, connection, args.search) taggable = scu.get_types_that_can_have_field(connection, 'tags') if args.types2exclude is not None: # remove explicitly provide types not to tag taggable = [t for t in taggable if t not in args.types2exclude] seen = [] # only need to add tag once so this keeps track of what's been seen to_patch = {} # keep track of those to patch # main loop through the top level item ids for itemid in itemids: items2tag = {} if args.taglinked: # need to get linked items and tag them linked = scu.get_linked_items(connection, itemid, {}) items2tag = scu.filter_dict_by_value(linked, taggable, include=True) else: # only want to tag provided items itype = scu.get_item_type(connection, itemid) if itype in taggable: items2tag = {itemid: itype} for i, t in items2tag.items(): if i not in seen: seen.append(i) item = get_FDN(i, connection) if not scu.has_field_value(item, 'tags', args.tag): # not already tagged with this tag so make a patch and add 2 dict to_patch[i] = make_tag_patch(item, args.tag) # now do the patching or reporting for pid, patch in to_patch.items(): if args.dbupdate: pres = patch_FDN(pid, connection, patch) print(pres['status']) else: print("DRY RUN: patch ", pid, " with ", patch)
def main(): args = get_args() try: connection = fdn_connection(args.keyfile, keyname=args.key) except Exception as e: print("Connection failed") sys.exit(1) id_list = scu.get_item_ids_from_args(args.input, connection, args.search) val = args.value if args.isarray: val = val.split("'")[1::2] for iid in id_list: print("PATCHING", iid, "to", args.field, "=", val) if (args.dbupdate): # do the patch res = patch_FDN(iid, connection, {args.field: val}) if res['status'] == 'success': print("SUCCESS!") else: print("FAILED TO PATCH", iid, "RESPONSE STATUS", res['status'], res['description'])
def main(): # pragma: no cover start = datetime.now() print(str(start)) args = get_args() try: connection = fdn_connection(args.keyfile, keyname=args.key) except Exception as e: print("Connection failed") sys.exit(1) phase2 = {} # assumes a single line corresponds to json for single term if not args.dbupdate: print("DRY RUN - use --dbupdate to update the database") with open(args.infile) as terms: for t in terms: phase2json = {} term = json.loads(t) id_tag = get_id(term) if id_tag is None: print("No Identifier for ", term) else: tid = '/ontology-terms/' + id_tag # look for parents and remove for phase 2 loading if they are there if 'parents' in term: phase2json['parents'] = term['parents'] del term['parents'] if 'slim_terms' in term: phase2json['slim_terms'] = term['slim_terms'] del term['slim_terms'] dbterm = get_FDN(tid, connection) op = '' if 'OntologyTerm' in dbterm['@type']: if args.dbupdate: e = patch_FDN(dbterm["uuid"], connection, term) else: e = {'status': 'dry run'} op = 'PATCH' else: if args.dbupdate: e = new_FDN(connection, 'OntologyTerm', term) else: e = {'status': 'dry run'} op = 'POST' status = e.get('status') if status and status == 'dry run': print(op, status) elif status and status == 'success': print(op, status, e['@graph'][0]['uuid']) if phase2json: phase2[e['@graph'][0]['uuid']] = phase2json else: print('FAILED', tid, e) print("START LOADING PHASE2 at ", str(datetime.now())) for tid, data in phase2.items(): if args.dbupdate: e = patch_FDN(tid, connection, data) else: e = {'status': 'dry run'} status = e.get('status') if status and status == 'dry run': print('PATCH', status) elif status and status == 'success': print('PATCH', status, e['@graph'][0]['uuid']) else: print('FAILED', tid, e) end = datetime.now() print("FINISHED - START: ", str(start), "\tEND: ", str(end))