Ejemplo n.º 1
0
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})
Ejemplo n.º 2
0
 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'])
Ejemplo n.º 3
0
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]
Ejemplo n.º 4
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]