def delete_object(obj_info): """ Delete all the associated edges and vertices for a workspace object into RE. """ # Delete documents associated with this kbase object # For now, the ws_object document is simply flagged wsid = obj_info[6] objid = obj_info[0] obj_key = f'{wsid}:{objid}' results = re_client.get_doc(_OBJ_COLL_NAME, obj_key).get('results') if not results: logger.warning( f"No RE document found with key {obj_key}. Cannot delete.") obj_doc = results[0] for key in ['updated_at', '_id', '_rev']: del obj_doc[key] obj_doc['deleted'] = True # Delete the unversioned object re_client.save(_OBJ_COLL_NAME, obj_doc) # Delete all versioned objects query = f""" FOR doc IN ws_object_version FILTER doc.workspace_id == @wsid AND doc.object_id == @objid UPDATE {{deleted: true, _key: doc._key}} IN {_OBJ_VER_COLL_NAME} """ re_client.execute_query(query, {'wsid': wsid, 'objid': objid})
def test_arango_deletion(self): # Set up data and run the importer wsid = _NEW_MSG['wsid'] objid = _NEW_MSG['objid'] ver = _NEW_MSG['ver'] re_key = f"{wsid}:{objid}" re_ver_key = f"{re_key}:{ver}" releng_importer.run_importer(_OBJ, _WS_INFO, _NEW_MSG) re_doc = re_client.get_doc('ws_object', re_key) self.assertTrue(re_doc) re_ver_doc = re_client.get_doc('ws_object_version', re_ver_key) self.assertTrue(re_ver_doc) # Run the deletion function releng_importer.delete_obj(_DEL_MSG) re_doc = re_client.get_doc('ws_object', re_key)['results'][0] self.assertTrue(re_doc['deleted']) resp = re_client.get_doc('ws_object_version', re_ver_key) re_ver2_doc = resp['results'][0] self.assertTrue(re_ver2_doc['deleted'])
def _wait_for_doc(coll, key): """Fetch a doc with the RE API, waiting for it to become available with a 30s timeout.""" timeout = int(time.time()) + 30 while True: results = get_doc(coll, key) if results['count'] > 0: break else: if int(time.time()) > timeout: raise RuntimeError('Timed out trying to fetch', key) time.sleep(1) return results['results'][0]
def wait_for_re_doc(coll, key, timeout=180): """Fetch a doc with the RE API, waiting for it to become available with a 30s timeout.""" start_time = time.time() while True: print(f'Waiting for doc {coll}/{key}') results = re_client.get_doc(coll, key) if results['count'] > 0: break else: if int(time.time() - start_time) > timeout: raise RuntimeError('Timed out trying to fetch', key) time.sleep(1) return results['results'][0]