From 572b5fd364665f80d01d3ccb9f68371e706f7420 Mon Sep 17 00:00:00 2001 From: George Thomas Date: Tue, 21 May 2024 07:49:01 -0700 Subject: [PATCH 01/11] (HP-1458): add external file download --- docs/howto/externalFileDownloading.md | 39 ++ gen3/tools/download/external_file_download.py | 348 +++++++++++++++++ .../gen3_metadata_external_file_metadata.json | 28 ++ .../valid_external_file_metadata.json | 12 + .../download_tests/test_external_download.py | 360 ++++++++++++++++++ 5 files changed, 787 insertions(+) create mode 100644 docs/howto/externalFileDownloading.md create mode 100644 gen3/tools/download/external_file_download.py create mode 100644 tests/download_tests/resources/gen3_metadata_external_file_metadata.json create mode 100644 tests/download_tests/resources/valid_external_file_metadata.json create mode 100644 tests/download_tests/test_external_download.py diff --git a/docs/howto/externalFileDownloading.md b/docs/howto/externalFileDownloading.md new file mode 100644 index 000000000..33f6f1102 --- /dev/null +++ b/docs/howto/externalFileDownloading.md @@ -0,0 +1,39 @@ +## Downloading files from external repositories + +## External file metadata + +The study metadata should indicate if data are hosted in an external repository. +This is specified in the `external_file_metadata` field. An example is shown below. + + +```json +{ + "_guid_type": "discovery_metadata", + "gen3_discovery": { + // Gen3 administrative fields + ..., + + [ + { + "external_oidc_idp": "qdr-keycloak", + "file_retriever": "QDR", + "study_id": "QDR_study_01" + }, + { + "external_oidc_idp": "qdr-keycloak", + "file_retriever": "QDR", + "file_id": "QDR_file_02" + }, + ] + } +} +``` + +The `external_oidc_idp` field is required. It is used to determine how to get a token from the `workspace token service`. + +The `file_retriever` field is also required. It is used to determine how to retrieve the file. + +The `study_id` and `file_id` fields are allowed but are not required. + + + diff --git a/gen3/tools/download/external_file_download.py b/gen3/tools/download/external_file_download.py new file mode 100644 index 000000000..bc20c9815 --- /dev/null +++ b/gen3/tools/download/external_file_download.py @@ -0,0 +1,348 @@ +""" +Module for downloading and listing data from external repositories. + + Examples: + + See docs/howto/drsDownloading.md for more details + +""" +import json +import os +from pathlib import Path +from typing import Any, Dict, List + +import requests +from cdislogging import get_logger + +from gen3.auth import Gen3AuthError +from gen3.tools.download.drs_download import DownloadStatus, wts_get_token + +REQUIRED_EXTERNAL_FILE_METADATA_KEYS = ["external_oidc_idp", "file_retriever"] + +logger = get_logger("__name__", log_level="debug") + + +def download_files_from_metadata( + hostname: str, auth, metadata_file, retrievers, download_path="." +) -> Dict[str, Any]: + """ + Download data from an external repository using + external-file metadata and a retreiver function. + + Parses the metadata for 'external_file_metadata' list + with IDP and retriever fields. + + JSON does not allow for storing references to functions. We store + a string for 'file_retriever' value and then map the string + to a function. + + Example metadata: + "gen3_discovery: { + ..., + "external_file_metadata": [ + { + "external_oidc_idp": "qdr-keycloak", + "file_retriever": "QDR", + "study_id": "QDR_study_01" + }, + { + "external_oidc_idp": "qdr-keycloak", + "file_retriever": "QDR", + "file_id": "QDR_file_02" + }, + ], + ..., + } + + Corresponding example retrievers mapping: + { "QDR": get_syracuse_qdr_files } + + Calls the appropriate retriever function to download data. + + Args: + hostname (str): hostname of Gen3 commons to use for WTS + auth: Gen3 Auth instance for WTS + metadata_file (str): path to metadata json file + retrievers (dict): map of function name string to retreiver function reference. + Returns: + dictionary of download status for each external_file_metadata object + """ + + # check for empty retrievers + if retrievers == {}: + logger.critical(f"ERROR: 'retrievers' specification is empty {retrievers}") + return None + + # # get access token for WTS commons + # try: + # server_access_token = auth.get_access_token() + # except Gen3AuthError: + # logger.critical(f"Unable to authenticate your credentials with {hostname}") + # return None + + # verify the metadata_file path is valid + if not os.path.isfile(metadata_file): + logger.critical(f"ERROR: cannot find metadata json file: {metadata_file}") + return None + + # read metadata + metadata = load_metadata(Path(metadata_file)) + + # get list of external_file_metadata objects + logger.debug(f"Metadata = {metadata}") + external_file_metadata = extract_external_file_metadata(metadata) + # TODO: Handle empty value - log error and return + logger.debug(f"External file metadata={external_file_metadata}") + if external_file_metadata == None: + logger.critical( + f"ERROR: cannot find external_file_metadata value in metadata: {metadata_file}" + ) + return None + + download_status = pull_files( + wts_server_name=hostname, + auth=auth, + external_file_metadata=external_file_metadata, + retrievers=retrievers, + download_path=download_path, + ) + + for key in download_status: + logger.info(download_status[key]) + + return download_status + + +def pull_files( + wts_server_name: str, + auth, + external_file_metadata, + retrievers, + download_path, +) -> Dict[str, Any]: + """ + Pull data files from external repo with external function. + + Args: + wts_server_name (str): hostname of WTS server + auth: Gen3Auth object for access to WTS + external_file_metadata (dict): + retrievers (dict): + download_path: path to write data files + Returns: + list of download status for each external_file_metadata object, None if errors + """ + completed = {} + + # loop over external file objects + metadata_count = 0 + for file_metadata in external_file_metadata: + # create an identifier and DownloadStatus to store in 'completed' list. + if file_metadata.get("study_id"): + filename = file_metadata.get("study_id") + elif file_metadata.get("file_id"): + filename = file_metadata.get("file_id") + else: + filename = f"{metadata_count}" + logger.debug(f"Filename = {filename}") + completed[filename] = DownloadStatus(filename=filename, status="pending") + metadata_count += 1 + + if not is_valid_external_file_metadata(file_metadata): + logger.info(f"Skipping invalid external file metadata: {file_metadata}") + completed[filename].status = "invalid file metadata" + continue + if not file_metadata.get("file_retriever") in retrievers: + logger.info(f"Skipping, 'file_retriever' not found in retrievers") + completed[filename].status = "invalid file retriever" + continue + logger.info("Valid metadata, ready to download") + + # get the idp for the calls to wts/external_idp + idp = file_metadata.get("external_oidc_idp") + + # user should be logged in (say via portal) by now and have refresh tokens for idp + # check that user is logged in to commons with WTS server + connected_status = wts_connected(wts_server_name, auth.get_access_token()) + if connected_status != 200: + logger.info(f"Skipping, cannot get verify connected at WTS server") + completed[filename].status = "failed" + continue + + # user should be already logged in (say via portal) and have refresh tokens for idp + try: + wts_access_token = auth.get_access_token() + except Gen3AuthError: + logger.critical( + f"Unable to authenticate your credentials with {wts_server_name}" + ) + completed[filename].status = "failed" + continue + idp_access_token = wts_get_token( + hostname=wts_server_name, idp=idp, access_token=wts_access_token + ) + if idp_access_token == None: + logger.critical(f"Could not get token for idp {idp}") + completed[filename].status = "failed" + continue + + # retrieve files from external host + success = retriever_manager( + file_metadata, idp_access_token, retrievers, download_path + ) + logger.info(f"Downloaded = {success}") + if success: + completed[filename].status = "downloaded" + else: + completed[filename].status = "failed" + + if completed == {}: + return None + else: + return completed + + +def retriever_manager(file_metadata, token, retrievers, download_path) -> bool: + """ + Retrieve data from external repo using idp, token, and retriever function. + The manager will call the the file_retriever function specified in the file_metadata. + + Args + file_metadata: the external_file_metadata with idp and retriever function + token: the access token for the external repo + retrievers: dict for mapping retriever function string in metadata to function reference + download_path: path for output files. + Returns: + boolean: True if data was downloaded and written to file + """ + + download_success = False + idp = file_metadata.get("external_oidc_idp") + # use metadata and retrievers to determine which retriever to call + retriever_function_string = file_metadata.get("file_retriever") + logger.debug(f"File metadata = {file_metadata}") + logger.debug(f"retriever string = {retriever_function_string}") + + retriever_function = retrievers.get(retriever_function_string) + study_id = file_metadata.get("study_id") + file_id = file_metadata.get("file_id") + try: + logger.info( + f"Ready to retrieve data from {idp} with retriever {retriever_function.__name__}" + ) + download_success = retriever_function(file_metadata, token, download_path) + # This is handled further up in main function. + except NameError: + logger.critical("ERROR: Retriever function not in scope.") + # handle errors specific to heal-sdk here + # + # other errors + except Exception as e: + logger.critical("Got an error") + logger.critical(e) + + return download_success + + +# metadata and external_file_metadata methods + + +def extract_external_file_metadata(mds_object: dict) -> List: + """ + Extract the list of dictionaries of external_file_metadata from an mds object. + Return None if the external_file_metadata is not present. + + Args: + mds_object (dict): the metadata from the input file + Returns: + List of external_file_metadata dictionaries + """ + try: + external_file_metadata = mds_object.get("gen3_discovery").get( + "external_file_metadata", None + ) + except AttributeError as e: + logger.critical("ERROR: Missing key 'gen3_discovery' in metadata") + logger.critical(e) + return None + return external_file_metadata + + +def is_valid_external_file_metadata(external_file_metadata: dict) -> bool: + """ + Check that the external_file dict has the required keys: + "external_oidc_idp" and "file_retriever". + + Args: + external_file_metadata: dict + Returns: + boolean + """ + isValid = True + for key in REQUIRED_EXTERNAL_FILE_METADATA_KEYS: + if key not in external_file_metadata: + logger.info(f"Missing key in external file metadata: {key}") + isValid = False + + return isValid + + +def load_metadata(path: Path) -> Dict: + """ + Loads a metadata object from a json file. + + Args: + path (Path): Path to metadata json file + Returns: + dict of metadata, None if failure + """ + try: + with open(path, "rt") as f: + metadata = json.load(f) + return metadata + except FileNotFoundError as ex: + logger.critical(f"Error file not found: {ex.filename}") + except json.JSONDecodeError as ex: + logger.critical(f"format of manifest file is valid JSON: {ex.msg}") + return None + + +# Might not need this one. +def wts_connected(hostname: str, access_token: str) -> int: + """ + Check that user is connected to commons with WTS service + Args: + hostname (str): Gen3 common's WTS service + access_token: Gen3 Auth to use to with WTS + + Returns: + response.status (int): 200 or 403 + """ + headers = { + "Content-Type": "application/json", + "Accept": "application/json", + "Connection": "keep-alive", + "Authorization": "bearer " + access_token, + } + + try: + url = f"https://{hostname}/wts/oauth2/connected" + try: + response = requests.get(url=url, headers=headers) + response.raise_for_status() + except requests.exceptions.HTTPError as exc: + logger.critical( + f"HTTP Error ({exc.response.status_code}): checking WTS connected: {exc.response.text}" + ) + logger.critical( + "Please make sure the target commons is connected on your profile page and that connection has not expired." + ) + return None + + print("No errors") + print(f"Status code: {response.status_code}") + return response.status_code + + except Gen3AuthError: + logger.critical(f"Unable to authenticate your credentials with {hostname}") + return response.status diff --git a/tests/download_tests/resources/gen3_metadata_external_file_metadata.json b/tests/download_tests/resources/gen3_metadata_external_file_metadata.json new file mode 100644 index 000000000..7f370eceb --- /dev/null +++ b/tests/download_tests/resources/gen3_metadata_external_file_metadata.json @@ -0,0 +1,28 @@ +{ + "_guid_type": "discovery_metadata", + "gen3_discovery": { + "authz": "", + "__manifest": "", + "year_awarded": "2022", + "project_title": "Project title", + "external_file_metadata": [ + { + "external_oidc_idp": "test-externaldata-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01" + }, + { + "external_oidc_idp": "test-externaldata-idp", + "file_retriever": "QDR", + "file_id": "QDR_file_02" + } + ], + "study_metadata": { + "data": { + "data_type": [], + "data_source": [] + } + } + } +} + \ No newline at end of file diff --git a/tests/download_tests/resources/valid_external_file_metadata.json b/tests/download_tests/resources/valid_external_file_metadata.json new file mode 100644 index 000000000..7fa9b0e13 --- /dev/null +++ b/tests/download_tests/resources/valid_external_file_metadata.json @@ -0,0 +1,12 @@ +[ + { + "external_oidc_idp": "externaldata-keycloak", + "file_retriever": "QDR", + "study_id": "QDR_study_01" + }, + { + "external_oidc_idp": "externaldata-keycloak", + "file_retriever": "QDR", + "file_id": "QDR_file_02" + } +] \ No newline at end of file diff --git a/tests/download_tests/test_external_download.py b/tests/download_tests/test_external_download.py new file mode 100644 index 000000000..53b71864c --- /dev/null +++ b/tests/download_tests/test_external_download.py @@ -0,0 +1,360 @@ +import pytest +import json +import requests_mock +from pathlib import Path +from typing import Dict +from unittest import mock + +from unittest.mock import MagicMock + +from gen3.auth import Gen3AuthError +from gen3.tools.download.drs_download import DownloadStatus +from gen3.tools.download.external_file_download import ( + download_files_from_metadata, + pull_files, + retriever_manager, + extract_external_file_metadata, + is_valid_external_file_metadata, + load_metadata, +) + +DIR = Path(__file__).resolve().parent + + +@pytest.fixture +def valid_external_file_metadata(): + with open(Path(DIR, "resources/gen3_metadata_external_file_metadata.json")) as fin: + metadata = json.load(fin) + return metadata["gen3_discovery"]["external_file_metadata"] + + +def test_load_metadata(): + gen3_metadata = load_metadata( + Path(DIR, "resources/gen3_metadata_external_file_metadata.json") + ) + assert "gen3_discovery" in gen3_metadata + assert load_metadata(Path(DIR, "resources/non_existing_file.json")) is None + assert load_metadata(Path(DIR, "resources/bad_format.json")) is None + + +@pytest.mark.parametrize( + "external_file_metadata, expected", + [ + ( + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01", + }, + True, + ), + ( + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "file_id": "QDR_file_02", + }, + True, + ), + ( + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + }, + True, + ), + ({"external_oidc_idp": "test-external-idp", "file_id": "QDR_file_02"}, False), + ({"file_retriever": "QDR", "file_id": "QDR_file_02"}, False), + ], +) +def test_is_valid_external_file_metadata(external_file_metadata: Dict, expected: bool): + assert is_valid_external_file_metadata(external_file_metadata) == expected + + +def test_extract_external_file_metadata(valid_external_file_metadata): + # valid metadata + metadata_file = "resources/gen3_metadata_external_file_metadata.json" + metadata = load_metadata(Path(DIR, metadata_file)) + external_file_metadata = extract_external_file_metadata(metadata) + expected_metadata = valid_external_file_metadata + + assert type(external_file_metadata) is list + assert len(external_file_metadata) == 2 + assert external_file_metadata == expected_metadata + + # invalid metadata - missing keys + assert ( + extract_external_file_metadata( + {"_guid_type": "discovery_metadata", "gen3_discovery": {"authz": ""}} + ) + == None + ) + assert extract_external_file_metadata({"_guid_type": "discovery_metadata"}) == None + assert extract_external_file_metadata({}) == None + + +def test_retriever_manager(): + mock_retriever = MagicMock() + mock_retriever.__name__ = "mock_retriever" + + mock_token = "fake_token" + retrievers = {"QDR": mock_retriever} + external_file_metadata = { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01", + } + download_path = "." + mock_retriever.return_value = True + + result = retriever_manager( + file_metadata=external_file_metadata, + token=mock_token, + retrievers=retrievers, + download_path=download_path, + ) + mock_retriever.assert_called_with(external_file_metadata, mock_token, download_path) + # assert that manager has returned the result of retriever if successful + assert result == mock_retriever.return_value + + +@pytest.mark.parametrize( + "connected_status, returned_idp_token, mock_external_file_metadata, expected_download_status", + [ + ( + 200, + "some_id_token", + [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01", + }, + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "file_id": "QDR_file_01", + }, + ], + { + "QDR_study_01": DownloadStatus( + filename="QDR_study_01", status="downloaded" + ), + "QDR_file_01": DownloadStatus( + filename="QDR_file_01", status="downloaded" + ), + }, + ), + ( + 200, + "some_id_token", + [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01", + }, + {"foo": "bar"}, + ], + { + "QDR_study_01": DownloadStatus( + filename="QDR_study_01", status="downloaded" + ), + "1": DownloadStatus(filename="1", status="invalid file metadata"), + }, + ), + ( + 200, + "some_id_token", + [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "does not exist", + "study_id": "QDR_study_01", + } + ], + { + "QDR_study_01": DownloadStatus( + filename="QDR_study_01", status="invalid file retriever" + ) + }, + ), + ( + 200, + None, + [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01", + } + ], + {"QDR_study_01": DownloadStatus(filename="QDR_study_01", status="failed")}, + ), + ( + 403, + "some_id_token", + [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01", + } + ], + {"QDR_study_01": DownloadStatus(filename="QDR_study_01", status="failed")}, + ), + ], +) +def test_pull_files( + connected_status, + returned_idp_token, + mock_external_file_metadata, + expected_download_status, +): + wts_hostname = "test.commons1.io" + download_path = "." + + mock_auth = MagicMock() + mock_auth.get_access_token.return_value = "some_token" + + # test with the same idp across all mock file_metadata + test_idp = "test-external-idp" + + mock_retriever = MagicMock() + mock_retriever.__name__ = "mock_retriever" + retrievers = {"QDR": mock_retriever} + + with requests_mock.Mocker() as m: + m.get( + f"https://{wts_hostname}/wts/oauth2/connected", + json={"foo": "bar"}, + status_code=connected_status, + ) + m.get( + f"https://{wts_hostname}/wts/token/?idp={test_idp}", + json={"token": returned_idp_token}, + ) + + with mock.patch( + "gen3.tools.download.external_file_download.wts_get_token" + ) as wts_get_token: + wts_get_token.return_value = returned_idp_token + + result = pull_files( + wts_server_name=wts_hostname, + auth=mock_auth, + external_file_metadata=mock_external_file_metadata, + retrievers=retrievers, + download_path=download_path, + ) + + assert result == expected_download_status + # assert wts_get_token is called with correct idp value + if ( + connected_status == 200 + and mock_external_file_metadata[0].get("file_retriever") + != "does not exist" + ): + wts_get_token.assert_called_with( + hostname=wts_hostname, idp=test_idp, access_token="some_token" + ) + + +def test_download_files_from_metadata(valid_external_file_metadata): + wts_hostname = "test.commons1.io" + mock_auth = MagicMock() + + with mock.patch("gen3.auth") as mock_auth, mock.patch( + "gen3.tools.download.external_file_download.pull_files" + ) as mock_pull_files: + with mock.patch( + "gen3.tools.download.external_file_download.extract_external_file_metadata" + ) as mock_extract_external_file_metadata: + mock_auth.get_access_token.return_value = "some_token" + mock_retriever = MagicMock() + mock_retriever.__name__ = "mock_retriever" + mock_retrievers = {"QDR": mock_retriever} + + # empty retrievers + result = download_files_from_metadata( + hostname=wts_hostname, + auth=mock_auth, + metadata_file="some_file", + retrievers={}, + download_path=".", + ) + assert result == None + assert not mock_extract_external_file_metadata.called + assert not mock_pull_files.called + + # # auth cannot return wts access token + # mock_auth.get_access_token.raiseError.side_effect = Gen3AuthError + # pull_files.return_value = {} + # result = download_files_from_metadata( + # hostname = wts_hostname, + # auth = mock_auth, + # metadata_file = "some_file", + # retrievers = {}, + # download_path = "." + # ) + # assert result == None + # assert not pull_files.called + + # missing metadata file + mock_auth.get_access_token.return_value = "some_token" + result = download_files_from_metadata( + hostname=wts_hostname, + auth=mock_auth, + metadata_file="missing_file", + retrievers=mock_retrievers, + download_path=".", + ) + assert result == None + assert not mock_extract_external_file_metadata.called + assert not mock_pull_files.called + + # invalid metadata + mock_extract_external_file_metadata.return_value = None + result = download_files_from_metadata( + hostname=wts_hostname, + auth=mock_auth, + metadata_file="tests/download_tests/resources/gen3_metadata_external_file_metadata.json", + retrievers=mock_retrievers, + download_path=".", + ) + assert result == None + assert mock_extract_external_file_metadata.called + assert not mock_pull_files.called + + # TODO: this case should be in test_pull_files + # auth cannot return wts access token + mock_auth.get_access_token.raiseError.side_effect = Gen3AuthError + mock_pull_files.return_value = {} + result = download_files_from_metadata( + hostname=wts_hostname, + auth=mock_auth, + metadata_file="tests/download_tests/resources/gen3_metadata_external_file_metadata.json", + retrievers=mock_retrievers, + download_path=".", + ) + assert result == {} + assert mock_pull_files.called + + # valid metadata should trigger a call to pull_files + mock_download_status = { + "QDR_study_01": DownloadStatus( + filename="QDR_study_01", status="downloaded" + ), + "QDR_file_01": DownloadStatus(filename="QDR_file_01", status="downloaded"), + } + mock_pull_files.return_value = mock_download_status + result = download_files_from_metadata( + hostname=wts_hostname, + auth=mock_auth, + metadata_file="tests/download_tests/resources/gen3_metadata_external_file_metadata.json", + retrievers=mock_retrievers, + download_path=".", + ) + # result should match the value returned by pull_files. + assert result == mock_download_status + assert mock_pull_files.called From f440cc5f9e86e30475d34db9ed0c1129897f61c4 Mon Sep 17 00:00:00 2001 From: george42-ctds Date: Tue, 21 May 2024 14:50:19 +0000 Subject: [PATCH 02/11] Apply automatic documentation changes --- docs/_build/doctrees/auth.doctree | Bin 32158 -> 32186 bytes docs/_build/doctrees/environment.pickle | Bin 1578733 -> 1579412 bytes docs/_build/doctrees/file.doctree | Bin 41145 -> 41173 bytes docs/_build/doctrees/index.doctree | Bin 5418 -> 5436 bytes docs/_build/doctrees/indexing.doctree | Bin 161346 -> 161277 bytes docs/_build/doctrees/jobs.doctree | Bin 27660 -> 27688 bytes docs/_build/doctrees/metadata.doctree | Bin 145433 -> 145533 bytes docs/_build/doctrees/object.doctree | Bin 13146 -> 13054 bytes docs/_build/doctrees/query.doctree | Bin 41145 -> 41173 bytes docs/_build/doctrees/submission.doctree | Bin 108387 -> 108415 bytes docs/_build/doctrees/tools.doctree | Bin 5236 -> 5251 bytes docs/_build/doctrees/tools/drs_pull.doctree | Bin 130169 -> 130160 bytes docs/_build/doctrees/tools/indexing.doctree | Bin 100101 -> 100291 bytes docs/_build/doctrees/tools/metadata.doctree | Bin 35919 -> 35934 bytes docs/_build/doctrees/wss.doctree | Bin 33778 -> 33818 bytes docs/_build/html/.buildinfo | 2 +- docs/_build/html/_modules/gen3/auth.html | 6 +- docs/_build/html/_modules/gen3/file.html | 6 +- docs/_build/html/_modules/gen3/index.html | 6 +- docs/_build/html/_modules/gen3/jobs.html | 6 +- docs/_build/html/_modules/gen3/metadata.html | 6 +- docs/_build/html/_modules/gen3/object.html | 6 +- docs/_build/html/_modules/gen3/query.html | 6 +- .../_build/html/_modules/gen3/submission.html | 6 +- .../gen3/tools/download/drs_download.html | 6 +- .../tools/indexing/download_manifest.html | 6 +- .../gen3/tools/indexing/index_manifest.html | 6 +- .../gen3/tools/indexing/verify_manifest.html | 6 +- .../gen3/tools/metadata/ingest_manifest.html | 6 +- docs/_build/html/_modules/gen3/wss.html | 6 +- docs/_build/html/_modules/index.html | 6 +- docs/_build/html/_static/basic.css | 2 +- docs/_build/html/_static/doctools.js | 2 +- docs/_build/html/_static/language_data.js | 4 +- docs/_build/html/_static/searchtools.js | 165 +++++++++++------- docs/_build/html/auth.html | 6 +- docs/_build/html/file.html | 6 +- docs/_build/html/genindex.html | 6 +- docs/_build/html/index.html | 6 +- docs/_build/html/indexing.html | 12 +- docs/_build/html/jobs.html | 6 +- docs/_build/html/metadata.html | 6 +- docs/_build/html/object.html | 12 +- docs/_build/html/py-modindex.html | 6 +- docs/_build/html/query.html | 6 +- docs/_build/html/search.html | 12 +- docs/_build/html/searchindex.js | 2 +- docs/_build/html/submission.html | 6 +- docs/_build/html/tools.html | 6 +- docs/_build/html/tools/drs_pull.html | 8 +- docs/_build/html/tools/indexing.html | 8 +- docs/_build/html/tools/metadata.html | 8 +- docs/_build/html/wss.html | 6 +- 53 files changed, 218 insertions(+), 175 deletions(-) diff --git a/docs/_build/doctrees/auth.doctree b/docs/_build/doctrees/auth.doctree index 797c48e20ccf26236ba1dd1c72f5195d82cf7cb3..974418d02ff837fb10ce42f9fbaf89a558056cd0 100644 GIT binary patch delta 3571 zcmb7HZBUa}7Uo_cUnVHs8bM3~f`$lGB1~(c32G}vvP7tYRI5M;5?(F%$cwXRnG(2uRPowhjAaYuGqYd`Hd_stt(o3ZJi zcka2l=Q-zj&Uw#$^ZT#aD_^s;L+Q^PpG@0qfg875!Eag1zJwFY%Hh0a12?3?(F8`%jc}qoUfvl!PtKE?N=#}>A$3|w znUZ#9t zt(%b*<;OD!%ZfG31Y5-%`yB;g5xJ`JkBt49jPdLY$a8hESK$fQ8uoXns?36ES2KG< z{ZVo+WUs)myU+YKCKU3u1#C2X@^*#;`8&hXzs9SwqHfNrhuDnjcB+cp-l-Zfe|Bp( zd174#V;uUbE9IH>4U8?KC4}yMidn_VeIFvp-ur5pxma`S3@&UO$4S#yU5lY#t*$lK z-1@xy%lj8HzDEPWMay8Q#>zV3`I?LTQQ9cu2Q~29;Bq*(NymoaolOn=sMu%E!iOF^ z{}UM&c+F(y&uU=OP|Qziz?oS~RjGag$uq==out-CYSNCh)slftgbDstd_q!I{rp4a7o9>RKVDjE+9HQe^ z55p1fht1x1*>Z5!W1%&$bMqc%gHxM3*rPS3$@#C(srDR|K;TVen-!yu>aQVS}=7s48x;e&B+tx$q)V2$F zjTXLjtbkKno?|bH3?qp%j8KNF;lfr2`&%r_Nx~`OBU)JKEU}+VD$xkM-nfeWN5xC#y!*|vmzuHuR~E8*C-9G%`8$#P#@mhJ;dWf{Z0DNBTrLJ>U>HHm`_NXnN-&M%@|8(j&;N4ZZ{DE9J+I@%dQd|&t%3p3diyKk};l4?$N?M&$SK#ci=1S9O9+BRn zCw^WA+#<;w$xWhJq#4=T@d@LN7%)0!8(>}M=e(OX%6LEzZM7@;Fj>kx#T}Zbqk1t< z(TdGeKRg|D8XGW$s1EILCfEW7$;BJ=G!mHy4)wbi9FNKHGWrH|VsY#B59nXbi3AI}p0M%yfDFK(hfN-6h7^_y92_`UzMl5u%k)f>z0N z#AP@(uv=-Y|6`9RFo$9=v?3UtDyY0^(8Ct>_x297^!0b_?%E$7W2?h3zOVMS(J@n~ zqkUlSU{A~b-M#%i;ZgbOzFfvm%9;DGaW)G21D|d^LeP)nBQ&Pp+t$-T?^_7}K}qz( vkx(EHKWN170b}5vz(&c3Z?Hs{uJkcAI=y$22UU=$^Q24kxFXk#G_mgiD9}6* delta 3356 zcma)8dr*{B6!%7KK z2UBn|ovEh&a6&&VZN{c%n$+x}Gv#EKN@@9M#?-Qznw-wL-|n(9j_p5p&%NLM{eI`3 zd(OH0;XknZ9|&Ei+m8D~tId(h3Nd1YGKmKd4Y731RI_=KL!R&Nwk3u*QeIU zM1;_uJG5tGAVxiw_?v)Y+Lwb>`Fc?pf?I0GLgBVl2h5e|T1H#y?u#Zi_lsTbY{kJ= zyh7;qiP^AB0t@kCMkzce?H)<;e6S>g3!>SRn>ndah&vxy$dkQRD@-PuBs`TCib+#V zI4UazSEnC>gMRM^H17x4`x8?5GbwyBC}Bdg_k$8RAicjO?HiKhk6=mId*Wj62XIX0 zcAl{J`vSdJM`f7-GBG9J2I<(G9V6015mNK;o$MsA({c{hxF>a5MoH-X zE^zo2q@!oz1gP^75clAOQfTqb#S%ZEr8PLhP^1GfPeB@u(YgC*++($gRAx%`-$Ys7 zcd%O?r(YhYpN}&eRKN0oUpeDYP|E%CC?|ac&@YejgKsX*`Ux%PgCo?ALOgVoe$-j} zY2>5q2s}!%nr>SQVvG)(>#ZVE#|6PZbQ)pN;r;|G1)zOWy(LQ*%!Lq=vPzUlB=Zbr zl!#i5r%Lk736_TwiwHQeBGrwP?Z7k6EFf)~0#pDy954V=YsY?o91@W#9M^B%M zxkasT1a}q{zz6&de=eFYj%%N~?U8U8H`qNfXULllXR|x$xn7GqrJ>iI*3hebil*W? zFUnrLNLPlJ#_<1*lX%4Q4!3-69^<^PNZT)%tJ&;U#rX%>_}T z=R}4I+*}(YD)cgsUA)~2PW-qbiJFTMqs;jkEvy>wLd5Z$UzK}$d<9-yFqU~Z4J+{H zCzjDz+L(jM>3S$9!Zd0LdYFj=bB>DFHSIpB-N)K_cx`T`IH2jj=hZhs51y{e%{Um8 z2Yq;QUY7V=qv*rI`Qx#+&MeOHg6&>L`;Wmf(ylJ2@&lbUbA2x-zE1gq)^KoMw74B8 zwC~Ay5n|xri4g{GYxa6?*BOF|U*ChY;w3ee?%@1cB3sk34AaTT2~J1e6UChGsSn33 zoJXVYo?Z*Mr&9|zQzA6g+eD*5_B#6EUe~S3cMg-ctPV<^NVr|m59>GL)kO}TP`48G z%*YRiUd+^EO=}{*=!W;T)P0;h%Mu0tb=*VAl*jHGc4#}ybPAi%8CXH<8y}_&+SQnr z+(Xgbq+j7wI#+vKy~=U&b(3L{GA?h_n=aoYn$&5{{DM}L$t?3FTT|Hj%5Qy5)+@>>9x=Zw zaV-7&a@(cX@rs=TWL7Sbr)?$bGS`~`bI6H8sK&~cKS7ZWHMwKO(s1r?)brTG3m&;Z z?FwF&3(2jyuoSCXvxPHUrg&84L#Ar4RX%(kLCn@NDN)Ey%Yhmo&z;enx2x zV^kM*%>q=PDT{W%CR2xNap&@`wx?DtU9qyQ*8!@jI~m}Bn!D2Rk||CQg}M)x%L45f)GUEv3lN{|MwQl*@HRyZY<%RF3H Jm#nFS{{T$p$JYP= diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 9f457f8fb389bf65d1278850f4bb352690cb6e8b..dd36591917300cd2db3f5ed94d274c8a3f101684 100644 GIT binary patch literal 1579412 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

PVQOHxcNXQ-J)#0p})?H8ai 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 z�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


4t@D8P9VK5Tcf?!DPHy zy#y%O@RwW#E{RO60RK2yFO9j5%X2NP6SJZRJU}wSmBDe=Yi@3H2XU~H$oRd`2OJw@?x4$jMCOa0Nho-Xyh9D#2 zo*iHn?nriym1eQO#OnYi7*Jx@sfPKhWel%Mzgr3G|!b{;mB6?!`v5y3YuUI~XOi&qZtY zkSTtn%UgC|DwmLeveiRhlH3|s(E-D_I1gdQ4eP~L`4R4>WDxfNVugTfy)EPo2&0R^ zd+D4BqINeQ7Y_NUf?5IlJcuv{&IQvHT|x(R$>_gwe*zPG%}Tw4gbh8bro;e7Is`dg zkf(6xyX)BVM*-Whk#Y;e5^pB*=EG3pmVg3S0nHzBI|((y-Vut2>-UC8Nr5C%fyR=} zht*9Nh=LCdOftT$J|D4Owli-ecqCQ)Z(&wu+kVLtW-@``_ww~)i&f=v2@jVG4Ne5UCwnG^`VTUTLGuNd-X(6J531NQG_szGO2S6 zVn~W_Vs_F12J1kPEoI?i5I4+d7sEhn;BZacUhikJr+JBg=3(Cc_ zf&QrBN!RGJAZw__Bx$D1)!Sf#PDXb+;{wm}@rQ}hJ#Qb<6i&Mk>cZo6?Qt;R8fdHQ zr_P;$Kb0ID&m{*0B8;CPjxNd4#q(U~n=k#-G!Jo3g>xJ3sjRe%`-$lWBG;Qiu0wdM z+{YX#ZrMd6awoPPj+vmo#WQ=HZeGVul0vKM1y4OS6M1G*&Uj zWTj)%oLD+Y4h(^g zw1$tL0S~QCFU#MYHG-YhPRNn6maT;9opD}3d(w`fdrwQB&eXKw;oVX3}x6#4>o=S zRb%7r0#qY`ss_cxPa`38oIJCd<17 zs746YEKt)CDqrT^3X~T>mCq@L%C>t?2Fi+}%YxGeRLNBD`IrV27cmL}-|0DJVps{jB1 diff --git a/docs/_build/doctrees/file.doctree b/docs/_build/doctrees/file.doctree index 4c3eb53b526fc38d40abe13c489fec993632c965..94b5d49c31226b76582dacb1cd6c64bf25979951 100644 GIT binary patch delta 5401 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 K!`q)5+r diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 8179ccf0ba5f704a7db2486246125be8c8415585..b97c09ddb910dfc711f202b945d144b12f15c8d8 100644 GIT binary patch delta 142 zcmZ3bwMUDkfpx0kMwaQE{IVH38FJnN8PXZ^Gh{NDH?QQZWP}O|!UYYuyBUQbDurNz zrAeui{W&E!Kjn#H6e!BiFNrTGN=?hGn9{?jKV`BlpO;Wa4{vd5a!FokZhS>reo^j} Zj?J_A6c`z+Ht*s8#>CjMd5cgP69752F4+J8 delta 118 zcmdm^wMvVnfpx0DvS?#2*1!&AmMIfTzc t#GA2)w>UMqB(F3#z9KEZD0hlCrD&q) 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 delta 23936 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 delta 3158 zcma)8Yf#ix6z3lH_0L_&CSSZ?5i8IlpiU&PET96WfD%4f1Pt8%1wMc%O-jqcTFT~Z zj~RQQmWiVj?O67u(s68@rfHh^fITS7shM8d^qQ$=>YRJ`!2%!ra_8(l_nz}RzjJ=~ zzsJUecT5-_GCm_l40oo)=m$kql>QOW@&Z}-NJ^n7M`vmQ{+6;*)UyS3(KstB5g*Dk zV$u>b4yNYLZHT4|Wwi811n_^Kx>pD<-O91dBCjV-@5h(Z=Rkin?pjgt_@*?@aC%9#=tpNp0qo-psrY=x zi(+gdm{AF4l)*Ug-dhvI&l1oNQvqGMCP1Up0vbgEBu4Q}W)ZE7=aV2F8=jh(h%4$c(u`tU)eKpAS(-+!g=39mZ ze8@TD@#E!*@PPrZEZ>4T4l6#I+XdgSCjq}+F-MG3;3Q0*XBD5}#)Y-;ci8o3&;_4y z-b5TU8}Q56nYIropC{fE?Mcut8nC6(gFAC);Cp%VIZtWEylDNb0Z+yi%}6%Vu(k1= zW@1sk%XX13CRPjT{W$|3s*1zc^0z^*Q4)H!(1=w9J0Qo1hiZ!P-vT>SC=XGsxhRy% z=d6v#2Nw-Pvvg{KX>By(VESy)h&vZoLl3+1VTWFFclXc+baD^A=rrT|W%GfeNu3Osq)tW|kJQN*SX}P1y~-DrP7atzCw6?RyaO&P zW=SWr6ZEITM=k}@;Gwi+$-{xb2I+LTnE^ViH<&|oq+@gC0NuT`Di*9} z$-x@(Dh@VcU6sq4&ZiXzF*sO-u$gmY(@b#rGsE8IK-ggU)|kKs!A{3LYv*BqYrJA$ zCwUYDyV#NpNb4FH;Ec=w_N}}Kz7PS{1EFkQ4?f-G#&=iRP+L_r!J!|fayQ|~Du*~A zOMXI?{0@VVZ9jt*tIMs2Ig~1SfJ%VI9SsP<7$(XYWbWm zCQzD^+IqMWJZy%axB+(f+#D1seN>a{>cDD|RPt5L61e($-8x9IkUR@8u`w4r)>xH5 z&oIa-uVjKHB+ytk?VwqLNnlLovjhZs9!u92SO*xQ(!ybC%6xEG!pd|I2-TN*wq#$V zHK{MGOuW5*6gs&8DNLbb(;Xu=oy$<+AF#+zQsKJm@X3Z)(CH|DlG-eC%#agE&JUt( zoy+zBUsRlLvB*zS@45|eL=mJuNzLf3x8k<-CK#j>H7#&DM4xtwuP5k~(^+dr=Z1W^ z5WH%J^NN{MVP@X6Ait5{g#&yW5#aR3T=*y0gd){|gN%4e1O5s(;CGeg+lVw1UPwY6 zd?B}Rwh&G9LV~X0Zg;Gbho%MF;9yI(L0XgA;2(GQ3#inBJ%9=gA8YEuxy?&$6?8L@ zp+TcYG~v6=Ieb7ip+u8S=;ZLS3HM@6i__M?msAs6ntbohw>Y4W69ffc8a}cskRl{_ zS73u0(SX}p3sg1F(5@P)XW5d~NNZ9xH%{~1mEwP`?JCTXP?%RjVWc%FjQ_;u3W3pW zD{ib7URzh&=I+j(j!pNqZ{5-1s}_EDTe1*i{=W7<0jdS|-1XywCpq46TDrViXG=#L z|9R`8zs5Q{_IG(w=wGt*d#s+No(lac|B?EGm$Uro;(uZK0Keq?ozbnVQ+{IgCwSp! eiDsS_mWE!!xwtnyUR(Rtt=*klyZvA3mEwPCb#xK{ diff --git a/docs/_build/doctrees/metadata.doctree b/docs/_build/doctrees/metadata.doctree index 75b1f469430ccb9ad6f5ac123654d9ebdc9945e7..17fa5e908c6faf1cc759ecc6435bb0a23e533024 100644 GIT binary patch literal 145533 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 diff --git a/docs/_build/doctrees/object.doctree b/docs/_build/doctrees/object.doctree index 8b3d30b62179b4375cdb185a4e900c70f4839629..45456f19fe497007482dedf0139a6dbcc2331993 100644 GIT binary patch delta 1160 zcma)4T}V@581DV1Zl-g`<#C&Ho1Urr@oz3O#DXY;G9r?+=pu1CIew%wr(o7f=^{lh zjCX|)hS!3B?J^1_$jFO~h@h^-EW(Q{F_0+wzB5mH(SObzyDR5D^Kk7nlhZa4V}!H^ke&D5Bqb zI@QG!`x%g})QESjtME|aUNQ*iNK3-;>|Pi}t4)R(wQgtvHe#ide3C27*;>JcUb_qH z?1$j>_J1Z=#5sE=StK|wm7>;B3ZGO8EGf{E<@oVOoT<1V6uUk%Iy%Lu2k10Iiaej; zQg^!LLaL98F5;TQ2fud{F`e@{b&!ToP!1`0%~=Fn_{dr47BqWeB>3H#!ELS=93(Hf zDar7HpUq02vrl(`F5ta92S}JLNqAf;gQJ+6Urs7DIByrB66d5FP^+k)+fjF2*pqrC zt~)u$H|D*9O*?QzNcgY3A7}IY_$99r`W5*|Tt33&eK?li1P>GoxXZ%mo-9NZ3lYUa zuWCW3-T>P#XYzdfI-V()gJUi&O!B(!O8ikKaLH8zZ<(!Pbvc%p^!9ROqh3nGez%jo zKl_8NRieg9msKTBN0u~L=8<;zd>$_u z4Fzb|^^Rba>JwP1YYv8+wsYL{d_9rQs&s;Hm61nz91i@8GFUW7MFlezG%09S(4t^g zEVuA12%Vu&S3^fTdOE$G}Ox=Je=I#*cRmW!qG^S^2T6T&W%LfN?%TukH{yfz|KX*Sc1PE{sO)g BOauS` delta 1196 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 Bk7)n^ delta 6431 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 delta 17397 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 delta 83 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 Xp_v7P1^!U%K|jNv@S4Qmp+Ec&B3)OW delta 17306 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 XaHAbUpVcV#XrW|sw))6lVJQ3`_n~F8 diff --git a/docs/_build/doctrees/tools/indexing.doctree b/docs/_build/doctrees/tools/indexing.doctree index 2aededbb03f914c8964dbca67882cebc4e62027d..9c1fed990bc604e2eda05ab1cc3655714ba07bab 100644 GIT binary patch delta 8359 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 delta 8071 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 diff --git a/docs/_build/doctrees/tools/metadata.doctree b/docs/_build/doctrees/tools/metadata.doctree index 2aeec7339eeb036dc82cfeb6c19605dd4450aa84..ea06b104bc3d147a9aac1928e80f5562143cd2da 100644 GIT binary patch delta 444 zcmX>!Lj17zp3{CY+%uFrKOpPaJ>f3A%(&Au6m)M-Czl%cz zO|@Q5e!BYPgE_*Jy(~=8bxiKFa6%W`eBYwlS)eFCza+k(C^ap!VoDFA{*=iPHC{p; zJ-o%K$t8KEx$zZg`9--?IyP^sQD9{Jy7_wTHzvl8&F34YGcsClPH)m?V$7I)q1})v zm3wlan%rddcEQPCTNI>|xfvKTq_f(XfRs!IbB1h2e1@F2RB2LH%4CDq<%}(0O^pyu znr+66$&+K-Bp6dB7qrJSE&xl;g_$VCSU1_KT^fg(3Scuq+IEAr?SN}jr~^8phpjlj zv?w`sN|q5TkjIjfnU^}nTeLJoJ1co}aEB`+x~P0S39&5ZSoEzB)V42&jc>f3A%(&Au6m)M-Czl%cz zO|@Q5e!BYPgE_*Jy(~=8bxiKFa6%W`eBYwld2&vThln?04{vd5a!FokZhS>reo^ie zZ^q5XY7`h5KW~0s`;CbS$i3Gvosq+mn}H!iwx@kEUwHfE02cnu!p(h*jA@e%y9^nV zCku8MOlE0SkWK`tlFn*l0#Y&=%o(y7@fmX7Ql&{*Ns}*j%1n-K?PhEO>!}Co(U|Pm zrp1^zIj2p65hNeaI1em08z^VUSTotPT^fgp3Q!Z{8FzwpYy;^~r~%sE!&aPMT9lkR zCCi8v$YaUL%uAi(En1qPot3ybsl%0#@#5qaof=U49)fk>1L;=Bty>DL8{)M~n|F8V KgA94yT?_#7ypHGq diff --git a/docs/_build/doctrees/wss.doctree b/docs/_build/doctrees/wss.doctree index 81babe9abcf571d7c29b0d8187df1c07e2b9ce2b..4d973cdd25440d97c4fbbbe71725a8cd81d51cde 100644 GIT binary patch delta 3778 zcma)9drXv97Uy2(@y*Ne!GJ8xz|2?%2C$U@>gXslqCv~n<)tNx@^WlO`L*X}jrT+iFv~Sz?3fX5+3Uwz}yit*vE4x=Gord(Qo4#v%N} zKi~Q8z2~0u`_B2DbMN=>U-OrSxO!0i8}l>c>QZ~=u&!%hT}S7>zV_gV{Cl31G%Vpn zYkPA~&q(A6`_CEM09PHw+?x#cYzy;($yv>6aH>#BN=`}&Wyn8+>YRF49S-CSd<@B% z^h%~=D{1_)FO)Bvn9%jYRE~vgo#=OCzQQL>sWh-v zG7L2WU{)9WP#ESNxWVXwS626NSq0mC`}s)~jQc#gbWYJnyL?Ynwu-~F7CuCP^ zIUty_)BJ12{a1>66y*NFJoo<E^Vkuwy0lzNaSOQeU#L+V8O1D`6UZt}Cn#Ozw$x830LzIBRRl_~ zqDqadI0pAhud+56Uu%Uw)!KMa4b!zUZ18EJVQn27#D!vhL=88xZGs{FxIK{}?3~aT ziEHqFb(|qVRF0xKq!tYE?=-`nb*bbAS&}R_sli`ZD7{aLbMgdyyv}PnL<5B;Eo!7m zE_l}WvQN>E4g4lE3>q|WYkfPLgsr{<7^B$yv`;I2L3^$8A-LxoWB-dUedo~fAJu|6 zC@6I+G>Obv3V}^oK+Lgd=I3kz4K8F38o`{ANvgpgA+yXw1I!u!j~c=Q4x$d5h0A4U zc%?=Vw?ZS_qagQ9^W5(d?vXhx7s>+pu9iiCsDS4K7LEoH0|_Dy3L?&CH0b8Dl!-h( zLx}SD7iwY+pH}b@Z6*mZ(ZiOMcri9kBbvr=;jh@j0ly$RZkYeX}#Z@$I< zqM>HOCo~Xlmf`X?16zEi%bP zWXV>^aiIhP+np&Mny@C$+q4)X$BN8(3uGx>Y)D%$pQ05#YOhxGsNKpsehl@f0WGDP z^}&gsrt&_m$n+V3G}fY?L#qnW&f?C*7Gs#|&-xRK?J&kEadzxMp0<=X4P!IwXL^BkG;DZP_u9aKd*kE#Hk; zus_v{2_hQCEZUzwN+19%t4Sv;*qjK(f ziGjTbXZO0<+hXj`HBjuL9cUxPP3b@wJM2INiI|}xNP-!s=}okt(~)rFHO61liMz}g zbT!{*??Y8fF?$DnJK?fdVsGKwYSS3*iJE;A?cp88Tw#W9oA7jNO<`k*`6v85emkB) z|0LBp`5s(rEjPYN110mLux#HsK1+csS|VR~xGS(sFmRh5 z#)E!1((yI>E1DOfFiyn{4a+dItO=HMwz6-;2mUMmfzn;nnpf}12I>g>L0pC3eHep> zHsw1QgWX^b7xJlS943`Gf0RC)%FB|eX7(}&S zUla~BL^!Sp95|q2zmkCCQX&p2_XeDB^GZa6hrm{`iiZG(Zf0PO>3TfP6gR4K1VcAe zATXlNGmSC2WE%0Ru^IA;tS{84;Lb0~QuAm{Xu0EBZqj-@a`5n0wzRvmv$wIUJGj5C ze`J_FIs$JTd1Cp{u&F25+Iz6Cqp^Q~XLrZQP-OYhY{r@*o?}07HU#-6zRB^By~ps; zGpsw<+!5>@=nD3X937Eq;n|*${pd)p{22I7+BQ9)A1nI%!RsqN=$0#ArTYOfd?_@IiEC+RU2dFA9z_J4&D3F80& delta 3775 zcma)9dr+0f70)jB4cCtHFrXJMkILo31uqCxuu&nTQq+K9us*5~RBk?m3KvXbf?}E0 z*iaL4$ivz?(u_0hOfpJuW}2kZUst}jAC+UsPz;6 zG?*EvUJWr-m`(RmZDIwRN};oPCOVXFr7tsHmPaDsJsO+^z<;d4k1Oz#^8)Wt;Jlu} zMGq~`ER@^{V|UNR4!xD>6EQbnHWs^aBZ>ygyXeWRe@Tmp4!4%XND~LNG!PYV_3oux z3+w6LVjB(nOytPkB3&llG8a|vOAv{)CMR3Qo5;QLQCS$#`@{OFSf4Xu%!o6QDA`KF zmnS6oeM#ajt@q{Hw*hY2Xf)ABb+PoCZ>2L1n&c|MyLvB*ge#Mxa@%Ax5DMt$xt$_F zDS1t@8;Tqn4_fVASm6S~)!0Zyhc{u<}?7%0=0q!udxD$3@a@K)~vNW2=w8~@9q|r+?R@r5uiLxwtKxTQ@6a{6`Of8F$Qz87y!>3oVKn3oMEmu@(+`PR5V0kq4Op3mI`Rgp_9iYTV%n zG&TOserIHf+cdQLn5?uYj~G}~(BU-+vcjTpcWB&gz-3}AvnXQJ&kLVT0G|c$S)k;w zm`QtC#zvI`<7MfJ88_jPVurXv<7HlXSt~${(HXyE7b#-YW7{+_cRYa~iahaPrUin9eG#XwK9W%l< zW?(MS`NzJ8#ocv@@&k)vfZ58!(}vTkO2b><$a7x80?mN)7G^+VNUU2XWSSM*YjX2^ zdbwd2gGZYs^Lr`%zOqFYVKje%u^i@-t1wW&CNt7(erPal@SEvzN$9xd&RVQyCC2Mn ziy-u#XiFPuZLnT$SJ)^+wk_HMhf?*Xd|KvlNbgFs{e}O%uutf{4t?^0&9Zjw+*iQR-E+4$Nby^ROE#g%Anrdt1R$G{5qKpe{kIrbBf}vcv}R+1>!gv~h|i>Q*{y(9yhG#q;?}`ugS? z`7>BYlCZ=mz)r#c`dTOrhcQ z80zlyd2aIBx#T#7{sZKIAwD1$r~@px4nc&k|BsZ-nWu*wvni&0)vi2*BdK=f2n#q; z!ab&Ev0YO|+7(q++2`X4EU_mn;0X&4aUCq`zU#v~isy;n&K|#yn>T8cmIp zyvp@3?TlYQHM`p6ZGdsz`AKBPO*_4`*XulaACj+VG5vLKYJ%Mnj>LhMip1gINFFgO z8#Gn^NXW5glMory-C8Q#bi8RwmO5rbD&{6%x&`!kph`Xw(LWy6zwuP9Y>w!glwKA% za2Y$@3_25jzC(rocOy%>9SC0}QCnNCy$@5SjpGg#eS5RdnGcPQ-o=Y%qW`%0IXM8F ze5bKAGUFs2+neol-G>tn{$1AUV|))S75sZM!NUZCr&n99i;q?8V|1={Onw%LJF7>GV-f6YIz~^MPmbvrM^%iO(JIEgXcgnH+6tZ5ut>*v5iw>` zMth4WW(Xg3M_cGZdxu;Rjl>u0l@fPBCCs>tYjh>}rf6dI3fUN~5{(5Xns{DKUB1C8 zpJgb%3J&s$x!InF{sY+#Bb;L_kYg;6?JUAMR?o&b$G#nnG#BqE;IkT-1%O9qfqw&F zF5P|Pem`EPnVwx)mDzAg$z8{2+ZyYmnW%Z^-V8_nix8 zx9FpW11Sl8@JS_iQcRc?Nim!fkJ4Wb)F)&@sfInX!yXJ5hmJhAPSE7@>*A_JuQRy2 zv7@!KW#=<{zSG{)UnN4NU2Y+^hqfR5Ldq&ZPaOXIkRKLu`4jB5w>Grw?s#_J?qGjc zzkz|H!9Z$PzekM+VgjoI6~_1RL)nW@CLYQ;_}s;B6@Gb)9e6V0d24)tcM={tMhVI{ dZXV+V=f8n+V - + @@ -720,7 +720,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/file.html b/docs/_build/html/_modules/gen3/file.html index e7a6c5036..3a7945131 100644 --- a/docs/_build/html/_modules/gen3/file.html +++ b/docs/_build/html/_modules/gen3/file.html @@ -8,7 +8,7 @@ - + @@ -359,7 +359,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/index.html b/docs/_build/html/_modules/gen3/index.html index 2ac12ffd6..55c89c086 100644 --- a/docs/_build/html/_modules/gen3/index.html +++ b/docs/_build/html/_modules/gen3/index.html @@ -8,7 +8,7 @@ - + @@ -1100,7 +1100,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/jobs.html b/docs/_build/html/_modules/gen3/jobs.html index 4584edd42..b3f266ef7 100644 --- a/docs/_build/html/_modules/gen3/jobs.html +++ b/docs/_build/html/_modules/gen3/jobs.html @@ -8,7 +8,7 @@ - + @@ -331,7 +331,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/metadata.html b/docs/_build/html/_modules/gen3/metadata.html index 733e14789..0dc385551 100644 --- a/docs/_build/html/_modules/gen3/metadata.html +++ b/docs/_build/html/_modules/gen3/metadata.html @@ -8,7 +8,7 @@ - + @@ -1118,7 +1118,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/object.html b/docs/_build/html/_modules/gen3/object.html index a531e5a3d..ec15a5180 100644 --- a/docs/_build/html/_modules/gen3/object.html +++ b/docs/_build/html/_modules/gen3/object.html @@ -8,7 +8,7 @@ - + @@ -150,7 +150,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/query.html b/docs/_build/html/_modules/gen3/query.html index 45c3491f8..090d4c48f 100644 --- a/docs/_build/html/_modules/gen3/query.html +++ b/docs/_build/html/_modules/gen3/query.html @@ -8,7 +8,7 @@ - + @@ -306,7 +306,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/submission.html b/docs/_build/html/_modules/gen3/submission.html index 7f760de51..982c67c80 100644 --- a/docs/_build/html/_modules/gen3/submission.html +++ b/docs/_build/html/_modules/gen3/submission.html @@ -8,7 +8,7 @@ - + @@ -857,7 +857,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/tools/download/drs_download.html b/docs/_build/html/_modules/gen3/tools/download/drs_download.html index a38140eb2..7fe0f1c3a 100644 --- a/docs/_build/html/_modules/gen3/tools/download/drs_download.html +++ b/docs/_build/html/_modules/gen3/tools/download/drs_download.html @@ -8,7 +8,7 @@ - + @@ -1527,7 +1527,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/tools/indexing/download_manifest.html b/docs/_build/html/_modules/gen3/tools/indexing/download_manifest.html index 0804272be..5d84308c7 100644 --- a/docs/_build/html/_modules/gen3/tools/indexing/download_manifest.html +++ b/docs/_build/html/_modules/gen3/tools/indexing/download_manifest.html @@ -8,7 +8,7 @@ - + @@ -607,7 +607,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/tools/indexing/index_manifest.html b/docs/_build/html/_modules/gen3/tools/indexing/index_manifest.html index 95d5e273a..a43fad6bf 100644 --- a/docs/_build/html/_modules/gen3/tools/indexing/index_manifest.html +++ b/docs/_build/html/_modules/gen3/tools/indexing/index_manifest.html @@ -8,7 +8,7 @@ - + @@ -715,7 +715,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/tools/indexing/verify_manifest.html b/docs/_build/html/_modules/gen3/tools/indexing/verify_manifest.html index e18deccb3..04f9b5602 100644 --- a/docs/_build/html/_modules/gen3/tools/indexing/verify_manifest.html +++ b/docs/_build/html/_modules/gen3/tools/indexing/verify_manifest.html @@ -8,7 +8,7 @@ - + @@ -513,7 +513,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/tools/metadata/ingest_manifest.html b/docs/_build/html/_modules/gen3/tools/metadata/ingest_manifest.html index 4cf4e71d9..b4f1bc9fd 100644 --- a/docs/_build/html/_modules/gen3/tools/metadata/ingest_manifest.html +++ b/docs/_build/html/_modules/gen3/tools/metadata/ingest_manifest.html @@ -8,7 +8,7 @@ - + @@ -617,7 +617,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/gen3/wss.html b/docs/_build/html/_modules/gen3/wss.html index deb8d058f..815b18805 100644 --- a/docs/_build/html/_modules/gen3/wss.html +++ b/docs/_build/html/_modules/gen3/wss.html @@ -8,7 +8,7 @@ - + @@ -289,7 +289,7 @@

Related Topics

- + diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html index 233fbb291..6ddccd2a7 100644 --- a/docs/_build/html/_modules/index.html +++ b/docs/_build/html/_modules/index.html @@ -8,7 +8,7 @@ - + @@ -89,7 +89,7 @@

Related Topics

- + diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css index 4157edf27..e5179b7a9 100644 --- a/docs/_build/html/_static/basic.css +++ b/docs/_build/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js index d06a71d75..4d67807d1 100644 --- a/docs/_build/html/_static/doctools.js +++ b/docs/_build/html/_static/doctools.js @@ -4,7 +4,7 @@ * * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/docs/_build/html/_static/language_data.js b/docs/_build/html/_static/language_data.js index 250f5665f..367b8ed81 100644 --- a/docs/_build/html/_static/language_data.js +++ b/docs/_build/html/_static/language_data.js @@ -5,7 +5,7 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -13,7 +13,7 @@ var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version is copied as a separate JS file, is available */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js index 7918c3fab..92da3f8b2 100644 --- a/docs/_build/html/_static/searchtools.js +++ b/docs/_build/html/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -99,7 +99,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => { .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); // highlight search terms in the summary if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js @@ -116,8 +116,8 @@ const _finishSearch = (resultCount) => { ); else Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, @@ -137,6 +137,22 @@ const _displayNextItem = ( // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -160,13 +176,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -239,16 +268,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -284,16 +304,32 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { let score = Math.round(100 * queryLower.length / title.length) - results.push([ + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", @@ -308,46 +344,47 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -361,7 +398,12 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy @@ -466,14 +508,18 @@ const Search = { // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -496,9 +542,8 @@ const Search = { // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -549,8 +594,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/docs/_build/html/auth.html b/docs/_build/html/auth.html index 26971e2c5..a95a7d956 100644 --- a/docs/_build/html/auth.html +++ b/docs/_build/html/auth.html @@ -9,7 +9,7 @@ - + @@ -188,7 +188,7 @@

Related Topics

- + diff --git a/docs/_build/html/file.html b/docs/_build/html/file.html index f7927b4ae..98b162de3 100644 --- a/docs/_build/html/file.html +++ b/docs/_build/html/file.html @@ -9,7 +9,7 @@ - + @@ -237,7 +237,7 @@

Related Topics

- + diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 5b481505e..d7372298c 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -8,7 +8,7 @@ - + @@ -678,7 +678,7 @@

Related Topics

- + diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html index 016cb7fc6..36787eb40 100644 --- a/docs/_build/html/index.html +++ b/docs/_build/html/index.html @@ -9,7 +9,7 @@ - + @@ -347,7 +347,7 @@

Related Topics

- + diff --git a/docs/_build/html/indexing.html b/docs/_build/html/indexing.html index 0db7bc49a..1df22043b 100644 --- a/docs/_build/html/indexing.html +++ b/docs/_build/html/indexing.html @@ -9,7 +9,7 @@ - + @@ -206,10 +206,10 @@

Gen3 Index Class
Parameters:
    -
  • format (json - json in the) –

  • +
  • format (json - json in the)

  • { – ‘uploader’: type(string) ‘file_name’: type(string) (optional*)

  • -
  • }

  • +
  • }

@@ -307,7 +307,7 @@

Gen3 Index Class

Parameters:
    -
  • delete (guid -- GUID of the object to) –

  • -
  • True (delete_file_locations -- if) –

  • -
  • location (removes the object from existing bucket) –

  • +
  • delete (guid -- GUID of the object to)

  • +
  • True (delete_file_locations -- if)

  • +
  • location (removes the object from existing bucket)

Returns:
@@ -127,7 +127,7 @@

Related Topics

- + diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html index 78808627d..30c6e7322 100644 --- a/docs/_build/html/py-modindex.html +++ b/docs/_build/html/py-modindex.html @@ -8,7 +8,7 @@ - + @@ -125,7 +125,7 @@

Related Topics

- + diff --git a/docs/_build/html/query.html b/docs/_build/html/query.html index 2946ab0c5..9acf1a925 100644 --- a/docs/_build/html/query.html +++ b/docs/_build/html/query.html @@ -9,7 +9,7 @@ - + @@ -212,7 +212,7 @@

Related Topics

- + diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html index d78a97984..5b922a554 100644 --- a/docs/_build/html/search.html +++ b/docs/_build/html/search.html @@ -9,14 +9,15 @@ - + - - + + + @@ -60,10 +61,7 @@

Search

- -
- -
+
diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index e4b41225c..0c1552ef9 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "terms": {"class": [0, 2, 10, 11, 13], "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "idp": 0, "client_credenti": 0, "client_scop": 0, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "authbas": 0, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "request": [0, 1, 3, 5, 8, 11, 12], "implement": 0, "order": [0, 8], "support": [0, 1, 5, 8, 11], "jwt": 0, "authent": 0, "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "access": [0, 1, 3, 7, 10], "token": [0, 10], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "provid": [0, 1, 3, 5, 7, 8, 12], "refresh": [0, 10], "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "string": [0, 3, 5, 11, 13], "automat": 0, "when": [0, 3, 7, 10, 12], "thei": [0, 10], "expir": [0, 1], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "opt": 0, "The": [0, 1, 2, 3, 5, 8, 10, 11], "contain": [0, 2, 5, 8, 9, 10, 11, 12], "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "web": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "work": [0, 10], "workspac": [0, 2], "default": [0, 1, 3, 7, 8, 11, 12], "env": 0, "gen3_api_kei": 0, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "set": [0, 1, 5, 10], "includ": [0, 3], "search": [0, 2, 3], "path": [0, 1, 5, 10, 11, 13], "valu": [0, 1, 3, 5, 7, 10, 11], "doe": [0, 12], "interpret": 0, "wt": [0, 10], "an": [0, 3, 6, 8, 10, 11], "accesstoken": 0, "If": [0, 1, 7, 11, 12], "can": [0, 3, 4, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "local": [0, 13], "indic": [0, 11], "environ": 0, "fenc": [0, 1], "tupl": [0, 3, 11, 12], "client_id": 0, "client_secret": 0, "oidc": 0, "client": [0, 3], "ha": [0, 11], "grant": 0, "allow": [0, 6, 8, 10, 11, 12], "obtain": [0, 10], "space": [0, 11], "separ": [0, 11], "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "scope": [0, 1], "user": [0, 10, 12], "data": [0, 1, 3, 5, 7, 8, 10, 11], "openid": 0, "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "instal": [0, 2, 11], "crdc": 0, "some": [0, 2], "arbitrari": 0, "kei": [0, 3, 5, 13], "variabl": [0, 7, 8], "rather": 0, "than": [0, 5], "pass": [0, 7, 8, 10], "argument": [0, 13], "constructor": 0, "id": [0, 1, 3, 5, 10, 11], "secret": 0, "note": [0, 3, 11, 12], "should": [0, 8, 11], "never": 0, "hardcod": 0, "http": [0, 7, 11, 12], "datacommon": 0, "o": 0, "gen3_oidc_client_creds_secret": 0, "initi": [0, 10], "follow": [0, 11], "curl": [0, 2], "given": [0, 3, 4, 5, 8, 10, 12, 13], "ex": [0, 11, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "respons": [0, 1, 3, 4, 5], "under": [0, 8, 13], "index": [0, 2, 5, 9], "authz": [0, 1, 2, 3, 9, 10, 11], "map": [0, 11], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "post": [0, 11], "put": 0, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "els": [0, 12], "filenam": [0, 8, 10, 11, 12], "get_access_token": [0, 2], "auto": [0, 2], "within": [0, 2, 9], "5": [0, 5], "minut": 0, "get_access_token_from_wt": [0, 2], "try": 0, "fetch": 0, "namespac": [0, 12], "refresh_access_token": [0, 2], "new": [0, 3], "gen3fil": [1, 2], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "For": [1, 5, 6, 7, 8, 9, 11], "interact": [1, 3, 4, 5, 6, 8, 13], "manag": [1, 5, 10], "featur": [1, 6], "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "presign": 1, "url": [1, 2, 3, 9, 10, 11, 12, 13], "right": 1, "now": [1, 8], "instanc": [1, 3, 6, 7, 8, 9, 10], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "delete_fil": [1, 2], "guid": [1, 2, 3, 5, 6, 9, 11, 12], "method": [1, 7, 10], "deprec": 1, "delete_file_loc": [1, 2, 6], "instead": [1, 7, 11], "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "locat": [1, 6], "store": [1, 3, 10], "remov": [1, 6, 11, 13], "its": [1, 3], "record": [1, 3, 5, 7, 8, 11, 12], "indexd": [1, 3, 6, 10, 11, 12], "uuid": [1, 3, 8], "text": [1, 7, 8], "result": [1, 8, 10, 11], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "download_singl": [1, 2], "object_id": [1, 2, 9, 10], "singl": [1, 5, 8], "": [1, 4, 8, 10, 11], "uniqu": [1, 5], "get_presigned_url": [1, 2], "protocol": 1, "retriev": [1, 8, 10, 12], "give": 1, "limit": [1, 3, 5, 12], "time": [1, 3, 8, 10, 11], "pick": 1, "avail": [1, 2, 10, 11], "queri": [1, 2, 3, 5, 8, 11, 12], "upload_fil": [1, 2], "file_nam": [1, 2, 3, 9, 10, 11], "expires_in": 1, "bucket": [1, 6], "upload": [1, 2, 3, 8, 13], "author": 1, "storag": [1, 2, 6], "s3": [1, 10, 11], "az": 1, "isn": 1, "t": [1, 5, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "amount": [1, 9], "second": [1, 4], "sign": 1, "datetim": [1, 3, 10], "utcnow": 1, "Be": 1, "sure": 1, "posit": [1, 7], "integ": [1, 3, 8], "also": 1, "treat": [1, 5], "max_presigned_url_ttl": 1, "configur": 1, "must": [1, 5], "allowed_data_upload_bucket": 1, "data_upload_bucket": 1, "represent": [1, 3], "document": [1, 3], "upload_file_to_guid": [1, 2], "exist": [1, 3, 5, 6, 9, 12], "readm": 2, "python": [2, 9, 11], "github": [2, 7], "repo": 2, "setup": 2, "inform": [2, 3, 10], "along": 2, "quickstart": 2, "script": 2, "more": [2, 5, 7, 9, 10], "detail": [2, 7, 10], "about": [2, 3], "variou": 2, "function": [2, 3, 4, 5, 9, 10, 11, 12], "mostli": 2, "docstr": 2, "code": [2, 8], "helper": 2, "gen3index": [2, 3], "async_create_record": [2, 3], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_query_url": [2, 3], "async_update_record": [2, 3], "create_blank": [2, 3], "create_new_vers": [2, 3], "create_record": [2, 3], "delete_record": [2, 3, 8], "get_all_record": [2, 3], "get_guids_prefix": [2, 3], "get_latest_vers": [2, 3], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "is_healthi": [2, 3, 4, 5], "query_url": [2, 3], "update_blank": [2, 3], "update_record": [2, 3], "job": 2, "gen3job": [2, 4, 10], "async_run_job_and_wait": [2, 4], "create_job": [2, 4], "get_output": [2, 4], "get_statu": [2, 4], "list_job": [2, 4], "metadata": [2, 3, 6, 9, 11], "gen3metadata": [2, 5], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_get": [2, 5], "async_get_alias": [2, 5], "async_upd": [2, 5], "async_update_alias": [2, 5], "batch_creat": [2, 5], "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_index_key_path": [2, 5], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_index_key_path": [2, 5], "get_alias": [2, 5], "get_index_key_path": [2, 5], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "gen3object": [2, 6], "delete_object": [2, 6], "gen3queri": [2, 7], "graphql_queri": [2, 7], "raw_data_download": [2, 7], "submiss": 2, "gen3submiss": [2, 8], "create_program": [2, 8], "create_project": [2, 8], "delete_nod": [2, 8], "delete_program": [2, 8], "delete_project": [2, 8], "export_nod": [2, 8], "export_record": [2, 8], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_graphql_schema": [2, 8], "get_program": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_project": [2, 8], "open_project": [2, 8], "submit_fil": [2, 8], "submit_record": [2, 8], "tool": 2, "dr": [2, 9], "downloadmanag": [2, 9, 10], "cache_hosts_wts_token": [2, 9, 10], "get_fresh_token": [2, 9, 10], "resolve_object": [2, 9, 10], "user_access": [2, 9, 10], "downloadstatu": [2, 9, 10], "statu": [2, 4, 9, 10], "start_tim": [2, 9, 10], "end_tim": [2, 9, 10], "object_typ": [2, 9, 10], "hostnam": [2, 9, 10], "file_s": [2, 9, 10, 11], "updated_tim": [2, 9, 10], "created_tim": [2, 9, 10], "access_method": [2, 9, 10], "children": [2, 9, 10], "_manag": [2, 9, 10], "pprint": [2, 9, 10], "manifest": [2, 8, 9, 10, 11, 12], "md5sum": [2, 9, 10], "commons_url": [2, 9, 10, 11, 12], "create_object_list": [2, 9, 10], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "download_drs_object": [], "download_files_in_drs_manifest": [2, 9, 10], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "current_dir": [2, 9, 11], "indexd_record_page_s": [2, 9, 11], "max_concurrent_request": [2, 9, 11, 12], "tmp_folder": [2, 9, 11], "async_download_object_manifest": [2, 9, 11], "size": [2, 3, 9, 10, 11], "md5": [2, 3, 9, 11], "acl": [2, 3, 9, 11], "prev_guid": [2, 9, 11], "threadcontrol": [2, 9, 11], "delete_all_guid": [2, 9, 11], "index_object_manifest": [2, 9, 11], "verifi": [2, 9], "async_verify_object_manifest": [2, 9, 11], "ingest": [2, 9], "column_to_use_as_guid": [2, 9, 12], "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_urls_from_indexd": [2, 9, 12], "gen3wsstorag": [2, 13], "copi": [2, 13], "download_url": [2, 13], "l": [2, 13], "ls_path": [2, 13], "rm": [2, 13], "rm_path": [2, 13], "upload_url": [2, 13], "modul": [2, 10, 11], "service_loc": [3, 4, 5], "public": [3, 5], "read": [3, 5, 11], "onli": [3, 5, 7, 8, 10, 11], "necessari": [3, 5], "basic": [3, 11, 12], "cred": 3, "async": [3, 4, 5, 9, 11, 12], "hash": [3, 11], "did": 3, "baseid": 3, "urls_metadata": 3, "version": [3, 4, 5], "_ssl": [3, 4, 5], "asynchron": [3, 4, 5], "dict": [3, 4, 5, 10, 11, 12], "eg": 3, "ab167e49d25b488939b1ede42752458b": 3, "associ": [3, 5], "made": 3, "where": [0, 3, 5, 11, 12], "you": [0, 3, 8, 11], "control": 3, "rbac": 3, "name": [3, 4, 8, 10, 11, 12, 13], "addit": [3, 5, 10, 11], "entri": [3, 11], "attach": [3, 5], "each": [3, 8, 10, 11], "group": 3, "previou": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "match": [3, 5, 12], "param": [3, 5, 8, 10], "correspond": 3, "suppli": 3, "need": [3, 7, 10, 11], "handl": [3, 10], "hash_typ": 3, "whether": [3, 4, 5, 8, 11, 12], "ssl": [3, 4, 5], "pattern": [3, 12], "against": [3, 7, 8, 11, 12], "kwarg": [3, 4, 5], "bodi": 3, "dictionari": [3, 4, 5, 7, 8], "format": [3, 5, 8, 11], "blank": 3, "add": [3, 5], "sinc": 3, "content": [3, 13], "immut": 3, "want": [0, 3, 8], "chang": [3, 11], "That": 3, "field": [3, 5, 7, 11, 12], "old": 3, "ad": 3, "least": 3, "one": [3, 5, 10, 11], "suffici": 3, "good": 3, "idea": 3, "number": [3, 7, 8, 11, 12], "noth": [3, 6], "dist_resolut": 3, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "alia": [3, 5], "distribut": 3, "identifi": [3, 5, 9, 11], "boolean": 3, "we": [3, 11], "pagin": 3, "fals": [3, 5, 6, 10, 11], "start": [3, 4, 7, 8, 10], "prefix": 3, "rtype": 3, "has_vers": 3, "latest": 3, "exclud": 3, "without": [3, 5], "repres": [3, 5, 10], "info": [3, 11], "algorithm": 3, "count": 3, "valid": [3, 7], "file_st": 3, "like": [3, 5, 9, 11, 12], "signpost": 3, "healthi": [3, 4, 5], "rev": 3, "revis": 3, "simpl": 3, "consist": 3, "mechan": 3, "dispatch": 4, "job_nam": 4, "job_input": 4, "wait": 4, "output": [4, 5, 11, 12], "Will": [4, 7, 10], "sleep": 4, "linear": 4, "delai": 4, "until": [4, 10], "done": 4, "1": [4, 5, 8, 10, 11], "global": [4, 5], "input": [4, 10, 11], "job_id": 4, "previous": 4, "complet": [4, 11], "bool": [4, 5, 8, 10, 11, 12], "md": [5, 7, 10, 12], "admin_endpoint_suffix": 5, "admin": [5, 11], "alias": 5, "overwrit": 5, "what": 5, "end": [5, 10], "up": [5, 9], "blob": [5, 7], "asyncron": 5, "altern": [5, 11], "merg": 5, "AND": 5, "descript": [3, 5], "metadata_list": 5, "specif": [5, 8, 11, 12], "expect": [5, 9, 11], "anoth": 5, "databas": 5, "return_full_metadata": 5, "10": [5, 7, 11], "offset": [5, 7], "0": [5, 7, 8, 11], "use_agg_md": 5, "off": 5, "logic": [5, 12], "filter": [5, 7], "b": [5, 11], "2": [5, 11], "have": [5, 11], "ar": [5, 7, 8, 9, 10, 11], "alwai": 5, "nest": 5, "c": [5, 11], "3": [5, 11], "same": [5, 11, 13], "whose": 5, "ani": [0, 5, 10, 11], "But": 5, "differ": 5, "33": 5, "d": 5, "4": [5, 11], "e": [5, 10], "won": 5, "333": 5, "defin": [5, 8, 10], "api": [0, 5, 8, 11], "just": [5, 11, 12], "max": 5, "num": 5, "OR": 5, "level": 6, "current": [6, 8, 10], "system": [6, 7, 8, 9], "elasticsearch": 7, "query_str": 7, "execut": [7, 8, 11], "graphql": [7, 8], "query_txt": [7, 8], "syntax": 7, "see": [7, 10, 11], "com": 7, "uc": 7, "cdi": 7, "guppi": 7, "master": 7, "doc": [7, 10], "data_typ": 7, "my_index": 7, "my_field": 7, "first": [7, 8], "filter_object": 7, "sort_object": 7, "verbos": [7, 8], "row": [7, 8, 11, 12], "sort": 7, "equal": 7, "respect": 7, "complex": 7, "appli": 7, "One": 7, "unaccess": 7, "regular": 7, "tier": 7, "mode": 7, "subject": [7, 8], "50": 7, "vital_statu": 7, "submitter_id": 7, "aliv": 7, "asc": 7, "sort_field": 7, "raw": [7, 11], "project_id": [7, 8], "my_program": 7, "my_project": 7, "submit": [8, 11], "export": [8, 10], "sheepdog": 8, "through": [8, 11], "peregrin": 8, "sub": 8, "program": [8, 11], "project": [8, 11], "dcf": 8, "node_nam": 8, "batch_siz": 8, "100": [8, 11], "node": 8, "how": [8, 11], "mani": [8, 11], "print": [8, 10], "progress": [8, 10], "log": [8, 10, 11, 12], "ccle": 8, "demograph": 8, "ordered_node_list": 8, "revers": 8, "graph": 8, "experi": 8, "empti": [8, 11], "uuid1": 8, "uuid2": 8, "node_typ": 8, "fileformat": 8, "which": [8, 10], "belong": 8, "either": 8, "tsv": [8, 11, 12], "screen": 8, "sampl": [8, 10], "ccle_sample_nod": 8, "d70b41b9": 8, "6f90": 8, "4714": 8, "8420": 8, "e043ab8b77b9": 8, "ccle_one_record": 8, "entir": 8, "schema": 8, "run": [8, 11], "introspect": 8, "regist": 8, "mark": 8, "open": [8, 10, 11], "mean": 8, "etc": 8, "max_tri": 8, "retri": 8, "fail": [8, 10], "chunk_siz": 8, "30": 8, "row_offset": 8, "spreadsheet": 8, "multipl": [8, 11], "csv": [8, 11, 12], "xlsx": 8, "worksheet": 8, "skip": 8, "data_spreadsheet": 8, "arrai": 8, "action": [9, 11], "These": 9, "broken": 9, "broad": 9, "categori": 9, "task": 9, "relat": 9, "persist": 9, "Such": 9, "mai": [0, 9, 11], "involv": 9, "assign": 9, "everi": [9, 11], "alreadi": 9, "larg": 9, "most": 9, "util": 9, "capabl": 9, "make": [9, 11], "effici": 9, "main": 10, "datafil": 10, "manifest_1": 10, "my_common": 10, "org": 10, "gen3": [10, 11, 12], "my_credenti": 10, "howto": 10, "drsdownload": 10, "drs_download": 10, "download_list": 10, "show_progress": 10, "assist": 10, "minimum": 10, "interest": 10, "object_list": 10, "host": 10, "It": 10, "possibl": 10, "save_directori": 10, "unpack_packag": 10, "delete_unpacked_packag": 10, "directori": [10, 11], "call": [10, 13], "case": [0, 10], "error": [10, 11, 12], "continu": 10, "save": 10, "show": 10, "bar": 10, "disabl": 10, "unpack": 10, "packag": 10, "after": 10, "them": [10, 11], "drs_hostnam": 10, "known": 10, "otherwis": 10, "success": 10, "resolv": 10, "permiss": 10, "wai": 10, "determin": [10, 11, 12], "reason": 10, "pend": 10, "objectid": 10, "datamanag": 10, "occur": 10, "attribut": [10, 11], "drsobjecttyp": 10, "unknown": 10, "factori": 10, "popul": [10, 12], "server": 10, "requir": 10, "byte": 10, "timestamp": 10, "last": 10, "g": 10, "child": 10, "bundl": 10, "self": 10, "indent": 10, "pretti": 10, "In": 10, "similar": 10, "linux": 10, "tree": 10, "command": [10, 11], "typic": 10, "discoveri": 10, "cach": 10, "files": 10, "static": 10, "bownload": 10, "successfulli": 10, "pars": [10, 11, 12, 13], "output_dir": 10, "conveni": 10, "infil": 10, "wrapper": 10, "cli": 10, "process": 11, "coroutin": 11, "asyncio": [11, 12], "librari": 11, "comma": 11, "header": 11, "download_manifest": 11, "per": [11, 12], "maximum": [11, 12], "desir": 11, "concurr": [11, 12], "across": 11, "thread": 11, "folder": 11, "place": 11, "temporari": 11, "write": 11, "safe": 11, "so": 11, "To": 11, "workaround": 11, "concat": 11, "output_filenam": [11, 12], "num_process": 11, "24": [11, 12], "input_manifest": 11, "python_subprocess_command": 11, "root": [11, 12], "domain": [11, 12], "live": [11, 12], "parallel": 11, "hit": 11, "total": 11, "help": 11, "everyth": 11, "attempt": 11, "By": 11, "someth": 11, "maco": 11, "x": 11, "python3": 11, "tab": 11, "session": 11, "column": [11, 12], "shown": 11, "below": 11, "255e396f": 11, "f1f8": 11, "11e9": 11, "9a07": 11, "0a80fada099c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "363455714": 11, "pdcdatastor": 11, "test1": 11, "0a80fada098c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "343434344": 11, "test2": 11, "0a80fada097c": 11, "473d83400bc1bc9dc635e334fadd433c": 11, "543434443": 11, "phs0001": 11, "phs0002": 11, "test3": 11, "0a80fada096c": 11, "test4": 11, "0a80fada010c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "test5": 11, "index_manifest": 11, "usag": 11, "py": 11, "giangb": 11, "planx": 11, "pla": 11, "net": 11, "manifest_fil": [11, 12], "path_to_manifest": 11, "replace_url": 11, "thread_num": 11, "api_kei": 11, "processed_fil": 11, "num_total_fil": 11, "synchron": 11, "warn": 11, "IF": 11, "know": 11, "THE": 11, "implic": 11, "manifest_file_delimit": [11, 12], "submit_additional_metadata_column": 11, "force_metadata_columns_even_if_empti": 11, "loop": 11, "password": [11, 12], "flag": 11, "replac": 11, "delimit": 11, "forc": 11, "creation": [3, 11], "even": 11, "enabl": 11, "illustr": 11, "columna": 11, "columnb": 11, "columnc": 11, "dataa": 11, "datab": 11, "guid_exampl": 11, "md5_hash": 11, "fieldnam": 11, "There": 11, "those": 11, "abov": 11, "overrid": [0, 11, 12], "assum": 11, "behavior": 11, "simpli": 11, "manifest_row_pars": [11, 12], "custom": 11, "import": 11, "verify_manifest": 11, "def": 11, "_get_authz_from_row": 11, "strip": 11, "parser": [11, 12], "verify_object_manifest": 11, "verif": 11, "error_nam": 11, "value_from_manifest": 11, "actual": 11, "value_from_indexd": 11, "93d9af72": 11, "b0f1": 11, "450c": 11, "a5c6": 11, "7d3d8d2083b4": 11, "dev": 11, "test": 11, "_get_acl_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "1692675811": [], "9771066": [], "indexd_field": [11, 12], "func_to_parse_row": [11, 12], "delimet": [11, 12], "metdata": 12, "ingest_manifest": 12, "NOT": 12, "guid_from_fil": 12, "_get_guid_for_row": 12, "indexed_file_object_guid": 12, "_query_for_associated_indexd_record_guid": 12, "guid_for_row": 12, "elsewher": 12, "metadata_sourc": 12, "1692675812": [], "3144128": [], "get_guid_from_fil": 12, "metadata_typ": 12, "dbgap": 12, "usual": 12, "fill": 12, "_guid_typ": 12, "is_indexed_file_object": 12, "lock": 12, "semaphor": 12, "semaphon": 12, "ammount": 12, "connect": 12, "wss": 13, "src_urlstr": 13, "dest_urlstr": 13, "appropri": 13, "src_w": 13, "src_wskei": 13, "dest_path": 13, "disk": 13, "w": 13, "wskei": 13, "ws_urlstr": 13, "form": 13, "src_path": 13, "dest_w": 13, "dest_wskei": 13, "1692676927": [], "2291234": [], "6143494": [], "1692716275": [], "1734753": [], "577429": [], "1692716527": [], "4222114": [], "9511294": [], "1692717039": [], "3338752": [], "744264": [], "1692741377": [], "0982177": [], "4559627": [], "1692743380": [], "4060478": [], "7860734": [], "1692743691": [], "983341": [], "1692743692": [], "4543839": [], "1692825679": [], "249731": [], "5510318": [], "1692886743": [], "381985": [], "8074749": [], "1693592991": [], "493957": [], "9576306": [], "1693593902": [], "1950202": [], "507454": [], "1696860505": [], "0205865": [], "4065857": [], "1696863250": [], "490177": [], "780603": [], "1696863654": [], "490772": [], "8764913": [], "1696866574": [], "146243": [], "4969604": [], "1696867172": [], "15485": [], "4488156": [], "1696870997": [], "41439": [], "7891934": [], "1696874363": [], "5903769": [], "1696874364": [], "0760994": [], "1696874786": [], "0779042": [], "4368396": [], "1696875823": [], "7846825": [], "1696875824": [], "2559378": [], "1696877990": [], "9968846": [], "1696877991": [], "3616166": [], "1696878184": [], "6719804": [], "1696878185": [], "1095488": [], "1696878605": [], "0427673": [], "4048421": [], "1696885653": [], "7007155": [], "1696885654": [], "1520922": [], "1697467909": [], "0874708": [], "51657": [], "1697484656": [], "68711": [], "1697484657": [], "1308327": [], "1700001291": [], "6339526": [], "9630976": [], "1700002025": [], "294231": [], "5915642": [], "1700004267": [], "4130003": [], "8317993": [], "1700005111": [], "074543": [], "4001298": [], "1700005642": [], "8724742": [], "1700005643": [], "1597712": [], "1700499325": [], "4715705": [], "7661629": [], "1700591014": [], "4958894": [], "8457959": [], "1700592493": [], "8351357": [], "1700592494": [], "1116993": [], "1700678708": [], "9883742": [], "1700678709": [], "2699912": [], "1700678999": [], "9725351": [], "1700679000": [], "272037": [], "1701839488": [], "6993823": [], "1701839489": [], "0258799": [], "1701900364": [], "6706986": [], "9645383": [], "1701992223": [], "1760724": [], "50045": [], "1703187722": [], "008161": [], "3511112": [], "1707152739": [], "444163": [], "7294014": [], "1707153921": [], "9775102": [], "1707153922": [], "2934358": [], "1707755283": [], "0218701": [], "3274062": [], "1707755397": [], "8761852": [], "1707755398": [], "2227244": [], "1707775436": [], "8775291": [], "1707775437": [], "2080507": [], "1708924717": [], "6038976": [], "9058018": [], "1708924776": [], "1099105": [], "3872406": [], "content_created_d": 3, "content_updated_d": 3, "date": 3, "being": 3, "1708971147": [], "0555665": [], "3980484": [], "1709071889": [], "1303432": [], "4402523": [], "1709222307": [], "153123": [], "5054574": [], "access_token": 0, "directli": [], "design": [], "wa": 0, "issu": 0, "particular": 0, "act": 0, "your": 0, "own": 0, "direct": 0, "behalf": 0, "1710357281": [], "37721": [], "670295": [], "1710358911": [], "2385933": [], "539238": [], "1710361757": [], "187703": [], "5156744": [], "1710361836": [], "033443": [], "3437986": [], "1710444685": [], "0181236": [], "3370197": [], "1710771090": [], "8173654": [], "1710771091": [], "1734996": [], "1710774411": [], "2418032": [], "5350568": [], "intend": 0, "1711461363": [11, 12], "0524344": 11, "3879402": 12}, "objects": {"gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3": [[9, 3, 0, "-", "tools"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "titleterms": {"gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "auth": 0, "helper": 0, "file": 1, "class": [1, 3, 4, 5, 6, 7, 8], "welcom": 2, "sdk": 2, "": 2, "document": 2, "indic": 2, "tabl": 2, "index": [3, 11], "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "submiss": 8, "tool": [9, 10, 11, 12], "dr": 10, "download": [10, 11], "verifi": 11, "ingest": 12, "workspac": 13, "storag": 13}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]], "Indices and tables": [[2, "indices-and-tables"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Indexing Tools": [[11, "indexing-tools"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]]}, "indexentries": {"gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth"]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl"]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token"]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts"]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token"]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File"]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file"]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations"]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single"]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url"]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file"]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid"]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index"]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record"]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record"]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum"]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page"]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params"]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls"]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record"]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank"]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version"]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record"]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record"]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get"]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records"]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix"]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version"]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record"]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc"]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records"]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page"]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats"]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls"]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids"]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version"]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions"]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params"]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy"]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls"]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank"]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record"]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs"]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait"]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job"]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output"]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status"]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version"]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy"]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs"]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata"]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create"]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases"]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias"]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases"]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get"]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases"]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update"]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases"]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider"]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create"]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create"]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases"]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path"]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete"]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias"]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases"]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path"]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint"]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get"]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases"]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths"]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version"]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy"]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query"]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update"]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases"]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object"]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object"]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query"]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query"]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query"]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download"]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission"]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program"]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project"]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node"]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes"]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program"]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project"]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record"]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records"]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node"]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record"]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all"]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node"]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema"]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs"]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary"]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest"]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects"]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project"]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query"]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file"]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record"]], "gen3.tools": [[9, "module-gen3.tools"]], "module": [[9, "module-gen3.tools"], [10, "module-gen3.tools.download.drs_download"], [11, "module-gen3.tools.indexing.download_manifest"], [11, "module-gen3.tools.indexing.index_manifest"], [11, "module-gen3.tools.indexing.verify_manifest"], [12, "module-gen3.tools.metadata.ingest_manifest"]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager"]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus"]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable"]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest"]], "_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager"]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods"]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens"]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children"]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url"]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list"]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time"]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download"]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download"]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest"]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time"]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name"]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name"]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size"]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size"]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download"]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token"]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname"]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest"]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object"]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest"]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load"]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest"]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum"]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id"]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id"]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type"]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint"]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects"]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time"]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status"]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time"]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access"]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS"]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ"]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR"]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR"]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR"]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID"]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE"]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS"]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS"]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5"]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID"]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE"]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER"]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl"]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS"]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest"]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest"]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids"]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest"]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest"]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest"]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID"]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT"]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS"]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest"]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd"]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage"]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy"]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download"]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url"]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls"]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path"]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm"]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path"]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload"]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url"]]}}) \ No newline at end of file +Search.setIndex({"alltitles": {"DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Indexing Tools": [[11, "indexing-tools"]], "Indices and tables": [[2, "indices-and-tables"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]]}, "docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "indexentries": {"_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager", false]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods", false]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS", false]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create", false]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases", false]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record", false]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias", false]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases", false]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest", false]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get", false]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases", false]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record", false]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum", false]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page", false]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params", false]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest", false]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls", false]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd", false]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait", false]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update", false]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases", false]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record", false]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest", false]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider", false]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ", false]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create", false]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens", false]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children", false]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID", false]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url", false]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy", false]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create", false]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases", false]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank", false]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path", false]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job", false]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version", false]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list", false]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program", false]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project", false]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record", false]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time", false]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl", false]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR", false]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete", false]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias", false]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases", false]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids", false]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file", false]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations", false]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path", false]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node", false]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes", false]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object", false]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program", false]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project", false]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record", false]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record", false]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records", false]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download", false]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download", false]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download", false]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest", false]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single", false]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url", false]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable", false]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager", false]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus", false]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time", false]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint", false]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node", false]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record", false]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name", false]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name", false]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size", false]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size", false]], "gen3.tools": [[9, "module-gen3.tools", false]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download", false]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest", false]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest", false]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest", false]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest", false]], "gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth", false]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File", false]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index", false]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs", false]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata", false]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object", false]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query", false]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission", false]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage", false]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get", false]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get", false]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token", false]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts", false]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases", false]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records", false]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all", false]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node", false]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token", false]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema", false]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix", false]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths", false]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version", false]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output", false]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url", false]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs", false]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary", false]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest", false]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects", false]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record", false]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc", false]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records", false]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page", false]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats", false]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status", false]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls", false]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids", false]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version", false]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version", false]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version", false]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions", false]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params", false]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query", false]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID", false]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT", false]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT", false]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname", false]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest", false]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE", false]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy", false]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy", false]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy", false]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest", false]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object", false]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest", false]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs", false]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load", false]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest", false]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls", false]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path", false]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest", false]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS", false]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5", false]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum", false]], "module": [[9, "module-gen3.tools", false], [10, "module-gen3.tools.download.drs_download", false], [11, "module-gen3.tools.indexing.download_manifest", false], [11, "module-gen3.tools.indexing.index_manifest", false], [11, "module-gen3.tools.indexing.verify_manifest", false], [12, "module-gen3.tools.metadata.ingest_manifest", false]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id", false]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id", false]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type", false]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project", false]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint", false]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID", false]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query", false]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query", false]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query", false]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls", false]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download", false]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token", false]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects", false]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm", false]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path", false]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE", false]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time", false]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status", false]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file", false]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record", false]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl", false]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER", false]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update", false]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases", false]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank", false]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record", false]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time", false]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload", false]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file", false]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid", false]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url", false]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS", false]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access", false]]}, "objects": {"gen3": [[9, 3, 0, "-", "tools"]], "gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "terms": {"": [1, 4, 8, 10, 11], "0": [5, 7, 8, 11], "0a80fada010c": 11, "0a80fada096c": 11, "0a80fada097c": 11, "0a80fada098c": 11, "0a80fada099c": 11, "1": [4, 5, 8, 10, 11], "10": [5, 7, 11], "100": [8, 11], "11e9": 11, "1716303015": [11, 12], "2": [5, 11], "24": [11, 12], "2512589": 11, "255e396f": 11, "3": [5, 11], "30": 8, "33": 5, "333": 5, "343434344": 11, "363455714": 11, "4": [5, 11], "450c": 11, "4659653": 12, "4714": 8, "473d83400bc1bc9dc635e334fadd433c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "5": [0, 5], "50": 7, "543434443": 11, "6f90": 8, "7d3d8d2083b4": 11, "8420": 8, "93d9af72": 11, "9a07": 11, "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "AND": 5, "Be": 1, "But": 5, "By": 11, "For": [1, 5, 6, 7, 8, 9, 11], "IF": 11, "If": [0, 1, 7, 11, 12], "In": 10, "It": 10, "NOT": 12, "OR": 5, "One": 7, "Such": 9, "THE": 11, "That": 3, "The": [0, 1, 2, 3, 5, 8, 10, 11], "There": 11, "These": 9, "To": 11, "Will": [4, 7, 10], "_get_acl_from_row": 11, "_get_authz_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_for_row": 12, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "_guid_typ": 12, "_manag": [2, 9, 10], "_query_for_associated_indexd_record_guid": 12, "_ssl": [3, 4, 5], "a5c6": 11, "ab167e49d25b488939b1ede42752458b": 3, "about": [2, 3], "abov": 11, "access": [0, 1, 3, 7, 10], "access_method": [2, 9, 10], "access_token": 0, "accesstoken": 0, "acl": [2, 3, 9, 11], "across": 11, "act": 0, "action": [9, 11], "actual": 11, "ad": 3, "add": [3, 5], "addit": [3, 5, 10, 11], "admin": [5, 11], "admin_endpoint_suffix": 5, "after": 10, "against": [3, 7, 8, 11, 12], "algorithm": 3, "alia": [3, 5], "alias": 5, "aliv": 7, "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "allow": [0, 6, 8, 10, 11, 12], "allowed_data_upload_bucket": 1, "along": 2, "alreadi": 9, "also": 1, "altern": [5, 11], "alwai": 5, "ammount": 12, "amount": [1, 9], "an": [0, 3, 6, 8, 10, 11], "ani": [0, 5, 10, 11], "anoth": 5, "api": [0, 5, 8, 11], "api_kei": 11, "appli": 7, "appropri": 13, "ar": [5, 7, 8, 9, 10, 11], "arbitrari": 0, "argument": [0, 13], "arrai": 8, "asc": 7, "assign": 9, "assist": 10, "associ": [3, 5], "assum": 11, "async": [3, 4, 5, 9, 11, 12], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_create_record": [2, 3], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_download_object_manifest": [2, 9, 11], "async_get": [2, 5], "async_get_alias": [2, 5], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_url": [2, 3], "async_query_urls_from_indexd": [2, 9, 12], "async_run_job_and_wait": [2, 4], "async_upd": [2, 5], "async_update_alias": [2, 5], "async_update_record": [2, 3], "async_verify_object_manifest": [2, 9, 11], "asynchron": [3, 4, 5], "asyncio": [11, 12], "asyncron": 5, "attach": [3, 5], "attempt": 11, "attribut": [10, 11], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "authbas": 0, "authent": 0, "author": 1, "authz": [0, 1, 2, 3, 9, 10, 11], "auto": [0, 2], "automat": 0, "avail": [1, 2, 10, 11], "az": 1, "b": [5, 11], "b0f1": 11, "bar": 10, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "baseid": 3, "basic": [3, 11, 12], "batch_creat": [2, 5], "batch_siz": 8, "behalf": 0, "behavior": 11, "being": 3, "belong": 8, "below": 11, "blank": 3, "blob": [5, 7], "bodi": 3, "bool": [4, 5, 8, 10, 11, 12], "boolean": 3, "bownload": 10, "broad": 9, "broken": 9, "bucket": [1, 6], "bundl": 10, "byte": 10, "c": [5, 11], "cach": 10, "cache_hosts_wts_token": [2, 9, 10], "call": [10, 13], "can": [0, 3, 4, 8, 11, 12], "capabl": 9, "case": [0, 10], "categori": 9, "ccle": 8, "ccle_one_record": 8, "ccle_sample_nod": 8, "cdi": 7, "chang": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "child": 10, "children": [2, 9, 10], "chunk_siz": 8, "class": [0, 2, 10, 11, 13], "cli": 10, "client": [0, 3], "client_credenti": 0, "client_id": 0, "client_scop": 0, "client_secret": 0, "code": [2, 8], "column": [11, 12], "column_to_use_as_guid": [2, 9, 12], "columna": 11, "columnb": 11, "columnc": 11, "com": 7, "comma": 11, "command": [10, 11], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "commons_url": [2, 9, 10, 11, 12], "complet": [4, 11], "complex": 7, "concat": 11, "concurr": [11, 12], "configur": 1, "connect": 12, "consist": 3, "constructor": 0, "contain": [0, 2, 5, 8, 9, 10, 11, 12], "content": [3, 13], "content_created_d": 3, "content_updated_d": 3, "continu": 10, "control": 3, "conveni": 10, "copi": [2, 13], "coroutin": 11, "correspond": 3, "count": 3, "crdc": 0, "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_blank": [2, 3], "create_index_key_path": [2, 5], "create_job": [2, 4], "create_new_vers": [2, 3], "create_object_list": [2, 9, 10], "create_program": [2, 8], "create_project": [2, 8], "create_record": [2, 3], "created_tim": [2, 9, 10], "creation": [3, 11], "cred": 3, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "csv": [8, 11, 12], "curl": [0, 2], "current": [6, 8, 10], "current_dir": [2, 9, 11], "custom": 11, "d": 5, "d70b41b9": 8, "data": [0, 1, 3, 5, 7, 8, 10, 11], "data_spreadsheet": 8, "data_typ": 7, "data_upload_bucket": 1, "dataa": 11, "datab": 11, "databas": 5, "datacommon": 0, "datafil": 10, "datamanag": 10, "date": 3, "datetim": [1, 3, 10], "dbgap": 12, "dcf": 8, "def": 11, "default": [0, 1, 3, 7, 8, 11, 12], "defin": [5, 8, 10], "delai": 4, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_all_guid": [2, 9, 11], "delete_fil": [1, 2], "delete_file_loc": [1, 2, 6], "delete_index_key_path": [2, 5], "delete_nod": [2, 8], "delete_object": [2, 6], "delete_program": [2, 8], "delete_project": [2, 8], "delete_record": [2, 3, 8], "delete_unpacked_packag": 10, "delimet": [11, 12], "delimit": 11, "demograph": 8, "deprec": 1, "descript": [3, 5], "desir": 11, "dest_path": 13, "dest_urlstr": 13, "dest_w": 13, "dest_wskei": 13, "detail": [2, 7, 10], "determin": [10, 11, 12], "dev": 11, "dict": [3, 4, 5, 10, 11, 12], "dictionari": [3, 4, 5, 7, 8], "did": 3, "differ": 5, "direct": 0, "directori": [10, 11], "disabl": 10, "discoveri": 10, "disk": 13, "dispatch": 4, "dist_resolut": 3, "distribut": 3, "doc": [7, 10], "docstr": 2, "document": [1, 3], "doe": [0, 12], "domain": [11, 12], "done": 4, "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "download_files_in_drs_manifest": [2, 9, 10], "download_list": 10, "download_manifest": 11, "download_singl": [1, 2], "download_url": [2, 13], "downloadmanag": [2, 9, 10], "downloadstatu": [2, 9, 10], "dr": [2, 9], "drs_download": 10, "drs_hostnam": 10, "drsdownload": 10, "drsobjecttyp": 10, "e": [5, 10], "e043ab8b77b9": 8, "each": [3, 8, 10, 11], "effici": 9, "eg": 3, "either": 8, "elasticsearch": 7, "els": [0, 12], "elsewher": 12, "empti": [8, 11], "enabl": 11, "end": [5, 10], "end_tim": [2, 9, 10], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "entir": 8, "entri": [3, 11], "env": 0, "environ": 0, "equal": 7, "error": [10, 11, 12], "error_nam": 11, "etc": 8, "even": 11, "everi": [9, 11], "everyth": 11, "ex": [0, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "exclud": 3, "execut": [7, 8, 11], "exist": [1, 3, 5, 6, 9, 12], "expect": [5, 9, 11], "experi": 8, "expir": [0, 1], "expires_in": 1, "export": [8, 10], "export_nod": [2, 8], "export_record": [2, 8], "f1f8": 11, "factori": 10, "fail": [8, 10], "fals": [3, 5, 6, 10, 11], "featur": [1, 6], "fenc": [0, 1], "fetch": 0, "field": [3, 5, 7, 11, 12], "fieldnam": 11, "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "file_nam": [1, 2, 3, 9, 10, 11], "file_s": [2, 9, 10, 11], "file_st": 3, "fileformat": 8, "filenam": [0, 8, 10, 11, 12], "files": 10, "fill": 12, "filter": [5, 7], "filter_object": 7, "first": [7, 8], "flag": 11, "folder": 11, "follow": [0, 11], "forc": 11, "force_metadata_columns_even_if_empti": 11, "form": 13, "format": [3, 5, 8, 11], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "func_to_parse_row": [11, 12], "function": [2, 3, 4, 5, 9, 10, 11, 12], "g": 10, "gen3": [10, 11, 12], "gen3_api_kei": 0, "gen3_oidc_client_creds_secret": 0, "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "gen3fil": [1, 2], "gen3index": [2, 3], "gen3job": [2, 4, 10], "gen3metadata": [2, 5], "gen3object": [2, 6], "gen3queri": [2, 7], "gen3submiss": [2, 8], "gen3wsstorag": [2, 13], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "get_access_token": [0, 2], "get_access_token_from_wt": [0, 2], "get_alias": [2, 5], "get_all_record": [2, 3], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_fresh_token": [2, 9, 10], "get_graphql_schema": [2, 8], "get_guid_from_fil": 12, "get_guids_prefix": [2, 3], "get_index_key_path": [2, 5], "get_latest_vers": [2, 3], "get_output": [2, 4], "get_presigned_url": [1, 2], "get_program": [2, 8], "get_project": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_statu": [2, 4], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "giangb": 11, "github": [2, 7], "give": 1, "given": [0, 3, 4, 5, 8, 10, 12, 13], "global": [4, 5], "good": 3, "grant": 0, "graph": 8, "graphql": [7, 8], "graphql_queri": [2, 7], "group": 3, "guid": [1, 2, 3, 5, 6, 9, 11, 12], "guid_exampl": 11, "guid_for_row": 12, "guid_from_fil": 12, "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "guppi": 7, "ha": [0, 11], "handl": [3, 10], "hardcod": 0, "has_vers": 3, "hash": [3, 11], "hash_typ": 3, "have": [5, 11], "header": 11, "healthi": [3, 4, 5], "help": 11, "helper": 2, "hit": 11, "host": 10, "hostnam": [2, 9, 10], "how": [8, 11], "howto": 10, "http": [0, 7, 11, 12], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "id": [0, 1, 3, 5, 10, 11], "idea": 3, "identifi": [3, 5, 9, 11], "idp": 0, "illustr": 11, "immut": 3, "implement": 0, "implic": 11, "import": 11, "includ": [0, 3], "indent": 10, "index": [0, 2, 5, 9], "index_manifest": 11, "index_object_manifest": [2, 9, 11], "indexd": [1, 3, 6, 10, 11, 12], "indexd_field": [11, 12], "indexd_record_page_s": [2, 9, 11], "indexed_file_object_guid": 12, "indic": [0, 11], "infil": 10, "info": [3, 11], "inform": [2, 3, 10], "ingest": [2, 9], "ingest_manifest": 12, "initi": [0, 10], "input": [4, 10, 11], "input_manifest": 11, "instal": [0, 2, 11], "instanc": [1, 3, 6, 7, 8, 9, 10], "instead": [1, 7, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "integ": [1, 3, 8], "intend": 0, "interact": [1, 3, 4, 5, 6, 8, 13], "interest": 10, "interpret": 0, "introspect": 8, "involv": 9, "is_healthi": [2, 3, 4, 5], "is_indexed_file_object": 12, "isn": 1, "issu": 0, "its": [1, 3], "job": 2, "job_id": 4, "job_input": 4, "job_nam": 4, "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "just": [5, 11, 12], "jwt": 0, "kei": [0, 3, 5, 13], "know": 11, "known": 10, "kwarg": [3, 4, 5], "l": [2, 13], "larg": 9, "last": 10, "latest": 3, "least": 3, "level": 6, "librari": 11, "like": [3, 5, 9, 11, 12], "limit": [1, 3, 5, 12], "linear": 4, "linux": 10, "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "list_job": [2, 4], "live": [11, 12], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "local": [0, 13], "locat": [1, 6], "lock": 12, "log": [8, 10, 11, 12], "logic": [5, 12], "loop": 11, "ls_path": [2, 13], "maco": 11, "made": 3, "mai": [0, 9, 11], "main": 10, "make": [9, 11], "manag": [1, 5, 10], "mani": [8, 11], "manifest": [2, 8, 9, 10, 11, 12], "manifest_1": 10, "manifest_fil": [11, 12], "manifest_file_delimit": [11, 12], "manifest_row_pars": [11, 12], "map": [0, 11], "mark": 8, "master": 7, "match": [3, 5, 12], "max": 5, "max_concurrent_request": [2, 9, 11, 12], "max_presigned_url_ttl": 1, "max_tri": 8, "maximum": [11, 12], "md": [5, 7, 10, 12], "md5": [2, 3, 9, 11], "md5_hash": 11, "md5sum": [2, 9, 10], "mean": 8, "mechan": 3, "merg": 5, "metadata": [2, 3, 6, 9, 11], "metadata_list": 5, "metadata_sourc": 12, "metadata_typ": 12, "metdata": 12, "method": [1, 7, 10], "minimum": 10, "minut": 0, "mode": 7, "modul": [2, 10, 11], "more": [2, 5, 7, 9, 10], "most": 9, "mostli": 2, "multipl": [8, 11], "must": [1, 5], "my_common": 10, "my_credenti": 10, "my_field": 7, "my_index": 7, "my_program": 7, "my_project": 7, "name": [3, 4, 8, 10, 11, 12, 13], "namespac": [0, 12], "necessari": [3, 5], "need": [3, 7, 10, 11], "nest": 5, "net": 11, "never": 0, "new": [0, 3], "node": 8, "node_nam": 8, "node_typ": 8, "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "note": [0, 3, 11, 12], "noth": [3, 6], "now": [1, 8], "num": 5, "num_process": 11, "num_total_fil": 11, "number": [3, 7, 8, 11, 12], "o": 0, "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "object_id": [1, 2, 9, 10], "object_list": 10, "object_typ": [2, 9, 10], "objectid": 10, "obtain": [0, 10], "occur": 10, "off": 5, "offset": [5, 7], "oidc": 0, "old": 3, "one": [3, 5, 10, 11], "onli": [3, 5, 7, 8, 10, 11], "open": [8, 10, 11], "open_project": [2, 8], "openid": 0, "opt": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "order": [0, 8], "ordered_node_list": 8, "org": 10, "otherwis": 10, "output": [4, 5, 11, 12], "output_dir": 10, "output_filenam": [11, 12], "overrid": [0, 11, 12], "overwrit": 5, "own": 0, "packag": 10, "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "pagin": 3, "parallel": 11, "param": [3, 5, 8, 10], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "pars": [10, 11, 12, 13], "parser": [11, 12], "particular": 0, "pass": [0, 7, 8, 10], "password": [11, 12], "path": [0, 1, 5, 10, 11, 13], "path_to_manifest": 11, "pattern": [3, 12], "pdcdatastor": 11, "pend": 10, "per": [11, 12], "peregrin": 8, "permiss": 10, "persist": 9, "phs0001": 11, "phs0002": 11, "pick": 1, "pla": 11, "place": 11, "planx": 11, "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "popul": [10, 12], "posit": [1, 7], "possibl": 10, "post": [0, 11], "pprint": [2, 9, 10], "prefix": 3, "presign": 1, "pretti": 10, "prev_guid": [2, 9, 11], "previou": [3, 11], "previous": 4, "print": [8, 10], "process": 11, "processed_fil": 11, "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "program": [8, 11], "progress": [8, 10], "project": [8, 11], "project_id": [7, 8], "protocol": 1, "provid": [0, 1, 3, 5, 7, 8, 12], "public": [3, 5], "put": 0, "py": 11, "python": [2, 9, 11], "python3": 11, "python_subprocess_command": 11, "queri": [1, 2, 3, 5, 8, 11, 12], "query_str": 7, "query_txt": [7, 8], "query_url": [2, 3], "quickstart": 2, "rather": 0, "raw": [7, 11], "raw_data_download": [2, 7], "rbac": 3, "read": [3, 5, 11], "readm": 2, "reason": 10, "record": [1, 3, 5, 7, 8, 11, 12], "refresh": [0, 10], "refresh_access_token": [0, 2], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "regist": 8, "regular": 7, "relat": 9, "remov": [1, 6, 11, 13], "replac": 11, "replace_url": 11, "repo": 2, "repres": [3, 5, 10], "represent": [1, 3], "request": [0, 1, 3, 5, 8, 11, 12], "requir": 10, "resolv": 10, "resolve_object": [2, 9, 10], "respect": 7, "respons": [0, 1, 3, 4, 5], "result": [1, 8, 10, 11], "retri": 8, "retriev": [1, 8, 10, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "return_full_metadata": 5, "rev": 3, "revers": 8, "revis": 3, "right": 1, "rm": [2, 13], "rm_path": [2, 13], "root": [11, 12], "row": [7, 8, 11, 12], "row_offset": 8, "rtype": 3, "run": [8, 11], "s3": [1, 10, 11], "safe": 11, "same": [5, 11, 13], "sampl": [8, 10], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "save": 10, "save_directori": 10, "schema": 8, "scope": [0, 1], "screen": 8, "script": 2, "search": [0, 2, 3], "second": [1, 4], "secret": 0, "see": [7, 10, 11], "self": 10, "semaphon": 12, "semaphor": 12, "separ": [0, 11], "server": 10, "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "service_loc": [3, 4, 5], "session": 11, "set": [0, 1, 5, 10], "setup": 2, "sheepdog": 8, "should": [0, 8, 11], "show": 10, "show_progress": 10, "shown": 11, "sign": 1, "signpost": 3, "similar": 10, "simpl": 3, "simpli": 11, "sinc": 3, "singl": [1, 5, 8], "size": [2, 3, 9, 10, 11], "skip": 8, "sleep": 4, "so": 11, "some": [0, 2], "someth": 11, "sort": 7, "sort_field": 7, "sort_object": 7, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "space": [0, 11], "specif": [5, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "spreadsheet": 8, "src_path": 13, "src_urlstr": 13, "src_w": 13, "src_wskei": 13, "ssl": [3, 4, 5], "start": [3, 4, 7, 8, 10], "start_tim": [2, 9, 10], "static": 10, "statu": [2, 4, 9, 10], "storag": [1, 2, 6], "store": [1, 3, 10], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "string": [0, 3, 5, 11, 13], "strip": 11, "sub": 8, "subject": [7, 8], "submiss": 2, "submit": [8, 11], "submit_additional_metadata_column": 11, "submit_fil": [2, 8], "submit_record": [2, 8], "submitter_id": 7, "success": 10, "successfulli": 10, "suffici": 3, "suppli": 3, "support": [0, 1, 5, 8, 11], "sure": 1, "synchron": 11, "syntax": 7, "system": [6, 7, 8, 9], "t": [1, 5, 11], "tab": 11, "task": 9, "temporari": 11, "test": 11, "test1": 11, "test2": 11, "test3": 11, "test4": 11, "test5": 11, "text": [1, 7, 8], "than": [0, 5], "thei": [0, 10], "them": [10, 11], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "those": 11, "thread": 11, "thread_num": 11, "threadcontrol": [2, 9, 11], "through": [8, 11], "tier": 7, "time": [1, 3, 8, 10, 11], "timestamp": 10, "tmp_folder": [2, 9, 11], "token": [0, 10], "tool": 2, "total": 11, "treat": [1, 5], "tree": 10, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "try": 0, "tsv": [8, 11, 12], "tupl": [0, 3, 11, 12], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "typic": 10, "uc": 7, "unaccess": 7, "under": [0, 8, 13], "uniqu": [1, 5], "unknown": 10, "unpack": 10, "unpack_packag": 10, "until": [4, 10], "up": [5, 9], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "update_blank": [2, 3], "update_record": [2, 3], "updated_tim": [2, 9, 10], "upload": [1, 2, 3, 8, 13], "upload_fil": [1, 2], "upload_file_to_guid": [1, 2], "upload_url": [2, 13], "url": [1, 2, 3, 9, 10, 11, 12, 13], "urls_metadata": 3, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "usag": 11, "use_agg_md": 5, "user": [0, 10, 12], "user_access": [2, 9, 10], "usual": 12, "utcnow": 1, "util": 9, "uuid": [1, 3, 8], "uuid1": 8, "uuid2": 8, "valid": [3, 7], "valu": [0, 1, 3, 5, 7, 10, 11], "value_from_indexd": 11, "value_from_manifest": 11, "variabl": [0, 7, 8], "variou": 2, "verbos": [7, 8], "verif": 11, "verifi": [2, 9], "verify_manifest": 11, "verify_object_manifest": 11, "version": [3, 4, 5], "vital_statu": 7, "w": 13, "wa": 0, "wai": 10, "wait": 4, "want": [0, 3, 8], "warn": 11, "we": [3, 11], "web": 0, "what": 5, "when": [0, 3, 7, 10, 12], "where": [0, 3, 5, 11, 12], "whether": [3, 4, 5, 8, 11, 12], "which": [8, 10], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "whose": 5, "within": [0, 2, 9], "without": [3, 5], "won": 5, "work": [0, 10], "workaround": 11, "worksheet": 8, "workspac": [0, 2], "wrapper": 10, "write": 11, "ws_urlstr": 13, "wskei": 13, "wss": 13, "wt": [0, 10], "x": 11, "xlsx": 8, "you": [0, 3, 8, 11], "your": 0}, "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "titleterms": {"": 2, "auth": 0, "class": [1, 3, 4, 5, 6, 7, 8], "document": 2, "download": [10, 11], "dr": 10, "file": 1, "gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "helper": 0, "index": [3, 11], "indic": 2, "ingest": 12, "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "sdk": 2, "storag": 13, "submiss": 8, "tabl": 2, "tool": [9, 10, 11, 12], "verifi": 11, "welcom": 2, "workspac": 13}}) \ No newline at end of file diff --git a/docs/_build/html/submission.html b/docs/_build/html/submission.html index edc7b38db..69a9f5e5d 100644 --- a/docs/_build/html/submission.html +++ b/docs/_build/html/submission.html @@ -9,7 +9,7 @@ - + @@ -514,7 +514,7 @@

Related Topics

- + diff --git a/docs/_build/html/tools.html b/docs/_build/html/tools.html index 49e7af7d0..0dddee8a4 100644 --- a/docs/_build/html/tools.html +++ b/docs/_build/html/tools.html @@ -9,7 +9,7 @@ - + @@ -185,7 +185,7 @@

Related Topics

- + diff --git a/docs/_build/html/tools/drs_pull.html b/docs/_build/html/tools/drs_pull.html index eb16ffd32..8148d1361 100644 --- a/docs/_build/html/tools/drs_pull.html +++ b/docs/_build/html/tools/drs_pull.html @@ -9,7 +9,7 @@ - + @@ -76,7 +76,7 @@
Parameters:
    -
  • object_list (List[Downloadable]) –

  • +
  • object_list (List[Downloadable])

  • save_directory (str) – directory to save to (will be created)

  • show_progress (bool) – show a download progress bar

  • unpack_packages (bool) – set to False to disable the unpacking of downloaded packages

  • @@ -573,7 +573,7 @@

    Related Topics

- + diff --git a/docs/_build/html/tools/indexing.html b/docs/_build/html/tools/indexing.html index 4647d50ac..b2e6fbd9d 100644 --- a/docs/_build/html/tools/indexing.html +++ b/docs/_build/html/tools/indexing.html @@ -9,7 +9,7 @@ - + @@ -381,7 +381,7 @@

Indexing Tools
-async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1711461363.0524344.log')[source]
+async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1716303015.2512589.log')[source]

Verify all file object records into a manifest csv

Parameters:
@@ -483,7 +483,7 @@

Related Topics

- + diff --git a/docs/_build/html/tools/metadata.html b/docs/_build/html/tools/metadata.html index 5d5f99763..91e715699 100644 --- a/docs/_build/html/tools/metadata.html +++ b/docs/_build/html/tools/metadata.html @@ -9,7 +9,7 @@ - + @@ -102,7 +102,7 @@

Metadata Tools
-async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1711461363.3879402.log', get_guid_from_file=True, metadata_type=None)[source]
+async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1716303015.4659653.log', get_guid_from_file=True, metadata_type=None)[source]

Ingest all metadata records into a manifest csv

Parameters:
@@ -218,7 +218,7 @@

Related Topics

- + diff --git a/docs/_build/html/wss.html b/docs/_build/html/wss.html index e2d7abfc5..e3daccc57 100644 --- a/docs/_build/html/wss.html +++ b/docs/_build/html/wss.html @@ -9,7 +9,7 @@ - + @@ -215,7 +215,7 @@

Related Topics

- + From 46215d0e4604a099273aacbcd38c71dab8d863f6 Mon Sep 17 00:00:00 2001 From: george42-ctds Date: Wed, 22 May 2024 14:02:42 +0000 Subject: [PATCH 03/11] Apply automatic documentation changes --- docs/_build/doctrees/environment.pickle | Bin 1579412 -> 1579893 bytes docs/_build/doctrees/tools/indexing.doctree | Bin 100291 -> 100291 bytes docs/_build/doctrees/tools/metadata.doctree | Bin 35934 -> 35934 bytes docs/_build/html/searchindex.js | 2 +- docs/_build/html/tools/indexing.html | 2 +- docs/_build/html/tools/metadata.html | 2 +- 6 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index dd36591917300cd2db3f5ed94d274c8a3f101684..79550d17bd12899a5443dfa5bbc2dce3749d21b3 100644 GIT binary patch literal 1579893 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

0_Kjf*T3%1g-l5)pF{ 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

U ZKX5Ji_OL`uVOC8 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�MwXkEWfT>olBagn0CC@p2@O-zqTpUHw&Zzia=f$ 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�WVG(ibFRMb=b0|mV0zMJ3QfeWb{W8i#F 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

PVQOHxcNXQ-J)#0p})?H8ai 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 delta 109 zcmX@y&vv+X>qZl3UAKT-@_qKV5zD Z!5rbqUKZx4swekZxS)z`zHd<<3;+?ArpA*q^=&o>X>qZl3UAKT-@_qKV5zD Z!5rbqUKZx4swekZxS)z`zHd<<3;_H|9?k#& diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 0c1552ef9..512cfbd0d 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Indexing Tools": [[11, "indexing-tools"]], "Indices and tables": [[2, "indices-and-tables"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]]}, "docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "indexentries": {"_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager", false]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods", false]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS", false]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create", false]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases", false]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record", false]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias", false]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases", false]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest", false]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get", false]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases", false]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record", false]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum", false]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page", false]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params", false]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest", false]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls", false]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd", false]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait", false]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update", false]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases", false]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record", false]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest", false]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider", false]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ", false]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create", false]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens", false]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children", false]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID", false]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url", false]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy", false]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create", false]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases", false]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank", false]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path", false]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job", false]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version", false]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list", false]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program", false]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project", false]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record", false]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time", false]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl", false]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR", false]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete", false]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias", false]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases", false]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids", false]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file", false]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations", false]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path", false]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node", false]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes", false]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object", false]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program", false]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project", false]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record", false]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record", false]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records", false]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download", false]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download", false]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download", false]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest", false]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single", false]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url", false]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable", false]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager", false]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus", false]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time", false]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint", false]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node", false]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record", false]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name", false]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name", false]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size", false]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size", false]], "gen3.tools": [[9, "module-gen3.tools", false]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download", false]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest", false]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest", false]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest", false]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest", false]], "gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth", false]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File", false]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index", false]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs", false]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata", false]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object", false]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query", false]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission", false]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage", false]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get", false]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get", false]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token", false]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts", false]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases", false]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records", false]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all", false]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node", false]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token", false]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema", false]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix", false]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths", false]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version", false]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output", false]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url", false]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs", false]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary", false]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest", false]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects", false]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record", false]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc", false]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records", false]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page", false]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats", false]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status", false]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls", false]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids", false]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version", false]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version", false]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version", false]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions", false]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params", false]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query", false]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID", false]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT", false]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT", false]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname", false]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest", false]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE", false]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy", false]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy", false]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy", false]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest", false]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object", false]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest", false]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs", false]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load", false]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest", false]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls", false]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path", false]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest", false]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS", false]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5", false]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum", false]], "module": [[9, "module-gen3.tools", false], [10, "module-gen3.tools.download.drs_download", false], [11, "module-gen3.tools.indexing.download_manifest", false], [11, "module-gen3.tools.indexing.index_manifest", false], [11, "module-gen3.tools.indexing.verify_manifest", false], [12, "module-gen3.tools.metadata.ingest_manifest", false]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id", false]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id", false]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type", false]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project", false]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint", false]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID", false]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query", false]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query", false]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query", false]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls", false]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download", false]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token", false]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects", false]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm", false]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path", false]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE", false]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time", false]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status", false]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file", false]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record", false]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl", false]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER", false]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update", false]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases", false]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank", false]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record", false]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time", false]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload", false]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file", false]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid", false]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url", false]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS", false]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access", false]]}, "objects": {"gen3": [[9, 3, 0, "-", "tools"]], "gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "terms": {"": [1, 4, 8, 10, 11], "0": [5, 7, 8, 11], "0a80fada010c": 11, "0a80fada096c": 11, "0a80fada097c": 11, "0a80fada098c": 11, "0a80fada099c": 11, "1": [4, 5, 8, 10, 11], "10": [5, 7, 11], "100": [8, 11], "11e9": 11, "1716303015": [11, 12], "2": [5, 11], "24": [11, 12], "2512589": 11, "255e396f": 11, "3": [5, 11], "30": 8, "33": 5, "333": 5, "343434344": 11, "363455714": 11, "4": [5, 11], "450c": 11, "4659653": 12, "4714": 8, "473d83400bc1bc9dc635e334fadd433c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "5": [0, 5], "50": 7, "543434443": 11, "6f90": 8, "7d3d8d2083b4": 11, "8420": 8, "93d9af72": 11, "9a07": 11, "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "AND": 5, "Be": 1, "But": 5, "By": 11, "For": [1, 5, 6, 7, 8, 9, 11], "IF": 11, "If": [0, 1, 7, 11, 12], "In": 10, "It": 10, "NOT": 12, "OR": 5, "One": 7, "Such": 9, "THE": 11, "That": 3, "The": [0, 1, 2, 3, 5, 8, 10, 11], "There": 11, "These": 9, "To": 11, "Will": [4, 7, 10], "_get_acl_from_row": 11, "_get_authz_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_for_row": 12, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "_guid_typ": 12, "_manag": [2, 9, 10], "_query_for_associated_indexd_record_guid": 12, "_ssl": [3, 4, 5], "a5c6": 11, "ab167e49d25b488939b1ede42752458b": 3, "about": [2, 3], "abov": 11, "access": [0, 1, 3, 7, 10], "access_method": [2, 9, 10], "access_token": 0, "accesstoken": 0, "acl": [2, 3, 9, 11], "across": 11, "act": 0, "action": [9, 11], "actual": 11, "ad": 3, "add": [3, 5], "addit": [3, 5, 10, 11], "admin": [5, 11], "admin_endpoint_suffix": 5, "after": 10, "against": [3, 7, 8, 11, 12], "algorithm": 3, "alia": [3, 5], "alias": 5, "aliv": 7, "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "allow": [0, 6, 8, 10, 11, 12], "allowed_data_upload_bucket": 1, "along": 2, "alreadi": 9, "also": 1, "altern": [5, 11], "alwai": 5, "ammount": 12, "amount": [1, 9], "an": [0, 3, 6, 8, 10, 11], "ani": [0, 5, 10, 11], "anoth": 5, "api": [0, 5, 8, 11], "api_kei": 11, "appli": 7, "appropri": 13, "ar": [5, 7, 8, 9, 10, 11], "arbitrari": 0, "argument": [0, 13], "arrai": 8, "asc": 7, "assign": 9, "assist": 10, "associ": [3, 5], "assum": 11, "async": [3, 4, 5, 9, 11, 12], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_create_record": [2, 3], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_download_object_manifest": [2, 9, 11], "async_get": [2, 5], "async_get_alias": [2, 5], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_url": [2, 3], "async_query_urls_from_indexd": [2, 9, 12], "async_run_job_and_wait": [2, 4], "async_upd": [2, 5], "async_update_alias": [2, 5], "async_update_record": [2, 3], "async_verify_object_manifest": [2, 9, 11], "asynchron": [3, 4, 5], "asyncio": [11, 12], "asyncron": 5, "attach": [3, 5], "attempt": 11, "attribut": [10, 11], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "authbas": 0, "authent": 0, "author": 1, "authz": [0, 1, 2, 3, 9, 10, 11], "auto": [0, 2], "automat": 0, "avail": [1, 2, 10, 11], "az": 1, "b": [5, 11], "b0f1": 11, "bar": 10, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "baseid": 3, "basic": [3, 11, 12], "batch_creat": [2, 5], "batch_siz": 8, "behalf": 0, "behavior": 11, "being": 3, "belong": 8, "below": 11, "blank": 3, "blob": [5, 7], "bodi": 3, "bool": [4, 5, 8, 10, 11, 12], "boolean": 3, "bownload": 10, "broad": 9, "broken": 9, "bucket": [1, 6], "bundl": 10, "byte": 10, "c": [5, 11], "cach": 10, "cache_hosts_wts_token": [2, 9, 10], "call": [10, 13], "can": [0, 3, 4, 8, 11, 12], "capabl": 9, "case": [0, 10], "categori": 9, "ccle": 8, "ccle_one_record": 8, "ccle_sample_nod": 8, "cdi": 7, "chang": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "child": 10, "children": [2, 9, 10], "chunk_siz": 8, "class": [0, 2, 10, 11, 13], "cli": 10, "client": [0, 3], "client_credenti": 0, "client_id": 0, "client_scop": 0, "client_secret": 0, "code": [2, 8], "column": [11, 12], "column_to_use_as_guid": [2, 9, 12], "columna": 11, "columnb": 11, "columnc": 11, "com": 7, "comma": 11, "command": [10, 11], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "commons_url": [2, 9, 10, 11, 12], "complet": [4, 11], "complex": 7, "concat": 11, "concurr": [11, 12], "configur": 1, "connect": 12, "consist": 3, "constructor": 0, "contain": [0, 2, 5, 8, 9, 10, 11, 12], "content": [3, 13], "content_created_d": 3, "content_updated_d": 3, "continu": 10, "control": 3, "conveni": 10, "copi": [2, 13], "coroutin": 11, "correspond": 3, "count": 3, "crdc": 0, "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_blank": [2, 3], "create_index_key_path": [2, 5], "create_job": [2, 4], "create_new_vers": [2, 3], "create_object_list": [2, 9, 10], "create_program": [2, 8], "create_project": [2, 8], "create_record": [2, 3], "created_tim": [2, 9, 10], "creation": [3, 11], "cred": 3, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "csv": [8, 11, 12], "curl": [0, 2], "current": [6, 8, 10], "current_dir": [2, 9, 11], "custom": 11, "d": 5, "d70b41b9": 8, "data": [0, 1, 3, 5, 7, 8, 10, 11], "data_spreadsheet": 8, "data_typ": 7, "data_upload_bucket": 1, "dataa": 11, "datab": 11, "databas": 5, "datacommon": 0, "datafil": 10, "datamanag": 10, "date": 3, "datetim": [1, 3, 10], "dbgap": 12, "dcf": 8, "def": 11, "default": [0, 1, 3, 7, 8, 11, 12], "defin": [5, 8, 10], "delai": 4, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_all_guid": [2, 9, 11], "delete_fil": [1, 2], "delete_file_loc": [1, 2, 6], "delete_index_key_path": [2, 5], "delete_nod": [2, 8], "delete_object": [2, 6], "delete_program": [2, 8], "delete_project": [2, 8], "delete_record": [2, 3, 8], "delete_unpacked_packag": 10, "delimet": [11, 12], "delimit": 11, "demograph": 8, "deprec": 1, "descript": [3, 5], "desir": 11, "dest_path": 13, "dest_urlstr": 13, "dest_w": 13, "dest_wskei": 13, "detail": [2, 7, 10], "determin": [10, 11, 12], "dev": 11, "dict": [3, 4, 5, 10, 11, 12], "dictionari": [3, 4, 5, 7, 8], "did": 3, "differ": 5, "direct": 0, "directori": [10, 11], "disabl": 10, "discoveri": 10, "disk": 13, "dispatch": 4, "dist_resolut": 3, "distribut": 3, "doc": [7, 10], "docstr": 2, "document": [1, 3], "doe": [0, 12], "domain": [11, 12], "done": 4, "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "download_files_in_drs_manifest": [2, 9, 10], "download_list": 10, "download_manifest": 11, "download_singl": [1, 2], "download_url": [2, 13], "downloadmanag": [2, 9, 10], "downloadstatu": [2, 9, 10], "dr": [2, 9], "drs_download": 10, "drs_hostnam": 10, "drsdownload": 10, "drsobjecttyp": 10, "e": [5, 10], "e043ab8b77b9": 8, "each": [3, 8, 10, 11], "effici": 9, "eg": 3, "either": 8, "elasticsearch": 7, "els": [0, 12], "elsewher": 12, "empti": [8, 11], "enabl": 11, "end": [5, 10], "end_tim": [2, 9, 10], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "entir": 8, "entri": [3, 11], "env": 0, "environ": 0, "equal": 7, "error": [10, 11, 12], "error_nam": 11, "etc": 8, "even": 11, "everi": [9, 11], "everyth": 11, "ex": [0, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "exclud": 3, "execut": [7, 8, 11], "exist": [1, 3, 5, 6, 9, 12], "expect": [5, 9, 11], "experi": 8, "expir": [0, 1], "expires_in": 1, "export": [8, 10], "export_nod": [2, 8], "export_record": [2, 8], "f1f8": 11, "factori": 10, "fail": [8, 10], "fals": [3, 5, 6, 10, 11], "featur": [1, 6], "fenc": [0, 1], "fetch": 0, "field": [3, 5, 7, 11, 12], "fieldnam": 11, "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "file_nam": [1, 2, 3, 9, 10, 11], "file_s": [2, 9, 10, 11], "file_st": 3, "fileformat": 8, "filenam": [0, 8, 10, 11, 12], "files": 10, "fill": 12, "filter": [5, 7], "filter_object": 7, "first": [7, 8], "flag": 11, "folder": 11, "follow": [0, 11], "forc": 11, "force_metadata_columns_even_if_empti": 11, "form": 13, "format": [3, 5, 8, 11], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "func_to_parse_row": [11, 12], "function": [2, 3, 4, 5, 9, 10, 11, 12], "g": 10, "gen3": [10, 11, 12], "gen3_api_kei": 0, "gen3_oidc_client_creds_secret": 0, "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "gen3fil": [1, 2], "gen3index": [2, 3], "gen3job": [2, 4, 10], "gen3metadata": [2, 5], "gen3object": [2, 6], "gen3queri": [2, 7], "gen3submiss": [2, 8], "gen3wsstorag": [2, 13], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "get_access_token": [0, 2], "get_access_token_from_wt": [0, 2], "get_alias": [2, 5], "get_all_record": [2, 3], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_fresh_token": [2, 9, 10], "get_graphql_schema": [2, 8], "get_guid_from_fil": 12, "get_guids_prefix": [2, 3], "get_index_key_path": [2, 5], "get_latest_vers": [2, 3], "get_output": [2, 4], "get_presigned_url": [1, 2], "get_program": [2, 8], "get_project": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_statu": [2, 4], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "giangb": 11, "github": [2, 7], "give": 1, "given": [0, 3, 4, 5, 8, 10, 12, 13], "global": [4, 5], "good": 3, "grant": 0, "graph": 8, "graphql": [7, 8], "graphql_queri": [2, 7], "group": 3, "guid": [1, 2, 3, 5, 6, 9, 11, 12], "guid_exampl": 11, "guid_for_row": 12, "guid_from_fil": 12, "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "guppi": 7, "ha": [0, 11], "handl": [3, 10], "hardcod": 0, "has_vers": 3, "hash": [3, 11], "hash_typ": 3, "have": [5, 11], "header": 11, "healthi": [3, 4, 5], "help": 11, "helper": 2, "hit": 11, "host": 10, "hostnam": [2, 9, 10], "how": [8, 11], "howto": 10, "http": [0, 7, 11, 12], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "id": [0, 1, 3, 5, 10, 11], "idea": 3, "identifi": [3, 5, 9, 11], "idp": 0, "illustr": 11, "immut": 3, "implement": 0, "implic": 11, "import": 11, "includ": [0, 3], "indent": 10, "index": [0, 2, 5, 9], "index_manifest": 11, "index_object_manifest": [2, 9, 11], "indexd": [1, 3, 6, 10, 11, 12], "indexd_field": [11, 12], "indexd_record_page_s": [2, 9, 11], "indexed_file_object_guid": 12, "indic": [0, 11], "infil": 10, "info": [3, 11], "inform": [2, 3, 10], "ingest": [2, 9], "ingest_manifest": 12, "initi": [0, 10], "input": [4, 10, 11], "input_manifest": 11, "instal": [0, 2, 11], "instanc": [1, 3, 6, 7, 8, 9, 10], "instead": [1, 7, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "integ": [1, 3, 8], "intend": 0, "interact": [1, 3, 4, 5, 6, 8, 13], "interest": 10, "interpret": 0, "introspect": 8, "involv": 9, "is_healthi": [2, 3, 4, 5], "is_indexed_file_object": 12, "isn": 1, "issu": 0, "its": [1, 3], "job": 2, "job_id": 4, "job_input": 4, "job_nam": 4, "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "just": [5, 11, 12], "jwt": 0, "kei": [0, 3, 5, 13], "know": 11, "known": 10, "kwarg": [3, 4, 5], "l": [2, 13], "larg": 9, "last": 10, "latest": 3, "least": 3, "level": 6, "librari": 11, "like": [3, 5, 9, 11, 12], "limit": [1, 3, 5, 12], "linear": 4, "linux": 10, "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "list_job": [2, 4], "live": [11, 12], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "local": [0, 13], "locat": [1, 6], "lock": 12, "log": [8, 10, 11, 12], "logic": [5, 12], "loop": 11, "ls_path": [2, 13], "maco": 11, "made": 3, "mai": [0, 9, 11], "main": 10, "make": [9, 11], "manag": [1, 5, 10], "mani": [8, 11], "manifest": [2, 8, 9, 10, 11, 12], "manifest_1": 10, "manifest_fil": [11, 12], "manifest_file_delimit": [11, 12], "manifest_row_pars": [11, 12], "map": [0, 11], "mark": 8, "master": 7, "match": [3, 5, 12], "max": 5, "max_concurrent_request": [2, 9, 11, 12], "max_presigned_url_ttl": 1, "max_tri": 8, "maximum": [11, 12], "md": [5, 7, 10, 12], "md5": [2, 3, 9, 11], "md5_hash": 11, "md5sum": [2, 9, 10], "mean": 8, "mechan": 3, "merg": 5, "metadata": [2, 3, 6, 9, 11], "metadata_list": 5, "metadata_sourc": 12, "metadata_typ": 12, "metdata": 12, "method": [1, 7, 10], "minimum": 10, "minut": 0, "mode": 7, "modul": [2, 10, 11], "more": [2, 5, 7, 9, 10], "most": 9, "mostli": 2, "multipl": [8, 11], "must": [1, 5], "my_common": 10, "my_credenti": 10, "my_field": 7, "my_index": 7, "my_program": 7, "my_project": 7, "name": [3, 4, 8, 10, 11, 12, 13], "namespac": [0, 12], "necessari": [3, 5], "need": [3, 7, 10, 11], "nest": 5, "net": 11, "never": 0, "new": [0, 3], "node": 8, "node_nam": 8, "node_typ": 8, "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "note": [0, 3, 11, 12], "noth": [3, 6], "now": [1, 8], "num": 5, "num_process": 11, "num_total_fil": 11, "number": [3, 7, 8, 11, 12], "o": 0, "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "object_id": [1, 2, 9, 10], "object_list": 10, "object_typ": [2, 9, 10], "objectid": 10, "obtain": [0, 10], "occur": 10, "off": 5, "offset": [5, 7], "oidc": 0, "old": 3, "one": [3, 5, 10, 11], "onli": [3, 5, 7, 8, 10, 11], "open": [8, 10, 11], "open_project": [2, 8], "openid": 0, "opt": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "order": [0, 8], "ordered_node_list": 8, "org": 10, "otherwis": 10, "output": [4, 5, 11, 12], "output_dir": 10, "output_filenam": [11, 12], "overrid": [0, 11, 12], "overwrit": 5, "own": 0, "packag": 10, "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "pagin": 3, "parallel": 11, "param": [3, 5, 8, 10], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "pars": [10, 11, 12, 13], "parser": [11, 12], "particular": 0, "pass": [0, 7, 8, 10], "password": [11, 12], "path": [0, 1, 5, 10, 11, 13], "path_to_manifest": 11, "pattern": [3, 12], "pdcdatastor": 11, "pend": 10, "per": [11, 12], "peregrin": 8, "permiss": 10, "persist": 9, "phs0001": 11, "phs0002": 11, "pick": 1, "pla": 11, "place": 11, "planx": 11, "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "popul": [10, 12], "posit": [1, 7], "possibl": 10, "post": [0, 11], "pprint": [2, 9, 10], "prefix": 3, "presign": 1, "pretti": 10, "prev_guid": [2, 9, 11], "previou": [3, 11], "previous": 4, "print": [8, 10], "process": 11, "processed_fil": 11, "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "program": [8, 11], "progress": [8, 10], "project": [8, 11], "project_id": [7, 8], "protocol": 1, "provid": [0, 1, 3, 5, 7, 8, 12], "public": [3, 5], "put": 0, "py": 11, "python": [2, 9, 11], "python3": 11, "python_subprocess_command": 11, "queri": [1, 2, 3, 5, 8, 11, 12], "query_str": 7, "query_txt": [7, 8], "query_url": [2, 3], "quickstart": 2, "rather": 0, "raw": [7, 11], "raw_data_download": [2, 7], "rbac": 3, "read": [3, 5, 11], "readm": 2, "reason": 10, "record": [1, 3, 5, 7, 8, 11, 12], "refresh": [0, 10], "refresh_access_token": [0, 2], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "regist": 8, "regular": 7, "relat": 9, "remov": [1, 6, 11, 13], "replac": 11, "replace_url": 11, "repo": 2, "repres": [3, 5, 10], "represent": [1, 3], "request": [0, 1, 3, 5, 8, 11, 12], "requir": 10, "resolv": 10, "resolve_object": [2, 9, 10], "respect": 7, "respons": [0, 1, 3, 4, 5], "result": [1, 8, 10, 11], "retri": 8, "retriev": [1, 8, 10, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "return_full_metadata": 5, "rev": 3, "revers": 8, "revis": 3, "right": 1, "rm": [2, 13], "rm_path": [2, 13], "root": [11, 12], "row": [7, 8, 11, 12], "row_offset": 8, "rtype": 3, "run": [8, 11], "s3": [1, 10, 11], "safe": 11, "same": [5, 11, 13], "sampl": [8, 10], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "save": 10, "save_directori": 10, "schema": 8, "scope": [0, 1], "screen": 8, "script": 2, "search": [0, 2, 3], "second": [1, 4], "secret": 0, "see": [7, 10, 11], "self": 10, "semaphon": 12, "semaphor": 12, "separ": [0, 11], "server": 10, "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "service_loc": [3, 4, 5], "session": 11, "set": [0, 1, 5, 10], "setup": 2, "sheepdog": 8, "should": [0, 8, 11], "show": 10, "show_progress": 10, "shown": 11, "sign": 1, "signpost": 3, "similar": 10, "simpl": 3, "simpli": 11, "sinc": 3, "singl": [1, 5, 8], "size": [2, 3, 9, 10, 11], "skip": 8, "sleep": 4, "so": 11, "some": [0, 2], "someth": 11, "sort": 7, "sort_field": 7, "sort_object": 7, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "space": [0, 11], "specif": [5, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "spreadsheet": 8, "src_path": 13, "src_urlstr": 13, "src_w": 13, "src_wskei": 13, "ssl": [3, 4, 5], "start": [3, 4, 7, 8, 10], "start_tim": [2, 9, 10], "static": 10, "statu": [2, 4, 9, 10], "storag": [1, 2, 6], "store": [1, 3, 10], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "string": [0, 3, 5, 11, 13], "strip": 11, "sub": 8, "subject": [7, 8], "submiss": 2, "submit": [8, 11], "submit_additional_metadata_column": 11, "submit_fil": [2, 8], "submit_record": [2, 8], "submitter_id": 7, "success": 10, "successfulli": 10, "suffici": 3, "suppli": 3, "support": [0, 1, 5, 8, 11], "sure": 1, "synchron": 11, "syntax": 7, "system": [6, 7, 8, 9], "t": [1, 5, 11], "tab": 11, "task": 9, "temporari": 11, "test": 11, "test1": 11, "test2": 11, "test3": 11, "test4": 11, "test5": 11, "text": [1, 7, 8], "than": [0, 5], "thei": [0, 10], "them": [10, 11], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "those": 11, "thread": 11, "thread_num": 11, "threadcontrol": [2, 9, 11], "through": [8, 11], "tier": 7, "time": [1, 3, 8, 10, 11], "timestamp": 10, "tmp_folder": [2, 9, 11], "token": [0, 10], "tool": 2, "total": 11, "treat": [1, 5], "tree": 10, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "try": 0, "tsv": [8, 11, 12], "tupl": [0, 3, 11, 12], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "typic": 10, "uc": 7, "unaccess": 7, "under": [0, 8, 13], "uniqu": [1, 5], "unknown": 10, "unpack": 10, "unpack_packag": 10, "until": [4, 10], "up": [5, 9], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "update_blank": [2, 3], "update_record": [2, 3], "updated_tim": [2, 9, 10], "upload": [1, 2, 3, 8, 13], "upload_fil": [1, 2], "upload_file_to_guid": [1, 2], "upload_url": [2, 13], "url": [1, 2, 3, 9, 10, 11, 12, 13], "urls_metadata": 3, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "usag": 11, "use_agg_md": 5, "user": [0, 10, 12], "user_access": [2, 9, 10], "usual": 12, "utcnow": 1, "util": 9, "uuid": [1, 3, 8], "uuid1": 8, "uuid2": 8, "valid": [3, 7], "valu": [0, 1, 3, 5, 7, 10, 11], "value_from_indexd": 11, "value_from_manifest": 11, "variabl": [0, 7, 8], "variou": 2, "verbos": [7, 8], "verif": 11, "verifi": [2, 9], "verify_manifest": 11, "verify_object_manifest": 11, "version": [3, 4, 5], "vital_statu": 7, "w": 13, "wa": 0, "wai": 10, "wait": 4, "want": [0, 3, 8], "warn": 11, "we": [3, 11], "web": 0, "what": 5, "when": [0, 3, 7, 10, 12], "where": [0, 3, 5, 11, 12], "whether": [3, 4, 5, 8, 11, 12], "which": [8, 10], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "whose": 5, "within": [0, 2, 9], "without": [3, 5], "won": 5, "work": [0, 10], "workaround": 11, "worksheet": 8, "workspac": [0, 2], "wrapper": 10, "write": 11, "ws_urlstr": 13, "wskei": 13, "wss": 13, "wt": [0, 10], "x": 11, "xlsx": 8, "you": [0, 3, 8, 11], "your": 0}, "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "titleterms": {"": 2, "auth": 0, "class": [1, 3, 4, 5, 6, 7, 8], "document": 2, "download": [10, 11], "dr": 10, "file": 1, "gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "helper": 0, "index": [3, 11], "indic": 2, "ingest": 12, "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "sdk": 2, "storag": 13, "submiss": 8, "tabl": 2, "tool": [9, 10, 11, 12], "verifi": 11, "welcom": 2, "workspac": 13}}) \ No newline at end of file +Search.setIndex({"alltitles": {"DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Indexing Tools": [[11, "indexing-tools"]], "Indices and tables": [[2, "indices-and-tables"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]]}, "docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "indexentries": {"_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager", false]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods", false]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS", false]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create", false]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases", false]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record", false]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias", false]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases", false]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest", false]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get", false]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases", false]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record", false]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum", false]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page", false]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params", false]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest", false]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls", false]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd", false]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait", false]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update", false]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases", false]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record", false]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest", false]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider", false]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ", false]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create", false]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens", false]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children", false]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID", false]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url", false]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy", false]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create", false]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases", false]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank", false]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path", false]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job", false]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version", false]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list", false]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program", false]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project", false]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record", false]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time", false]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl", false]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR", false]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete", false]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias", false]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases", false]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids", false]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file", false]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations", false]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path", false]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node", false]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes", false]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object", false]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program", false]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project", false]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record", false]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record", false]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records", false]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download", false]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download", false]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download", false]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest", false]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single", false]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url", false]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable", false]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager", false]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus", false]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time", false]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint", false]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node", false]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record", false]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name", false]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name", false]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size", false]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size", false]], "gen3.tools": [[9, "module-gen3.tools", false]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download", false]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest", false]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest", false]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest", false]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest", false]], "gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth", false]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File", false]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index", false]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs", false]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata", false]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object", false]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query", false]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission", false]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage", false]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get", false]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get", false]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token", false]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts", false]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases", false]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records", false]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all", false]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node", false]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token", false]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema", false]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix", false]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths", false]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version", false]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output", false]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url", false]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs", false]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary", false]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest", false]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects", false]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record", false]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc", false]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records", false]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page", false]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats", false]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status", false]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls", false]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids", false]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version", false]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version", false]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version", false]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions", false]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params", false]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query", false]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID", false]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT", false]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT", false]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname", false]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest", false]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE", false]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy", false]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy", false]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy", false]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest", false]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object", false]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest", false]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs", false]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load", false]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest", false]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls", false]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path", false]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest", false]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS", false]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5", false]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum", false]], "module": [[9, "module-gen3.tools", false], [10, "module-gen3.tools.download.drs_download", false], [11, "module-gen3.tools.indexing.download_manifest", false], [11, "module-gen3.tools.indexing.index_manifest", false], [11, "module-gen3.tools.indexing.verify_manifest", false], [12, "module-gen3.tools.metadata.ingest_manifest", false]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id", false]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id", false]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type", false]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project", false]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint", false]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID", false]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query", false]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query", false]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query", false]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls", false]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download", false]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token", false]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects", false]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm", false]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path", false]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE", false]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time", false]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status", false]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file", false]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record", false]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl", false]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER", false]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update", false]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases", false]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank", false]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record", false]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time", false]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload", false]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file", false]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid", false]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url", false]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS", false]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access", false]]}, "objects": {"gen3": [[9, 3, 0, "-", "tools"]], "gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "terms": {"": [1, 4, 8, 10, 11], "0": [5, 7, 8, 11], "0a80fada010c": 11, "0a80fada096c": 11, "0a80fada097c": 11, "0a80fada098c": 11, "0a80fada099c": 11, "1": [4, 5, 8, 10, 11], "10": [5, 7, 11], "100": [8, 11], "11e9": 11, "1716303015": [], "1716386558": [11, 12], "2": [5, 11], "24": [11, 12], "2512589": [], "2522886": 11, "255e396f": 11, "3": [5, 11], "30": 8, "33": 5, "333": 5, "343434344": 11, "363455714": 11, "4": [5, 11], "450c": 11, "4659653": [], "4714": 8, "473d83400bc1bc9dc635e334fadd433c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "5": [0, 5], "50": 7, "543434443": 11, "5486019": 12, "6f90": 8, "7d3d8d2083b4": 11, "8420": 8, "93d9af72": 11, "9a07": 11, "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "AND": 5, "Be": 1, "But": 5, "By": 11, "For": [1, 5, 6, 7, 8, 9, 11], "IF": 11, "If": [0, 1, 7, 11, 12], "In": 10, "It": 10, "NOT": 12, "OR": 5, "One": 7, "Such": 9, "THE": 11, "That": 3, "The": [0, 1, 2, 3, 5, 8, 10, 11], "There": 11, "These": 9, "To": 11, "Will": [4, 7, 10], "_get_acl_from_row": 11, "_get_authz_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_for_row": 12, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "_guid_typ": 12, "_manag": [2, 9, 10], "_query_for_associated_indexd_record_guid": 12, "_ssl": [3, 4, 5], "a5c6": 11, "ab167e49d25b488939b1ede42752458b": 3, "about": [2, 3], "abov": 11, "access": [0, 1, 3, 7, 10], "access_method": [2, 9, 10], "access_token": 0, "accesstoken": 0, "acl": [2, 3, 9, 11], "across": 11, "act": 0, "action": [9, 11], "actual": 11, "ad": 3, "add": [3, 5], "addit": [3, 5, 10, 11], "admin": [5, 11], "admin_endpoint_suffix": 5, "after": 10, "against": [3, 7, 8, 11, 12], "algorithm": 3, "alia": [3, 5], "alias": 5, "aliv": 7, "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "allow": [0, 6, 8, 10, 11, 12], "allowed_data_upload_bucket": 1, "along": 2, "alreadi": 9, "also": 1, "altern": [5, 11], "alwai": 5, "ammount": 12, "amount": [1, 9], "an": [0, 3, 6, 8, 10, 11], "ani": [0, 5, 10, 11], "anoth": 5, "api": [0, 5, 8, 11], "api_kei": 11, "appli": 7, "appropri": 13, "ar": [5, 7, 8, 9, 10, 11], "arbitrari": 0, "argument": [0, 13], "arrai": 8, "asc": 7, "assign": 9, "assist": 10, "associ": [3, 5], "assum": 11, "async": [3, 4, 5, 9, 11, 12], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_create_record": [2, 3], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_download_object_manifest": [2, 9, 11], "async_get": [2, 5], "async_get_alias": [2, 5], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_url": [2, 3], "async_query_urls_from_indexd": [2, 9, 12], "async_run_job_and_wait": [2, 4], "async_upd": [2, 5], "async_update_alias": [2, 5], "async_update_record": [2, 3], "async_verify_object_manifest": [2, 9, 11], "asynchron": [3, 4, 5], "asyncio": [11, 12], "asyncron": 5, "attach": [3, 5], "attempt": 11, "attribut": [10, 11], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "authbas": 0, "authent": 0, "author": 1, "authz": [0, 1, 2, 3, 9, 10, 11], "auto": [0, 2], "automat": 0, "avail": [1, 2, 10, 11], "az": 1, "b": [5, 11], "b0f1": 11, "bar": 10, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "baseid": 3, "basic": [3, 11, 12], "batch_creat": [2, 5], "batch_siz": 8, "behalf": 0, "behavior": 11, "being": 3, "belong": 8, "below": 11, "blank": 3, "blob": [5, 7], "bodi": 3, "bool": [4, 5, 8, 10, 11, 12], "boolean": 3, "bownload": 10, "broad": 9, "broken": 9, "bucket": [1, 6], "bundl": 10, "byte": 10, "c": [5, 11], "cach": 10, "cache_hosts_wts_token": [2, 9, 10], "call": [10, 13], "can": [0, 3, 4, 8, 11, 12], "capabl": 9, "case": [0, 10], "categori": 9, "ccle": 8, "ccle_one_record": 8, "ccle_sample_nod": 8, "cdi": 7, "chang": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "child": 10, "children": [2, 9, 10], "chunk_siz": 8, "class": [0, 2, 10, 11, 13], "cli": 10, "client": [0, 3], "client_credenti": 0, "client_id": 0, "client_scop": 0, "client_secret": 0, "code": [2, 8], "column": [11, 12], "column_to_use_as_guid": [2, 9, 12], "columna": 11, "columnb": 11, "columnc": 11, "com": 7, "comma": 11, "command": [10, 11], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "commons_url": [2, 9, 10, 11, 12], "complet": [4, 11], "complex": 7, "concat": 11, "concurr": [11, 12], "configur": 1, "connect": 12, "consist": 3, "constructor": 0, "contain": [0, 2, 5, 8, 9, 10, 11, 12], "content": [3, 13], "content_created_d": 3, "content_updated_d": 3, "continu": 10, "control": 3, "conveni": 10, "copi": [2, 13], "coroutin": 11, "correspond": 3, "count": 3, "crdc": 0, "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_blank": [2, 3], "create_index_key_path": [2, 5], "create_job": [2, 4], "create_new_vers": [2, 3], "create_object_list": [2, 9, 10], "create_program": [2, 8], "create_project": [2, 8], "create_record": [2, 3], "created_tim": [2, 9, 10], "creation": [3, 11], "cred": 3, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "csv": [8, 11, 12], "curl": [0, 2], "current": [6, 8, 10], "current_dir": [2, 9, 11], "custom": 11, "d": 5, "d70b41b9": 8, "data": [0, 1, 3, 5, 7, 8, 10, 11], "data_spreadsheet": 8, "data_typ": 7, "data_upload_bucket": 1, "dataa": 11, "datab": 11, "databas": 5, "datacommon": 0, "datafil": 10, "datamanag": 10, "date": 3, "datetim": [1, 3, 10], "dbgap": 12, "dcf": 8, "def": 11, "default": [0, 1, 3, 7, 8, 11, 12], "defin": [5, 8, 10], "delai": 4, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_all_guid": [2, 9, 11], "delete_fil": [1, 2], "delete_file_loc": [1, 2, 6], "delete_index_key_path": [2, 5], "delete_nod": [2, 8], "delete_object": [2, 6], "delete_program": [2, 8], "delete_project": [2, 8], "delete_record": [2, 3, 8], "delete_unpacked_packag": 10, "delimet": [11, 12], "delimit": 11, "demograph": 8, "deprec": 1, "descript": [3, 5], "desir": 11, "dest_path": 13, "dest_urlstr": 13, "dest_w": 13, "dest_wskei": 13, "detail": [2, 7, 10], "determin": [10, 11, 12], "dev": 11, "dict": [3, 4, 5, 10, 11, 12], "dictionari": [3, 4, 5, 7, 8], "did": 3, "differ": 5, "direct": 0, "directori": [10, 11], "disabl": 10, "discoveri": 10, "disk": 13, "dispatch": 4, "dist_resolut": 3, "distribut": 3, "doc": [7, 10], "docstr": 2, "document": [1, 3], "doe": [0, 12], "domain": [11, 12], "done": 4, "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "download_files_in_drs_manifest": [2, 9, 10], "download_list": 10, "download_manifest": 11, "download_singl": [1, 2], "download_url": [2, 13], "downloadmanag": [2, 9, 10], "downloadstatu": [2, 9, 10], "dr": [2, 9], "drs_download": 10, "drs_hostnam": 10, "drsdownload": 10, "drsobjecttyp": 10, "e": [5, 10], "e043ab8b77b9": 8, "each": [3, 8, 10, 11], "effici": 9, "eg": 3, "either": 8, "elasticsearch": 7, "els": [0, 12], "elsewher": 12, "empti": [8, 11], "enabl": 11, "end": [5, 10], "end_tim": [2, 9, 10], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "entir": 8, "entri": [3, 11], "env": 0, "environ": 0, "equal": 7, "error": [10, 11, 12], "error_nam": 11, "etc": 8, "even": 11, "everi": [9, 11], "everyth": 11, "ex": [0, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "exclud": 3, "execut": [7, 8, 11], "exist": [1, 3, 5, 6, 9, 12], "expect": [5, 9, 11], "experi": 8, "expir": [0, 1], "expires_in": 1, "export": [8, 10], "export_nod": [2, 8], "export_record": [2, 8], "f1f8": 11, "factori": 10, "fail": [8, 10], "fals": [3, 5, 6, 10, 11], "featur": [1, 6], "fenc": [0, 1], "fetch": 0, "field": [3, 5, 7, 11, 12], "fieldnam": 11, "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "file_nam": [1, 2, 3, 9, 10, 11], "file_s": [2, 9, 10, 11], "file_st": 3, "fileformat": 8, "filenam": [0, 8, 10, 11, 12], "files": 10, "fill": 12, "filter": [5, 7], "filter_object": 7, "first": [7, 8], "flag": 11, "folder": 11, "follow": [0, 11], "forc": 11, "force_metadata_columns_even_if_empti": 11, "form": 13, "format": [3, 5, 8, 11], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "func_to_parse_row": [11, 12], "function": [2, 3, 4, 5, 9, 10, 11, 12], "g": 10, "gen3": [10, 11, 12], "gen3_api_kei": 0, "gen3_oidc_client_creds_secret": 0, "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "gen3fil": [1, 2], "gen3index": [2, 3], "gen3job": [2, 4, 10], "gen3metadata": [2, 5], "gen3object": [2, 6], "gen3queri": [2, 7], "gen3submiss": [2, 8], "gen3wsstorag": [2, 13], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "get_access_token": [0, 2], "get_access_token_from_wt": [0, 2], "get_alias": [2, 5], "get_all_record": [2, 3], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_fresh_token": [2, 9, 10], "get_graphql_schema": [2, 8], "get_guid_from_fil": 12, "get_guids_prefix": [2, 3], "get_index_key_path": [2, 5], "get_latest_vers": [2, 3], "get_output": [2, 4], "get_presigned_url": [1, 2], "get_program": [2, 8], "get_project": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_statu": [2, 4], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "giangb": 11, "github": [2, 7], "give": 1, "given": [0, 3, 4, 5, 8, 10, 12, 13], "global": [4, 5], "good": 3, "grant": 0, "graph": 8, "graphql": [7, 8], "graphql_queri": [2, 7], "group": 3, "guid": [1, 2, 3, 5, 6, 9, 11, 12], "guid_exampl": 11, "guid_for_row": 12, "guid_from_fil": 12, "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "guppi": 7, "ha": [0, 11], "handl": [3, 10], "hardcod": 0, "has_vers": 3, "hash": [3, 11], "hash_typ": 3, "have": [5, 11], "header": 11, "healthi": [3, 4, 5], "help": 11, "helper": 2, "hit": 11, "host": 10, "hostnam": [2, 9, 10], "how": [8, 11], "howto": 10, "http": [0, 7, 11, 12], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "id": [0, 1, 3, 5, 10, 11], "idea": 3, "identifi": [3, 5, 9, 11], "idp": 0, "illustr": 11, "immut": 3, "implement": 0, "implic": 11, "import": 11, "includ": [0, 3], "indent": 10, "index": [0, 2, 5, 9], "index_manifest": 11, "index_object_manifest": [2, 9, 11], "indexd": [1, 3, 6, 10, 11, 12], "indexd_field": [11, 12], "indexd_record_page_s": [2, 9, 11], "indexed_file_object_guid": 12, "indic": [0, 11], "infil": 10, "info": [3, 11], "inform": [2, 3, 10], "ingest": [2, 9], "ingest_manifest": 12, "initi": [0, 10], "input": [4, 10, 11], "input_manifest": 11, "instal": [0, 2, 11], "instanc": [1, 3, 6, 7, 8, 9, 10], "instead": [1, 7, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "integ": [1, 3, 8], "intend": 0, "interact": [1, 3, 4, 5, 6, 8, 13], "interest": 10, "interpret": 0, "introspect": 8, "involv": 9, "is_healthi": [2, 3, 4, 5], "is_indexed_file_object": 12, "isn": 1, "issu": 0, "its": [1, 3], "job": 2, "job_id": 4, "job_input": 4, "job_nam": 4, "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "just": [5, 11, 12], "jwt": 0, "kei": [0, 3, 5, 13], "know": 11, "known": 10, "kwarg": [3, 4, 5], "l": [2, 13], "larg": 9, "last": 10, "latest": 3, "least": 3, "level": 6, "librari": 11, "like": [3, 5, 9, 11, 12], "limit": [1, 3, 5, 12], "linear": 4, "linux": 10, "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "list_job": [2, 4], "live": [11, 12], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "local": [0, 13], "locat": [1, 6], "lock": 12, "log": [8, 10, 11, 12], "logic": [5, 12], "loop": 11, "ls_path": [2, 13], "maco": 11, "made": 3, "mai": [0, 9, 11], "main": 10, "make": [9, 11], "manag": [1, 5, 10], "mani": [8, 11], "manifest": [2, 8, 9, 10, 11, 12], "manifest_1": 10, "manifest_fil": [11, 12], "manifest_file_delimit": [11, 12], "manifest_row_pars": [11, 12], "map": [0, 11], "mark": 8, "master": 7, "match": [3, 5, 12], "max": 5, "max_concurrent_request": [2, 9, 11, 12], "max_presigned_url_ttl": 1, "max_tri": 8, "maximum": [11, 12], "md": [5, 7, 10, 12], "md5": [2, 3, 9, 11], "md5_hash": 11, "md5sum": [2, 9, 10], "mean": 8, "mechan": 3, "merg": 5, "metadata": [2, 3, 6, 9, 11], "metadata_list": 5, "metadata_sourc": 12, "metadata_typ": 12, "metdata": 12, "method": [1, 7, 10], "minimum": 10, "minut": 0, "mode": 7, "modul": [2, 10, 11], "more": [2, 5, 7, 9, 10], "most": 9, "mostli": 2, "multipl": [8, 11], "must": [1, 5], "my_common": 10, "my_credenti": 10, "my_field": 7, "my_index": 7, "my_program": 7, "my_project": 7, "name": [3, 4, 8, 10, 11, 12, 13], "namespac": [0, 12], "necessari": [3, 5], "need": [3, 7, 10, 11], "nest": 5, "net": 11, "never": 0, "new": [0, 3], "node": 8, "node_nam": 8, "node_typ": 8, "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "note": [0, 3, 11, 12], "noth": [3, 6], "now": [1, 8], "num": 5, "num_process": 11, "num_total_fil": 11, "number": [3, 7, 8, 11, 12], "o": 0, "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "object_id": [1, 2, 9, 10], "object_list": 10, "object_typ": [2, 9, 10], "objectid": 10, "obtain": [0, 10], "occur": 10, "off": 5, "offset": [5, 7], "oidc": 0, "old": 3, "one": [3, 5, 10, 11], "onli": [3, 5, 7, 8, 10, 11], "open": [8, 10, 11], "open_project": [2, 8], "openid": 0, "opt": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "order": [0, 8], "ordered_node_list": 8, "org": 10, "otherwis": 10, "output": [4, 5, 11, 12], "output_dir": 10, "output_filenam": [11, 12], "overrid": [0, 11, 12], "overwrit": 5, "own": 0, "packag": 10, "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "pagin": 3, "parallel": 11, "param": [3, 5, 8, 10], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "pars": [10, 11, 12, 13], "parser": [11, 12], "particular": 0, "pass": [0, 7, 8, 10], "password": [11, 12], "path": [0, 1, 5, 10, 11, 13], "path_to_manifest": 11, "pattern": [3, 12], "pdcdatastor": 11, "pend": 10, "per": [11, 12], "peregrin": 8, "permiss": 10, "persist": 9, "phs0001": 11, "phs0002": 11, "pick": 1, "pla": 11, "place": 11, "planx": 11, "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "popul": [10, 12], "posit": [1, 7], "possibl": 10, "post": [0, 11], "pprint": [2, 9, 10], "prefix": 3, "presign": 1, "pretti": 10, "prev_guid": [2, 9, 11], "previou": [3, 11], "previous": 4, "print": [8, 10], "process": 11, "processed_fil": 11, "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "program": [8, 11], "progress": [8, 10], "project": [8, 11], "project_id": [7, 8], "protocol": 1, "provid": [0, 1, 3, 5, 7, 8, 12], "public": [3, 5], "put": 0, "py": 11, "python": [2, 9, 11], "python3": 11, "python_subprocess_command": 11, "queri": [1, 2, 3, 5, 8, 11, 12], "query_str": 7, "query_txt": [7, 8], "query_url": [2, 3], "quickstart": 2, "rather": 0, "raw": [7, 11], "raw_data_download": [2, 7], "rbac": 3, "read": [3, 5, 11], "readm": 2, "reason": 10, "record": [1, 3, 5, 7, 8, 11, 12], "refresh": [0, 10], "refresh_access_token": [0, 2], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "regist": 8, "regular": 7, "relat": 9, "remov": [1, 6, 11, 13], "replac": 11, "replace_url": 11, "repo": 2, "repres": [3, 5, 10], "represent": [1, 3], "request": [0, 1, 3, 5, 8, 11, 12], "requir": 10, "resolv": 10, "resolve_object": [2, 9, 10], "respect": 7, "respons": [0, 1, 3, 4, 5], "result": [1, 8, 10, 11], "retri": 8, "retriev": [1, 8, 10, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "return_full_metadata": 5, "rev": 3, "revers": 8, "revis": 3, "right": 1, "rm": [2, 13], "rm_path": [2, 13], "root": [11, 12], "row": [7, 8, 11, 12], "row_offset": 8, "rtype": 3, "run": [8, 11], "s3": [1, 10, 11], "safe": 11, "same": [5, 11, 13], "sampl": [8, 10], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "save": 10, "save_directori": 10, "schema": 8, "scope": [0, 1], "screen": 8, "script": 2, "search": [0, 2, 3], "second": [1, 4], "secret": 0, "see": [7, 10, 11], "self": 10, "semaphon": 12, "semaphor": 12, "separ": [0, 11], "server": 10, "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "service_loc": [3, 4, 5], "session": 11, "set": [0, 1, 5, 10], "setup": 2, "sheepdog": 8, "should": [0, 8, 11], "show": 10, "show_progress": 10, "shown": 11, "sign": 1, "signpost": 3, "similar": 10, "simpl": 3, "simpli": 11, "sinc": 3, "singl": [1, 5, 8], "size": [2, 3, 9, 10, 11], "skip": 8, "sleep": 4, "so": 11, "some": [0, 2], "someth": 11, "sort": 7, "sort_field": 7, "sort_object": 7, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "space": [0, 11], "specif": [5, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "spreadsheet": 8, "src_path": 13, "src_urlstr": 13, "src_w": 13, "src_wskei": 13, "ssl": [3, 4, 5], "start": [3, 4, 7, 8, 10], "start_tim": [2, 9, 10], "static": 10, "statu": [2, 4, 9, 10], "storag": [1, 2, 6], "store": [1, 3, 10], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "string": [0, 3, 5, 11, 13], "strip": 11, "sub": 8, "subject": [7, 8], "submiss": 2, "submit": [8, 11], "submit_additional_metadata_column": 11, "submit_fil": [2, 8], "submit_record": [2, 8], "submitter_id": 7, "success": 10, "successfulli": 10, "suffici": 3, "suppli": 3, "support": [0, 1, 5, 8, 11], "sure": 1, "synchron": 11, "syntax": 7, "system": [6, 7, 8, 9], "t": [1, 5, 11], "tab": 11, "task": 9, "temporari": 11, "test": 11, "test1": 11, "test2": 11, "test3": 11, "test4": 11, "test5": 11, "text": [1, 7, 8], "than": [0, 5], "thei": [0, 10], "them": [10, 11], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "those": 11, "thread": 11, "thread_num": 11, "threadcontrol": [2, 9, 11], "through": [8, 11], "tier": 7, "time": [1, 3, 8, 10, 11], "timestamp": 10, "tmp_folder": [2, 9, 11], "token": [0, 10], "tool": 2, "total": 11, "treat": [1, 5], "tree": 10, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "try": 0, "tsv": [8, 11, 12], "tupl": [0, 3, 11, 12], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "typic": 10, "uc": 7, "unaccess": 7, "under": [0, 8, 13], "uniqu": [1, 5], "unknown": 10, "unpack": 10, "unpack_packag": 10, "until": [4, 10], "up": [5, 9], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "update_blank": [2, 3], "update_record": [2, 3], "updated_tim": [2, 9, 10], "upload": [1, 2, 3, 8, 13], "upload_fil": [1, 2], "upload_file_to_guid": [1, 2], "upload_url": [2, 13], "url": [1, 2, 3, 9, 10, 11, 12, 13], "urls_metadata": 3, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "usag": 11, "use_agg_md": 5, "user": [0, 10, 12], "user_access": [2, 9, 10], "usual": 12, "utcnow": 1, "util": 9, "uuid": [1, 3, 8], "uuid1": 8, "uuid2": 8, "valid": [3, 7], "valu": [0, 1, 3, 5, 7, 10, 11], "value_from_indexd": 11, "value_from_manifest": 11, "variabl": [0, 7, 8], "variou": 2, "verbos": [7, 8], "verif": 11, "verifi": [2, 9], "verify_manifest": 11, "verify_object_manifest": 11, "version": [3, 4, 5], "vital_statu": 7, "w": 13, "wa": 0, "wai": 10, "wait": 4, "want": [0, 3, 8], "warn": 11, "we": [3, 11], "web": 0, "what": 5, "when": [0, 3, 7, 10, 12], "where": [0, 3, 5, 11, 12], "whether": [3, 4, 5, 8, 11, 12], "which": [8, 10], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "whose": 5, "within": [0, 2, 9], "without": [3, 5], "won": 5, "work": [0, 10], "workaround": 11, "worksheet": 8, "workspac": [0, 2], "wrapper": 10, "write": 11, "ws_urlstr": 13, "wskei": 13, "wss": 13, "wt": [0, 10], "x": 11, "xlsx": 8, "you": [0, 3, 8, 11], "your": 0}, "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "titleterms": {"": 2, "auth": 0, "class": [1, 3, 4, 5, 6, 7, 8], "document": 2, "download": [10, 11], "dr": 10, "file": 1, "gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "helper": 0, "index": [3, 11], "indic": 2, "ingest": 12, "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "sdk": 2, "storag": 13, "submiss": 8, "tabl": 2, "tool": [9, 10, 11, 12], "verifi": 11, "welcom": 2, "workspac": 13}}) \ No newline at end of file diff --git a/docs/_build/html/tools/indexing.html b/docs/_build/html/tools/indexing.html index b2e6fbd9d..6b19de91c 100644 --- a/docs/_build/html/tools/indexing.html +++ b/docs/_build/html/tools/indexing.html @@ -381,7 +381,7 @@

Indexing Tools
-async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1716303015.2512589.log')[source]
+async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1716386558.2522886.log')[source]

Verify all file object records into a manifest csv

Parameters:
diff --git a/docs/_build/html/tools/metadata.html b/docs/_build/html/tools/metadata.html index 91e715699..8b0cc13d9 100644 --- a/docs/_build/html/tools/metadata.html +++ b/docs/_build/html/tools/metadata.html @@ -102,7 +102,7 @@

Metadata Tools
-async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1716303015.4659653.log', get_guid_from_file=True, metadata_type=None)[source]
+async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1716386558.5486019.log', get_guid_from_file=True, metadata_type=None)[source]

Ingest all metadata records into a manifest csv

Parameters:
From 87e40e29f4690dede9f4c21b48c63e2b5856c1c8 Mon Sep 17 00:00:00 2001 From: George Thomas Date: Thu, 30 May 2024 08:01:46 -0700 Subject: [PATCH 04/11] (HP-1458): move some logic to retriever --- gen3/tools/download/external_file_download.py | 236 +++------ .../download_tests/test_external_download.py | 464 ++++++++---------- 2 files changed, 280 insertions(+), 420 deletions(-) diff --git a/gen3/tools/download/external_file_download.py b/gen3/tools/download/external_file_download.py index bc20c9815..b473eae3e 100644 --- a/gen3/tools/download/external_file_download.py +++ b/gen3/tools/download/external_file_download.py @@ -11,11 +11,9 @@ from pathlib import Path from typing import Any, Dict, List -import requests from cdislogging import get_logger -from gen3.auth import Gen3AuthError -from gen3.tools.download.drs_download import DownloadStatus, wts_get_token +from gen3.auth import Gen3Auth REQUIRED_EXTERNAL_FILE_METADATA_KEYS = ["external_oidc_idp", "file_retriever"] @@ -23,14 +21,19 @@ def download_files_from_metadata( - hostname: str, auth, metadata_file, retrievers, download_path="." + hostname: str, + auth: Gen3Auth, + metadata_file: str, + retrievers: Dict, + download_path: str = ".", ) -> Dict[str, Any]: """ Download data from an external repository using - external-file metadata and a retreiver function. + external-file metadata and a retriever function. Parses the metadata for 'external_file_metadata' list - with IDP and retriever fields. + with IDP and retriever fields. The 'external_file_metadata' + must be nested under 'gen3_discovery'. JSON does not allow for storing references to functions. We store a string for 'file_retriever' value and then map the string @@ -41,12 +44,12 @@ def download_files_from_metadata( ..., "external_file_metadata": [ { - "external_oidc_idp": "qdr-keycloak", + "external_oidc_idp": "externaldata-keycloak", "file_retriever": "QDR", "study_id": "QDR_study_01" }, { - "external_oidc_idp": "qdr-keycloak", + "external_oidc_idp": "externaldata-keycloak", "file_retriever": "QDR", "file_id": "QDR_file_02" }, @@ -61,37 +64,25 @@ def download_files_from_metadata( Args: hostname (str): hostname of Gen3 commons to use for WTS - auth: Gen3 Auth instance for WTS - metadata_file (str): path to metadata json file + auth: Gen3Auth instance for WTS + metadata_file (str): path to external file metadata json file retrievers (dict): map of function name string to retreiver function reference. Returns: - dictionary of download status for each external_file_metadata object + dictionary of DownloadStatus for external file objects, None if errors """ - # check for empty retrievers if retrievers == {}: logger.critical(f"ERROR: 'retrievers' specification is empty {retrievers}") return None - # # get access token for WTS commons - # try: - # server_access_token = auth.get_access_token() - # except Gen3AuthError: - # logger.critical(f"Unable to authenticate your credentials with {hostname}") - # return None - # verify the metadata_file path is valid if not os.path.isfile(metadata_file): logger.critical(f"ERROR: cannot find metadata json file: {metadata_file}") return None - # read metadata - metadata = load_metadata(Path(metadata_file)) - - # get list of external_file_metadata objects + metadata = load_all_metadata(Path(metadata_file)) logger.debug(f"Metadata = {metadata}") external_file_metadata = extract_external_file_metadata(metadata) - # TODO: Handle empty value - log error and return logger.debug(f"External file metadata={external_file_metadata}") if external_file_metadata == None: logger.critical( @@ -102,7 +93,7 @@ def download_files_from_metadata( download_status = pull_files( wts_server_name=hostname, auth=auth, - external_file_metadata=external_file_metadata, + file_metadata_list=external_file_metadata, retrievers=retrievers, download_path=download_path, ) @@ -116,7 +107,7 @@ def download_files_from_metadata( def pull_files( wts_server_name: str, auth, - external_file_metadata, + file_metadata_list, retrievers, download_path, ) -> Dict[str, Any]: @@ -126,75 +117,43 @@ def pull_files( Args: wts_server_name (str): hostname of WTS server auth: Gen3Auth object for access to WTS - external_file_metadata (dict): + file_metadata_list (list): list of external file metadata objects retrievers (dict): download_path: path to write data files Returns: - list of download status for each external_file_metadata object, None if errors + dictionary of DownloadStatus for external file objects, None if errors """ completed = {} - # loop over external file objects - metadata_count = 0 - for file_metadata in external_file_metadata: - # create an identifier and DownloadStatus to store in 'completed' list. - if file_metadata.get("study_id"): - filename = file_metadata.get("study_id") - elif file_metadata.get("file_id"): - filename = file_metadata.get("file_id") - else: - filename = f"{metadata_count}" - logger.debug(f"Filename = {filename}") - completed[filename] = DownloadStatus(filename=filename, status="pending") - metadata_count += 1 - - if not is_valid_external_file_metadata(file_metadata): - logger.info(f"Skipping invalid external file metadata: {file_metadata}") - completed[filename].status = "invalid file metadata" - continue - if not file_metadata.get("file_retriever") in retrievers: - logger.info(f"Skipping, 'file_retriever' not found in retrievers") - completed[filename].status = "invalid file retriever" - continue - logger.info("Valid metadata, ready to download") - - # get the idp for the calls to wts/external_idp - idp = file_metadata.get("external_oidc_idp") + metadata_grouped_by_retriever = check_data_and_group_by_retriever( + file_metadata_list + ) + logger.debug(f"Grouped metadata = {metadata_grouped_by_retriever}") - # user should be logged in (say via portal) by now and have refresh tokens for idp - # check that user is logged in to commons with WTS server - connected_status = wts_connected(wts_server_name, auth.get_access_token()) - if connected_status != 200: - logger.info(f"Skipping, cannot get verify connected at WTS server") - completed[filename].status = "failed" + for key, val in metadata_grouped_by_retriever.items(): + retriever_function = retrievers.get(key) + if retriever_function == None: + logger.critical(f"Could not find retriever function for {key}") continue + file_metadata_list = val + download_status = None - # user should be already logged in (say via portal) and have refresh tokens for idp try: - wts_access_token = auth.get_access_token() - except Gen3AuthError: - logger.critical( - f"Unable to authenticate your credentials with {wts_server_name}" + logger.info( + f"Ready to retrieve data with retriever {retriever_function.__name__}" ) - completed[filename].status = "failed" - continue - idp_access_token = wts_get_token( - hostname=wts_server_name, idp=idp, access_token=wts_access_token - ) - if idp_access_token == None: - logger.critical(f"Could not get token for idp {idp}") - completed[filename].status = "failed" - continue + download_status = retriever_function( + wts_server_name, auth, file_metadata_list, download_path + ) + except NameError: + logger.critical("ERROR: Retriever function not in scope.") + except Exception as e: + logger.critical("Error from retriever function") + logger.critical(e) - # retrieve files from external host - success = retriever_manager( - file_metadata, idp_access_token, retrievers, download_path - ) - logger.info(f"Downloaded = {success}") - if success: - completed[filename].status = "downloaded" - else: - completed[filename].status = "failed" + if download_status: + logger.info(f"Adding download_status = {download_status}") + completed.update(download_status) if completed == {}: return None @@ -202,51 +161,6 @@ def pull_files( return completed -def retriever_manager(file_metadata, token, retrievers, download_path) -> bool: - """ - Retrieve data from external repo using idp, token, and retriever function. - The manager will call the the file_retriever function specified in the file_metadata. - - Args - file_metadata: the external_file_metadata with idp and retriever function - token: the access token for the external repo - retrievers: dict for mapping retriever function string in metadata to function reference - download_path: path for output files. - Returns: - boolean: True if data was downloaded and written to file - """ - - download_success = False - idp = file_metadata.get("external_oidc_idp") - # use metadata and retrievers to determine which retriever to call - retriever_function_string = file_metadata.get("file_retriever") - logger.debug(f"File metadata = {file_metadata}") - logger.debug(f"retriever string = {retriever_function_string}") - - retriever_function = retrievers.get(retriever_function_string) - study_id = file_metadata.get("study_id") - file_id = file_metadata.get("file_id") - try: - logger.info( - f"Ready to retrieve data from {idp} with retriever {retriever_function.__name__}" - ) - download_success = retriever_function(file_metadata, token, download_path) - # This is handled further up in main function. - except NameError: - logger.critical("ERROR: Retriever function not in scope.") - # handle errors specific to heal-sdk here - # - # other errors - except Exception as e: - logger.critical("Got an error") - logger.critical(e) - - return download_success - - -# metadata and external_file_metadata methods - - def extract_external_file_metadata(mds_object: dict) -> List: """ Extract the list of dictionaries of external_file_metadata from an mds object. @@ -265,20 +179,26 @@ def extract_external_file_metadata(mds_object: dict) -> List: logger.critical("ERROR: Missing key 'gen3_discovery' in metadata") logger.critical(e) return None + return external_file_metadata def is_valid_external_file_metadata(external_file_metadata: dict) -> bool: """ Check that the external_file dict has the required keys: - "external_oidc_idp" and "file_retriever". + 'external_oidc_idp' and 'file_retriever'. Args: external_file_metadata: dict Returns: boolean """ + if not isinstance(external_file_metadata, dict): + logger.info(f"File_metadata object is not a dict: {external_file_metadata}") + return False + isValid = True + logger.debug(f"Checking metadata: {external_file_metadata}") for key in REQUIRED_EXTERNAL_FILE_METADATA_KEYS: if key not in external_file_metadata: logger.info(f"Missing key in external file metadata: {key}") @@ -287,7 +207,7 @@ def is_valid_external_file_metadata(external_file_metadata: dict) -> bool: return isValid -def load_metadata(path: Path) -> Dict: +def load_all_metadata(path: Path) -> Dict: """ Loads a metadata object from a json file. @@ -307,42 +227,30 @@ def load_metadata(path: Path) -> Dict: return None -# Might not need this one. -def wts_connected(hostname: str, access_token: str) -> int: +def check_data_and_group_by_retriever(file_metadata_list: list) -> Dict: """ - Check that user is connected to commons with WTS service - Args: - hostname (str): Gen3 common's WTS service - access_token: Gen3 Auth to use to with WTS + Group the file metadata by retriever. Exclude any invalid file_metadata items. Returns: - response.status (int): 200 or 403 + Dict of retrievers and file_metadata lists, for example + { + "retriever1": [list1], + "retriever2": [list2], + ... + } """ - headers = { - "Content-Type": "application/json", - "Accept": "application/json", - "Connection": "keep-alive", - "Authorization": "bearer " + access_token, - } - - try: - url = f"https://{hostname}/wts/oauth2/connected" - try: - response = requests.get(url=url, headers=headers) - response.raise_for_status() - except requests.exceptions.HTTPError as exc: - logger.critical( - f"HTTP Error ({exc.response.status_code}): checking WTS connected: {exc.response.text}" - ) - logger.critical( - "Please make sure the target commons is connected on your profile page and that connection has not expired." - ) - return None - - print("No errors") - print(f"Status code: {response.status_code}") - return response.status_code + grouped_by_retriever = {} + for item in file_metadata_list: + logger.debug(f"Checking item = {item}") + if not is_valid_external_file_metadata(item): + continue + retriever = item.get("file_retriever") + logger.debug(f"Found retriever = {retriever}") + if retriever in grouped_by_retriever: + grouped_by_retriever[retriever].append(item) + else: + grouped_by_retriever[retriever] = [item] - except Gen3AuthError: - logger.critical(f"Unable to authenticate your credentials with {hostname}") - return response.status + if grouped_by_retriever == {}: + return None + return grouped_by_retriever diff --git a/tests/download_tests/test_external_download.py b/tests/download_tests/test_external_download.py index 53b71864c..b57aa80c8 100644 --- a/tests/download_tests/test_external_download.py +++ b/tests/download_tests/test_external_download.py @@ -8,14 +8,14 @@ from unittest.mock import MagicMock from gen3.auth import Gen3AuthError -from gen3.tools.download.drs_download import DownloadStatus +from gen3.tools.download.drs_download import DownloadStatus, wts_get_token from gen3.tools.download.external_file_download import ( + check_data_and_group_by_retriever, download_files_from_metadata, pull_files, - retriever_manager, extract_external_file_metadata, is_valid_external_file_metadata, - load_metadata, + load_all_metadata, ) DIR = Path(__file__).resolve().parent @@ -28,308 +28,247 @@ def valid_external_file_metadata(): return metadata["gen3_discovery"]["external_file_metadata"] -def test_load_metadata(): - gen3_metadata = load_metadata( +def test_load_all_metadata(): + gen3_metadata = load_all_metadata( Path(DIR, "resources/gen3_metadata_external_file_metadata.json") ) assert "gen3_discovery" in gen3_metadata - assert load_metadata(Path(DIR, "resources/non_existing_file.json")) is None - assert load_metadata(Path(DIR, "resources/bad_format.json")) is None + assert load_all_metadata(Path(DIR, "resources/non_existing_file.json")) is None + assert load_all_metadata(Path(DIR, "resources/bad_format.json")) is None -@pytest.mark.parametrize( - "external_file_metadata, expected", - [ - ( - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", - "study_id": "QDR_study_01", - }, - True, - ), - ( +def test_is_valid_external_file_metadata_invalid_input(): + expected = False + # input is missing one of the required keys, 'external_oidc_idp' or 'file_retriever' + external_file_metadata = { + "external_oidc_idp": "test-external-idp", + "file_id": "QDR_file_02", + } + assert is_valid_external_file_metadata(external_file_metadata) == expected + external_file_metadata = {"file_retriever": "QDR", "file_id": "QDR_file_02"} + assert is_valid_external_file_metadata(external_file_metadata) == expected + # input is not a dict + external_file_metadata = ["some", "list"] + assert is_valid_external_file_metadata(external_file_metadata) == expected + + +def test_is_valid_external_file_metadata(valid_external_file_metadata): + for file_metadata in valid_external_file_metadata: + assert is_valid_external_file_metadata(file_metadata) == True + + +def test_check_data_and_group_by_retriever(): + file_metadata_list = [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "file_id": "QDR_file_02", + }, + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "file_id": "QDR_file_03", + }, + { + "foo": "bar", + "file_retriever": "QDR", + "file_id": "QDR_file_03", + }, + { + "external_oidc_idp": "other-external-idp", + "file_retriever": "Other", + "file_id": "Other_file_02", + }, + ] + expected = { + "QDR": [ { "external_oidc_idp": "test-external-idp", "file_retriever": "QDR", "file_id": "QDR_file_02", }, - True, - ), - ( { "external_oidc_idp": "test-external-idp", "file_retriever": "QDR", + "file_id": "QDR_file_03", }, - True, - ), - ({"external_oidc_idp": "test-external-idp", "file_id": "QDR_file_02"}, False), - ({"file_retriever": "QDR", "file_id": "QDR_file_02"}, False), - ], -) -def test_is_valid_external_file_metadata(external_file_metadata: Dict, expected: bool): - assert is_valid_external_file_metadata(external_file_metadata) == expected + ], + "Other": [ + { + "external_oidc_idp": "other-external-idp", + "file_retriever": "Other", + "file_id": "Other_file_02", + } + ], + } + assert check_data_and_group_by_retriever(file_metadata_list) == expected def test_extract_external_file_metadata(valid_external_file_metadata): # valid metadata metadata_file = "resources/gen3_metadata_external_file_metadata.json" - metadata = load_metadata(Path(DIR, metadata_file)) + metadata = load_all_metadata(Path(DIR, metadata_file)) external_file_metadata = extract_external_file_metadata(metadata) - expected_metadata = valid_external_file_metadata assert type(external_file_metadata) is list assert len(external_file_metadata) == 2 - assert external_file_metadata == expected_metadata + assert external_file_metadata == valid_external_file_metadata # invalid metadata - missing keys - assert ( - extract_external_file_metadata( - {"_guid_type": "discovery_metadata", "gen3_discovery": {"authz": ""}} - ) - == None - ) + metadata_missing_keys = { + "_guid_type": "discovery_metadata", + "gen3_discovery": {"authz": ""}, + } + assert extract_external_file_metadata(metadata_missing_keys) == None assert extract_external_file_metadata({"_guid_type": "discovery_metadata"}) == None assert extract_external_file_metadata({}) == None -def test_retriever_manager(): +def test_pull_files_bad_retriever_input(): + # retriever does not exist + wts_hostname = "test.commons1.io" + download_path = "." + mock_external_file_metadata = [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "DoesNotExist", + } + ] + mock_auth = MagicMock() + mock_retriever = MagicMock() mock_retriever.__name__ = "mock_retriever" - - mock_token = "fake_token" + mock_retriever.return_value = "some_status" retrievers = {"QDR": mock_retriever} - external_file_metadata = { - "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", - "study_id": "QDR_study_01", - } - download_path = "." - mock_retriever.return_value = True - result = retriever_manager( - file_metadata=external_file_metadata, - token=mock_token, + result = pull_files( + wts_server_name=wts_hostname, + auth=mock_auth, + file_metadata_list=mock_external_file_metadata, retrievers=retrievers, download_path=download_path, ) - mock_retriever.assert_called_with(external_file_metadata, mock_token, download_path) - # assert that manager has returned the result of retriever if successful - assert result == mock_retriever.return_value - - -@pytest.mark.parametrize( - "connected_status, returned_idp_token, mock_external_file_metadata, expected_download_status", - [ - ( - 200, - "some_id_token", - [ - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", - "study_id": "QDR_study_01", - }, - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", - "file_id": "QDR_file_01", - }, - ], - { - "QDR_study_01": DownloadStatus( - filename="QDR_study_01", status="downloaded" - ), - "QDR_file_01": DownloadStatus( - filename="QDR_file_01", status="downloaded" - ), - }, - ), - ( - 200, - "some_id_token", - [ - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", - "study_id": "QDR_study_01", - }, - {"foo": "bar"}, - ], - { - "QDR_study_01": DownloadStatus( - filename="QDR_study_01", status="downloaded" - ), - "1": DownloadStatus(filename="1", status="invalid file metadata"), - }, - ), - ( - 200, - "some_id_token", - [ - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "does not exist", - "study_id": "QDR_study_01", - } - ], - { - "QDR_study_01": DownloadStatus( - filename="QDR_study_01", status="invalid file retriever" - ) - }, - ), - ( - 200, - None, - [ - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", - "study_id": "QDR_study_01", - } - ], - {"QDR_study_01": DownloadStatus(filename="QDR_study_01", status="failed")}, - ), - ( - 403, - "some_id_token", - [ - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", - "study_id": "QDR_study_01", - } - ], - {"QDR_study_01": DownloadStatus(filename="QDR_study_01", status="failed")}, - ), - ], -) -def test_pull_files( - connected_status, - returned_idp_token, - mock_external_file_metadata, - expected_download_status, -): + assert result == None + + # retriever is not in name space + mock_external_file_metadata = [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + } + ] + mock_retriever.side_effect = NameError + result = pull_files( + wts_server_name=wts_hostname, + auth=mock_auth, + file_metadata_list=mock_external_file_metadata, + retrievers=retrievers, + download_path=download_path, + ) + assert result == None + + +def test_pull_files(): wts_hostname = "test.commons1.io" download_path = "." + mock_external_file_metadata = [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01", + } + ] + expected_download_status = { + "QDR_study_01": DownloadStatus(filename="QDR_study_01", status="downloaded"), + } mock_auth = MagicMock() - mock_auth.get_access_token.return_value = "some_token" - # test with the same idp across all mock file_metadata - test_idp = "test-external-idp" + mock_retriever = MagicMock() + mock_retriever.__name__ = "mock_retriever" + mock_retriever.return_value = expected_download_status + retrievers = {"QDR": mock_retriever} + + result = pull_files( + wts_server_name=wts_hostname, + auth=mock_auth, + file_metadata_list=mock_external_file_metadata, + retrievers=retrievers, + download_path=download_path, + ) + assert result == expected_download_status + + +def test_pull_files_failures(): + wts_hostname = "test.commons1.io" + download_path = "." + + mock_external_file_metadata = [ + { + "external_oidc_idp": "test-external-idp", + "file_retriever": "QDR", + "study_id": "QDR_study_01", + }, + ] + + mock_auth = MagicMock() mock_retriever = MagicMock() mock_retriever.__name__ = "mock_retriever" + + # failed download status is passed through + expected_download_status = { + "QDR_study_01": DownloadStatus(filename="QDR_study_01", status="failed") + } + mock_retriever.return_value = expected_download_status retrievers = {"QDR": mock_retriever} - with requests_mock.Mocker() as m: - m.get( - f"https://{wts_hostname}/wts/oauth2/connected", - json={"foo": "bar"}, - status_code=connected_status, - ) - m.get( - f"https://{wts_hostname}/wts/token/?idp={test_idp}", - json={"token": returned_idp_token}, - ) + result = pull_files( + wts_server_name=wts_hostname, + auth=mock_auth, + file_metadata_list=mock_external_file_metadata, + retrievers=retrievers, + download_path=download_path, + ) + assert result == expected_download_status + - with mock.patch( - "gen3.tools.download.external_file_download.wts_get_token" - ) as wts_get_token: - wts_get_token.return_value = returned_idp_token - - result = pull_files( - wts_server_name=wts_hostname, - auth=mock_auth, - external_file_metadata=mock_external_file_metadata, - retrievers=retrievers, - download_path=download_path, - ) - - assert result == expected_download_status - # assert wts_get_token is called with correct idp value - if ( - connected_status == 200 - and mock_external_file_metadata[0].get("file_retriever") - != "does not exist" - ): - wts_get_token.assert_called_with( - hostname=wts_hostname, idp=test_idp, access_token="some_token" - ) - - -def test_download_files_from_metadata(valid_external_file_metadata): +def test_download_files_from_metadata_bad_input(): wts_hostname = "test.commons1.io" mock_auth = MagicMock() with mock.patch("gen3.auth") as mock_auth, mock.patch( - "gen3.tools.download.external_file_download.pull_files" - ) as mock_pull_files: - with mock.patch( - "gen3.tools.download.external_file_download.extract_external_file_metadata" - ) as mock_extract_external_file_metadata: - mock_auth.get_access_token.return_value = "some_token" - mock_retriever = MagicMock() - mock_retriever.__name__ = "mock_retriever" - mock_retrievers = {"QDR": mock_retriever} - - # empty retrievers - result = download_files_from_metadata( - hostname=wts_hostname, - auth=mock_auth, - metadata_file="some_file", - retrievers={}, - download_path=".", - ) - assert result == None - assert not mock_extract_external_file_metadata.called - assert not mock_pull_files.called - - # # auth cannot return wts access token - # mock_auth.get_access_token.raiseError.side_effect = Gen3AuthError - # pull_files.return_value = {} - # result = download_files_from_metadata( - # hostname = wts_hostname, - # auth = mock_auth, - # metadata_file = "some_file", - # retrievers = {}, - # download_path = "." - # ) - # assert result == None - # assert not pull_files.called - - # missing metadata file - mock_auth.get_access_token.return_value = "some_token" - result = download_files_from_metadata( - hostname=wts_hostname, - auth=mock_auth, - metadata_file="missing_file", - retrievers=mock_retrievers, - download_path=".", - ) - assert result == None - assert not mock_extract_external_file_metadata.called - assert not mock_pull_files.called - - # invalid metadata - mock_extract_external_file_metadata.return_value = None - result = download_files_from_metadata( - hostname=wts_hostname, - auth=mock_auth, - metadata_file="tests/download_tests/resources/gen3_metadata_external_file_metadata.json", - retrievers=mock_retrievers, - download_path=".", - ) - assert result == None - assert mock_extract_external_file_metadata.called - assert not mock_pull_files.called - - # TODO: this case should be in test_pull_files - # auth cannot return wts access token - mock_auth.get_access_token.raiseError.side_effect = Gen3AuthError - mock_pull_files.return_value = {} + "gen3.tools.download.external_file_download.extract_external_file_metadata" + ) as mock_extract_external_file_metadata: + mock_retriever = MagicMock() + mock_retriever.__name__ = "mock_retriever" + mock_retrievers = {"QDR": mock_retriever} + + # empty retrievers + result = download_files_from_metadata( + hostname=wts_hostname, + auth=mock_auth, + metadata_file="some_file", + retrievers={}, + download_path=".", + ) + assert result == None + assert not mock_extract_external_file_metadata.called + + # missing metadata file + mock_auth.get_access_token.return_value = "some_token" + result = download_files_from_metadata( + hostname=wts_hostname, + auth=mock_auth, + metadata_file="missing_file", + retrievers=mock_retrievers, + download_path=".", + ) + assert result == None + assert not mock_extract_external_file_metadata.called + + # invalid metadata + mock_extract_external_file_metadata.return_value = None result = download_files_from_metadata( hostname=wts_hostname, auth=mock_auth, @@ -337,8 +276,21 @@ def test_download_files_from_metadata(valid_external_file_metadata): retrievers=mock_retrievers, download_path=".", ) - assert result == {} - assert mock_pull_files.called + assert result == None + assert mock_extract_external_file_metadata.called + + +def test_download_files_from_metadata(): + wts_hostname = "test.commons1.io" + mock_auth = MagicMock() + + with mock.patch("gen3.auth") as mock_auth, mock.patch( + "gen3.tools.download.external_file_download.pull_files" + ) as mock_pull_files: + mock_auth.get_access_token.return_value = "some_token" + mock_retriever = MagicMock() + mock_retriever.__name__ = "mock_retriever" + mock_retrievers = {"QDR": mock_retriever} # valid metadata should trigger a call to pull_files mock_download_status = { From 6e77df3c462b2263b97a47ebdbcf7437092825ea Mon Sep 17 00:00:00 2001 From: george42-ctds Date: Thu, 30 May 2024 15:03:47 +0000 Subject: [PATCH 05/11] Apply automatic documentation changes --- docs/_build/doctrees/environment.pickle | Bin 1579893 -> 1579893 bytes docs/_build/doctrees/tools/indexing.doctree | Bin 100291 -> 100291 bytes docs/_build/doctrees/tools/metadata.doctree | Bin 35934 -> 35934 bytes docs/_build/html/searchindex.js | 2 +- docs/_build/html/tools/indexing.html | 2 +- docs/_build/html/tools/metadata.html | 2 +- 6 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 79550d17bd12899a5443dfa5bbc2dce3749d21b3..a5dc2725fb9bee87b2e5066963fd8f4be3d3ece3 100644 GIT binary patch delta 10922 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 NjnH7lWoHi$|6j5DEKvXe delta 10940 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 diff --git a/docs/_build/doctrees/tools/indexing.doctree b/docs/_build/doctrees/tools/indexing.doctree index 9b6ac4dd1e187cac01c4c80f5bcfd320bc25dd62..1523a1384a4709d697a24bb6918a9c2db9840164 100644 GIT binary patch delta 119 zcmX@y&vv+$UmkQ-fe`W_!f7Yspu PUq(xG!R_I`j5$^SR!bep delta 119 zcmX@y&vv+Js1?#q~C1prnA9lrno diff --git a/docs/_build/doctrees/tools/metadata.doctree b/docs/_build/doctrees/tools/metadata.doctree index 0b1a268c5509b5ec174fedcab98e185d30418b71..eae27decbb19b18de76053b293bb3760206b6d21 100644 GIT binary patch delta 125 zcmcaNgX!K3rVZ>`{N@H0h9*YFdWL33<|c+llQZ>gHV0{Ou%b(B&eY$`{AR`$W~QbVdZs28W(J0qlQZ>gHV0{Ou%b(B&eY$Indexing Tools

-async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1716386558.2522886.log')[source]
+async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1717081422.8777797.log')[source]

Verify all file object records into a manifest csv

Parameters:
diff --git a/docs/_build/html/tools/metadata.html b/docs/_build/html/tools/metadata.html index 8b0cc13d9..9754c11ce 100644 --- a/docs/_build/html/tools/metadata.html +++ b/docs/_build/html/tools/metadata.html @@ -102,7 +102,7 @@

Metadata Tools
-async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1716386558.5486019.log', get_guid_from_file=True, metadata_type=None)[source]
+async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1717081423.1627412.log', get_guid_from_file=True, metadata_type=None)[source]

Ingest all metadata records into a manifest csv

Parameters:
From fd36c2e411ef9aedacee0f0c9998318860084e4a Mon Sep 17 00:00:00 2001 From: George Thomas Date: Wed, 12 Jun 2024 10:16:34 -0700 Subject: [PATCH 06/11] (HP-1458): handle None return values --- gen3/tools/download/external_file_download.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gen3/tools/download/external_file_download.py b/gen3/tools/download/external_file_download.py index b473eae3e..fb05b009b 100644 --- a/gen3/tools/download/external_file_download.py +++ b/gen3/tools/download/external_file_download.py @@ -98,8 +98,11 @@ def download_files_from_metadata( download_path=download_path, ) - for key in download_status: - logger.info(download_status[key]) + if download_status == None: + logger.critical("Download status is None") + else: + for key in download_status: + logger.info(download_status[key]) return download_status @@ -128,6 +131,10 @@ def pull_files( metadata_grouped_by_retriever = check_data_and_group_by_retriever( file_metadata_list ) + + if metadata_grouped_by_retriever == None: + logger.critical(f"ERROR: Cannot group external metadata by retrievers") + return None logger.debug(f"Grouped metadata = {metadata_grouped_by_retriever}") for key, val in metadata_grouped_by_retriever.items(): From 19588c914068baf59f58c0dea091793cc2d34ebb Mon Sep 17 00:00:00 2001 From: george42-ctds Date: Wed, 12 Jun 2024 17:18:44 +0000 Subject: [PATCH 07/11] Apply automatic documentation changes --- docs/_build/doctrees/environment.pickle | Bin 1579893 -> 1579883 bytes docs/_build/doctrees/tools/indexing.doctree | Bin 100291 -> 100281 bytes docs/_build/doctrees/tools/metadata.doctree | Bin 35934 -> 35934 bytes docs/_build/html/searchindex.js | 2 +- docs/_build/html/tools/indexing.html | 2 +- docs/_build/html/tools/metadata.html | 2 +- 6 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index a5dc2725fb9bee87b2e5066963fd8f4be3d3ece3..7be159bf9cdaa6d6fdf94fdc5cbcb5d5cf5fb850 100644 GIT binary patch delta 11075 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 C@GZ{( delta 11202 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 Tu~Ra{dLa7ItPS^N%&`Ih>J=`^ delta 199 zcmdnl&vv+YZ7^WLoGRjQu+AX_X#-4FLBfq(Ug`tU&k)DM) z5LlXTFR*6pW@fy&{f`~veoWaD4vbs58SSS}aA4HdK+~$1lb^0WC4)V7O4fX41_sT> cDYa8HGFW>cs%3Gi&Jcqt!ElSOFJq1s06WMxnE(I) diff --git a/docs/_build/doctrees/tools/metadata.doctree b/docs/_build/doctrees/tools/metadata.doctree index eae27decbb19b18de76053b293bb3760206b6d21..253981ea422faaa179bf4a2d9cc1aa8145a1ec59 100644 GIT binary patch delta 111 zcmcaNgX!K3rVZ>`d=^HAM&?EadKO0JrbZ@{GxTjY2WfGzqKR+L(BI90CN|m7!Vg`j O*TNZ1X!AXbhF}0j{Tx{U delta 111 zcmcaNgX!K3rVZ>`eC7rgh9*YFdWL33<|c-dGxTjY2WfGzqKR+L(BI90CN|m7!Vg`j O*TNZ1X!AXbhF}0gT^vOK diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 80d054a4c..576b0791d 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Indexing Tools": [[11, "indexing-tools"]], "Indices and tables": [[2, "indices-and-tables"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]]}, "docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "indexentries": {"_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager", false]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods", false]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS", false]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create", false]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases", false]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record", false]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias", false]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases", false]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest", false]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get", false]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases", false]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record", false]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum", false]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page", false]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params", false]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest", false]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls", false]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd", false]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait", false]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update", false]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases", false]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record", false]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest", false]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider", false]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ", false]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create", false]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens", false]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children", false]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID", false]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url", false]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy", false]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create", false]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases", false]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank", false]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path", false]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job", false]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version", false]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list", false]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program", false]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project", false]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record", false]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time", false]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl", false]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR", false]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete", false]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias", false]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases", false]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids", false]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file", false]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations", false]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path", false]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node", false]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes", false]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object", false]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program", false]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project", false]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record", false]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record", false]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records", false]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download", false]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download", false]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download", false]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest", false]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single", false]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url", false]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable", false]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager", false]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus", false]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time", false]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint", false]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node", false]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record", false]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name", false]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name", false]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size", false]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size", false]], "gen3.tools": [[9, "module-gen3.tools", false]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download", false]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest", false]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest", false]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest", false]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest", false]], "gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth", false]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File", false]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index", false]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs", false]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata", false]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object", false]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query", false]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission", false]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage", false]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get", false]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get", false]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token", false]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts", false]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases", false]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records", false]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all", false]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node", false]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token", false]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema", false]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix", false]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths", false]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version", false]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output", false]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url", false]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs", false]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary", false]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest", false]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects", false]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record", false]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc", false]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records", false]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page", false]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats", false]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status", false]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls", false]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids", false]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version", false]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version", false]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version", false]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions", false]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params", false]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query", false]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID", false]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT", false]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT", false]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname", false]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest", false]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE", false]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy", false]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy", false]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy", false]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest", false]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object", false]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest", false]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs", false]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load", false]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest", false]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls", false]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path", false]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest", false]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS", false]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5", false]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum", false]], "module": [[9, "module-gen3.tools", false], [10, "module-gen3.tools.download.drs_download", false], [11, "module-gen3.tools.indexing.download_manifest", false], [11, "module-gen3.tools.indexing.index_manifest", false], [11, "module-gen3.tools.indexing.verify_manifest", false], [12, "module-gen3.tools.metadata.ingest_manifest", false]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id", false]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id", false]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type", false]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project", false]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint", false]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID", false]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query", false]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query", false]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query", false]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls", false]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download", false]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token", false]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects", false]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm", false]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path", false]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE", false]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time", false]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status", false]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file", false]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record", false]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl", false]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER", false]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update", false]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases", false]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank", false]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record", false]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time", false]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload", false]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file", false]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid", false]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url", false]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS", false]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access", false]]}, "objects": {"gen3": [[9, 3, 0, "-", "tools"]], "gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "terms": {"": [1, 4, 8, 10, 11], "0": [5, 7, 8, 11], "0a80fada010c": 11, "0a80fada096c": 11, "0a80fada097c": 11, "0a80fada098c": 11, "0a80fada099c": 11, "1": [4, 5, 8, 10, 11], "10": [5, 7, 11], "100": [8, 11], "11e9": 11, "1627412": 12, "1716303015": [], "1716386558": [], "1717081422": 11, "1717081423": 12, "2": [5, 11], "24": [11, 12], "2512589": [], "2522886": [], "255e396f": 11, "3": [5, 11], "30": 8, "33": 5, "333": 5, "343434344": 11, "363455714": 11, "4": [5, 11], "450c": 11, "4659653": [], "4714": 8, "473d83400bc1bc9dc635e334fadd433c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "5": [0, 5], "50": 7, "543434443": 11, "5486019": [], "6f90": 8, "7d3d8d2083b4": 11, "8420": 8, "8777797": 11, "93d9af72": 11, "9a07": 11, "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "AND": 5, "Be": 1, "But": 5, "By": 11, "For": [1, 5, 6, 7, 8, 9, 11], "IF": 11, "If": [0, 1, 7, 11, 12], "In": 10, "It": 10, "NOT": 12, "OR": 5, "One": 7, "Such": 9, "THE": 11, "That": 3, "The": [0, 1, 2, 3, 5, 8, 10, 11], "There": 11, "These": 9, "To": 11, "Will": [4, 7, 10], "_get_acl_from_row": 11, "_get_authz_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_for_row": 12, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "_guid_typ": 12, "_manag": [2, 9, 10], "_query_for_associated_indexd_record_guid": 12, "_ssl": [3, 4, 5], "a5c6": 11, "ab167e49d25b488939b1ede42752458b": 3, "about": [2, 3], "abov": 11, "access": [0, 1, 3, 7, 10], "access_method": [2, 9, 10], "access_token": 0, "accesstoken": 0, "acl": [2, 3, 9, 11], "across": 11, "act": 0, "action": [9, 11], "actual": 11, "ad": 3, "add": [3, 5], "addit": [3, 5, 10, 11], "admin": [5, 11], "admin_endpoint_suffix": 5, "after": 10, "against": [3, 7, 8, 11, 12], "algorithm": 3, "alia": [3, 5], "alias": 5, "aliv": 7, "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "allow": [0, 6, 8, 10, 11, 12], "allowed_data_upload_bucket": 1, "along": 2, "alreadi": 9, "also": 1, "altern": [5, 11], "alwai": 5, "ammount": 12, "amount": [1, 9], "an": [0, 3, 6, 8, 10, 11], "ani": [0, 5, 10, 11], "anoth": 5, "api": [0, 5, 8, 11], "api_kei": 11, "appli": 7, "appropri": 13, "ar": [5, 7, 8, 9, 10, 11], "arbitrari": 0, "argument": [0, 13], "arrai": 8, "asc": 7, "assign": 9, "assist": 10, "associ": [3, 5], "assum": 11, "async": [3, 4, 5, 9, 11, 12], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_create_record": [2, 3], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_download_object_manifest": [2, 9, 11], "async_get": [2, 5], "async_get_alias": [2, 5], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_url": [2, 3], "async_query_urls_from_indexd": [2, 9, 12], "async_run_job_and_wait": [2, 4], "async_upd": [2, 5], "async_update_alias": [2, 5], "async_update_record": [2, 3], "async_verify_object_manifest": [2, 9, 11], "asynchron": [3, 4, 5], "asyncio": [11, 12], "asyncron": 5, "attach": [3, 5], "attempt": 11, "attribut": [10, 11], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "authbas": 0, "authent": 0, "author": 1, "authz": [0, 1, 2, 3, 9, 10, 11], "auto": [0, 2], "automat": 0, "avail": [1, 2, 10, 11], "az": 1, "b": [5, 11], "b0f1": 11, "bar": 10, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "baseid": 3, "basic": [3, 11, 12], "batch_creat": [2, 5], "batch_siz": 8, "behalf": 0, "behavior": 11, "being": 3, "belong": 8, "below": 11, "blank": 3, "blob": [5, 7], "bodi": 3, "bool": [4, 5, 8, 10, 11, 12], "boolean": 3, "bownload": 10, "broad": 9, "broken": 9, "bucket": [1, 6], "bundl": 10, "byte": 10, "c": [5, 11], "cach": 10, "cache_hosts_wts_token": [2, 9, 10], "call": [10, 13], "can": [0, 3, 4, 8, 11, 12], "capabl": 9, "case": [0, 10], "categori": 9, "ccle": 8, "ccle_one_record": 8, "ccle_sample_nod": 8, "cdi": 7, "chang": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "child": 10, "children": [2, 9, 10], "chunk_siz": 8, "class": [0, 2, 10, 11, 13], "cli": 10, "client": [0, 3], "client_credenti": 0, "client_id": 0, "client_scop": 0, "client_secret": 0, "code": [2, 8], "column": [11, 12], "column_to_use_as_guid": [2, 9, 12], "columna": 11, "columnb": 11, "columnc": 11, "com": 7, "comma": 11, "command": [10, 11], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "commons_url": [2, 9, 10, 11, 12], "complet": [4, 11], "complex": 7, "concat": 11, "concurr": [11, 12], "configur": 1, "connect": 12, "consist": 3, "constructor": 0, "contain": [0, 2, 5, 8, 9, 10, 11, 12], "content": [3, 13], "content_created_d": 3, "content_updated_d": 3, "continu": 10, "control": 3, "conveni": 10, "copi": [2, 13], "coroutin": 11, "correspond": 3, "count": 3, "crdc": 0, "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_blank": [2, 3], "create_index_key_path": [2, 5], "create_job": [2, 4], "create_new_vers": [2, 3], "create_object_list": [2, 9, 10], "create_program": [2, 8], "create_project": [2, 8], "create_record": [2, 3], "created_tim": [2, 9, 10], "creation": [3, 11], "cred": 3, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "csv": [8, 11, 12], "curl": [0, 2], "current": [6, 8, 10], "current_dir": [2, 9, 11], "custom": 11, "d": 5, "d70b41b9": 8, "data": [0, 1, 3, 5, 7, 8, 10, 11], "data_spreadsheet": 8, "data_typ": 7, "data_upload_bucket": 1, "dataa": 11, "datab": 11, "databas": 5, "datacommon": 0, "datafil": 10, "datamanag": 10, "date": 3, "datetim": [1, 3, 10], "dbgap": 12, "dcf": 8, "def": 11, "default": [0, 1, 3, 7, 8, 11, 12], "defin": [5, 8, 10], "delai": 4, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_all_guid": [2, 9, 11], "delete_fil": [1, 2], "delete_file_loc": [1, 2, 6], "delete_index_key_path": [2, 5], "delete_nod": [2, 8], "delete_object": [2, 6], "delete_program": [2, 8], "delete_project": [2, 8], "delete_record": [2, 3, 8], "delete_unpacked_packag": 10, "delimet": [11, 12], "delimit": 11, "demograph": 8, "deprec": 1, "descript": [3, 5], "desir": 11, "dest_path": 13, "dest_urlstr": 13, "dest_w": 13, "dest_wskei": 13, "detail": [2, 7, 10], "determin": [10, 11, 12], "dev": 11, "dict": [3, 4, 5, 10, 11, 12], "dictionari": [3, 4, 5, 7, 8], "did": 3, "differ": 5, "direct": 0, "directori": [10, 11], "disabl": 10, "discoveri": 10, "disk": 13, "dispatch": 4, "dist_resolut": 3, "distribut": 3, "doc": [7, 10], "docstr": 2, "document": [1, 3], "doe": [0, 12], "domain": [11, 12], "done": 4, "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "download_files_in_drs_manifest": [2, 9, 10], "download_list": 10, "download_manifest": 11, "download_singl": [1, 2], "download_url": [2, 13], "downloadmanag": [2, 9, 10], "downloadstatu": [2, 9, 10], "dr": [2, 9], "drs_download": 10, "drs_hostnam": 10, "drsdownload": 10, "drsobjecttyp": 10, "e": [5, 10], "e043ab8b77b9": 8, "each": [3, 8, 10, 11], "effici": 9, "eg": 3, "either": 8, "elasticsearch": 7, "els": [0, 12], "elsewher": 12, "empti": [8, 11], "enabl": 11, "end": [5, 10], "end_tim": [2, 9, 10], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "entir": 8, "entri": [3, 11], "env": 0, "environ": 0, "equal": 7, "error": [10, 11, 12], "error_nam": 11, "etc": 8, "even": 11, "everi": [9, 11], "everyth": 11, "ex": [0, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "exclud": 3, "execut": [7, 8, 11], "exist": [1, 3, 5, 6, 9, 12], "expect": [5, 9, 11], "experi": 8, "expir": [0, 1], "expires_in": 1, "export": [8, 10], "export_nod": [2, 8], "export_record": [2, 8], "f1f8": 11, "factori": 10, "fail": [8, 10], "fals": [3, 5, 6, 10, 11], "featur": [1, 6], "fenc": [0, 1], "fetch": 0, "field": [3, 5, 7, 11, 12], "fieldnam": 11, "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "file_nam": [1, 2, 3, 9, 10, 11], "file_s": [2, 9, 10, 11], "file_st": 3, "fileformat": 8, "filenam": [0, 8, 10, 11, 12], "files": 10, "fill": 12, "filter": [5, 7], "filter_object": 7, "first": [7, 8], "flag": 11, "folder": 11, "follow": [0, 11], "forc": 11, "force_metadata_columns_even_if_empti": 11, "form": 13, "format": [3, 5, 8, 11], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "func_to_parse_row": [11, 12], "function": [2, 3, 4, 5, 9, 10, 11, 12], "g": 10, "gen3": [10, 11, 12], "gen3_api_kei": 0, "gen3_oidc_client_creds_secret": 0, "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "gen3fil": [1, 2], "gen3index": [2, 3], "gen3job": [2, 4, 10], "gen3metadata": [2, 5], "gen3object": [2, 6], "gen3queri": [2, 7], "gen3submiss": [2, 8], "gen3wsstorag": [2, 13], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "get_access_token": [0, 2], "get_access_token_from_wt": [0, 2], "get_alias": [2, 5], "get_all_record": [2, 3], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_fresh_token": [2, 9, 10], "get_graphql_schema": [2, 8], "get_guid_from_fil": 12, "get_guids_prefix": [2, 3], "get_index_key_path": [2, 5], "get_latest_vers": [2, 3], "get_output": [2, 4], "get_presigned_url": [1, 2], "get_program": [2, 8], "get_project": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_statu": [2, 4], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "giangb": 11, "github": [2, 7], "give": 1, "given": [0, 3, 4, 5, 8, 10, 12, 13], "global": [4, 5], "good": 3, "grant": 0, "graph": 8, "graphql": [7, 8], "graphql_queri": [2, 7], "group": 3, "guid": [1, 2, 3, 5, 6, 9, 11, 12], "guid_exampl": 11, "guid_for_row": 12, "guid_from_fil": 12, "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "guppi": 7, "ha": [0, 11], "handl": [3, 10], "hardcod": 0, "has_vers": 3, "hash": [3, 11], "hash_typ": 3, "have": [5, 11], "header": 11, "healthi": [3, 4, 5], "help": 11, "helper": 2, "hit": 11, "host": 10, "hostnam": [2, 9, 10], "how": [8, 11], "howto": 10, "http": [0, 7, 11, 12], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "id": [0, 1, 3, 5, 10, 11], "idea": 3, "identifi": [3, 5, 9, 11], "idp": 0, "illustr": 11, "immut": 3, "implement": 0, "implic": 11, "import": 11, "includ": [0, 3], "indent": 10, "index": [0, 2, 5, 9], "index_manifest": 11, "index_object_manifest": [2, 9, 11], "indexd": [1, 3, 6, 10, 11, 12], "indexd_field": [11, 12], "indexd_record_page_s": [2, 9, 11], "indexed_file_object_guid": 12, "indic": [0, 11], "infil": 10, "info": [3, 11], "inform": [2, 3, 10], "ingest": [2, 9], "ingest_manifest": 12, "initi": [0, 10], "input": [4, 10, 11], "input_manifest": 11, "instal": [0, 2, 11], "instanc": [1, 3, 6, 7, 8, 9, 10], "instead": [1, 7, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "integ": [1, 3, 8], "intend": 0, "interact": [1, 3, 4, 5, 6, 8, 13], "interest": 10, "interpret": 0, "introspect": 8, "involv": 9, "is_healthi": [2, 3, 4, 5], "is_indexed_file_object": 12, "isn": 1, "issu": 0, "its": [1, 3], "job": 2, "job_id": 4, "job_input": 4, "job_nam": 4, "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "just": [5, 11, 12], "jwt": 0, "kei": [0, 3, 5, 13], "know": 11, "known": 10, "kwarg": [3, 4, 5], "l": [2, 13], "larg": 9, "last": 10, "latest": 3, "least": 3, "level": 6, "librari": 11, "like": [3, 5, 9, 11, 12], "limit": [1, 3, 5, 12], "linear": 4, "linux": 10, "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "list_job": [2, 4], "live": [11, 12], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "local": [0, 13], "locat": [1, 6], "lock": 12, "log": [8, 10, 11, 12], "logic": [5, 12], "loop": 11, "ls_path": [2, 13], "maco": 11, "made": 3, "mai": [0, 9, 11], "main": 10, "make": [9, 11], "manag": [1, 5, 10], "mani": [8, 11], "manifest": [2, 8, 9, 10, 11, 12], "manifest_1": 10, "manifest_fil": [11, 12], "manifest_file_delimit": [11, 12], "manifest_row_pars": [11, 12], "map": [0, 11], "mark": 8, "master": 7, "match": [3, 5, 12], "max": 5, "max_concurrent_request": [2, 9, 11, 12], "max_presigned_url_ttl": 1, "max_tri": 8, "maximum": [11, 12], "md": [5, 7, 10, 12], "md5": [2, 3, 9, 11], "md5_hash": 11, "md5sum": [2, 9, 10], "mean": 8, "mechan": 3, "merg": 5, "metadata": [2, 3, 6, 9, 11], "metadata_list": 5, "metadata_sourc": 12, "metadata_typ": 12, "metdata": 12, "method": [1, 7, 10], "minimum": 10, "minut": 0, "mode": 7, "modul": [2, 10, 11], "more": [2, 5, 7, 9, 10], "most": 9, "mostli": 2, "multipl": [8, 11], "must": [1, 5], "my_common": 10, "my_credenti": 10, "my_field": 7, "my_index": 7, "my_program": 7, "my_project": 7, "name": [3, 4, 8, 10, 11, 12, 13], "namespac": [0, 12], "necessari": [3, 5], "need": [3, 7, 10, 11], "nest": 5, "net": 11, "never": 0, "new": [0, 3], "node": 8, "node_nam": 8, "node_typ": 8, "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "note": [0, 3, 11, 12], "noth": [3, 6], "now": [1, 8], "num": 5, "num_process": 11, "num_total_fil": 11, "number": [3, 7, 8, 11, 12], "o": 0, "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "object_id": [1, 2, 9, 10], "object_list": 10, "object_typ": [2, 9, 10], "objectid": 10, "obtain": [0, 10], "occur": 10, "off": 5, "offset": [5, 7], "oidc": 0, "old": 3, "one": [3, 5, 10, 11], "onli": [3, 5, 7, 8, 10, 11], "open": [8, 10, 11], "open_project": [2, 8], "openid": 0, "opt": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "order": [0, 8], "ordered_node_list": 8, "org": 10, "otherwis": 10, "output": [4, 5, 11, 12], "output_dir": 10, "output_filenam": [11, 12], "overrid": [0, 11, 12], "overwrit": 5, "own": 0, "packag": 10, "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "pagin": 3, "parallel": 11, "param": [3, 5, 8, 10], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "pars": [10, 11, 12, 13], "parser": [11, 12], "particular": 0, "pass": [0, 7, 8, 10], "password": [11, 12], "path": [0, 1, 5, 10, 11, 13], "path_to_manifest": 11, "pattern": [3, 12], "pdcdatastor": 11, "pend": 10, "per": [11, 12], "peregrin": 8, "permiss": 10, "persist": 9, "phs0001": 11, "phs0002": 11, "pick": 1, "pla": 11, "place": 11, "planx": 11, "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "popul": [10, 12], "posit": [1, 7], "possibl": 10, "post": [0, 11], "pprint": [2, 9, 10], "prefix": 3, "presign": 1, "pretti": 10, "prev_guid": [2, 9, 11], "previou": [3, 11], "previous": 4, "print": [8, 10], "process": 11, "processed_fil": 11, "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "program": [8, 11], "progress": [8, 10], "project": [8, 11], "project_id": [7, 8], "protocol": 1, "provid": [0, 1, 3, 5, 7, 8, 12], "public": [3, 5], "put": 0, "py": 11, "python": [2, 9, 11], "python3": 11, "python_subprocess_command": 11, "queri": [1, 2, 3, 5, 8, 11, 12], "query_str": 7, "query_txt": [7, 8], "query_url": [2, 3], "quickstart": 2, "rather": 0, "raw": [7, 11], "raw_data_download": [2, 7], "rbac": 3, "read": [3, 5, 11], "readm": 2, "reason": 10, "record": [1, 3, 5, 7, 8, 11, 12], "refresh": [0, 10], "refresh_access_token": [0, 2], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "regist": 8, "regular": 7, "relat": 9, "remov": [1, 6, 11, 13], "replac": 11, "replace_url": 11, "repo": 2, "repres": [3, 5, 10], "represent": [1, 3], "request": [0, 1, 3, 5, 8, 11, 12], "requir": 10, "resolv": 10, "resolve_object": [2, 9, 10], "respect": 7, "respons": [0, 1, 3, 4, 5], "result": [1, 8, 10, 11], "retri": 8, "retriev": [1, 8, 10, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "return_full_metadata": 5, "rev": 3, "revers": 8, "revis": 3, "right": 1, "rm": [2, 13], "rm_path": [2, 13], "root": [11, 12], "row": [7, 8, 11, 12], "row_offset": 8, "rtype": 3, "run": [8, 11], "s3": [1, 10, 11], "safe": 11, "same": [5, 11, 13], "sampl": [8, 10], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "save": 10, "save_directori": 10, "schema": 8, "scope": [0, 1], "screen": 8, "script": 2, "search": [0, 2, 3], "second": [1, 4], "secret": 0, "see": [7, 10, 11], "self": 10, "semaphon": 12, "semaphor": 12, "separ": [0, 11], "server": 10, "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "service_loc": [3, 4, 5], "session": 11, "set": [0, 1, 5, 10], "setup": 2, "sheepdog": 8, "should": [0, 8, 11], "show": 10, "show_progress": 10, "shown": 11, "sign": 1, "signpost": 3, "similar": 10, "simpl": 3, "simpli": 11, "sinc": 3, "singl": [1, 5, 8], "size": [2, 3, 9, 10, 11], "skip": 8, "sleep": 4, "so": 11, "some": [0, 2], "someth": 11, "sort": 7, "sort_field": 7, "sort_object": 7, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "space": [0, 11], "specif": [5, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "spreadsheet": 8, "src_path": 13, "src_urlstr": 13, "src_w": 13, "src_wskei": 13, "ssl": [3, 4, 5], "start": [3, 4, 7, 8, 10], "start_tim": [2, 9, 10], "static": 10, "statu": [2, 4, 9, 10], "storag": [1, 2, 6], "store": [1, 3, 10], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "string": [0, 3, 5, 11, 13], "strip": 11, "sub": 8, "subject": [7, 8], "submiss": 2, "submit": [8, 11], "submit_additional_metadata_column": 11, "submit_fil": [2, 8], "submit_record": [2, 8], "submitter_id": 7, "success": 10, "successfulli": 10, "suffici": 3, "suppli": 3, "support": [0, 1, 5, 8, 11], "sure": 1, "synchron": 11, "syntax": 7, "system": [6, 7, 8, 9], "t": [1, 5, 11], "tab": 11, "task": 9, "temporari": 11, "test": 11, "test1": 11, "test2": 11, "test3": 11, "test4": 11, "test5": 11, "text": [1, 7, 8], "than": [0, 5], "thei": [0, 10], "them": [10, 11], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "those": 11, "thread": 11, "thread_num": 11, "threadcontrol": [2, 9, 11], "through": [8, 11], "tier": 7, "time": [1, 3, 8, 10, 11], "timestamp": 10, "tmp_folder": [2, 9, 11], "token": [0, 10], "tool": 2, "total": 11, "treat": [1, 5], "tree": 10, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "try": 0, "tsv": [8, 11, 12], "tupl": [0, 3, 11, 12], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "typic": 10, "uc": 7, "unaccess": 7, "under": [0, 8, 13], "uniqu": [1, 5], "unknown": 10, "unpack": 10, "unpack_packag": 10, "until": [4, 10], "up": [5, 9], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "update_blank": [2, 3], "update_record": [2, 3], "updated_tim": [2, 9, 10], "upload": [1, 2, 3, 8, 13], "upload_fil": [1, 2], "upload_file_to_guid": [1, 2], "upload_url": [2, 13], "url": [1, 2, 3, 9, 10, 11, 12, 13], "urls_metadata": 3, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "usag": 11, "use_agg_md": 5, "user": [0, 10, 12], "user_access": [2, 9, 10], "usual": 12, "utcnow": 1, "util": 9, "uuid": [1, 3, 8], "uuid1": 8, "uuid2": 8, "valid": [3, 7], "valu": [0, 1, 3, 5, 7, 10, 11], "value_from_indexd": 11, "value_from_manifest": 11, "variabl": [0, 7, 8], "variou": 2, "verbos": [7, 8], "verif": 11, "verifi": [2, 9], "verify_manifest": 11, "verify_object_manifest": 11, "version": [3, 4, 5], "vital_statu": 7, "w": 13, "wa": 0, "wai": 10, "wait": 4, "want": [0, 3, 8], "warn": 11, "we": [3, 11], "web": 0, "what": 5, "when": [0, 3, 7, 10, 12], "where": [0, 3, 5, 11, 12], "whether": [3, 4, 5, 8, 11, 12], "which": [8, 10], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "whose": 5, "within": [0, 2, 9], "without": [3, 5], "won": 5, "work": [0, 10], "workaround": 11, "worksheet": 8, "workspac": [0, 2], "wrapper": 10, "write": 11, "ws_urlstr": 13, "wskei": 13, "wss": 13, "wt": [0, 10], "x": 11, "xlsx": 8, "you": [0, 3, 8, 11], "your": 0}, "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "titleterms": {"": 2, "auth": 0, "class": [1, 3, 4, 5, 6, 7, 8], "document": 2, "download": [10, 11], "dr": 10, "file": 1, "gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "helper": 0, "index": [3, 11], "indic": 2, "ingest": 12, "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "sdk": 2, "storag": 13, "submiss": 8, "tabl": 2, "tool": [9, 10, 11, 12], "verifi": 11, "welcom": 2, "workspac": 13}}) \ No newline at end of file +Search.setIndex({"alltitles": {"DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Indexing Tools": [[11, "indexing-tools"]], "Indices and tables": [[2, "indices-and-tables"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]]}, "docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "indexentries": {"_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager", false]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods", false]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS", false]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create", false]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases", false]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record", false]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias", false]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases", false]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest", false]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get", false]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases", false]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record", false]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum", false]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page", false]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params", false]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest", false]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls", false]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd", false]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait", false]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update", false]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases", false]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record", false]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest", false]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider", false]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ", false]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create", false]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens", false]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children", false]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID", false]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url", false]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy", false]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create", false]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases", false]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank", false]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path", false]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job", false]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version", false]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list", false]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program", false]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project", false]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record", false]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time", false]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl", false]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR", false]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete", false]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias", false]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases", false]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids", false]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file", false]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations", false]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path", false]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node", false]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes", false]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object", false]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program", false]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project", false]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record", false]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record", false]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records", false]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download", false]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download", false]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download", false]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest", false]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single", false]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url", false]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable", false]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager", false]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus", false]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time", false]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint", false]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node", false]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record", false]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name", false]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name", false]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size", false]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size", false]], "gen3.tools": [[9, "module-gen3.tools", false]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download", false]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest", false]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest", false]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest", false]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest", false]], "gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth", false]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File", false]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index", false]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs", false]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata", false]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object", false]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query", false]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission", false]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage", false]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get", false]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get", false]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token", false]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts", false]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases", false]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records", false]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all", false]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node", false]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token", false]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema", false]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix", false]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths", false]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version", false]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output", false]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url", false]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs", false]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary", false]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest", false]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects", false]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record", false]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc", false]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records", false]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page", false]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats", false]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status", false]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls", false]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids", false]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version", false]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version", false]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version", false]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions", false]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params", false]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query", false]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID", false]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT", false]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT", false]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname", false]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest", false]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE", false]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy", false]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy", false]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy", false]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest", false]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object", false]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest", false]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs", false]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load", false]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest", false]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls", false]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path", false]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest", false]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS", false]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5", false]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum", false]], "module": [[9, "module-gen3.tools", false], [10, "module-gen3.tools.download.drs_download", false], [11, "module-gen3.tools.indexing.download_manifest", false], [11, "module-gen3.tools.indexing.index_manifest", false], [11, "module-gen3.tools.indexing.verify_manifest", false], [12, "module-gen3.tools.metadata.ingest_manifest", false]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id", false]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id", false]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type", false]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project", false]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint", false]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID", false]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query", false]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query", false]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query", false]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls", false]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download", false]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token", false]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects", false]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm", false]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path", false]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE", false]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time", false]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status", false]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file", false]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record", false]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl", false]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER", false]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update", false]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases", false]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank", false]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record", false]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time", false]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload", false]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file", false]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid", false]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url", false]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS", false]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access", false]]}, "objects": {"gen3": [[9, 3, 0, "-", "tools"]], "gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "terms": {"": [1, 4, 8, 10, 11], "0": [5, 7, 8, 11], "0a80fada010c": 11, "0a80fada096c": 11, "0a80fada097c": 11, "0a80fada098c": 11, "0a80fada099c": 11, "1": [4, 5, 8, 10, 11], "10": [5, 7, 11], "100": [8, 11], "11e9": 11, "1627412": [], "1716303015": [], "1716386558": [], "1717081422": [], "1717081423": [], "1718212720": [11, 12], "2": [5, 11], "24": [11, 12], "2512589": [], "2522886": [], "255e396f": 11, "3": [5, 11], "30": 8, "33": 5, "333": 5, "343434344": 11, "363455714": 11, "4": [5, 11], "450c": 11, "4659653": [], "4714": 8, "473d83400bc1bc9dc635e334fadd433c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "5": [0, 5], "50": 7, "51618": 11, "543434443": 11, "5486019": [], "6f90": 8, "7d3d8d2083b4": 11, "8275242": 12, "8420": 8, "8777797": [], "93d9af72": 11, "9a07": 11, "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "AND": 5, "Be": 1, "But": 5, "By": 11, "For": [1, 5, 6, 7, 8, 9, 11], "IF": 11, "If": [0, 1, 7, 11, 12], "In": 10, "It": 10, "NOT": 12, "OR": 5, "One": 7, "Such": 9, "THE": 11, "That": 3, "The": [0, 1, 2, 3, 5, 8, 10, 11], "There": 11, "These": 9, "To": 11, "Will": [4, 7, 10], "_get_acl_from_row": 11, "_get_authz_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_for_row": 12, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "_guid_typ": 12, "_manag": [2, 9, 10], "_query_for_associated_indexd_record_guid": 12, "_ssl": [3, 4, 5], "a5c6": 11, "ab167e49d25b488939b1ede42752458b": 3, "about": [2, 3], "abov": 11, "access": [0, 1, 3, 7, 10], "access_method": [2, 9, 10], "access_token": 0, "accesstoken": 0, "acl": [2, 3, 9, 11], "across": 11, "act": 0, "action": [9, 11], "actual": 11, "ad": 3, "add": [3, 5], "addit": [3, 5, 10, 11], "admin": [5, 11], "admin_endpoint_suffix": 5, "after": 10, "against": [3, 7, 8, 11, 12], "algorithm": 3, "alia": [3, 5], "alias": 5, "aliv": 7, "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "allow": [0, 6, 8, 10, 11, 12], "allowed_data_upload_bucket": 1, "along": 2, "alreadi": 9, "also": 1, "altern": [5, 11], "alwai": 5, "ammount": 12, "amount": [1, 9], "an": [0, 3, 6, 8, 10, 11], "ani": [0, 5, 10, 11], "anoth": 5, "api": [0, 5, 8, 11], "api_kei": 11, "appli": 7, "appropri": 13, "ar": [5, 7, 8, 9, 10, 11], "arbitrari": 0, "argument": [0, 13], "arrai": 8, "asc": 7, "assign": 9, "assist": 10, "associ": [3, 5], "assum": 11, "async": [3, 4, 5, 9, 11, 12], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_create_record": [2, 3], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_download_object_manifest": [2, 9, 11], "async_get": [2, 5], "async_get_alias": [2, 5], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_url": [2, 3], "async_query_urls_from_indexd": [2, 9, 12], "async_run_job_and_wait": [2, 4], "async_upd": [2, 5], "async_update_alias": [2, 5], "async_update_record": [2, 3], "async_verify_object_manifest": [2, 9, 11], "asynchron": [3, 4, 5], "asyncio": [11, 12], "asyncron": 5, "attach": [3, 5], "attempt": 11, "attribut": [10, 11], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "authbas": 0, "authent": 0, "author": 1, "authz": [0, 1, 2, 3, 9, 10, 11], "auto": [0, 2], "automat": 0, "avail": [1, 2, 10, 11], "az": 1, "b": [5, 11], "b0f1": 11, "bar": 10, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "baseid": 3, "basic": [3, 11, 12], "batch_creat": [2, 5], "batch_siz": 8, "behalf": 0, "behavior": 11, "being": 3, "belong": 8, "below": 11, "blank": 3, "blob": [5, 7], "bodi": 3, "bool": [4, 5, 8, 10, 11, 12], "boolean": 3, "bownload": 10, "broad": 9, "broken": 9, "bucket": [1, 6], "bundl": 10, "byte": 10, "c": [5, 11], "cach": 10, "cache_hosts_wts_token": [2, 9, 10], "call": [10, 13], "can": [0, 3, 4, 8, 11, 12], "capabl": 9, "case": [0, 10], "categori": 9, "ccle": 8, "ccle_one_record": 8, "ccle_sample_nod": 8, "cdi": 7, "chang": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "child": 10, "children": [2, 9, 10], "chunk_siz": 8, "class": [0, 2, 10, 11, 13], "cli": 10, "client": [0, 3], "client_credenti": 0, "client_id": 0, "client_scop": 0, "client_secret": 0, "code": [2, 8], "column": [11, 12], "column_to_use_as_guid": [2, 9, 12], "columna": 11, "columnb": 11, "columnc": 11, "com": 7, "comma": 11, "command": [10, 11], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "commons_url": [2, 9, 10, 11, 12], "complet": [4, 11], "complex": 7, "concat": 11, "concurr": [11, 12], "configur": 1, "connect": 12, "consist": 3, "constructor": 0, "contain": [0, 2, 5, 8, 9, 10, 11, 12], "content": [3, 13], "content_created_d": 3, "content_updated_d": 3, "continu": 10, "control": 3, "conveni": 10, "copi": [2, 13], "coroutin": 11, "correspond": 3, "count": 3, "crdc": 0, "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_blank": [2, 3], "create_index_key_path": [2, 5], "create_job": [2, 4], "create_new_vers": [2, 3], "create_object_list": [2, 9, 10], "create_program": [2, 8], "create_project": [2, 8], "create_record": [2, 3], "created_tim": [2, 9, 10], "creation": [3, 11], "cred": 3, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "csv": [8, 11, 12], "curl": [0, 2], "current": [6, 8, 10], "current_dir": [2, 9, 11], "custom": 11, "d": 5, "d70b41b9": 8, "data": [0, 1, 3, 5, 7, 8, 10, 11], "data_spreadsheet": 8, "data_typ": 7, "data_upload_bucket": 1, "dataa": 11, "datab": 11, "databas": 5, "datacommon": 0, "datafil": 10, "datamanag": 10, "date": 3, "datetim": [1, 3, 10], "dbgap": 12, "dcf": 8, "def": 11, "default": [0, 1, 3, 7, 8, 11, 12], "defin": [5, 8, 10], "delai": 4, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_all_guid": [2, 9, 11], "delete_fil": [1, 2], "delete_file_loc": [1, 2, 6], "delete_index_key_path": [2, 5], "delete_nod": [2, 8], "delete_object": [2, 6], "delete_program": [2, 8], "delete_project": [2, 8], "delete_record": [2, 3, 8], "delete_unpacked_packag": 10, "delimet": [11, 12], "delimit": 11, "demograph": 8, "deprec": 1, "descript": [3, 5], "desir": 11, "dest_path": 13, "dest_urlstr": 13, "dest_w": 13, "dest_wskei": 13, "detail": [2, 7, 10], "determin": [10, 11, 12], "dev": 11, "dict": [3, 4, 5, 10, 11, 12], "dictionari": [3, 4, 5, 7, 8], "did": 3, "differ": 5, "direct": 0, "directori": [10, 11], "disabl": 10, "discoveri": 10, "disk": 13, "dispatch": 4, "dist_resolut": 3, "distribut": 3, "doc": [7, 10], "docstr": 2, "document": [1, 3], "doe": [0, 12], "domain": [11, 12], "done": 4, "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "download_files_in_drs_manifest": [2, 9, 10], "download_list": 10, "download_manifest": 11, "download_singl": [1, 2], "download_url": [2, 13], "downloadmanag": [2, 9, 10], "downloadstatu": [2, 9, 10], "dr": [2, 9], "drs_download": 10, "drs_hostnam": 10, "drsdownload": 10, "drsobjecttyp": 10, "e": [5, 10], "e043ab8b77b9": 8, "each": [3, 8, 10, 11], "effici": 9, "eg": 3, "either": 8, "elasticsearch": 7, "els": [0, 12], "elsewher": 12, "empti": [8, 11], "enabl": 11, "end": [5, 10], "end_tim": [2, 9, 10], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "entir": 8, "entri": [3, 11], "env": 0, "environ": 0, "equal": 7, "error": [10, 11, 12], "error_nam": 11, "etc": 8, "even": 11, "everi": [9, 11], "everyth": 11, "ex": [0, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "exclud": 3, "execut": [7, 8, 11], "exist": [1, 3, 5, 6, 9, 12], "expect": [5, 9, 11], "experi": 8, "expir": [0, 1], "expires_in": 1, "export": [8, 10], "export_nod": [2, 8], "export_record": [2, 8], "f1f8": 11, "factori": 10, "fail": [8, 10], "fals": [3, 5, 6, 10, 11], "featur": [1, 6], "fenc": [0, 1], "fetch": 0, "field": [3, 5, 7, 11, 12], "fieldnam": 11, "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "file_nam": [1, 2, 3, 9, 10, 11], "file_s": [2, 9, 10, 11], "file_st": 3, "fileformat": 8, "filenam": [0, 8, 10, 11, 12], "files": 10, "fill": 12, "filter": [5, 7], "filter_object": 7, "first": [7, 8], "flag": 11, "folder": 11, "follow": [0, 11], "forc": 11, "force_metadata_columns_even_if_empti": 11, "form": 13, "format": [3, 5, 8, 11], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "func_to_parse_row": [11, 12], "function": [2, 3, 4, 5, 9, 10, 11, 12], "g": 10, "gen3": [10, 11, 12], "gen3_api_kei": 0, "gen3_oidc_client_creds_secret": 0, "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "gen3fil": [1, 2], "gen3index": [2, 3], "gen3job": [2, 4, 10], "gen3metadata": [2, 5], "gen3object": [2, 6], "gen3queri": [2, 7], "gen3submiss": [2, 8], "gen3wsstorag": [2, 13], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "get_access_token": [0, 2], "get_access_token_from_wt": [0, 2], "get_alias": [2, 5], "get_all_record": [2, 3], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_fresh_token": [2, 9, 10], "get_graphql_schema": [2, 8], "get_guid_from_fil": 12, "get_guids_prefix": [2, 3], "get_index_key_path": [2, 5], "get_latest_vers": [2, 3], "get_output": [2, 4], "get_presigned_url": [1, 2], "get_program": [2, 8], "get_project": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_statu": [2, 4], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "giangb": 11, "github": [2, 7], "give": 1, "given": [0, 3, 4, 5, 8, 10, 12, 13], "global": [4, 5], "good": 3, "grant": 0, "graph": 8, "graphql": [7, 8], "graphql_queri": [2, 7], "group": 3, "guid": [1, 2, 3, 5, 6, 9, 11, 12], "guid_exampl": 11, "guid_for_row": 12, "guid_from_fil": 12, "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "guppi": 7, "ha": [0, 11], "handl": [3, 10], "hardcod": 0, "has_vers": 3, "hash": [3, 11], "hash_typ": 3, "have": [5, 11], "header": 11, "healthi": [3, 4, 5], "help": 11, "helper": 2, "hit": 11, "host": 10, "hostnam": [2, 9, 10], "how": [8, 11], "howto": 10, "http": [0, 7, 11, 12], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "id": [0, 1, 3, 5, 10, 11], "idea": 3, "identifi": [3, 5, 9, 11], "idp": 0, "illustr": 11, "immut": 3, "implement": 0, "implic": 11, "import": 11, "includ": [0, 3], "indent": 10, "index": [0, 2, 5, 9], "index_manifest": 11, "index_object_manifest": [2, 9, 11], "indexd": [1, 3, 6, 10, 11, 12], "indexd_field": [11, 12], "indexd_record_page_s": [2, 9, 11], "indexed_file_object_guid": 12, "indic": [0, 11], "infil": 10, "info": [3, 11], "inform": [2, 3, 10], "ingest": [2, 9], "ingest_manifest": 12, "initi": [0, 10], "input": [4, 10, 11], "input_manifest": 11, "instal": [0, 2, 11], "instanc": [1, 3, 6, 7, 8, 9, 10], "instead": [1, 7, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "integ": [1, 3, 8], "intend": 0, "interact": [1, 3, 4, 5, 6, 8, 13], "interest": 10, "interpret": 0, "introspect": 8, "involv": 9, "is_healthi": [2, 3, 4, 5], "is_indexed_file_object": 12, "isn": 1, "issu": 0, "its": [1, 3], "job": 2, "job_id": 4, "job_input": 4, "job_nam": 4, "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "just": [5, 11, 12], "jwt": 0, "kei": [0, 3, 5, 13], "know": 11, "known": 10, "kwarg": [3, 4, 5], "l": [2, 13], "larg": 9, "last": 10, "latest": 3, "least": 3, "level": 6, "librari": 11, "like": [3, 5, 9, 11, 12], "limit": [1, 3, 5, 12], "linear": 4, "linux": 10, "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "list_job": [2, 4], "live": [11, 12], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "local": [0, 13], "locat": [1, 6], "lock": 12, "log": [8, 10, 11, 12], "logic": [5, 12], "loop": 11, "ls_path": [2, 13], "maco": 11, "made": 3, "mai": [0, 9, 11], "main": 10, "make": [9, 11], "manag": [1, 5, 10], "mani": [8, 11], "manifest": [2, 8, 9, 10, 11, 12], "manifest_1": 10, "manifest_fil": [11, 12], "manifest_file_delimit": [11, 12], "manifest_row_pars": [11, 12], "map": [0, 11], "mark": 8, "master": 7, "match": [3, 5, 12], "max": 5, "max_concurrent_request": [2, 9, 11, 12], "max_presigned_url_ttl": 1, "max_tri": 8, "maximum": [11, 12], "md": [5, 7, 10, 12], "md5": [2, 3, 9, 11], "md5_hash": 11, "md5sum": [2, 9, 10], "mean": 8, "mechan": 3, "merg": 5, "metadata": [2, 3, 6, 9, 11], "metadata_list": 5, "metadata_sourc": 12, "metadata_typ": 12, "metdata": 12, "method": [1, 7, 10], "minimum": 10, "minut": 0, "mode": 7, "modul": [2, 10, 11], "more": [2, 5, 7, 9, 10], "most": 9, "mostli": 2, "multipl": [8, 11], "must": [1, 5], "my_common": 10, "my_credenti": 10, "my_field": 7, "my_index": 7, "my_program": 7, "my_project": 7, "name": [3, 4, 8, 10, 11, 12, 13], "namespac": [0, 12], "necessari": [3, 5], "need": [3, 7, 10, 11], "nest": 5, "net": 11, "never": 0, "new": [0, 3], "node": 8, "node_nam": 8, "node_typ": 8, "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "note": [0, 3, 11, 12], "noth": [3, 6], "now": [1, 8], "num": 5, "num_process": 11, "num_total_fil": 11, "number": [3, 7, 8, 11, 12], "o": 0, "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "object_id": [1, 2, 9, 10], "object_list": 10, "object_typ": [2, 9, 10], "objectid": 10, "obtain": [0, 10], "occur": 10, "off": 5, "offset": [5, 7], "oidc": 0, "old": 3, "one": [3, 5, 10, 11], "onli": [3, 5, 7, 8, 10, 11], "open": [8, 10, 11], "open_project": [2, 8], "openid": 0, "opt": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "order": [0, 8], "ordered_node_list": 8, "org": 10, "otherwis": 10, "output": [4, 5, 11, 12], "output_dir": 10, "output_filenam": [11, 12], "overrid": [0, 11, 12], "overwrit": 5, "own": 0, "packag": 10, "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "pagin": 3, "parallel": 11, "param": [3, 5, 8, 10], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "pars": [10, 11, 12, 13], "parser": [11, 12], "particular": 0, "pass": [0, 7, 8, 10], "password": [11, 12], "path": [0, 1, 5, 10, 11, 13], "path_to_manifest": 11, "pattern": [3, 12], "pdcdatastor": 11, "pend": 10, "per": [11, 12], "peregrin": 8, "permiss": 10, "persist": 9, "phs0001": 11, "phs0002": 11, "pick": 1, "pla": 11, "place": 11, "planx": 11, "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "popul": [10, 12], "posit": [1, 7], "possibl": 10, "post": [0, 11], "pprint": [2, 9, 10], "prefix": 3, "presign": 1, "pretti": 10, "prev_guid": [2, 9, 11], "previou": [3, 11], "previous": 4, "print": [8, 10], "process": 11, "processed_fil": 11, "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "program": [8, 11], "progress": [8, 10], "project": [8, 11], "project_id": [7, 8], "protocol": 1, "provid": [0, 1, 3, 5, 7, 8, 12], "public": [3, 5], "put": 0, "py": 11, "python": [2, 9, 11], "python3": 11, "python_subprocess_command": 11, "queri": [1, 2, 3, 5, 8, 11, 12], "query_str": 7, "query_txt": [7, 8], "query_url": [2, 3], "quickstart": 2, "rather": 0, "raw": [7, 11], "raw_data_download": [2, 7], "rbac": 3, "read": [3, 5, 11], "readm": 2, "reason": 10, "record": [1, 3, 5, 7, 8, 11, 12], "refresh": [0, 10], "refresh_access_token": [0, 2], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "regist": 8, "regular": 7, "relat": 9, "remov": [1, 6, 11, 13], "replac": 11, "replace_url": 11, "repo": 2, "repres": [3, 5, 10], "represent": [1, 3], "request": [0, 1, 3, 5, 8, 11, 12], "requir": 10, "resolv": 10, "resolve_object": [2, 9, 10], "respect": 7, "respons": [0, 1, 3, 4, 5], "result": [1, 8, 10, 11], "retri": 8, "retriev": [1, 8, 10, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "return_full_metadata": 5, "rev": 3, "revers": 8, "revis": 3, "right": 1, "rm": [2, 13], "rm_path": [2, 13], "root": [11, 12], "row": [7, 8, 11, 12], "row_offset": 8, "rtype": 3, "run": [8, 11], "s3": [1, 10, 11], "safe": 11, "same": [5, 11, 13], "sampl": [8, 10], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "save": 10, "save_directori": 10, "schema": 8, "scope": [0, 1], "screen": 8, "script": 2, "search": [0, 2, 3], "second": [1, 4], "secret": 0, "see": [7, 10, 11], "self": 10, "semaphon": 12, "semaphor": 12, "separ": [0, 11], "server": 10, "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "service_loc": [3, 4, 5], "session": 11, "set": [0, 1, 5, 10], "setup": 2, "sheepdog": 8, "should": [0, 8, 11], "show": 10, "show_progress": 10, "shown": 11, "sign": 1, "signpost": 3, "similar": 10, "simpl": 3, "simpli": 11, "sinc": 3, "singl": [1, 5, 8], "size": [2, 3, 9, 10, 11], "skip": 8, "sleep": 4, "so": 11, "some": [0, 2], "someth": 11, "sort": 7, "sort_field": 7, "sort_object": 7, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "space": [0, 11], "specif": [5, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "spreadsheet": 8, "src_path": 13, "src_urlstr": 13, "src_w": 13, "src_wskei": 13, "ssl": [3, 4, 5], "start": [3, 4, 7, 8, 10], "start_tim": [2, 9, 10], "static": 10, "statu": [2, 4, 9, 10], "storag": [1, 2, 6], "store": [1, 3, 10], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "string": [0, 3, 5, 11, 13], "strip": 11, "sub": 8, "subject": [7, 8], "submiss": 2, "submit": [8, 11], "submit_additional_metadata_column": 11, "submit_fil": [2, 8], "submit_record": [2, 8], "submitter_id": 7, "success": 10, "successfulli": 10, "suffici": 3, "suppli": 3, "support": [0, 1, 5, 8, 11], "sure": 1, "synchron": 11, "syntax": 7, "system": [6, 7, 8, 9], "t": [1, 5, 11], "tab": 11, "task": 9, "temporari": 11, "test": 11, "test1": 11, "test2": 11, "test3": 11, "test4": 11, "test5": 11, "text": [1, 7, 8], "than": [0, 5], "thei": [0, 10], "them": [10, 11], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "those": 11, "thread": 11, "thread_num": 11, "threadcontrol": [2, 9, 11], "through": [8, 11], "tier": 7, "time": [1, 3, 8, 10, 11], "timestamp": 10, "tmp_folder": [2, 9, 11], "token": [0, 10], "tool": 2, "total": 11, "treat": [1, 5], "tree": 10, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "try": 0, "tsv": [8, 11, 12], "tupl": [0, 3, 11, 12], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "typic": 10, "uc": 7, "unaccess": 7, "under": [0, 8, 13], "uniqu": [1, 5], "unknown": 10, "unpack": 10, "unpack_packag": 10, "until": [4, 10], "up": [5, 9], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "update_blank": [2, 3], "update_record": [2, 3], "updated_tim": [2, 9, 10], "upload": [1, 2, 3, 8, 13], "upload_fil": [1, 2], "upload_file_to_guid": [1, 2], "upload_url": [2, 13], "url": [1, 2, 3, 9, 10, 11, 12, 13], "urls_metadata": 3, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "usag": 11, "use_agg_md": 5, "user": [0, 10, 12], "user_access": [2, 9, 10], "usual": 12, "utcnow": 1, "util": 9, "uuid": [1, 3, 8], "uuid1": 8, "uuid2": 8, "valid": [3, 7], "valu": [0, 1, 3, 5, 7, 10, 11], "value_from_indexd": 11, "value_from_manifest": 11, "variabl": [0, 7, 8], "variou": 2, "verbos": [7, 8], "verif": 11, "verifi": [2, 9], "verify_manifest": 11, "verify_object_manifest": 11, "version": [3, 4, 5], "vital_statu": 7, "w": 13, "wa": 0, "wai": 10, "wait": 4, "want": [0, 3, 8], "warn": 11, "we": [3, 11], "web": 0, "what": 5, "when": [0, 3, 7, 10, 12], "where": [0, 3, 5, 11, 12], "whether": [3, 4, 5, 8, 11, 12], "which": [8, 10], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "whose": 5, "within": [0, 2, 9], "without": [3, 5], "won": 5, "work": [0, 10], "workaround": 11, "worksheet": 8, "workspac": [0, 2], "wrapper": 10, "write": 11, "ws_urlstr": 13, "wskei": 13, "wss": 13, "wt": [0, 10], "x": 11, "xlsx": 8, "you": [0, 3, 8, 11], "your": 0}, "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "titleterms": {"": 2, "auth": 0, "class": [1, 3, 4, 5, 6, 7, 8], "document": 2, "download": [10, 11], "dr": 10, "file": 1, "gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "helper": 0, "index": [3, 11], "indic": 2, "ingest": 12, "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "sdk": 2, "storag": 13, "submiss": 8, "tabl": 2, "tool": [9, 10, 11, 12], "verifi": 11, "welcom": 2, "workspac": 13}}) \ No newline at end of file diff --git a/docs/_build/html/tools/indexing.html b/docs/_build/html/tools/indexing.html index bab871ec9..cfc7087a7 100644 --- a/docs/_build/html/tools/indexing.html +++ b/docs/_build/html/tools/indexing.html @@ -381,7 +381,7 @@

Indexing Tools
-async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1717081422.8777797.log')[source]
+async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1718212720.51618.log')[source]

Verify all file object records into a manifest csv

Parameters:
diff --git a/docs/_build/html/tools/metadata.html b/docs/_build/html/tools/metadata.html index 9754c11ce..d25598c7b 100644 --- a/docs/_build/html/tools/metadata.html +++ b/docs/_build/html/tools/metadata.html @@ -102,7 +102,7 @@

Metadata Tools
-async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1717081423.1627412.log', get_guid_from_file=True, metadata_type=None)[source]
+async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1718212720.8275242.log', get_guid_from_file=True, metadata_type=None)[source]

Ingest all metadata records into a manifest csv

Parameters:
From 11701f1bc71ea52fc8d5743b6b1053e68c552d22 Mon Sep 17 00:00:00 2001 From: George Thomas Date: Wed, 12 Jun 2024 13:59:58 -0700 Subject: [PATCH 08/11] (HP-1458): take file metadata as json instead of path --- gen3/tools/download/external_file_download.py | 75 ++++---- .../download_tests/test_external_download.py | 173 ++++++------------ 2 files changed, 87 insertions(+), 161 deletions(-) diff --git a/gen3/tools/download/external_file_download.py b/gen3/tools/download/external_file_download.py index fb05b009b..ba6f894e7 100644 --- a/gen3/tools/download/external_file_download.py +++ b/gen3/tools/download/external_file_download.py @@ -3,7 +3,7 @@ Examples: - See docs/howto/drsDownloading.md for more details + See docs/howto/externalFileDownloading.md for more details """ import json @@ -23,7 +23,7 @@ def download_files_from_metadata( hostname: str, auth: Gen3Auth, - metadata_file: str, + external_file_metadata: Dict, retrievers: Dict, download_path: str = ".", ) -> Dict[str, Any]: @@ -31,41 +31,41 @@ def download_files_from_metadata( Download data from an external repository using external-file metadata and a retriever function. - Parses the metadata for 'external_file_metadata' list - with IDP and retriever fields. The 'external_file_metadata' - must be nested under 'gen3_discovery'. - - JSON does not allow for storing references to functions. We store - a string for 'file_retriever' value and then map the string - to a function. - - Example metadata: - "gen3_discovery: { - ..., - "external_file_metadata": [ - { - "external_oidc_idp": "externaldata-keycloak", - "file_retriever": "QDR", - "study_id": "QDR_study_01" - }, - { - "external_oidc_idp": "externaldata-keycloak", - "file_retriever": "QDR", - "file_id": "QDR_file_02" - }, - ], - ..., - } - - Corresponding example retrievers mapping: + The external_file_metadata items should have the following + required keys: 'external_oidc_idp' and 'file_retriever'. + The items can have an additional optional key of + 'study_id' or 'file_id. + + An example is shown below: + [ + { + "external_oidc_idp": "externaldata-keycloak", + "file_retriever": "QDR", + "study_id": "QDR_study_01" + }, + { + "external_oidc_idp": "externaldata-keycloak", + "file_retriever": "QDR", + "file_id": "QDR_file_02" + }, + ] + + JSON does not allow for storing references to the retriever functions. We store + a string for 'file_retriever' value as shown above. The retriever name string + will get mapped to a function. + + For a retriever name of 'QDR', the mapping to a function could be as follows: { "QDR": get_syracuse_qdr_files } - Calls the appropriate retriever function to download data. + The retriever function should be imported into the code that is calling + the 'download_files_from_metadata' function. + + The retriever function (not defined here) will perform the data download. Args: hostname (str): hostname of Gen3 commons to use for WTS auth: Gen3Auth instance for WTS - metadata_file (str): path to external file metadata json file + external_file_metadata (dict): dict of external file objects retrievers (dict): map of function name string to retreiver function reference. Returns: dictionary of DownloadStatus for external file objects, None if errors @@ -75,19 +75,8 @@ def download_files_from_metadata( logger.critical(f"ERROR: 'retrievers' specification is empty {retrievers}") return None - # verify the metadata_file path is valid - if not os.path.isfile(metadata_file): - logger.critical(f"ERROR: cannot find metadata json file: {metadata_file}") - return None - - metadata = load_all_metadata(Path(metadata_file)) - logger.debug(f"Metadata = {metadata}") - external_file_metadata = extract_external_file_metadata(metadata) - logger.debug(f"External file metadata={external_file_metadata}") if external_file_metadata == None: - logger.critical( - f"ERROR: cannot find external_file_metadata value in metadata: {metadata_file}" - ) + logger.critical(f"ERROR: external_file_metadata is missing") return None download_status = pull_files( diff --git a/tests/download_tests/test_external_download.py b/tests/download_tests/test_external_download.py index b57aa80c8..84f0e02f0 100644 --- a/tests/download_tests/test_external_download.py +++ b/tests/download_tests/test_external_download.py @@ -13,7 +13,6 @@ check_data_and_group_by_retriever, download_files_from_metadata, pull_files, - extract_external_file_metadata, is_valid_external_file_metadata, load_all_metadata, ) @@ -21,11 +20,15 @@ DIR = Path(__file__).resolve().parent +@pytest.fixture +def wts_hostname(): + return "test.commons1.io" + + @pytest.fixture def valid_external_file_metadata(): - with open(Path(DIR, "resources/gen3_metadata_external_file_metadata.json")) as fin: - metadata = json.load(fin) - return metadata["gen3_discovery"]["external_file_metadata"] + with open(Path(DIR, "resources/valid_external_file_metadata.json")) as fin: + return json.load(fin) def test_load_all_metadata(): @@ -104,60 +107,45 @@ def test_check_data_and_group_by_retriever(): assert check_data_and_group_by_retriever(file_metadata_list) == expected -def test_extract_external_file_metadata(valid_external_file_metadata): - # valid metadata - metadata_file = "resources/gen3_metadata_external_file_metadata.json" - metadata = load_all_metadata(Path(DIR, metadata_file)) - external_file_metadata = extract_external_file_metadata(metadata) - - assert type(external_file_metadata) is list - assert len(external_file_metadata) == 2 - assert external_file_metadata == valid_external_file_metadata - - # invalid metadata - missing keys - metadata_missing_keys = { - "_guid_type": "discovery_metadata", - "gen3_discovery": {"authz": ""}, - } - assert extract_external_file_metadata(metadata_missing_keys) == None - assert extract_external_file_metadata({"_guid_type": "discovery_metadata"}) == None - assert extract_external_file_metadata({}) == None - - -def test_pull_files_bad_retriever_input(): - # retriever does not exist - wts_hostname = "test.commons1.io" +def test_pull_files(wts_hostname, valid_external_file_metadata): download_path = "." - mock_external_file_metadata = [ - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "DoesNotExist", - } - ] + expected_download_status = { + "QDR_study_01": DownloadStatus(filename="QDR_study_01", status="downloaded"), + "QDR_file_02": DownloadStatus(filename="QDR_file_02", status="downloaded"), + } mock_auth = MagicMock() mock_retriever = MagicMock() mock_retriever.__name__ = "mock_retriever" - mock_retriever.return_value = "some_status" + mock_retriever.return_value = expected_download_status retrievers = {"QDR": mock_retriever} result = pull_files( wts_server_name=wts_hostname, auth=mock_auth, - file_metadata_list=mock_external_file_metadata, + file_metadata_list=valid_external_file_metadata, retrievers=retrievers, download_path=download_path, ) - assert result == None + assert result == expected_download_status - # retriever is not in name space + +def test_pull_files_bad_retriever_input(wts_hostname): + download_path = "." + mock_auth = MagicMock() + + mock_retriever = MagicMock() + mock_retriever.__name__ = "mock_retriever" + mock_retriever.return_value = "some_status" + retrievers = {"QDR": mock_retriever} + + # retriever does not exist mock_external_file_metadata = [ { "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", + "file_retriever": "DoesNotExist", } ] - mock_retriever.side_effect = NameError result = pull_files( wts_server_name=wts_hostname, auth=mock_auth, @@ -167,28 +155,14 @@ def test_pull_files_bad_retriever_input(): ) assert result == None - -def test_pull_files(): - wts_hostname = "test.commons1.io" - download_path = "." + # retriever is not in name space mock_external_file_metadata = [ { "external_oidc_idp": "test-external-idp", "file_retriever": "QDR", - "study_id": "QDR_study_01", } ] - expected_download_status = { - "QDR_study_01": DownloadStatus(filename="QDR_study_01", status="downloaded"), - } - - mock_auth = MagicMock() - - mock_retriever = MagicMock() - mock_retriever.__name__ = "mock_retriever" - mock_retriever.return_value = expected_download_status - retrievers = {"QDR": mock_retriever} - + mock_retriever.side_effect = NameError result = pull_files( wts_server_name=wts_hostname, auth=mock_auth, @@ -196,27 +170,17 @@ def test_pull_files(): retrievers=retrievers, download_path=download_path, ) - assert result == expected_download_status + assert result == None -def test_pull_files_failures(): - wts_hostname = "test.commons1.io" +def test_pull_files_failures(wts_hostname, valid_external_file_metadata): download_path = "." - mock_external_file_metadata = [ - { - "external_oidc_idp": "test-external-idp", - "file_retriever": "QDR", - "study_id": "QDR_study_01", - }, - ] - mock_auth = MagicMock() - mock_retriever = MagicMock() mock_retriever.__name__ = "mock_retriever" - # failed download status is passed through + # failed download status from retriever is passed as return value from pull_files expected_download_status = { "QDR_study_01": DownloadStatus(filename="QDR_study_01", status="failed") } @@ -226,61 +190,14 @@ def test_pull_files_failures(): result = pull_files( wts_server_name=wts_hostname, auth=mock_auth, - file_metadata_list=mock_external_file_metadata, + file_metadata_list=valid_external_file_metadata, retrievers=retrievers, download_path=download_path, ) assert result == expected_download_status -def test_download_files_from_metadata_bad_input(): - wts_hostname = "test.commons1.io" - mock_auth = MagicMock() - - with mock.patch("gen3.auth") as mock_auth, mock.patch( - "gen3.tools.download.external_file_download.extract_external_file_metadata" - ) as mock_extract_external_file_metadata: - mock_retriever = MagicMock() - mock_retriever.__name__ = "mock_retriever" - mock_retrievers = {"QDR": mock_retriever} - - # empty retrievers - result = download_files_from_metadata( - hostname=wts_hostname, - auth=mock_auth, - metadata_file="some_file", - retrievers={}, - download_path=".", - ) - assert result == None - assert not mock_extract_external_file_metadata.called - - # missing metadata file - mock_auth.get_access_token.return_value = "some_token" - result = download_files_from_metadata( - hostname=wts_hostname, - auth=mock_auth, - metadata_file="missing_file", - retrievers=mock_retrievers, - download_path=".", - ) - assert result == None - assert not mock_extract_external_file_metadata.called - - # invalid metadata - mock_extract_external_file_metadata.return_value = None - result = download_files_from_metadata( - hostname=wts_hostname, - auth=mock_auth, - metadata_file="tests/download_tests/resources/gen3_metadata_external_file_metadata.json", - retrievers=mock_retrievers, - download_path=".", - ) - assert result == None - assert mock_extract_external_file_metadata.called - - -def test_download_files_from_metadata(): +def test_download_files_from_metadata(valid_external_file_metadata): wts_hostname = "test.commons1.io" mock_auth = MagicMock() @@ -303,10 +220,30 @@ def test_download_files_from_metadata(): result = download_files_from_metadata( hostname=wts_hostname, auth=mock_auth, - metadata_file="tests/download_tests/resources/gen3_metadata_external_file_metadata.json", + external_file_metadata=valid_external_file_metadata, retrievers=mock_retrievers, download_path=".", ) # result should match the value returned by pull_files. assert result == mock_download_status assert mock_pull_files.called + + +def test_download_files_from_metadata_bad_input( + wts_hostname, valid_external_file_metadata +): + mock_auth = MagicMock() + + with mock.patch("gen3.auth") as mock_auth, mock.patch( + "gen3.tools.download.external_file_download.pull_files" + ) as mock_pull_files: + # empty retrievers + result = download_files_from_metadata( + hostname=wts_hostname, + auth=mock_auth, + external_file_metadata=valid_external_file_metadata, + retrievers={}, + download_path=".", + ) + assert result == None + assert not mock_pull_files.called From 5faae5209d99c6c1ae2c341fe64886699eb1f2ed Mon Sep 17 00:00:00 2001 From: george42-ctds Date: Wed, 12 Jun 2024 21:02:13 +0000 Subject: [PATCH 09/11] Apply automatic documentation changes --- docs/_build/doctrees/environment.pickle | Bin 1579883 -> 1579893 bytes docs/_build/doctrees/tools/indexing.doctree | Bin 100281 -> 100291 bytes docs/_build/doctrees/tools/metadata.doctree | Bin 35934 -> 35934 bytes docs/_build/html/searchindex.js | 2 +- docs/_build/html/tools/indexing.html | 2 +- docs/_build/html/tools/metadata.html | 2 +- 6 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 7be159bf9cdaa6d6fdf94fdc5cbcb5d5cf5fb850..5537a0ef7c4186aa40b03927b0260415a626570c 100644 GIT binary patch delta 10633 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 delta 166 zcmX@y&$hFltzinI2;X>qZl3UAKT-@_qKV5zD Z!5rbqUKZx4swekZxS)z`zHd<<3;_J39?1Xz delta 115 zcmcaNgX!K3rVX50yoN^RMh1EoM&_nQCPtGp^=&o>X>qZl3UAKT-@_qKV5zD Z!5rbqUKZx4swekZxS)z`zHd<<3;_5b9<=}f diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 576b0791d..eaeedb2f6 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Indexing Tools": [[11, "indexing-tools"]], "Indices and tables": [[2, "indices-and-tables"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]]}, "docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "indexentries": {"_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager", false]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods", false]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS", false]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create", false]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases", false]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record", false]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias", false]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases", false]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest", false]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get", false]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases", false]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record", false]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum", false]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page", false]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params", false]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest", false]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls", false]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd", false]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait", false]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update", false]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases", false]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record", false]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest", false]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider", false]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ", false]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create", false]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens", false]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children", false]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID", false]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url", false]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy", false]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create", false]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases", false]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank", false]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path", false]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job", false]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version", false]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list", false]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program", false]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project", false]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record", false]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time", false]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl", false]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR", false]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete", false]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias", false]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases", false]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids", false]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file", false]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations", false]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path", false]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node", false]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes", false]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object", false]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program", false]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project", false]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record", false]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record", false]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records", false]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download", false]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download", false]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download", false]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest", false]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single", false]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url", false]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable", false]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager", false]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus", false]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time", false]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint", false]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node", false]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record", false]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name", false]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name", false]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size", false]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size", false]], "gen3.tools": [[9, "module-gen3.tools", false]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download", false]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest", false]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest", false]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest", false]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest", false]], "gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth", false]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File", false]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index", false]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs", false]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata", false]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object", false]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query", false]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission", false]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage", false]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get", false]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get", false]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token", false]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts", false]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases", false]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records", false]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all", false]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node", false]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token", false]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema", false]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix", false]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths", false]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version", false]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output", false]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url", false]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs", false]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary", false]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest", false]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects", false]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record", false]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc", false]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records", false]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page", false]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats", false]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status", false]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls", false]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids", false]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version", false]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version", false]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version", false]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions", false]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params", false]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query", false]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID", false]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT", false]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT", false]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname", false]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest", false]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE", false]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy", false]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy", false]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy", false]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest", false]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object", false]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest", false]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs", false]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load", false]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest", false]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls", false]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path", false]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest", false]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS", false]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5", false]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum", false]], "module": [[9, "module-gen3.tools", false], [10, "module-gen3.tools.download.drs_download", false], [11, "module-gen3.tools.indexing.download_manifest", false], [11, "module-gen3.tools.indexing.index_manifest", false], [11, "module-gen3.tools.indexing.verify_manifest", false], [12, "module-gen3.tools.metadata.ingest_manifest", false]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id", false]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id", false]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type", false]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project", false]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint", false]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID", false]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query", false]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query", false]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query", false]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls", false]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download", false]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token", false]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects", false]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm", false]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path", false]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE", false]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time", false]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status", false]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file", false]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record", false]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl", false]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER", false]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update", false]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases", false]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank", false]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record", false]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time", false]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload", false]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file", false]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid", false]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url", false]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS", false]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access", false]]}, "objects": {"gen3": [[9, 3, 0, "-", "tools"]], "gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "terms": {"": [1, 4, 8, 10, 11], "0": [5, 7, 8, 11], "0a80fada010c": 11, "0a80fada096c": 11, "0a80fada097c": 11, "0a80fada098c": 11, "0a80fada099c": 11, "1": [4, 5, 8, 10, 11], "10": [5, 7, 11], "100": [8, 11], "11e9": 11, "1627412": [], "1716303015": [], "1716386558": [], "1717081422": [], "1717081423": [], "1718212720": [11, 12], "2": [5, 11], "24": [11, 12], "2512589": [], "2522886": [], "255e396f": 11, "3": [5, 11], "30": 8, "33": 5, "333": 5, "343434344": 11, "363455714": 11, "4": [5, 11], "450c": 11, "4659653": [], "4714": 8, "473d83400bc1bc9dc635e334fadd433c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "5": [0, 5], "50": 7, "51618": 11, "543434443": 11, "5486019": [], "6f90": 8, "7d3d8d2083b4": 11, "8275242": 12, "8420": 8, "8777797": [], "93d9af72": 11, "9a07": 11, "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "AND": 5, "Be": 1, "But": 5, "By": 11, "For": [1, 5, 6, 7, 8, 9, 11], "IF": 11, "If": [0, 1, 7, 11, 12], "In": 10, "It": 10, "NOT": 12, "OR": 5, "One": 7, "Such": 9, "THE": 11, "That": 3, "The": [0, 1, 2, 3, 5, 8, 10, 11], "There": 11, "These": 9, "To": 11, "Will": [4, 7, 10], "_get_acl_from_row": 11, "_get_authz_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_for_row": 12, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "_guid_typ": 12, "_manag": [2, 9, 10], "_query_for_associated_indexd_record_guid": 12, "_ssl": [3, 4, 5], "a5c6": 11, "ab167e49d25b488939b1ede42752458b": 3, "about": [2, 3], "abov": 11, "access": [0, 1, 3, 7, 10], "access_method": [2, 9, 10], "access_token": 0, "accesstoken": 0, "acl": [2, 3, 9, 11], "across": 11, "act": 0, "action": [9, 11], "actual": 11, "ad": 3, "add": [3, 5], "addit": [3, 5, 10, 11], "admin": [5, 11], "admin_endpoint_suffix": 5, "after": 10, "against": [3, 7, 8, 11, 12], "algorithm": 3, "alia": [3, 5], "alias": 5, "aliv": 7, "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "allow": [0, 6, 8, 10, 11, 12], "allowed_data_upload_bucket": 1, "along": 2, "alreadi": 9, "also": 1, "altern": [5, 11], "alwai": 5, "ammount": 12, "amount": [1, 9], "an": [0, 3, 6, 8, 10, 11], "ani": [0, 5, 10, 11], "anoth": 5, "api": [0, 5, 8, 11], "api_kei": 11, "appli": 7, "appropri": 13, "ar": [5, 7, 8, 9, 10, 11], "arbitrari": 0, "argument": [0, 13], "arrai": 8, "asc": 7, "assign": 9, "assist": 10, "associ": [3, 5], "assum": 11, "async": [3, 4, 5, 9, 11, 12], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_create_record": [2, 3], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_download_object_manifest": [2, 9, 11], "async_get": [2, 5], "async_get_alias": [2, 5], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_url": [2, 3], "async_query_urls_from_indexd": [2, 9, 12], "async_run_job_and_wait": [2, 4], "async_upd": [2, 5], "async_update_alias": [2, 5], "async_update_record": [2, 3], "async_verify_object_manifest": [2, 9, 11], "asynchron": [3, 4, 5], "asyncio": [11, 12], "asyncron": 5, "attach": [3, 5], "attempt": 11, "attribut": [10, 11], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "authbas": 0, "authent": 0, "author": 1, "authz": [0, 1, 2, 3, 9, 10, 11], "auto": [0, 2], "automat": 0, "avail": [1, 2, 10, 11], "az": 1, "b": [5, 11], "b0f1": 11, "bar": 10, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "baseid": 3, "basic": [3, 11, 12], "batch_creat": [2, 5], "batch_siz": 8, "behalf": 0, "behavior": 11, "being": 3, "belong": 8, "below": 11, "blank": 3, "blob": [5, 7], "bodi": 3, "bool": [4, 5, 8, 10, 11, 12], "boolean": 3, "bownload": 10, "broad": 9, "broken": 9, "bucket": [1, 6], "bundl": 10, "byte": 10, "c": [5, 11], "cach": 10, "cache_hosts_wts_token": [2, 9, 10], "call": [10, 13], "can": [0, 3, 4, 8, 11, 12], "capabl": 9, "case": [0, 10], "categori": 9, "ccle": 8, "ccle_one_record": 8, "ccle_sample_nod": 8, "cdi": 7, "chang": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "child": 10, "children": [2, 9, 10], "chunk_siz": 8, "class": [0, 2, 10, 11, 13], "cli": 10, "client": [0, 3], "client_credenti": 0, "client_id": 0, "client_scop": 0, "client_secret": 0, "code": [2, 8], "column": [11, 12], "column_to_use_as_guid": [2, 9, 12], "columna": 11, "columnb": 11, "columnc": 11, "com": 7, "comma": 11, "command": [10, 11], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "commons_url": [2, 9, 10, 11, 12], "complet": [4, 11], "complex": 7, "concat": 11, "concurr": [11, 12], "configur": 1, "connect": 12, "consist": 3, "constructor": 0, "contain": [0, 2, 5, 8, 9, 10, 11, 12], "content": [3, 13], "content_created_d": 3, "content_updated_d": 3, "continu": 10, "control": 3, "conveni": 10, "copi": [2, 13], "coroutin": 11, "correspond": 3, "count": 3, "crdc": 0, "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_blank": [2, 3], "create_index_key_path": [2, 5], "create_job": [2, 4], "create_new_vers": [2, 3], "create_object_list": [2, 9, 10], "create_program": [2, 8], "create_project": [2, 8], "create_record": [2, 3], "created_tim": [2, 9, 10], "creation": [3, 11], "cred": 3, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "csv": [8, 11, 12], "curl": [0, 2], "current": [6, 8, 10], "current_dir": [2, 9, 11], "custom": 11, "d": 5, "d70b41b9": 8, "data": [0, 1, 3, 5, 7, 8, 10, 11], "data_spreadsheet": 8, "data_typ": 7, "data_upload_bucket": 1, "dataa": 11, "datab": 11, "databas": 5, "datacommon": 0, "datafil": 10, "datamanag": 10, "date": 3, "datetim": [1, 3, 10], "dbgap": 12, "dcf": 8, "def": 11, "default": [0, 1, 3, 7, 8, 11, 12], "defin": [5, 8, 10], "delai": 4, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_all_guid": [2, 9, 11], "delete_fil": [1, 2], "delete_file_loc": [1, 2, 6], "delete_index_key_path": [2, 5], "delete_nod": [2, 8], "delete_object": [2, 6], "delete_program": [2, 8], "delete_project": [2, 8], "delete_record": [2, 3, 8], "delete_unpacked_packag": 10, "delimet": [11, 12], "delimit": 11, "demograph": 8, "deprec": 1, "descript": [3, 5], "desir": 11, "dest_path": 13, "dest_urlstr": 13, "dest_w": 13, "dest_wskei": 13, "detail": [2, 7, 10], "determin": [10, 11, 12], "dev": 11, "dict": [3, 4, 5, 10, 11, 12], "dictionari": [3, 4, 5, 7, 8], "did": 3, "differ": 5, "direct": 0, "directori": [10, 11], "disabl": 10, "discoveri": 10, "disk": 13, "dispatch": 4, "dist_resolut": 3, "distribut": 3, "doc": [7, 10], "docstr": 2, "document": [1, 3], "doe": [0, 12], "domain": [11, 12], "done": 4, "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "download_files_in_drs_manifest": [2, 9, 10], "download_list": 10, "download_manifest": 11, "download_singl": [1, 2], "download_url": [2, 13], "downloadmanag": [2, 9, 10], "downloadstatu": [2, 9, 10], "dr": [2, 9], "drs_download": 10, "drs_hostnam": 10, "drsdownload": 10, "drsobjecttyp": 10, "e": [5, 10], "e043ab8b77b9": 8, "each": [3, 8, 10, 11], "effici": 9, "eg": 3, "either": 8, "elasticsearch": 7, "els": [0, 12], "elsewher": 12, "empti": [8, 11], "enabl": 11, "end": [5, 10], "end_tim": [2, 9, 10], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "entir": 8, "entri": [3, 11], "env": 0, "environ": 0, "equal": 7, "error": [10, 11, 12], "error_nam": 11, "etc": 8, "even": 11, "everi": [9, 11], "everyth": 11, "ex": [0, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "exclud": 3, "execut": [7, 8, 11], "exist": [1, 3, 5, 6, 9, 12], "expect": [5, 9, 11], "experi": 8, "expir": [0, 1], "expires_in": 1, "export": [8, 10], "export_nod": [2, 8], "export_record": [2, 8], "f1f8": 11, "factori": 10, "fail": [8, 10], "fals": [3, 5, 6, 10, 11], "featur": [1, 6], "fenc": [0, 1], "fetch": 0, "field": [3, 5, 7, 11, 12], "fieldnam": 11, "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "file_nam": [1, 2, 3, 9, 10, 11], "file_s": [2, 9, 10, 11], "file_st": 3, "fileformat": 8, "filenam": [0, 8, 10, 11, 12], "files": 10, "fill": 12, "filter": [5, 7], "filter_object": 7, "first": [7, 8], "flag": 11, "folder": 11, "follow": [0, 11], "forc": 11, "force_metadata_columns_even_if_empti": 11, "form": 13, "format": [3, 5, 8, 11], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "func_to_parse_row": [11, 12], "function": [2, 3, 4, 5, 9, 10, 11, 12], "g": 10, "gen3": [10, 11, 12], "gen3_api_kei": 0, "gen3_oidc_client_creds_secret": 0, "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "gen3fil": [1, 2], "gen3index": [2, 3], "gen3job": [2, 4, 10], "gen3metadata": [2, 5], "gen3object": [2, 6], "gen3queri": [2, 7], "gen3submiss": [2, 8], "gen3wsstorag": [2, 13], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "get_access_token": [0, 2], "get_access_token_from_wt": [0, 2], "get_alias": [2, 5], "get_all_record": [2, 3], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_fresh_token": [2, 9, 10], "get_graphql_schema": [2, 8], "get_guid_from_fil": 12, "get_guids_prefix": [2, 3], "get_index_key_path": [2, 5], "get_latest_vers": [2, 3], "get_output": [2, 4], "get_presigned_url": [1, 2], "get_program": [2, 8], "get_project": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_statu": [2, 4], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "giangb": 11, "github": [2, 7], "give": 1, "given": [0, 3, 4, 5, 8, 10, 12, 13], "global": [4, 5], "good": 3, "grant": 0, "graph": 8, "graphql": [7, 8], "graphql_queri": [2, 7], "group": 3, "guid": [1, 2, 3, 5, 6, 9, 11, 12], "guid_exampl": 11, "guid_for_row": 12, "guid_from_fil": 12, "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "guppi": 7, "ha": [0, 11], "handl": [3, 10], "hardcod": 0, "has_vers": 3, "hash": [3, 11], "hash_typ": 3, "have": [5, 11], "header": 11, "healthi": [3, 4, 5], "help": 11, "helper": 2, "hit": 11, "host": 10, "hostnam": [2, 9, 10], "how": [8, 11], "howto": 10, "http": [0, 7, 11, 12], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "id": [0, 1, 3, 5, 10, 11], "idea": 3, "identifi": [3, 5, 9, 11], "idp": 0, "illustr": 11, "immut": 3, "implement": 0, "implic": 11, "import": 11, "includ": [0, 3], "indent": 10, "index": [0, 2, 5, 9], "index_manifest": 11, "index_object_manifest": [2, 9, 11], "indexd": [1, 3, 6, 10, 11, 12], "indexd_field": [11, 12], "indexd_record_page_s": [2, 9, 11], "indexed_file_object_guid": 12, "indic": [0, 11], "infil": 10, "info": [3, 11], "inform": [2, 3, 10], "ingest": [2, 9], "ingest_manifest": 12, "initi": [0, 10], "input": [4, 10, 11], "input_manifest": 11, "instal": [0, 2, 11], "instanc": [1, 3, 6, 7, 8, 9, 10], "instead": [1, 7, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "integ": [1, 3, 8], "intend": 0, "interact": [1, 3, 4, 5, 6, 8, 13], "interest": 10, "interpret": 0, "introspect": 8, "involv": 9, "is_healthi": [2, 3, 4, 5], "is_indexed_file_object": 12, "isn": 1, "issu": 0, "its": [1, 3], "job": 2, "job_id": 4, "job_input": 4, "job_nam": 4, "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "just": [5, 11, 12], "jwt": 0, "kei": [0, 3, 5, 13], "know": 11, "known": 10, "kwarg": [3, 4, 5], "l": [2, 13], "larg": 9, "last": 10, "latest": 3, "least": 3, "level": 6, "librari": 11, "like": [3, 5, 9, 11, 12], "limit": [1, 3, 5, 12], "linear": 4, "linux": 10, "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "list_job": [2, 4], "live": [11, 12], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "local": [0, 13], "locat": [1, 6], "lock": 12, "log": [8, 10, 11, 12], "logic": [5, 12], "loop": 11, "ls_path": [2, 13], "maco": 11, "made": 3, "mai": [0, 9, 11], "main": 10, "make": [9, 11], "manag": [1, 5, 10], "mani": [8, 11], "manifest": [2, 8, 9, 10, 11, 12], "manifest_1": 10, "manifest_fil": [11, 12], "manifest_file_delimit": [11, 12], "manifest_row_pars": [11, 12], "map": [0, 11], "mark": 8, "master": 7, "match": [3, 5, 12], "max": 5, "max_concurrent_request": [2, 9, 11, 12], "max_presigned_url_ttl": 1, "max_tri": 8, "maximum": [11, 12], "md": [5, 7, 10, 12], "md5": [2, 3, 9, 11], "md5_hash": 11, "md5sum": [2, 9, 10], "mean": 8, "mechan": 3, "merg": 5, "metadata": [2, 3, 6, 9, 11], "metadata_list": 5, "metadata_sourc": 12, "metadata_typ": 12, "metdata": 12, "method": [1, 7, 10], "minimum": 10, "minut": 0, "mode": 7, "modul": [2, 10, 11], "more": [2, 5, 7, 9, 10], "most": 9, "mostli": 2, "multipl": [8, 11], "must": [1, 5], "my_common": 10, "my_credenti": 10, "my_field": 7, "my_index": 7, "my_program": 7, "my_project": 7, "name": [3, 4, 8, 10, 11, 12, 13], "namespac": [0, 12], "necessari": [3, 5], "need": [3, 7, 10, 11], "nest": 5, "net": 11, "never": 0, "new": [0, 3], "node": 8, "node_nam": 8, "node_typ": 8, "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "note": [0, 3, 11, 12], "noth": [3, 6], "now": [1, 8], "num": 5, "num_process": 11, "num_total_fil": 11, "number": [3, 7, 8, 11, 12], "o": 0, "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "object_id": [1, 2, 9, 10], "object_list": 10, "object_typ": [2, 9, 10], "objectid": 10, "obtain": [0, 10], "occur": 10, "off": 5, "offset": [5, 7], "oidc": 0, "old": 3, "one": [3, 5, 10, 11], "onli": [3, 5, 7, 8, 10, 11], "open": [8, 10, 11], "open_project": [2, 8], "openid": 0, "opt": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "order": [0, 8], "ordered_node_list": 8, "org": 10, "otherwis": 10, "output": [4, 5, 11, 12], "output_dir": 10, "output_filenam": [11, 12], "overrid": [0, 11, 12], "overwrit": 5, "own": 0, "packag": 10, "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "pagin": 3, "parallel": 11, "param": [3, 5, 8, 10], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "pars": [10, 11, 12, 13], "parser": [11, 12], "particular": 0, "pass": [0, 7, 8, 10], "password": [11, 12], "path": [0, 1, 5, 10, 11, 13], "path_to_manifest": 11, "pattern": [3, 12], "pdcdatastor": 11, "pend": 10, "per": [11, 12], "peregrin": 8, "permiss": 10, "persist": 9, "phs0001": 11, "phs0002": 11, "pick": 1, "pla": 11, "place": 11, "planx": 11, "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "popul": [10, 12], "posit": [1, 7], "possibl": 10, "post": [0, 11], "pprint": [2, 9, 10], "prefix": 3, "presign": 1, "pretti": 10, "prev_guid": [2, 9, 11], "previou": [3, 11], "previous": 4, "print": [8, 10], "process": 11, "processed_fil": 11, "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "program": [8, 11], "progress": [8, 10], "project": [8, 11], "project_id": [7, 8], "protocol": 1, "provid": [0, 1, 3, 5, 7, 8, 12], "public": [3, 5], "put": 0, "py": 11, "python": [2, 9, 11], "python3": 11, "python_subprocess_command": 11, "queri": [1, 2, 3, 5, 8, 11, 12], "query_str": 7, "query_txt": [7, 8], "query_url": [2, 3], "quickstart": 2, "rather": 0, "raw": [7, 11], "raw_data_download": [2, 7], "rbac": 3, "read": [3, 5, 11], "readm": 2, "reason": 10, "record": [1, 3, 5, 7, 8, 11, 12], "refresh": [0, 10], "refresh_access_token": [0, 2], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "regist": 8, "regular": 7, "relat": 9, "remov": [1, 6, 11, 13], "replac": 11, "replace_url": 11, "repo": 2, "repres": [3, 5, 10], "represent": [1, 3], "request": [0, 1, 3, 5, 8, 11, 12], "requir": 10, "resolv": 10, "resolve_object": [2, 9, 10], "respect": 7, "respons": [0, 1, 3, 4, 5], "result": [1, 8, 10, 11], "retri": 8, "retriev": [1, 8, 10, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "return_full_metadata": 5, "rev": 3, "revers": 8, "revis": 3, "right": 1, "rm": [2, 13], "rm_path": [2, 13], "root": [11, 12], "row": [7, 8, 11, 12], "row_offset": 8, "rtype": 3, "run": [8, 11], "s3": [1, 10, 11], "safe": 11, "same": [5, 11, 13], "sampl": [8, 10], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "save": 10, "save_directori": 10, "schema": 8, "scope": [0, 1], "screen": 8, "script": 2, "search": [0, 2, 3], "second": [1, 4], "secret": 0, "see": [7, 10, 11], "self": 10, "semaphon": 12, "semaphor": 12, "separ": [0, 11], "server": 10, "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "service_loc": [3, 4, 5], "session": 11, "set": [0, 1, 5, 10], "setup": 2, "sheepdog": 8, "should": [0, 8, 11], "show": 10, "show_progress": 10, "shown": 11, "sign": 1, "signpost": 3, "similar": 10, "simpl": 3, "simpli": 11, "sinc": 3, "singl": [1, 5, 8], "size": [2, 3, 9, 10, 11], "skip": 8, "sleep": 4, "so": 11, "some": [0, 2], "someth": 11, "sort": 7, "sort_field": 7, "sort_object": 7, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "space": [0, 11], "specif": [5, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "spreadsheet": 8, "src_path": 13, "src_urlstr": 13, "src_w": 13, "src_wskei": 13, "ssl": [3, 4, 5], "start": [3, 4, 7, 8, 10], "start_tim": [2, 9, 10], "static": 10, "statu": [2, 4, 9, 10], "storag": [1, 2, 6], "store": [1, 3, 10], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "string": [0, 3, 5, 11, 13], "strip": 11, "sub": 8, "subject": [7, 8], "submiss": 2, "submit": [8, 11], "submit_additional_metadata_column": 11, "submit_fil": [2, 8], "submit_record": [2, 8], "submitter_id": 7, "success": 10, "successfulli": 10, "suffici": 3, "suppli": 3, "support": [0, 1, 5, 8, 11], "sure": 1, "synchron": 11, "syntax": 7, "system": [6, 7, 8, 9], "t": [1, 5, 11], "tab": 11, "task": 9, "temporari": 11, "test": 11, "test1": 11, "test2": 11, "test3": 11, "test4": 11, "test5": 11, "text": [1, 7, 8], "than": [0, 5], "thei": [0, 10], "them": [10, 11], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "those": 11, "thread": 11, "thread_num": 11, "threadcontrol": [2, 9, 11], "through": [8, 11], "tier": 7, "time": [1, 3, 8, 10, 11], "timestamp": 10, "tmp_folder": [2, 9, 11], "token": [0, 10], "tool": 2, "total": 11, "treat": [1, 5], "tree": 10, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "try": 0, "tsv": [8, 11, 12], "tupl": [0, 3, 11, 12], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "typic": 10, "uc": 7, "unaccess": 7, "under": [0, 8, 13], "uniqu": [1, 5], "unknown": 10, "unpack": 10, "unpack_packag": 10, "until": [4, 10], "up": [5, 9], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "update_blank": [2, 3], "update_record": [2, 3], "updated_tim": [2, 9, 10], "upload": [1, 2, 3, 8, 13], "upload_fil": [1, 2], "upload_file_to_guid": [1, 2], "upload_url": [2, 13], "url": [1, 2, 3, 9, 10, 11, 12, 13], "urls_metadata": 3, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "usag": 11, "use_agg_md": 5, "user": [0, 10, 12], "user_access": [2, 9, 10], "usual": 12, "utcnow": 1, "util": 9, "uuid": [1, 3, 8], "uuid1": 8, "uuid2": 8, "valid": [3, 7], "valu": [0, 1, 3, 5, 7, 10, 11], "value_from_indexd": 11, "value_from_manifest": 11, "variabl": [0, 7, 8], "variou": 2, "verbos": [7, 8], "verif": 11, "verifi": [2, 9], "verify_manifest": 11, "verify_object_manifest": 11, "version": [3, 4, 5], "vital_statu": 7, "w": 13, "wa": 0, "wai": 10, "wait": 4, "want": [0, 3, 8], "warn": 11, "we": [3, 11], "web": 0, "what": 5, "when": [0, 3, 7, 10, 12], "where": [0, 3, 5, 11, 12], "whether": [3, 4, 5, 8, 11, 12], "which": [8, 10], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "whose": 5, "within": [0, 2, 9], "without": [3, 5], "won": 5, "work": [0, 10], "workaround": 11, "worksheet": 8, "workspac": [0, 2], "wrapper": 10, "write": 11, "ws_urlstr": 13, "wskei": 13, "wss": 13, "wt": [0, 10], "x": 11, "xlsx": 8, "you": [0, 3, 8, 11], "your": 0}, "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "titleterms": {"": 2, "auth": 0, "class": [1, 3, 4, 5, 6, 7, 8], "document": 2, "download": [10, 11], "dr": 10, "file": 1, "gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "helper": 0, "index": [3, 11], "indic": 2, "ingest": 12, "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "sdk": 2, "storag": 13, "submiss": 8, "tabl": 2, "tool": [9, 10, 11, 12], "verifi": 11, "welcom": 2, "workspac": 13}}) \ No newline at end of file +Search.setIndex({"alltitles": {"DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Indexing Tools": [[11, "indexing-tools"]], "Indices and tables": [[2, "indices-and-tables"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]]}, "docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "indexentries": {"_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager", false]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods", false]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS", false]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create", false]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases", false]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record", false]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias", false]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases", false]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest", false]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get", false]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases", false]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record", false]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum", false]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page", false]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params", false]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest", false]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls", false]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd", false]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait", false]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update", false]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases", false]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record", false]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest", false]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider", false]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ", false]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create", false]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens", false]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children", false]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID", false]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url", false]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy", false]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create", false]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases", false]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank", false]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path", false]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job", false]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version", false]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list", false]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program", false]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project", false]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record", false]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time", false]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl", false]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR", false]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete", false]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias", false]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases", false]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids", false]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file", false]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations", false]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path", false]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node", false]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes", false]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object", false]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program", false]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project", false]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record", false]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record", false]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records", false]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download", false]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download", false]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download", false]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest", false]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single", false]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url", false]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable", false]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager", false]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus", false]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time", false]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint", false]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node", false]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record", false]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name", false]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name", false]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size", false]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size", false]], "gen3.tools": [[9, "module-gen3.tools", false]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download", false]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest", false]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest", false]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest", false]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest", false]], "gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth", false]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File", false]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index", false]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs", false]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata", false]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object", false]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query", false]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission", false]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage", false]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get", false]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get", false]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token", false]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts", false]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases", false]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records", false]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all", false]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node", false]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token", false]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema", false]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix", false]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths", false]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version", false]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output", false]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url", false]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs", false]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary", false]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest", false]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects", false]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record", false]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc", false]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records", false]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page", false]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats", false]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status", false]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls", false]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids", false]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version", false]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version", false]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version", false]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions", false]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params", false]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query", false]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID", false]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT", false]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT", false]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname", false]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest", false]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE", false]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy", false]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy", false]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy", false]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest", false]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object", false]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest", false]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs", false]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load", false]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest", false]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls", false]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path", false]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest", false]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS", false]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5", false]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum", false]], "module": [[9, "module-gen3.tools", false], [10, "module-gen3.tools.download.drs_download", false], [11, "module-gen3.tools.indexing.download_manifest", false], [11, "module-gen3.tools.indexing.index_manifest", false], [11, "module-gen3.tools.indexing.verify_manifest", false], [12, "module-gen3.tools.metadata.ingest_manifest", false]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id", false]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id", false]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type", false]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project", false]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint", false]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID", false]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query", false]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query", false]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query", false]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls", false]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download", false]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token", false]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects", false]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm", false]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path", false]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE", false]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time", false]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status", false]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file", false]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record", false]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl", false]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER", false]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update", false]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases", false]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank", false]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record", false]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time", false]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload", false]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file", false]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid", false]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url", false]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS", false]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access", false]]}, "objects": {"gen3": [[9, 3, 0, "-", "tools"]], "gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "terms": {"": [1, 4, 8, 10, 11], "0": [5, 7, 8, 11], "0316713": 11, "0a80fada010c": 11, "0a80fada096c": 11, "0a80fada097c": 11, "0a80fada098c": 11, "0a80fada099c": 11, "1": [4, 5, 8, 10, 11], "10": [5, 7, 11], "100": [8, 11], "11e9": 11, "1627412": [], "1716303015": [], "1716386558": [], "1717081422": [], "1717081423": [], "1718212720": [], "1718226129": [11, 12], "2": [5, 11], "24": [11, 12], "2512589": [], "2522886": [], "255e396f": 11, "3": [5, 11], "30": 8, "33": 5, "333": 5, "3383117": 12, "343434344": 11, "363455714": 11, "4": [5, 11], "450c": 11, "4659653": [], "4714": 8, "473d83400bc1bc9dc635e334fadd433c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "5": [0, 5], "50": 7, "51618": [], "543434443": 11, "5486019": [], "6f90": 8, "7d3d8d2083b4": 11, "8275242": [], "8420": 8, "8777797": [], "93d9af72": 11, "9a07": 11, "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "AND": 5, "Be": 1, "But": 5, "By": 11, "For": [1, 5, 6, 7, 8, 9, 11], "IF": 11, "If": [0, 1, 7, 11, 12], "In": 10, "It": 10, "NOT": 12, "OR": 5, "One": 7, "Such": 9, "THE": 11, "That": 3, "The": [0, 1, 2, 3, 5, 8, 10, 11], "There": 11, "These": 9, "To": 11, "Will": [4, 7, 10], "_get_acl_from_row": 11, "_get_authz_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_for_row": 12, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "_guid_typ": 12, "_manag": [2, 9, 10], "_query_for_associated_indexd_record_guid": 12, "_ssl": [3, 4, 5], "a5c6": 11, "ab167e49d25b488939b1ede42752458b": 3, "about": [2, 3], "abov": 11, "access": [0, 1, 3, 7, 10], "access_method": [2, 9, 10], "access_token": 0, "accesstoken": 0, "acl": [2, 3, 9, 11], "across": 11, "act": 0, "action": [9, 11], "actual": 11, "ad": 3, "add": [3, 5], "addit": [3, 5, 10, 11], "admin": [5, 11], "admin_endpoint_suffix": 5, "after": 10, "against": [3, 7, 8, 11, 12], "algorithm": 3, "alia": [3, 5], "alias": 5, "aliv": 7, "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "allow": [0, 6, 8, 10, 11, 12], "allowed_data_upload_bucket": 1, "along": 2, "alreadi": 9, "also": 1, "altern": [5, 11], "alwai": 5, "ammount": 12, "amount": [1, 9], "an": [0, 3, 6, 8, 10, 11], "ani": [0, 5, 10, 11], "anoth": 5, "api": [0, 5, 8, 11], "api_kei": 11, "appli": 7, "appropri": 13, "ar": [5, 7, 8, 9, 10, 11], "arbitrari": 0, "argument": [0, 13], "arrai": 8, "asc": 7, "assign": 9, "assist": 10, "associ": [3, 5], "assum": 11, "async": [3, 4, 5, 9, 11, 12], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_create_record": [2, 3], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_download_object_manifest": [2, 9, 11], "async_get": [2, 5], "async_get_alias": [2, 5], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_url": [2, 3], "async_query_urls_from_indexd": [2, 9, 12], "async_run_job_and_wait": [2, 4], "async_upd": [2, 5], "async_update_alias": [2, 5], "async_update_record": [2, 3], "async_verify_object_manifest": [2, 9, 11], "asynchron": [3, 4, 5], "asyncio": [11, 12], "asyncron": 5, "attach": [3, 5], "attempt": 11, "attribut": [10, 11], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "authbas": 0, "authent": 0, "author": 1, "authz": [0, 1, 2, 3, 9, 10, 11], "auto": [0, 2], "automat": 0, "avail": [1, 2, 10, 11], "az": 1, "b": [5, 11], "b0f1": 11, "bar": 10, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "baseid": 3, "basic": [3, 11, 12], "batch_creat": [2, 5], "batch_siz": 8, "behalf": 0, "behavior": 11, "being": 3, "belong": 8, "below": 11, "blank": 3, "blob": [5, 7], "bodi": 3, "bool": [4, 5, 8, 10, 11, 12], "boolean": 3, "bownload": 10, "broad": 9, "broken": 9, "bucket": [1, 6], "bundl": 10, "byte": 10, "c": [5, 11], "cach": 10, "cache_hosts_wts_token": [2, 9, 10], "call": [10, 13], "can": [0, 3, 4, 8, 11, 12], "capabl": 9, "case": [0, 10], "categori": 9, "ccle": 8, "ccle_one_record": 8, "ccle_sample_nod": 8, "cdi": 7, "chang": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "child": 10, "children": [2, 9, 10], "chunk_siz": 8, "class": [0, 2, 10, 11, 13], "cli": 10, "client": [0, 3], "client_credenti": 0, "client_id": 0, "client_scop": 0, "client_secret": 0, "code": [2, 8], "column": [11, 12], "column_to_use_as_guid": [2, 9, 12], "columna": 11, "columnb": 11, "columnc": 11, "com": 7, "comma": 11, "command": [10, 11], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "commons_url": [2, 9, 10, 11, 12], "complet": [4, 11], "complex": 7, "concat": 11, "concurr": [11, 12], "configur": 1, "connect": 12, "consist": 3, "constructor": 0, "contain": [0, 2, 5, 8, 9, 10, 11, 12], "content": [3, 13], "content_created_d": 3, "content_updated_d": 3, "continu": 10, "control": 3, "conveni": 10, "copi": [2, 13], "coroutin": 11, "correspond": 3, "count": 3, "crdc": 0, "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_blank": [2, 3], "create_index_key_path": [2, 5], "create_job": [2, 4], "create_new_vers": [2, 3], "create_object_list": [2, 9, 10], "create_program": [2, 8], "create_project": [2, 8], "create_record": [2, 3], "created_tim": [2, 9, 10], "creation": [3, 11], "cred": 3, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "csv": [8, 11, 12], "curl": [0, 2], "current": [6, 8, 10], "current_dir": [2, 9, 11], "custom": 11, "d": 5, "d70b41b9": 8, "data": [0, 1, 3, 5, 7, 8, 10, 11], "data_spreadsheet": 8, "data_typ": 7, "data_upload_bucket": 1, "dataa": 11, "datab": 11, "databas": 5, "datacommon": 0, "datafil": 10, "datamanag": 10, "date": 3, "datetim": [1, 3, 10], "dbgap": 12, "dcf": 8, "def": 11, "default": [0, 1, 3, 7, 8, 11, 12], "defin": [5, 8, 10], "delai": 4, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_all_guid": [2, 9, 11], "delete_fil": [1, 2], "delete_file_loc": [1, 2, 6], "delete_index_key_path": [2, 5], "delete_nod": [2, 8], "delete_object": [2, 6], "delete_program": [2, 8], "delete_project": [2, 8], "delete_record": [2, 3, 8], "delete_unpacked_packag": 10, "delimet": [11, 12], "delimit": 11, "demograph": 8, "deprec": 1, "descript": [3, 5], "desir": 11, "dest_path": 13, "dest_urlstr": 13, "dest_w": 13, "dest_wskei": 13, "detail": [2, 7, 10], "determin": [10, 11, 12], "dev": 11, "dict": [3, 4, 5, 10, 11, 12], "dictionari": [3, 4, 5, 7, 8], "did": 3, "differ": 5, "direct": 0, "directori": [10, 11], "disabl": 10, "discoveri": 10, "disk": 13, "dispatch": 4, "dist_resolut": 3, "distribut": 3, "doc": [7, 10], "docstr": 2, "document": [1, 3], "doe": [0, 12], "domain": [11, 12], "done": 4, "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "download_files_in_drs_manifest": [2, 9, 10], "download_list": 10, "download_manifest": 11, "download_singl": [1, 2], "download_url": [2, 13], "downloadmanag": [2, 9, 10], "downloadstatu": [2, 9, 10], "dr": [2, 9], "drs_download": 10, "drs_hostnam": 10, "drsdownload": 10, "drsobjecttyp": 10, "e": [5, 10], "e043ab8b77b9": 8, "each": [3, 8, 10, 11], "effici": 9, "eg": 3, "either": 8, "elasticsearch": 7, "els": [0, 12], "elsewher": 12, "empti": [8, 11], "enabl": 11, "end": [5, 10], "end_tim": [2, 9, 10], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "entir": 8, "entri": [3, 11], "env": 0, "environ": 0, "equal": 7, "error": [10, 11, 12], "error_nam": 11, "etc": 8, "even": 11, "everi": [9, 11], "everyth": 11, "ex": [0, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "exclud": 3, "execut": [7, 8, 11], "exist": [1, 3, 5, 6, 9, 12], "expect": [5, 9, 11], "experi": 8, "expir": [0, 1], "expires_in": 1, "export": [8, 10], "export_nod": [2, 8], "export_record": [2, 8], "f1f8": 11, "factori": 10, "fail": [8, 10], "fals": [3, 5, 6, 10, 11], "featur": [1, 6], "fenc": [0, 1], "fetch": 0, "field": [3, 5, 7, 11, 12], "fieldnam": 11, "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "file_nam": [1, 2, 3, 9, 10, 11], "file_s": [2, 9, 10, 11], "file_st": 3, "fileformat": 8, "filenam": [0, 8, 10, 11, 12], "files": 10, "fill": 12, "filter": [5, 7], "filter_object": 7, "first": [7, 8], "flag": 11, "folder": 11, "follow": [0, 11], "forc": 11, "force_metadata_columns_even_if_empti": 11, "form": 13, "format": [3, 5, 8, 11], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "func_to_parse_row": [11, 12], "function": [2, 3, 4, 5, 9, 10, 11, 12], "g": 10, "gen3": [10, 11, 12], "gen3_api_kei": 0, "gen3_oidc_client_creds_secret": 0, "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "gen3fil": [1, 2], "gen3index": [2, 3], "gen3job": [2, 4, 10], "gen3metadata": [2, 5], "gen3object": [2, 6], "gen3queri": [2, 7], "gen3submiss": [2, 8], "gen3wsstorag": [2, 13], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "get_access_token": [0, 2], "get_access_token_from_wt": [0, 2], "get_alias": [2, 5], "get_all_record": [2, 3], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_fresh_token": [2, 9, 10], "get_graphql_schema": [2, 8], "get_guid_from_fil": 12, "get_guids_prefix": [2, 3], "get_index_key_path": [2, 5], "get_latest_vers": [2, 3], "get_output": [2, 4], "get_presigned_url": [1, 2], "get_program": [2, 8], "get_project": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_statu": [2, 4], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "giangb": 11, "github": [2, 7], "give": 1, "given": [0, 3, 4, 5, 8, 10, 12, 13], "global": [4, 5], "good": 3, "grant": 0, "graph": 8, "graphql": [7, 8], "graphql_queri": [2, 7], "group": 3, "guid": [1, 2, 3, 5, 6, 9, 11, 12], "guid_exampl": 11, "guid_for_row": 12, "guid_from_fil": 12, "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "guppi": 7, "ha": [0, 11], "handl": [3, 10], "hardcod": 0, "has_vers": 3, "hash": [3, 11], "hash_typ": 3, "have": [5, 11], "header": 11, "healthi": [3, 4, 5], "help": 11, "helper": 2, "hit": 11, "host": 10, "hostnam": [2, 9, 10], "how": [8, 11], "howto": 10, "http": [0, 7, 11, 12], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "id": [0, 1, 3, 5, 10, 11], "idea": 3, "identifi": [3, 5, 9, 11], "idp": 0, "illustr": 11, "immut": 3, "implement": 0, "implic": 11, "import": 11, "includ": [0, 3], "indent": 10, "index": [0, 2, 5, 9], "index_manifest": 11, "index_object_manifest": [2, 9, 11], "indexd": [1, 3, 6, 10, 11, 12], "indexd_field": [11, 12], "indexd_record_page_s": [2, 9, 11], "indexed_file_object_guid": 12, "indic": [0, 11], "infil": 10, "info": [3, 11], "inform": [2, 3, 10], "ingest": [2, 9], "ingest_manifest": 12, "initi": [0, 10], "input": [4, 10, 11], "input_manifest": 11, "instal": [0, 2, 11], "instanc": [1, 3, 6, 7, 8, 9, 10], "instead": [1, 7, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "integ": [1, 3, 8], "intend": 0, "interact": [1, 3, 4, 5, 6, 8, 13], "interest": 10, "interpret": 0, "introspect": 8, "involv": 9, "is_healthi": [2, 3, 4, 5], "is_indexed_file_object": 12, "isn": 1, "issu": 0, "its": [1, 3], "job": 2, "job_id": 4, "job_input": 4, "job_nam": 4, "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "just": [5, 11, 12], "jwt": 0, "kei": [0, 3, 5, 13], "know": 11, "known": 10, "kwarg": [3, 4, 5], "l": [2, 13], "larg": 9, "last": 10, "latest": 3, "least": 3, "level": 6, "librari": 11, "like": [3, 5, 9, 11, 12], "limit": [1, 3, 5, 12], "linear": 4, "linux": 10, "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "list_job": [2, 4], "live": [11, 12], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "local": [0, 13], "locat": [1, 6], "lock": 12, "log": [8, 10, 11, 12], "logic": [5, 12], "loop": 11, "ls_path": [2, 13], "maco": 11, "made": 3, "mai": [0, 9, 11], "main": 10, "make": [9, 11], "manag": [1, 5, 10], "mani": [8, 11], "manifest": [2, 8, 9, 10, 11, 12], "manifest_1": 10, "manifest_fil": [11, 12], "manifest_file_delimit": [11, 12], "manifest_row_pars": [11, 12], "map": [0, 11], "mark": 8, "master": 7, "match": [3, 5, 12], "max": 5, "max_concurrent_request": [2, 9, 11, 12], "max_presigned_url_ttl": 1, "max_tri": 8, "maximum": [11, 12], "md": [5, 7, 10, 12], "md5": [2, 3, 9, 11], "md5_hash": 11, "md5sum": [2, 9, 10], "mean": 8, "mechan": 3, "merg": 5, "metadata": [2, 3, 6, 9, 11], "metadata_list": 5, "metadata_sourc": 12, "metadata_typ": 12, "metdata": 12, "method": [1, 7, 10], "minimum": 10, "minut": 0, "mode": 7, "modul": [2, 10, 11], "more": [2, 5, 7, 9, 10], "most": 9, "mostli": 2, "multipl": [8, 11], "must": [1, 5], "my_common": 10, "my_credenti": 10, "my_field": 7, "my_index": 7, "my_program": 7, "my_project": 7, "name": [3, 4, 8, 10, 11, 12, 13], "namespac": [0, 12], "necessari": [3, 5], "need": [3, 7, 10, 11], "nest": 5, "net": 11, "never": 0, "new": [0, 3], "node": 8, "node_nam": 8, "node_typ": 8, "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "note": [0, 3, 11, 12], "noth": [3, 6], "now": [1, 8], "num": 5, "num_process": 11, "num_total_fil": 11, "number": [3, 7, 8, 11, 12], "o": 0, "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "object_id": [1, 2, 9, 10], "object_list": 10, "object_typ": [2, 9, 10], "objectid": 10, "obtain": [0, 10], "occur": 10, "off": 5, "offset": [5, 7], "oidc": 0, "old": 3, "one": [3, 5, 10, 11], "onli": [3, 5, 7, 8, 10, 11], "open": [8, 10, 11], "open_project": [2, 8], "openid": 0, "opt": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "order": [0, 8], "ordered_node_list": 8, "org": 10, "otherwis": 10, "output": [4, 5, 11, 12], "output_dir": 10, "output_filenam": [11, 12], "overrid": [0, 11, 12], "overwrit": 5, "own": 0, "packag": 10, "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "pagin": 3, "parallel": 11, "param": [3, 5, 8, 10], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "pars": [10, 11, 12, 13], "parser": [11, 12], "particular": 0, "pass": [0, 7, 8, 10], "password": [11, 12], "path": [0, 1, 5, 10, 11, 13], "path_to_manifest": 11, "pattern": [3, 12], "pdcdatastor": 11, "pend": 10, "per": [11, 12], "peregrin": 8, "permiss": 10, "persist": 9, "phs0001": 11, "phs0002": 11, "pick": 1, "pla": 11, "place": 11, "planx": 11, "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "popul": [10, 12], "posit": [1, 7], "possibl": 10, "post": [0, 11], "pprint": [2, 9, 10], "prefix": 3, "presign": 1, "pretti": 10, "prev_guid": [2, 9, 11], "previou": [3, 11], "previous": 4, "print": [8, 10], "process": 11, "processed_fil": 11, "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "program": [8, 11], "progress": [8, 10], "project": [8, 11], "project_id": [7, 8], "protocol": 1, "provid": [0, 1, 3, 5, 7, 8, 12], "public": [3, 5], "put": 0, "py": 11, "python": [2, 9, 11], "python3": 11, "python_subprocess_command": 11, "queri": [1, 2, 3, 5, 8, 11, 12], "query_str": 7, "query_txt": [7, 8], "query_url": [2, 3], "quickstart": 2, "rather": 0, "raw": [7, 11], "raw_data_download": [2, 7], "rbac": 3, "read": [3, 5, 11], "readm": 2, "reason": 10, "record": [1, 3, 5, 7, 8, 11, 12], "refresh": [0, 10], "refresh_access_token": [0, 2], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "regist": 8, "regular": 7, "relat": 9, "remov": [1, 6, 11, 13], "replac": 11, "replace_url": 11, "repo": 2, "repres": [3, 5, 10], "represent": [1, 3], "request": [0, 1, 3, 5, 8, 11, 12], "requir": 10, "resolv": 10, "resolve_object": [2, 9, 10], "respect": 7, "respons": [0, 1, 3, 4, 5], "result": [1, 8, 10, 11], "retri": 8, "retriev": [1, 8, 10, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "return_full_metadata": 5, "rev": 3, "revers": 8, "revis": 3, "right": 1, "rm": [2, 13], "rm_path": [2, 13], "root": [11, 12], "row": [7, 8, 11, 12], "row_offset": 8, "rtype": 3, "run": [8, 11], "s3": [1, 10, 11], "safe": 11, "same": [5, 11, 13], "sampl": [8, 10], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "save": 10, "save_directori": 10, "schema": 8, "scope": [0, 1], "screen": 8, "script": 2, "search": [0, 2, 3], "second": [1, 4], "secret": 0, "see": [7, 10, 11], "self": 10, "semaphon": 12, "semaphor": 12, "separ": [0, 11], "server": 10, "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "service_loc": [3, 4, 5], "session": 11, "set": [0, 1, 5, 10], "setup": 2, "sheepdog": 8, "should": [0, 8, 11], "show": 10, "show_progress": 10, "shown": 11, "sign": 1, "signpost": 3, "similar": 10, "simpl": 3, "simpli": 11, "sinc": 3, "singl": [1, 5, 8], "size": [2, 3, 9, 10, 11], "skip": 8, "sleep": 4, "so": 11, "some": [0, 2], "someth": 11, "sort": 7, "sort_field": 7, "sort_object": 7, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "space": [0, 11], "specif": [5, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "spreadsheet": 8, "src_path": 13, "src_urlstr": 13, "src_w": 13, "src_wskei": 13, "ssl": [3, 4, 5], "start": [3, 4, 7, 8, 10], "start_tim": [2, 9, 10], "static": 10, "statu": [2, 4, 9, 10], "storag": [1, 2, 6], "store": [1, 3, 10], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "string": [0, 3, 5, 11, 13], "strip": 11, "sub": 8, "subject": [7, 8], "submiss": 2, "submit": [8, 11], "submit_additional_metadata_column": 11, "submit_fil": [2, 8], "submit_record": [2, 8], "submitter_id": 7, "success": 10, "successfulli": 10, "suffici": 3, "suppli": 3, "support": [0, 1, 5, 8, 11], "sure": 1, "synchron": 11, "syntax": 7, "system": [6, 7, 8, 9], "t": [1, 5, 11], "tab": 11, "task": 9, "temporari": 11, "test": 11, "test1": 11, "test2": 11, "test3": 11, "test4": 11, "test5": 11, "text": [1, 7, 8], "than": [0, 5], "thei": [0, 10], "them": [10, 11], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "those": 11, "thread": 11, "thread_num": 11, "threadcontrol": [2, 9, 11], "through": [8, 11], "tier": 7, "time": [1, 3, 8, 10, 11], "timestamp": 10, "tmp_folder": [2, 9, 11], "token": [0, 10], "tool": 2, "total": 11, "treat": [1, 5], "tree": 10, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "try": 0, "tsv": [8, 11, 12], "tupl": [0, 3, 11, 12], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "typic": 10, "uc": 7, "unaccess": 7, "under": [0, 8, 13], "uniqu": [1, 5], "unknown": 10, "unpack": 10, "unpack_packag": 10, "until": [4, 10], "up": [5, 9], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "update_blank": [2, 3], "update_record": [2, 3], "updated_tim": [2, 9, 10], "upload": [1, 2, 3, 8, 13], "upload_fil": [1, 2], "upload_file_to_guid": [1, 2], "upload_url": [2, 13], "url": [1, 2, 3, 9, 10, 11, 12, 13], "urls_metadata": 3, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "usag": 11, "use_agg_md": 5, "user": [0, 10, 12], "user_access": [2, 9, 10], "usual": 12, "utcnow": 1, "util": 9, "uuid": [1, 3, 8], "uuid1": 8, "uuid2": 8, "valid": [3, 7], "valu": [0, 1, 3, 5, 7, 10, 11], "value_from_indexd": 11, "value_from_manifest": 11, "variabl": [0, 7, 8], "variou": 2, "verbos": [7, 8], "verif": 11, "verifi": [2, 9], "verify_manifest": 11, "verify_object_manifest": 11, "version": [3, 4, 5], "vital_statu": 7, "w": 13, "wa": 0, "wai": 10, "wait": 4, "want": [0, 3, 8], "warn": 11, "we": [3, 11], "web": 0, "what": 5, "when": [0, 3, 7, 10, 12], "where": [0, 3, 5, 11, 12], "whether": [3, 4, 5, 8, 11, 12], "which": [8, 10], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "whose": 5, "within": [0, 2, 9], "without": [3, 5], "won": 5, "work": [0, 10], "workaround": 11, "worksheet": 8, "workspac": [0, 2], "wrapper": 10, "write": 11, "ws_urlstr": 13, "wskei": 13, "wss": 13, "wt": [0, 10], "x": 11, "xlsx": 8, "you": [0, 3, 8, 11], "your": 0}, "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "titleterms": {"": 2, "auth": 0, "class": [1, 3, 4, 5, 6, 7, 8], "document": 2, "download": [10, 11], "dr": 10, "file": 1, "gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "helper": 0, "index": [3, 11], "indic": 2, "ingest": 12, "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "sdk": 2, "storag": 13, "submiss": 8, "tabl": 2, "tool": [9, 10, 11, 12], "verifi": 11, "welcom": 2, "workspac": 13}}) \ No newline at end of file diff --git a/docs/_build/html/tools/indexing.html b/docs/_build/html/tools/indexing.html index cfc7087a7..fcc409c50 100644 --- a/docs/_build/html/tools/indexing.html +++ b/docs/_build/html/tools/indexing.html @@ -381,7 +381,7 @@

Indexing Tools
-async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1718212720.51618.log')[source]
+async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1718226129.0316713.log')[source]

Verify all file object records into a manifest csv

Parameters:
diff --git a/docs/_build/html/tools/metadata.html b/docs/_build/html/tools/metadata.html index d25598c7b..5282ef844 100644 --- a/docs/_build/html/tools/metadata.html +++ b/docs/_build/html/tools/metadata.html @@ -102,7 +102,7 @@

Metadata Tools
-async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1718212720.8275242.log', get_guid_from_file=True, metadata_type=None)[source]
+async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1718226129.3383117.log', get_guid_from_file=True, metadata_type=None)[source]

Ingest all metadata records into a manifest csv

Parameters:
From 9c86813ee6facc5de7aad6f51811b5d74d8a90ce Mon Sep 17 00:00:00 2001 From: George Thomas Date: Wed, 12 Jun 2024 14:08:37 -0700 Subject: [PATCH 10/11] (HP-1458): update external download docs --- docs/howto/externalFileDownloading.md | 50 ++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/docs/howto/externalFileDownloading.md b/docs/howto/externalFileDownloading.md index 33f6f1102..b1996e920 100644 --- a/docs/howto/externalFileDownloading.md +++ b/docs/howto/externalFileDownloading.md @@ -15,12 +15,12 @@ This is specified in the `external_file_metadata` field. An example is shown bel [ { - "external_oidc_idp": "qdr-keycloak", + "external_oidc_idp": "externaldata-keycloak", "file_retriever": "QDR", "study_id": "QDR_study_01" }, { - "external_oidc_idp": "qdr-keycloak", + "external_oidc_idp": "externaldata-keycloak", "file_retriever": "QDR", "file_id": "QDR_file_02" }, @@ -29,11 +29,51 @@ This is specified in the `external_file_metadata` field. An example is shown bel } ``` -The `external_oidc_idp` field is required. It is used to determine how to get a token from the `workspace token service`. +The `'external_oidc_idp'` field is required. It is used to determine how to get a token from the `workspace token service`. -The `file_retriever` field is also required. It is used to determine how to retrieve the file. +The `'file_retriever'` field is also required. It is used to determine how to retrieve the file. -The `study_id` and `file_id` fields are allowed but are not required. +The `'study_id'` and `'file_id'` fields are allowed but are not required. +## Example code with external file download using a retriever function +The code should import `download_files_from_metadata` as well as a retriever function. +Prior to running the download code, there should be a call to the WTS `authorization_url` endpoint, + +`/oauth2/authorization_url?idp=` + +followed by the user logging in to the external-idp. + +```python +from gen3.auth import Gen3Auth +from gen3.tools.download.external_file_download import download_files_from_metadata +# example retriever function +from heal.qdr_downloads import get_syracuse_qdr_files + +# host for commons where wts_server is configured for QDR tokens +wts_hostname = "my-dev.planx-pla.net" +credentials_file = "credentials_my-dev.json" +# retriever will use Gen3Auth to request a QDR token from the gen3 commons +auth = Gen3Auth(refresh_file=credentials_file) +# the referenced retriever function should have been imported into this module +retrievers = {"QDR": get_syracuse_qdr_files} +download_path = "data/qdr" + +test_external_file_metadata = [ + { + "external_oidc_idp": "externaldata-keycloak", + "file_retriever": "QDR", + "study_id": "doi:10.5064/F6N2GOC9" + } +] + +download_status = download_files_from_metadata( + hostname=wts_hostname, + auth=auth, + external_file_metadata=test_external_file_metadata, + retrievers=retrievers, + download_path=download_path +) +print(f"Download status = {download_status}) +``` From f96098df3ac7ede02a8b3bec977907434be8a996 Mon Sep 17 00:00:00 2001 From: george42-ctds Date: Wed, 12 Jun 2024 22:08:50 +0000 Subject: [PATCH 11/11] Apply automatic documentation changes --- docs/_build/doctrees/auth.doctree | Bin 0 -> 32186 bytes docs/_build/doctrees/environment.pickle | Bin 0 -> 1578985 bytes docs/_build/doctrees/file.doctree | Bin 0 -> 41173 bytes docs/_build/doctrees/index.doctree | Bin 0 -> 5436 bytes docs/_build/doctrees/indexing.doctree | Bin 0 -> 160865 bytes docs/_build/doctrees/jobs.doctree | Bin 0 -> 27688 bytes docs/_build/doctrees/metadata.doctree | Bin 0 -> 145533 bytes docs/_build/doctrees/object.doctree | Bin 0 -> 13054 bytes docs/_build/doctrees/query.doctree | Bin 0 -> 41173 bytes docs/_build/doctrees/submission.doctree | Bin 0 -> 108415 bytes docs/_build/doctrees/tools.doctree | Bin 0 -> 5251 bytes docs/_build/doctrees/tools/drs_pull.doctree | Bin 0 -> 130160 bytes docs/_build/doctrees/tools/indexing.doctree | Bin 0 -> 100291 bytes docs/_build/doctrees/tools/metadata.doctree | Bin 0 -> 35929 bytes docs/_build/doctrees/wss.doctree | Bin 0 -> 33818 bytes docs/_build/html/.buildinfo | 4 + docs/_build/html/_modules/gen3/auth.html | 763 ++++++++ docs/_build/html/_modules/gen3/file.html | 397 +++++ docs/_build/html/_modules/gen3/index.html | 1138 ++++++++++++ docs/_build/html/_modules/gen3/jobs.html | 369 ++++ docs/_build/html/_modules/gen3/metadata.html | 1156 ++++++++++++ docs/_build/html/_modules/gen3/object.html | 188 ++ docs/_build/html/_modules/gen3/query.html | 344 ++++ .../_build/html/_modules/gen3/submission.html | 895 ++++++++++ .../gen3/tools/download/drs_download.html | 1565 +++++++++++++++++ .../tools/indexing/download_manifest.html | 645 +++++++ .../gen3/tools/indexing/index_manifest.html | 753 ++++++++ .../gen3/tools/indexing/verify_manifest.html | 551 ++++++ .../gen3/tools/metadata/ingest_manifest.html | 655 +++++++ docs/_build/html/_modules/gen3/wss.html | 327 ++++ docs/_build/html/_modules/index.html | 127 ++ docs/_build/html/_sources/auth.rst.txt | 6 + docs/_build/html/_sources/file.rst.txt | 6 + docs/_build/html/_sources/index.rst.txt | 18 + docs/_build/html/_sources/indexing.rst.txt | 6 + docs/_build/html/_sources/jobs.rst.txt | 6 + docs/_build/html/_sources/metadata.rst.txt | 6 + docs/_build/html/_sources/object.rst.txt | 6 + docs/_build/html/_sources/query.rst.txt | 6 + docs/_build/html/_sources/submission.rst.txt | 6 + docs/_build/html/_sources/tools.rst.txt | 19 + .../html/_sources/tools/drs_pull.rst.txt | 7 + .../html/_sources/tools/indexing.rst.txt | 24 + .../html/_sources/tools/metadata.rst.txt | 10 + docs/_build/html/_sources/wss.rst.txt | 6 + docs/_build/html/_static/alabaster.css | 708 ++++++++ docs/_build/html/_static/basic.css | 925 ++++++++++ docs/_build/html/_static/custom.css | 1 + docs/_build/html/_static/doctools.js | 156 ++ .../html/_static/documentation_options.js | 13 + docs/_build/html/_static/file.png | Bin 0 -> 286 bytes docs/_build/html/_static/language_data.js | 199 +++ docs/_build/html/_static/minus.png | Bin 0 -> 90 bytes docs/_build/html/_static/plus.png | Bin 0 -> 90 bytes docs/_build/html/_static/pygments.css | 84 + docs/_build/html/_static/searchtools.js | 619 +++++++ docs/_build/html/_static/sphinx_highlight.js | 154 ++ docs/_build/html/auth.html | 229 +++ docs/_build/html/file.html | 278 +++ docs/_build/html/genindex.html | 716 ++++++++ docs/_build/html/index.html | 388 ++++ docs/_build/html/indexing.html | 635 +++++++ docs/_build/html/jobs.html | 237 +++ docs/_build/html/metadata.html | 650 +++++++ docs/_build/html/object.html | 168 ++ docs/_build/html/objects.inv | Bin 0 -> 1894 bytes docs/_build/html/py-modindex.html | 163 ++ docs/_build/html/query.html | 253 +++ docs/_build/html/search.html | 135 ++ docs/_build/html/searchindex.js | 1 + docs/_build/html/submission.html | 555 ++++++ docs/_build/html/tools.html | 226 +++ docs/_build/html/tools/drs_pull.html | 614 +++++++ docs/_build/html/tools/indexing.html | 524 ++++++ docs/_build/html/tools/metadata.html | 259 +++ docs/_build/html/wss.html | 256 +++ 76 files changed, 19155 insertions(+) create mode 100644 docs/_build/doctrees/auth.doctree create mode 100644 docs/_build/doctrees/environment.pickle create mode 100644 docs/_build/doctrees/file.doctree create mode 100644 docs/_build/doctrees/index.doctree create mode 100644 docs/_build/doctrees/indexing.doctree create mode 100644 docs/_build/doctrees/jobs.doctree create mode 100644 docs/_build/doctrees/metadata.doctree create mode 100644 docs/_build/doctrees/object.doctree create mode 100644 docs/_build/doctrees/query.doctree create mode 100644 docs/_build/doctrees/submission.doctree create mode 100644 docs/_build/doctrees/tools.doctree create mode 100644 docs/_build/doctrees/tools/drs_pull.doctree create mode 100644 docs/_build/doctrees/tools/indexing.doctree create mode 100644 docs/_build/doctrees/tools/metadata.doctree create mode 100644 docs/_build/doctrees/wss.doctree create mode 100644 docs/_build/html/.buildinfo create mode 100644 docs/_build/html/_modules/gen3/auth.html create mode 100644 docs/_build/html/_modules/gen3/file.html create mode 100644 docs/_build/html/_modules/gen3/index.html create mode 100644 docs/_build/html/_modules/gen3/jobs.html create mode 100644 docs/_build/html/_modules/gen3/metadata.html create mode 100644 docs/_build/html/_modules/gen3/object.html create mode 100644 docs/_build/html/_modules/gen3/query.html create mode 100644 docs/_build/html/_modules/gen3/submission.html create mode 100644 docs/_build/html/_modules/gen3/tools/download/drs_download.html create mode 100644 docs/_build/html/_modules/gen3/tools/indexing/download_manifest.html create mode 100644 docs/_build/html/_modules/gen3/tools/indexing/index_manifest.html create mode 100644 docs/_build/html/_modules/gen3/tools/indexing/verify_manifest.html create mode 100644 docs/_build/html/_modules/gen3/tools/metadata/ingest_manifest.html create mode 100644 docs/_build/html/_modules/gen3/wss.html create mode 100644 docs/_build/html/_modules/index.html create mode 100644 docs/_build/html/_sources/auth.rst.txt create mode 100644 docs/_build/html/_sources/file.rst.txt create mode 100644 docs/_build/html/_sources/index.rst.txt create mode 100644 docs/_build/html/_sources/indexing.rst.txt create mode 100644 docs/_build/html/_sources/jobs.rst.txt create mode 100644 docs/_build/html/_sources/metadata.rst.txt create mode 100644 docs/_build/html/_sources/object.rst.txt create mode 100644 docs/_build/html/_sources/query.rst.txt create mode 100644 docs/_build/html/_sources/submission.rst.txt create mode 100644 docs/_build/html/_sources/tools.rst.txt create mode 100644 docs/_build/html/_sources/tools/drs_pull.rst.txt create mode 100644 docs/_build/html/_sources/tools/indexing.rst.txt create mode 100644 docs/_build/html/_sources/tools/metadata.rst.txt create mode 100644 docs/_build/html/_sources/wss.rst.txt create mode 100644 docs/_build/html/_static/alabaster.css create mode 100644 docs/_build/html/_static/basic.css create mode 100644 docs/_build/html/_static/custom.css create mode 100644 docs/_build/html/_static/doctools.js create mode 100644 docs/_build/html/_static/documentation_options.js create mode 100644 docs/_build/html/_static/file.png create mode 100644 docs/_build/html/_static/language_data.js create mode 100644 docs/_build/html/_static/minus.png create mode 100644 docs/_build/html/_static/plus.png create mode 100644 docs/_build/html/_static/pygments.css create mode 100644 docs/_build/html/_static/searchtools.js create mode 100644 docs/_build/html/_static/sphinx_highlight.js create mode 100644 docs/_build/html/auth.html create mode 100644 docs/_build/html/file.html create mode 100644 docs/_build/html/genindex.html create mode 100644 docs/_build/html/index.html create mode 100644 docs/_build/html/indexing.html create mode 100644 docs/_build/html/jobs.html create mode 100644 docs/_build/html/metadata.html create mode 100644 docs/_build/html/object.html create mode 100644 docs/_build/html/objects.inv create mode 100644 docs/_build/html/py-modindex.html create mode 100644 docs/_build/html/query.html create mode 100644 docs/_build/html/search.html create mode 100644 docs/_build/html/searchindex.js create mode 100644 docs/_build/html/submission.html create mode 100644 docs/_build/html/tools.html create mode 100644 docs/_build/html/tools/drs_pull.html create mode 100644 docs/_build/html/tools/indexing.html create mode 100644 docs/_build/html/tools/metadata.html create mode 100644 docs/_build/html/wss.html diff --git a/docs/_build/doctrees/auth.doctree b/docs/_build/doctrees/auth.doctree new file mode 100644 index 0000000000000000000000000000000000000000..974418d02ff837fb10ce42f9fbaf89a558056cd0 GIT binary patch literal 32186 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..be6ce8d34d50b316c78c7262df83ee2695a4ad4b GIT binary patch literal 1578985 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�BC=5jrR{|~i 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

c8gL7zVkcUm3YKVvJ0ku= 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�--{VTEayXCacD_3lAZ`p{HZX;Ws+)cDw|Y8u}5+uj>#<_- z&Q8gBW>!`p{-XlhRZq?NTqUvyPxUj@Xj&>C=8=qRl$La?^65*>`KLQxhQL$t zN(uanQ?QEh5(2-U;gw%i7kGCADp$zgIf&}R1wN)sLg3Sc$rAXCI?qV9LK=@!>T~%J z!dF+H|Ib#451wh8A}2v-UBmK4UDH;dF$Xf2yeo~0by&lvr~GV%H>Y3~<0Z890ftw8 z)#YgGTL62ww#Jl6Xlt4)&8_ z;pLS^B0S4EG%DInBCZSm(4beCKNXS_I+aEz_;i9ARpOIMJgAnOaDQp^mNA#)BqwAC zH|}HXDz+;^2wqpBst^LAXeA*iwh|&aK?V*hB`3&GuVQdUasqRs3z8G)Jx@;f1V+Y_ z6WG(TlM{*u&J!%`m+)ne-QwE;$u>3jpJCvlkw(i5f~;#*=ru?F^D*-5X(`Ct6NA)` zCMoG*hK^>G{Ntw4wgrGe;<2T@d?4D4gAZY+*RG#NCR@AzK(qx*U#DAdc4fl2zXoQS}tsTpau>`v{5n!b~G#+65;1`K(jg$SG^``^`o&~xG?jg znZUvGCCQg{%lAFMZkwHE%kseiLbVY>wm9WAC?gC?KblUxNr7;G21SUraJUKw+4_>? zi&W$2d>R8}FR($P7RJ<%Hn+^qVh@M7K=CGiueCb;=mH<7QT%4TX>}nv=*D4$9pxG5 zL=mS+*GZE=*rU-F9CY*WeI8j9t#u%7o149Mw;qcm2+IoSIEs(U?TB@gtb_?WabFd6 z1FP5c>ZjWzQ0L?5ix*h914y-GQql zjuz89yxT0QvAdCiKJ&_ddsJCE#M77Yl7vQeDhTN^XQsrE9n~~r?Ut_WLJas zUwZzoXiL}Xs;p)j%mkIpo4}n^BYL(ShTUM_-n}ReX1ix_Rlh!vB!p^(~J?ea5yb2IQDq{nMGodw8% zunXJBPz1gCR5hnfvP-vIF=fO#RG1`)OncsHLW9o$1KYAf^l@PWwNBKnHttHSo6RQK zU552mf=nC_tkwdzX%9y0tj@_k?%s+va%%$hg(TvO&$x~Xau=FDZV6_C+X|#0Ss~0V zVBio1S@URHqO@bS(G`jTZ6W?KN*dH;#_Yv|fqfY! z3-%r}+J5_pdjxl*xwq0E`p~RPAEI^XJ3cOb=f|aMh+Vp-*rkgiT)IfYrQL3qcEfwo zW}Wd2mCX%@=N6N&@e}s&y(Y=qBFXi5lkB80DYO{q&CmW10K4g2 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b97c09ddb910dfc711f202b945d144b12f15c8d8 GIT binary patch literal 5436 zcmds5&5I;S74Mnus;=sf>W|$X7G`?QaX+S4x4M<}AOi~GE{oetvy6j#5Y5TTjH<}$ z%#56f$nI)ESPwgFLx6`(4<1BN5kUp@tp9?4fQX2KXa58Jy@<@J?3$UL-h&q#s>yiq z;zh)JzxNd%wtn=*odx@6HdM~zY_cCjQ6?g$O4Er%Sfnh|@Dw`Zy(-KUVVyyMBOfFJ(e#$U=uo+dHpG?{_)|DpIG-%>8{Yu0~}bFe9LtG zT6W17O}o0-ky%ROjFm^lATTR|)-oOx8VVr=EXI+-WzBM!1WJL3?^YJ1?yD0O`D`!< z!ehyX#8a4M9gJwIaLAV{Hrba7mw5T`dNF`Hy0}#^l0nX!8vV-y&b<5YeC_Rf?|5l79wJxRIe&qHqnSDWXYyyd z_{yi(MZ2MkE~1u5b5Ueb!&O{d;tTLo5o*brfvK8%meTo6)3P3ksDQvCV;c+h5JsR* zUOq1IH3a7ESI2Tfla4+X1Lf!`93u*JU`K5+7$bDr@7AM&$us-8qKZKpD@7rd#J02$ ziCe#Ts_286wKxltB4V^7MV>wWUH*^{c*KXC^D$3&#&c#mX)uXcj`O|uAN(Pn1-T8? zIP549gYsk3=5Z7uw4a;xO6HW%$%=HqB#X+!1+!uUxe{4&2Hq89h?y1$kndN3?7#^3 z=Fw|5Dt-4)5xjCH%U~YRhqdvX95?`*I)HiQ)a8u61MXXW3Z1Hd0pJi>`H6Y8Vy6^C zfz|{2lPM->`qK)wUv!YOens(iwf3hvoo&_xv;B=MibIA_g|Mk9RH-^tJ#A_R>mObn z)|5d^<48T50#*k_k}&NjF%m|D{d1 z3uY~6xLG#xC*W@gs2IAY9cMOgHnw(aZ{V+m_?-{coqKlX;U^2 zjo(2LznzCvlgYHP4qzzxw^6&$XNm+@@;{knjPzNKI%bhXn^pX0lRSyTSOdm1eHzFN zen9Jx*G5dE;F(^8kp1fl*_$}VuP!@AGcFVJFP_KzvxelKlA>VYpHDGXnJg8s2P%Ol zO!hZxvftGF+>L)fH-=ei2@SLS>k_l@KVHcq|GeyW&$7tBuWk|k=f=sKcG!Yy|9;u# zO*;_tU!TWZ+ku#$w8Oe{9mN6}@_8$aH?J)$Tr|XtG_}QybOQyb6*M!(_$3lyE5)Z} z{=KW&W4r??mtFK3CK-Pg>pqoL>I*b&vdwRfx1V!>rdf!;cLo01GT^T*GfN9~yszW9 zX}j21nrol4Mbb|i{$(TSg`~0#x1t!{M-1;*F?^Oo>e*(5zcgbYJYROSs_o!!nisVU zGUdu{KbK-88L~RH9mw=3$X&Lrcx>`5NOjjtFDxWAHU6}PS*t0ol`$Pu@R|y^(ri(3 zv~3#dyG$dhm!|!#ASsZk>ey}CsK@g{mq&c#$aE3)s3a5;MMoD^3PYiv<`}F>AvBJP za$^GJ9w3goBOnW9$6#2ghJ{QpT1T??sV$;e9Hm8-!dYpyhY*tq%^H&*n{{d*QEB)S zYC8~#dsKwxKFT-hN)-g&bQG2_OYx~6@$1$M`&A37UhT-NN%T1qIg*_)sPnp6;XyJT zw#*ir#L%J+bfIddmT5(7P>ir$k5U5VK*(i53Q89y3mILB&KGCUna?tm#8l#$ZlQ<$ zFZWf9?^_oqeI})lJ_p1SR6THh+zln4*>IX~NNHIqrP-aEnG-So9{Fp}$(@~{UVZE0 z#N1-DNp}GD6o-lu+^IC{Nsx_-V8o#D2;=K02F(kSg+fL?ibo&^+fccCWZLK*hqxv* z5=S*4c-!=-rSNAYb3F#!)}tcL{V61&SWAe3MwtaDX^+f?rC5g`>(5BJVnrnUNlJj) zM9LP5`OTFUC873DVih~cZun8Gs1(CRs#7l4t^&7P!(|kl!*)Xux?ZvQbq#H9&=)pQ zOj3~y+mN&fCSOIlI~^WgGh5_uKu$IS5R*7XF>!D6j_Ktr_o>2wmm;uW6O>aq(2lc{ zYnYd~*15WSZ~(H}cfJ3i`qXT;XwJ&@L`s~SJI47PcGx4w2 z;;F?T$R0DfA2U6)dmtbjaGfUDtc!35FN)9@9CpkuFq!&O=bT=^S2-c%+-#~dJQ+-U z9*=l}AMm?G4+EuHQz_m8{6_`6T0v1S*s&Y>i3kJNo|xT`Z#2gir-a=^1kM@hRp+<_WYD@q@Zd9?fHPEe=Vm7a z*Rjt~940;)x8&i3~9sZfa+FyY65+ki0*rjpYzA#d+_t|dz2$hm*%L9wP}K% zpWDgvg5RbWg2#N#@^Mp`^`;fA+;vpC7V?A~MDX6vu}LFIYVth-3;3%lhIR zamwAjAhBETY8P!^kZ+%lN_f%EysT;l%_c%gh~6D|L9Ph}Iv)2l1U-GdqJILdeN^6u sTi{U)4u;1$1tho)rxE1>d38#*#$2r$UVvvrFMKNz1-&XhxN>~|zXQ4@;Q#;t literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/indexing.doctree b/docs/_build/doctrees/indexing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9a70ffdb7667d9708b3efa03cc2ad5a597d24b8d GIT binary patch literal 160865 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/jobs.doctree b/docs/_build/doctrees/jobs.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1c4d1a67523e059b5c19f020cf1cca301fc8fef1 GIT binary patch literal 27688 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/metadata.doctree b/docs/_build/doctrees/metadata.doctree new file mode 100644 index 0000000000000000000000000000000000000000..17fa5e908c6faf1cc759ecc6435bb0a23e533024 GIT binary patch literal 145533 zcmdsg3!G#{bvL{0>|^%DF6JrrF>3sxNg(+8lJA_VQ@0*nx9+X( zo*DA_liAyK>v8IwQ>RY-PgUIm1MfKKpm_)3|Du)6sdA;ZZ=_Hv)#|07IUOx7)r;-P zpw^ncb9&=zr*D|fM@t%oz0G>NQ4FS|gCIw-T&b2CL2Y{XbhHAqw<^`<2$f&d42rEv zy%rZQ50n>{7ww+TmzP8XtxBsJD6gVJF9>Q|axV*7g;Jqa$emj)G@H|y9da+&73@PY z?3r$!=F}~mDgZ65>GG;*$!JV``QT_F(Y!NSP_5L0>7DJdLNr)twHlSNb_@E7eLJ{P zYGOYY6|rSVgy(@;VUj;BF14rRkFi4W+D0&rdD_vUR$&5PO_x`e*Oix*k18Kr9*VYa zF4rf6&5d@g7Bn{Rtv9aSJOLeSmag42wZB!a*UX*xgJaLnL5>u0V~ z%OPDOqUDX#(UDrhh+1m8yl`i0y3j74T;3!*yR&>WuoMVg0E$!Wpfe9|R^Xe_W(7Fa zYBw~&PpA##gIZ~-Ua7UV?X1^=;as8JDvwSz>U%1sph0QPps}Y?3`VQGaxYfR&ggbp-ZY%yl7VPs{{fk=pLO9M|== z5j@EnE>~+PXabMs?VT>DQb(b@0$Xj51zJuuQ?z8?WOXa+2aMmTMu5x=rm^fxpzL|1 zy=7nRMU|1-JGFl+sx#xe8;Fle>hGYtp(*)n!4co+#;j zt&7gZNGB(9F*cP<-%VEfRx|p*A_6yCL8Dp$gQ76?Dlts@KF(-3h#?j9J)leJW@aTJ?rX?YwQGRd|xk zJ?Lt#-r3v()ZCJ2VWr0AAw?bw(Am~=OH0bo3??zG7y!FR`bmTP%Lzl>Db z!M{)LVEO(IBZqSPTOjG9adQb0`mv+h&vaCa^1*5!iK}%Ae^vpP6|gRXX>mFlM0cb<7Q&KlTJw^kg}nXgXu0O60Rh|{ zE-#E0kGHE;Hl+hKgQKl_5qZ~YPKS3P4X=OWG%VOKmGa;Ob#8fxGZ098F`6Qi-F&UET4|M+;cv z(fq0X=)>>d#2KxL1qJ*utY%&K0Q>_B-sB~L(2wvo$O&tF)RxIYr8XUY4igqZLTmpN zs4Ph|S_&z_zNu=ZSOK+X8TJ+$HF#VC{3U&0vPJSZ!%-1cy%oJiLO+az4n?!O=m5^3 zd|i_-()N3dw(xQM2Yi1h^&Wg=3K{-BJjUL_ncH(r5V`Ss1D4e&a=<@e0kpT$D(70| zAcu>CT)Y6MdAT_vEMfN*NY(j!BCb5d2XwO7W#?v}@sfowJQgK)zzf3(WNcVaSnFyYKEZBvfk|cf1i}Y7v?segA{3jMYuBl_P$Lgj13UT0_w;D_wn)t&O z)&N2ZKhmKnVCYyON#p*^G^)-acRwwzAY%s`5}L!u8fC6yb1EoS#$m?4#qBSmFqvz( zF5Huu#7+%>s7%;^^6Ka|BPLjC3fth!Pjd>d#;mb`uz@Ryz_dnwn>QjfQW!^N-DSjb zkh1$gh|q=@|FUJUSbE8P_$Fu|S`yoCbFn5odzNhxtUS219>h`%XI6jL>YI4v34Ht- z1Z6M?b!)UjByYl5Wj~}WqnG0MD#$@=v}T-XWvwpKL_Vwu+iM0bbd>oD`fO&<$x|aQ zw(FVhbPb2hJl#2_#SyK>9_Bm)3}yC1PJG`)J>gc?$SB9{Ut^vwXTPt(mAp zqp-FEgDf-1Dr_%t29YHt_ts{nu$O5>wj4&#ms`Ty;4k;WZpYrf9t|eV8i!`42n*@U zk~JXDl~7(C6^>a0Ic*waQz-hZferi`DP~ZDd!0_RhR`psSwoB#sRuC9%~|7k=xO4t z5q<($j9J2m@aZCa`egj{C-8J@_%QqXDfai%?C)pT-#=x4{|x`)Q0}XBKdsQ*Un`En znhzH0`HfEV4z6ywUV^2}2FFrHt*-~uzFRkfDv=ZIN@+OuyJ62lwSvebMPciEg2vtk zpoQDc2b=)5Ka4h;ReE>QN!J3%HqjLO7%md#McuQ&I^eZuft64k)*=X3om9%Z;&$wN z6vAtb5{4?jN{fY|4!|ab5Sua8P#rH~r3RZ4!qK>as6AWz5=L}Y;8Fj0dWIQ95vo`Y z>50-X9*F6;O)KtIs_c7s6IR0sxg(azIlU_sBR{VMco$%uyi+owt0b(BbVYuR@~?WiT&E(rLU{s{}nHy$^Il@BO{dyG$ME#BoXVB6=${ zDgG@>?P3LV&2Gj)}9~mD@!?l}iyg$HYtBO?U}_x7?)w77OQs z_%E3=|D=-y_wiBkK5)}+XHS9iUK+lI+@}#uh@Y~Vrn?!th8=6~|A0sa9(Dsq48B}!9*x7WYLaBl zXT4ZM(8Oo3P%Lt=$Qm>e!|_YUVCzWGvcvUwkYEY!y%~ii)1(56^WqvL9vy*RZ7vUZ z`NrI)O*!@pRHWVH+b-EAb=s&g3YqGFN6PR3dAx+kneOjDdNJU8n0sCLUHAv)p|#Qc zTwbxOn5?e9YzY2A(IJA;U~;NlXjYmkt#M4C6YBpjqjtluFtqq-PU*ihN|Uqp0Oy3i zfVx#62Q5n20p!HInzzxxD(LP&?x_QJDjVn-msNH`o~5ejr52lvmp0P|`!KL*UHCUC ztU+7wIOG9&f0JbmzYYHgkJ+ZC*Tpfp{EkYo#dNg<4{*)_<8qCF?b(No1h}!J44V)3 zR;pDD^X1x8xkB!uS6s3)2Z8f3Jl;|$mSJ}RC^>FE5y89M1(&~MN3PJ+tztfWLLp39 zG?B{7WtHUE$bhb@$r^%eAhkaU3R%=1lT|rc)INMhrEmdqM;LVeLsE9GQJb4GQu7xx z%969HY920y%(i_{_TX1|9%N5f^O!f9nwzY#sktT3D`!}1B)84RGmV@LDctrSITyt1 zwp@O!Uat=4>QijkRM{ZfTLuI$XyjmX7RIt+RLK0nKA1#sMB&jhrc}mwP*#96Ae0oz ziC06XR4qJtGbt97N12<&t`BG?Z}*;|d;+?3IXh!|zbS$i1~Z-=_m zM+E1MKJw=e$7iMRQTFkJ-Sm-K=!}!=jV>0tBp56cBmob1L%>5b$mCCZFc}n3GdrgK z+02e5&&KTIOft@_CzAzfrZCRmf}Dn6LoUxx9twdc7!U9pa{`($jD-`k_?efE(4_gV ztg9U+0+anrgyWP^xL~1PTk^O^&XS3k2ZdZ9ZZ9TcA=I62A~}l?TzFXDM+b9K2vIc+IA({BBySCp|i};Cpdk6xbmxy?Y%JaAojYGh5 z5$wIoutw>@-uDC?8RnG-Lu7OFxY!%+(2~0oCJG?bnyBGJnDTwtk$E$Y?>$h zLHkQ-&pr|N%RdM#c@lmct1*MX>(dp9FKUzksuItYaJ-V(8RY$nvj+)5-bbO3%XX?k z-Y>Ac3XO3X)QIuw>2P#Qgij^ApX!F#Cwd{a+aT7jx}o&HIICow#(n}iT)fEX)7hgm zRC&fA)>?NHUO_D0vOY=K3e3m^bcsDiq*YZW-`lY7aISX1Kg0tN}VSD-`xP9Na+ zy}C{4#e1NT1@gyaKlB3oC;Y7i?1vP{!$xg}V`?ZZp%)J^%969H=!NHbm+;e2w~Ah% zdFhO7#k|q5H6ux2B$3c%_MBc-)rfTqML0(TwM&*h_JUOSr>qwp030T( zb){qU?4}4J4lbjEYa=9O1B>ozk0sAK z*GQEbV3y2eZhp*0pL;lXnwwcb`kP)dAwyGVTGwG{Fxk)0xRCx^jN06sB|~#FqbxaV zFNWsLP9rZCFi136CYfyLcna0_mQ?;Xgo!}4$w2VA7c_rV!1hYmXcV`PF< zh97w;1KENfus+&Yjc-(Q0C^5iB3Tk)mdeEFCw&?1u9ZS6@62G)DWrmnCKq^&lBST# z>sZ$GRo7H?~ee@k8+vqa}`vfab>X?=GT7D`*+X?F&l3|E&-!F4f#yaT2Y zfW|f11{GTDlWQzIDz7rKN2hr8h#dV*P{`$7V&_Rt*!e!oX(^Xej%}(UQ>&%P-o4DL zcOBrR>vXXuv zv%U1gZAd6IDgYm^(5S%Qr0gxBQMOicghuf_4~@P9dd5Se>}l>oqi6B}RVjcS(*ciT zWetpOnt-F=&cLWzYY$=3?H0^bty&F=&P7P{0T8A(wWgkb{iIRC7&!KjC^q974I(av zA<_He2BPa{IV7q|rZXVAx>Mi8BxQRgjo)K&kNkt7k{jVyuo^QM%205Ms#_I^k=WaL z*C(CyCxk-32Zda7sSr5^x4z5rDxuH;<^*u=%E*(N3Y*_~9?9lkc0=Yfy^z^$5Omd` zKI)7yWRH+7heCiWrv^cfaaV4S@=@g(gP@z-O?U-CdCSSOpHold;sgDqyuzHslYHm9 zX}7cI9L{^GiX!SsZkqThm2sE58M}yiGd{d<=hcItR#P%_LC|ATroQA5s3f!_1o{CO zu04i8Uk#GsA<);slNkcFS#l8owS{%nDMJZ=3R?}v?So{NvV=dMr-wgzs~B0BxZ0hiJtCo>_UbhuI-i6>mPjZjt3Ib?IjN(bj#$Unjk=7P)X-PLcE8H#O3tb- zL4D((--No=H7DAb&Nyhy84Y$c8Dqo3EP1+#gPPSO&m)L=(DL`=DSX4M6qtCBWlfEP zKA-t;@|bF&3in9EHa;H|;-xTj~(NbOOlEshR zAPqhk3RyH5ll!H?M;Udw=^_n2g3*@e9&b)8pwl#SYwH4-^X${R4s zlC$=rydl(`uDqN#`XrMWT0789AE|}Dgx22P4FR{$Ad~O(U@|D6W+6=dvsnmBo=l-N zvs@;V@X{1U`J03p4Xyo!mokto_!8@*jn()@H3yIv zkUTo!E)WtWO`)}WxcicNhiM#2BOD<9E$6BKF*uxT_pp6hFZ>1zrL7k{LTj{;WNwuF z%!E6%W|WaVI%JuyGwvRd@3| zGNjA07J?yZ$t(#zCo{o4OsqB%(&yQ;GYFmZ00ghln!t9X z>@A@+=6^dvYxtgr*4ofB9$I5ha~E2pQ-|CHh$CWIgKO!h4)uC_2(O)$f-we73b4gj z?hWU}#+MnsS@w32r8cvsM%LbGlrZe7J+g+)xCVoO&oQ$0=D2}bKfho~JmIjRnT=lw zPsdV>m(l|MQQR;8_?qNNct2KS#@EL`#H?-x-Rm)Cbq>ge$E+@b zCo^Vcw~r!fWjnT~n^GliC2Sx@RA|U#iCb;4#;xE?R)(NeS7oK~zs#++Mg)K&R_xub9=W9p8JMSGNf(xe*FkAb(6&-8sub zO~(`Yi9K3tn#cFq=K%*Lj*B7`3@6BjtUPQI?!lRo?K!kl7<*^+U*>uDqN#`XEgN{eROXUd)ui#%g?{nghs_0rWRZWn%O;Mub~=HQVd1l|cV?2JsPCh+d2fA3;eI=wD!2 z`*NPvtpG1(c$ z^aocO6K5)>zuG8a3=2D^kIlGrT>y-T=`V~Mh#IqeT87Ei1oD@}N+iz4C@B)P*$|WM z582BuhbLk+vkKX7a}u5a*}nh^x%_e=P=xHyV0rrh*iX&kf(* z@%^p5{{5d57$R@`N)(uF{bMMw{L7eI+V8IsDZ+6w<~0MrB-DMbCMaOtW0G}Oz{h#b z8|P9tda2jq(NaQ9l8pH$FUHVH;`>-=NX%w1RrCvLPx}g#zJuO*7v6t+b&N2GUqK-Y zn2yOR0FjDEI!=HbdWc?^TN4Q=I|K^3CS-Nd!K+Ia!f0^qTZmSeJ)b~?Anzsji1 z%~{gV-Hfv2tg3#7dC2U6mXAU9bp7PK$%vNk>!y#?LSNAGTe~6PjZi475%6X5TRfNy z3aA+YQ~zv6z>+5uT5guhWD<6yFiJtoxk+%>N+9mPXD~Db{^0!RS`aHB?)SJ&N}bT- zo!T^;$G_!N{xvV9qN)5bER;5tYas67@g22zu($JSEn+$V(3L6MGhS1jeBG)xA}#^l4&7tTnZoZm*XEH7;YO%sG{aMLt}Rv12Fw_E`d?P7_xRW7MpR60f8MM8hcgTK=kU_M`MLV zI{8tY%hG+P66gPe5rSDC9DsLePlP-ooTbr4 z((-0}c;U{gqqNq+IddrO(e4=}8LgFccA&MpfU7;CwX0Tx5AZH$wX@{mQkR# zId^{)^maeWo};(FO=^&3KlLy}Z{yFPAY_|<`;T8CY2}ZF&Z~HbF)P}!+_|3Kzy=>p zbkF$q>F0Sdh!!AQu+Wg0`(R?}7p6OF+ovz}>Na6&FM~oB#21rQ9kVR4bgap_eR|xe z&8@M7sTCPz$yrrQ%@^}6L*42c4ed!M<{R@ygL_QY*x(*Zo^G~Jo7E&w8On0;q7=R< z=+6Z#>vIASem9V!DqOPMk$zI%cQN`w06HLy$!cBc%In%b{c)oHPj8=;jK)PZe1t+cw>gFq#wv^Fa2V7b{>XdkcimoEHa# zkMB8z{|NMqL-_1z?jZcrIJ(-NDivBm*1gjkQqg-}Uk||jRTh|nh~zt{MdUI5D*HBc zT!&$MSYsmCc7CDSgdekib;@@^u-XKhy3P7Yql7Vt?7%)Y;~E(PZbV@J+i?R?dzOKH zp#~g4KOnZQMaxvJ6L7wsC}*Mnis|=9@@3z{XRsO*$v?X{W#V_aDp0zz4Nan~N@C}? z+Ls-sD~ut2JHomc3c0*}A%2AW7qGkvjf=(5;f$Ab8ZY4cSaD7%jpMtaH`fcj%gB>q z1DrT6iH^S;DmFt1zekdMRyQP{$=Q|~r?|*nxgCh7$}`3(u5>ry6{p}WC(n~k%~`4# z*A77pu$Nq?;0qW0mlVQv?oQbCd@`dDZgN*{7Xno-g)qQojkpK=m+Zl9?nb=Cz}xOp z4BcLY^at(^*hTPr8Ab33cja~wP~}nt&h3a_a5v#40N!$!0_Y-M_xEnv?d z#J4)g)`_1|M}O>Y#x7#sj1Mo|dG&ambqb!jc-;|+j$?ADPLkLWs{00b4LyeHR;~eG zpM~lUhbJ>sr+YmjO1Cbt7fOImcr-A{e~WyiECISa3((n)S8#W&NaLmHYnQYh*EhPl!!W7mh5c+v6Yid;OIa{{+f36Ws z0o;k7)TmA5_Ld8++};Y@&lc25x%O19kh|y=m+Z`qRqJDeg;uLjEC(h0+y;JUXsS`) z10Ulkl^&eKWVNnTC71hr zp)PY%?;jhrxhW$xe}GYzoK;oxa6e@B2+n;RvZt$g%o|P3P1e}d+>+;&Gpsdof-@V> zG;-dN!fpSNb0IBvbNOne*}57&rnGxFSD)fv#Af5@rI4PhkBfK!jtrXTae%OKvA5DH z^Yxs5s4m0W`bW?sRfUr^Nf{15U~K3Z4w$Ugl|CG>&tkAHU_YdQ{;yG+n=%>>zhaan zXYFM;{14QfJ{&l2v{-d`41PqM-zPlpY9*StX06V!WV(_0)J19_EmZB8PfzHk+4WG! z1zGjN*$q&4cbvUY;p}dOv)j7qqD6F3;x>bedT1d{c8i4p5Mx6o$nkM?Hw0V>g=R{M zyP@u^QUu$fO&6x=uuT`1JR7naN69v`mP~g4$rQ8VZ}+ce_*yPMRCXlGz>cDCwWm;pFWTFtf)sS`4liXQ*Z+2= zOdZnzCi_hT$ONJ43)l}SuMZlvWwMd)XOtyp?ZsIAA=I6&=A1X$G>~jdKG#hjsfE7S zl5ccFz+cTElfUJ`WYdr$bQ}$Jr<)GWn~bL8^lth{E%e27oYxHj z=gc6JFYsWpX*x{(vzZP{o=m$P&2pJc!a*sF@;3>Gi*L{%MzbSm78@0|+O#Q#Neo%*4>PFGJn6(yqpHGWdtICklaJ*Uk@= zDD7$-$xtipi4xei*PbX5bdb2TWlt2tj2wHS@IBuX^*LZI-xI~2=59|EeL;$&B;sId z*1b{bUy#!4?O~79Wr;zem}tJeg`E94-yHQFb8Mz=j{3e)!kAa>o1?H9*ANkV9B^~g z<8cGC{#_|k56n$c^l20`oAzBPiYutMko?vgr~`L7o^%8gG_H7STx!e_!vN7ihcOzc=LU`NBleSZ5y4{#F*R zaHG3&y9lUqDFWxloXFjTmjHOnT?#<@mk5{V%Thn*pLCKyi11Mk)(^O8x3lMcocGcy zh@Ciz8*@JHZpJQR-i!|~+3TH zH|RVGPv!<4`!p;z>e#+eruRzOup?$um~XyG^K+IBJDc?r^}PBFhw8n{$x-oRx4PQ5 z@67g>$#g!8FO&U{NVjg|$@g&|&wqRIi1zXP8Vd~xzY5%we(mF#wWIY%9N~1u4Ar3Z z`Wh%?!Rs(tU96`^e0N>-^7DitH@{3aV$^0hi3Vka*PYBLOU|m|b-w$2PJy~rybjGv z=RTj9H(Er?WQ`5$u;l6HXuVlY@+5-b0&N0Xox(Q-Sz5`mrfvc{t#c~_+rY4$hpKSn zLKDt4;!T6Na{(72Hqa?{$Z0N)e@p8&4g{%cmn?nk1*z~D>jj8G-@}8+YF+6n?Ao+& zy-}N+GE(7vjI!jcstSkaLS~OWJU2l0bQR{j(IDrtkxQ&H7mKtaFW3IsVL&nGDWoiY)vM&V@cPbYYzO z6fpl6FIkZZ`X|PM4ikjQekRBjF#nBFTe4k2j*|)cC8I1kYcB)kzoG7Q6U2F=nV{r= z`C&)u97`r#=_9p}W`pEj8=8P*f*b)SbVI;;C^S>nXam%pmC2xhnz1nT&t@zvc}6+| z=FUMTxo1|E$$or4MMeGX$81E$uklh8vJ+P_Md`2;nCxdKT+#9CjM_4dp&FwsIcqO= zq6u}Ut1#zHMmuq9H+`fQ`eG;E)eQl6%^;KS^R6h24%#T6SwhEe$Z7c6T!U=&}!FBY7a1+8|Y)>J^|#p`qqy9Gv2(Et`o zgNn3EflhW_3PiXe&9MSR@hT&y;3K?xM3})^DCBZrkohDh?0lc)Tkd^cUneC+?ZbL%bU<7t746C~k-R>`- zd?|a&Hkfn4L`9BmF!-KtgSioU#<#(+r@7k(bJ|#;RVK8hF{Y>VF$H1;+stzg@(MjNgJ5?j~Ar&bTh3u)A9glSx+B}&_O7f48*FLm9{ zm!tA+L0LhYMa=jni2K|bmz~ASc(i_WZ0FdJk!u`mRklbh*9vm3$&je+?b^sll}vpg zW{hpaO2W1G_d_Aqgd#YPJ3Rh?U>|z=@IZ>3Q2k zBk&|Ef81TUJvvR5E5UnIe^LJe_Cq%Dl)DM9;5~0S*=joF(M9n7*KXSF?0J^+UJ5!j zc)#Q**MLvZP2P+TFWh(E=1@HA+H8gvY7_^rpb_DHj2a!w=->-AeT)Ltk-dcjUG8E+%?$`YjCb}pMIS!fDpA3Sm^>?0gJZ`O+y zm_|!*avcs_Vf;#D!Z;Q`as}(I9&3@K`bBP)Rc0r2x|#nqG?z0HaQiGG*&4V{UxsDA ze`A*yYsk636blWBu?CY)zvA{^&c772b8^dCt>(>wG*25Kzh4ou= z*WYl%?u}bx{SitwSRV_6Vyl^})Zj{l=2TFuj8}>nE}bm2MsnxvgA{mMU>7TJHKg_m zaE}77d~m!HR7*{`V9%>vQ9L?f5=vD=u<0+fy}q`sR1~jAcZe_qov7C-Q9hgU|sac zHF8vSV^bs7hVMpjhmk62{fJS&?k1}aGMXR?B;5~%TppdeeD&Rq@lmK-1&DFt=-iIM z6%Dwh#W+l6!TXNOwJmu*`P6}XpE_{gFxCB*^d%H?TsH*dpiowG=F8+0pzf?pHqDu- ze>QVw$+I#0IFsYXtS6HNc_KwSJ1mI1Rtgl1WvG<^Ms)Zx0*pH|)Jg!O@NvBWMzIW$ z{-*_CWFyo8Fyea-Ft$){J~E6!#bYOe+LjUF?v7|EAg`$hQ1PXf>gemB zqDAwj@py(2w~Z&miwgyP{P33eDaXidPUGT+6mN~oM)g^{-&=IZJR8QgA>%>ARspBm z%sk`svVzVj$H630qa=2o5qp2k2M+}Cy->(ypjE``UY1v(QQi;7CT2;e@xp$S_Mdh` z@58;&+w)D@k9R}zH#pl;vCgO5mD|BQs$9W3U3*r3?ry>h>*OsbPdiS{S!oy#Qh%vI ziU;cQNtYb$^os1qiUyz%Y{pL&$l>nF?E<07r9e^+@15Xo#7iW+?Jh;q1^j%rn|3>c zwsP)EQK!PsFLgI#7cy_ghZpX=I{Yl>obY#XOwBO-e5hr1PQK1r64wDdzX6Et5qNHZ zG&u15YIrh%XEC)4$a#&0as_M_%!7sS8_70h0h@=zl6Hg5KyCL9>Gsxt(crY0hP%}HG{@KiqB~Mr2wpmXm3$i1HaUFB7yH*0X zKajyL5x9+xXhv}R?HOt%a9jA^Uf{M^_DH|j0&cT8%K>iVdk${@9qJ7Ox7pL&f!n8Z zgfza1ZDTG!k%(U-URth~Hcm$ylQWIzHTD2@pKe){#)RUMF@|kjduCUd^l)(7OqL7D z{{-2n^MY=k-5~eR;DCL+)^|hf(Y+Ac1z5M$O{5*HdmiVK2UvHZyBRxJ$D2vE@|}Wn z=heYFId;N%NZkyBb^0z#!$>6V7L`PHfObEDvEL(TSA%|Y&~6VrnV_9%vIKZHjdoq~j2f{!rDlC!GIJ6~My&!KL0d4~q06W5D*qpdtl*4S1amOR~D+GJLf zJR#s}f)3byFokc*!sGocYbxkBdzUu-8VFL=E?N563sT`{Sua2gI%bE-YF+6njJx$? z%#Qt#7Wa^2_1fH&5kj#X3b}kWRfWUv0KFcV-D;>iU4=PsG=w5?uXDbeE>Z(&0EGke zKeL-=&zM2ZZta@0NtZUgyqhk@YOPrxQ>$&($C4-GrA=nZOa|v^HvZfLg0Rwz24_ZZ zSa^+>Fv!O2WBO)eHoj5K4CKjhv4UAD6QkRV2oFZPYb8kOeHp|@kP`Yx86ldk_nyxpN*DEAS%Gdkzh6Tn|qS8fH&(2MxcFFp)~F6zm(lHrPKpRcMv7 zeqiL3bc9&1xCfv(Zv#N|+Ve8`rw*rx@sv7l;va)Ag^q}!+f`Yqxo;&h#YCVF zY!mJwbn>|{jDf|GWbqaAQ?a?v=f~WW6T+Ck#91_w(hj#S=A|CIVjEiZkLXH%8#Wm2vIolDN#2w z`jqd^P%HVAVmJy@;-;D|>k?*C4i$?}`A#{C<&wa|nj)N!WQ?jSI^C^c*K{aRv zS)EANSvp=*4_>4GO%x)GhsqsCz+CEWz9RxN@)G~F)Y#<=V(9+49rGLOiu z&{@IFtP+S<4!J4rAQlpHFwY@bvm@@FhdcOUD3sM5Jd5R3XzU{XevO+*d;I-M-mv6D z>S3AC-Hbi{&YMX#AgXK3dEw5hyT(%c!WSZSGwd4chh<0$6XWiZxDH?Vcp$b%U-)fM z1^0#Th9}b(UP#0V=T|>0!(S@iu3#RxVkaUWGkUwjJD6!??rb~@+HPc0hnQa>ITYVZ zgo#N>w^9lI?d%$00vGR-T%1vd_8~8(kVE@1EHorWOcsZ>kEdY1;zcpJvX4R` ziz|!C>crKHEBlW|U2gRvSN0zmUCCK{ab=%`x>Z*ehk2(f8*@f;WlhG|TvnatAt>yHn`&}mPlWopMv38Jabll_OfDxD-*YGS zgyZ3fIkD_%?wr`uxOw6mF0;C_8ytA3T3-(i?I{{4qgF~+M6f%xU3+DhsfC0arzgre z-KcF#${*mHb1>{roX#}`@05@`r!6n9{1J5?Y$HVWp#UB#_}p|?*Qur zm!I@W)l|3^jOUT!oa~0oN-tz~;ho>?CerSmzn1eyaw63`zti1}-8<*aBwI$+JLe*E z=heM)Iby<>B6TzDo$EKLY9lAnN0%ga_~>T<$vyh$pMom5kN$ahGJSO2NC{6}-{Y(H zLh;uHJHgX@K5{mrzkcEl?yom1wTWuLzjG?T`q!~JHfwe{Apeqx5p%9?UlV-v_N;}H zRBnoonm#J|*XgPEbARj;Uc4b!{qM2RkQhD*uKG6?n2>osb$8*c?T`JXSGUREe+CL! z{C!MTr|(pMpMS@cu6Z#(YP#YCy*9V9J`GHU;kFbCxhA<@JpMzVZq?&QqtWT{$Gp)z zev>sekKdA~oBgq7HOW(gvK;siCQ&zwALlIo8Oxfk!OR=T#Zi_*wG}jKg%+5xT%{D$ zT5w4(T&$aC**4;}x_tO^_ej6)HpS04-%C?ShtFY}0&>td$YQdW4m-jxR~vP?+50qS z@0EQ-G>Fn*Sk2cQZ8?`#flVQW9St=8w-{Q+?cdfMH@~0UL5Czq6(#?oR ze23erYvy;(zy&2O%CO<`FAWa61xEhCqgW`-KhR>+?#+|jMEY&GG|I?f_IF-AqTuJ> zW{^I~2|M3sIeBcjeAcUXB(JBjke9srx8ZWxiTV&uRra^_MCRkntRqO(;dy|_;J6!jA-mnK;_YQY6cDRl=lWcH0 zdEw5h!*x;%!*Qf;hT*zopetx5Z!ncab^vyl0MR`HcAtSNIAHfhcrpPy(#B`SI6~vS9(A-)n;NM?J z{>?0C_kAz!kdya4EHoqr5m+zVhSBFVX!mQcZqwrNStw)y?J!wgIrawH9kM~M&8@Bk zc`S!Qt~o^YcYSx9u7WCukS*MuR*|*4P%_mOR~nc4jrn6GJ@A*M(0riMm-# zkjKBXtf`>gj6xn4dg%sf?GC0JHqPT4RdKUH9%iXbjNZTrZSa#Gq4f3$h2%m*ETyv6QhCh=bE9nO^+e<&(hJ+vw;cf{Z z(Orlj58>lV*;^nF#%TxSf$urw@eDq(tyJu3?jVmBl7p`wNX&|SxXzebEA9aR(a)G# zYfn03YRxQmSFN$Xm1~L>d41;8?YbKa8H~%$;u%wWhdLk;<&0J@XG~9syXb*~91De9 z_Cj6z4`s-!ul*(0!=sS88D9JAXH4zfPu#O3Y3+aj27vY+A%Kga3Jw9h0-j6=AVKv7 z5}=v#O4t@7n)fs9Rn8qs8c4`^TKo*8V1AY%5Sp z9_MLOGr!wUqt(ZaDGWkKl)OvS&5YhG(d6&Xq%AsQME|oX)50bHGIaT};c&nNK zeJr}Y!Dr&KQFYd~iL$Pkd+qxl4m)I{i!TWmQ7?l+S>3?JEN^e&u)Lc{dpPWP-mphF z?0N2H?BOupOtQI9U1H7)cV68kmZ}#nLh5GNB|gL)a>+3;Nm+*j{BsyDJvzYGKxerF zT!JUl0cK-cxVx)Onic0(@C=;W|DZvfUz>EEba3lbp;4G**Ew%xe{qjz zyBQ2_ZS9{5C>`$L5X;t?s9IXNs#}BY-*TIMn+D>j5TziFPWLy%j`s|E*v9S0Z^-%GLG;YBIAOmBrkE+eeCOxUT6F4OfaYx?@b1F-$5 zSMNv;AI3sna^RoZVt4g)UP%j%t@$agFJ&gH2k)F(RsC}`Xr2D~BaoUVO%nW{Wyngt zGIG&N@X2!%suTIjV(fbP%EJCip;~<9Zvnk7Um4$XU-=jK#C&D;Gp-HhG0=FKGAq)uMA^Xk5}RKf5Vq;7_N z>)$f{)L0c0L1sx|hmXA&DDKh6Zb22?$9@ewnLf5Q=7q0)WKtg#pIh(}oV-C~Yeqo% zX!NC0ZHca?Ay`k(AUfm{0`9UaTfs`>>#gkGYW#=i-zcgxd>nefDk21=Vv-aS&hL1tr zs?&-VqSI-Od82{KCTnbVtR7Bz&}ACNz!ec zNIzN`vXXuvv%U1gZ9)jZ5RR5`4c&z(*e9G>DSHcm!8q;MN`~(_fbjtIi~|_#Y3=}w z7vO?l-$$1D2;E2ukYQBY1E8UA*0GYz?^Gxsh%eqh)RIj=8rFBx?tK}gqt24LUb~@< zFUDn~*UT!k(ZOvK;+PN1G01Pgnrj}}$IaO!8Xz|eDGYyhi&DOugsk~@PtxN6vCN=)XEld%E| z4T*sVQ=o0Jt+|6o;#UiE_3_ScJ~V~Rb7hgjT<=9MP3gx#p^Ppcb}i$SzLaH6cgj6n zz887*j-+uG7V?tD0^AR@HSqnzYV!{mU8OGmPSO z;ma~)C0`D?=p}f!TSmT|7{S8!xC@alCoHTKs>PQZ1A1M-D16U-xm)mw1*6#0-1%}W z7_}#8G%NL5zk*RzT@SunCu$s%$c9K>@!1&c95>0ga%pLD%)Ae{-mQ;zUtD&U!%uP7 zdh*RA`Qb;gCo}Aub%riPHxfe^lEMz3>~5gAN1yCbsDk@sUxO#pC)4yr_+l<46h4^X zB{&A}Lbhh~!B$@uwAu~+K_$T$@~&*Jqz3;DH6mct;ojjHYtT9Zz9=p-N}O_U_{4H>eMJA^FslDgZoA$Ld& zP+?Nsg~%Ne#!gDq;trh!^t#+3e9zsXF??d~5PO`5-Hhe^S-qhX9Eg^z ztp{gFzaUyxNzjby3k}M*VhN`v$FuYq&Xm4CLYR(#3rFN_*M@Uj1-ijTWVMpk2 zZU2MPi$p(264>DfHGtqA{h;?k72FT{5ImWFkg6=g4RWZT@PY&*VY+W2PcwQ!>&OeL zjOQxN91Xi1Y>BPa`AQg;z0N#RpC6=Vg%Qi-7tNXW0-ru2`7~2*(Vu(qgxsPpV4)!~ zG+??(g^^b7YP8|%;&CBBVR$;yrL_LWi!z!h{~8LV&8aj|Vka_Al%Hc+`|2M3r&sTY z??1;vUVL9LR8v@@L^(gL6+O`0V5c^R^j;E{`7 zf_FPR`hbgi@#$4{0rQ&E+BCd+s5fg-^^wVo!7DA)O2x1{#^2BiL0? z+cF}~JB((TLcwK^&q-*$eX+6;zs)yib0we8eXh5`B> zZw9Sx@C3(iMhg=Yqm!kk$d>$J$^jyrLrwHcj zN&I29ykbtYzm#2jLpNPJz{&k+9L1iuO|%D3vhq9JmD~4iQ{|7ul@G9CBpRS!vXS?? z8~JKMg$JTTo9(HodZRVkoGdh2*R|^{xJ2_-bSpmxa^P(zTU)2h7K?G-A)x{GChh_M zC42BGcMt69^-x9`eA!*OT?SOSl)?N{PZ8wfqon=Y?&`g`&s*)5`@*(%aDO3xBj^`D zWgq^{-3L4Wf0B{^zj0S?=RZ|0`9CjaKRijw2RFMcf7y%syv;7Tzp7(C>kz|IC5w=S zmL|J(oV#0gfgA&cU=wtzQ99LKxm_SsxfDo>QF@WP5ih~;w!0Ke7Z*EU>89Pzpk18% za#l+H4%@i98M}~qGd{d<=haW!NM|T4;;@}zq-J%eJDI$JNYd5;(!3OC?GdDjKo}gP znT975q#=h$;4_DH(yg4W5uAhRbSK$9Sku3IUgw8Dw7nt6UW#76exjWpR4(M0KQo?FnEJc?~-9pPHwF7=>R3U%ir zy!(F){|E~ZJ-jO(i7>E>Wi}8SL9yN_HDRE^ST7gg^KN38<%;!Ms{rPtHo z+X=@xuwpO`w73dNo#T9DY^1nt3yt&ePt?wA@3}KV?tQ39>d3Pw2?#6*5YAZj8&iiq z=9hrn{*%k?%Su?ziBTaliN!9|r2A_wZsR+(E-ym=!|HQQNP-a-8#vu8VpsWiaF^1}B95XYvv{yDi(rMo zHZ{R=SjG{!J0&oPr=vl%yx!t|zkbVlkpcb$MFnZU#m3wgwW~rCM2S zI$21qB^j;y`Yl@|JyLosyj!4dwGev_Sc9s9!BS0E zF~#n@&P!yv-B}AFyNQcTvpY?TcoM|YHw6|lc_>9Dj1IRP6pr!{l#rcE)|rJ*Q7EY` zrmT>VcqOd}t?^e-$Z{hLCaX(Y%RcAu8I`tpM>K4VGqykf(5TD3Jf{0# z{)y3*oVACIK;e&|Zgm?FBH5kWfMU*Q_raKqf$k1~5x+C13}{Q9d}g`Jxz()3J>r<5 zUKf5Pg>Q&A(S0yqW?573gSpJMYao}$EnKiqWeRcULUm(q(P}aF&KrG*&mYc-ITs%#_b=|IkJLiv?WTI8 zi-m@Xre%U8;F@j-xM~KO{7MfdgVJag#?(KXg|Xz>n0@p~#+mhGGBJmzFwWn^oW?e~ z}4blhQ0|E zX3tUxA2RAn9{0#uG7%qObR}o)#YEf>b*GyM&KZ5QCYp#xy6Gde&=(W&&29+z+6*%J zuRWM-ng~<-Y$n2z=ZNIdB(>2jm&qhVDU9+r2`BTtST>tLZ!ow7G3Ti^A6JGuAvSN3 z10jCOel9*uAHm5(NpTq#Kp~6EfXV%`217<&Zo0@C9LeZP&f1GLI0ouYw+5Uu8Lhz? z-Sm-K=!-QtzZ(M1ok1pF=)q*u8kpK=vj&ztt2)P#935u@=I&d(l!*X`Td+_X;Gkh_zo#vsIDm{XItDNd4qkE@uD@(+ zwQYC`YH)BzrP#V2mtR|R*Nbrf4L5AfVLGniU{4i`@Lh2EOLjnbuE_&#g&IcmoAqJ^ zgZqPnqGax(S6s3)H&(5WvAjHB#~hsS!zcS3sQv+?+D8+y6z{8#CL)KpCb~=Ma5n1iz0^b3!5thg1k2r%p+hu@ z;mpwINzCI)v7@%=uB=-IG?^WNg}f#+-z&vV%}iDguCC=uF*`K838={^_>(eZCBY*X zy#(*pSvnyq;x1xyn!6C45Ec8erBE#=L>chtxE>bY^An;a=ovpD%AV%#gy?X43N|4J zS?|v{b|U$RD6gr9Golx2o8yTv{y`gIjE7-wCHscNwwnKimzyAL@nP zWvT`f$0c(Y(Oce`wNdB5-w2;g?S^x{|Z1Yf{f^uES43-D>y+twHBzrI<6?RsxeT zw#a}b&r(&ea)6pSlMT57eEe<-YcT8Mu#pVL)ZHv=>VBl_VoQ`q;EwG)DoG5x5lq3i zgy6skV&i-9fEzo88UT*np2`&@Zar9NwF<>DY`+5)Mk6-Gj=jKdM8FXM7Y*5zTYA?N zVU!7yV?To)sfwAbA;<<&@_%J)08!~X4lr4*D^=8dN2CTnbJZprh?8P*!92WI1$M$V6z9=HXgjU0Ea6is_a zhFS@a!f7NU9`)J`wGtjBW==0WN;oZYRj{qbxaVF9YRVs5{*Rao%VqC`vpDc2zfhq!!X_kUSeIK>7Ies2l-dHv~+~ zAd{;eOa`UVjD@LxHe+GQGvYbOB=^k9GTDz4Qn=@DKaLaMK)`e7g;I%Ke_E*0)e2LE zMq$!=%3MbrfLk&__VImQ8bSu*KGsJY|M87#BOuS=NhC`m%u<;c{VrcdyKAMG!KE3@ zKgA4ijg>KGu#II+UleBeD)n~^4ksH!)HGTSej5v=EeEv|I4473ajIT}yY0ps^+~p# zYXq>sYqoHf;@GyBtb~{8RYpqx$6h_6P3Aw$AbpY(cD~PY^4Mg)5VmouBO;T$4#q-W z@>)gGX^vb*f@4y#EE8ZzS~5#<{1b*xyd*8IS$3r=DYf?vC^Q^yL?GZ7)|jYO9yY zb8KUvScQXj(}B9jB>V*2LKI$&BtL{t*TlrLr*4QZFYDxfbSMTCHwkcR6Q_iMwMY$r zEwL-{dc*GN^2XiMpkZaWycF)gWq06~hoO`6T`CzZY}VV2B5WEOjt*-z3bkgnz^*Tc z9T*c}W1G`AOy{G4R=riIPG5XbG$`@}CHUFK_U1(^itPs83pz@5?TnU*lxhXGihjcC?UAlkY6A+!-wajs%TDtKNW` zmf)d*W(%$vg&#{B^?GX*Hkpi9_Dx6gHcv-OISFw4dhJ@sFi1b!jVkVCVssxMhLh8`L@V$v<*CtPeR2{CHlf0G zJSC_GEM*i|MWak4@PQg=j|!kNv4mx?BL=@?Qw{b6z|Q&6U>QClDt-<`t6)V1Tx=Cu z?WRl}CPkN}ceY)wZiIp>vH23RfA(U9@Rs3N=r21K-i*DGld zrH|5I7=@!lun(Yn%`&j43VoW6mRAe4iFRQk0FIa7_xzv+>d!B>9W4b@pgGV?g)w#^ zT%|h>-2{$QN6mPN};?a8UpSS5k6ECH?s2^w&L5{hmmOJT~6 z(w9k7&7fVXkM5g9g*qhIHwE|Wj;bY@mK0l~dn(NeSJ{=LrAo6fR>h7Gm5ansfnm1{ zI)lq-HtwL(<&3S@b=y!*F;Rg?+T3K(1?Dk+-glVw{G4H$<2|e{qPBa+DN@I z0V8S+=41pw&QbVO0f?ss;#dsnn@%|8bl~TT#(2@F9#drXCyMIvvjeEI*9MJ|O3)f- zZGb`8Ty9NPp|K^c!WfLAQmZ_D@#1I*baHYu9-MIpMw?TpA-6_{H21?5>H9{@m5Fi{ z{saA8P_3itFJqsI8l`VV-2$JGlAn$mt=5YLV(n0|3=5PZ2%e8O;4)(&5~ z>ROc+@SmH3TS0r^1a@s4bb#!_YBUth_Lz~aGKsodtrz%UT)<2csLbS8P=XP>A1EjX zK?~YgQ-oaCjs}y3N_7;LBWQO)O1DI-ux2xKf%WLv7>nkA-Mb;c_s@ zz6cZfa~R;9HwJ&2(GpB@Rg@3+rDE#?0{`vah@aJ*- zbNf2@b0_|J!w~$r761I?82Ixu{PTkK@aJs&bNq4eXCwYO<9PV975`jvBK+Bfe+KgK zXAuAV9RECne-@tvf0pB)&z=l_zKDPB#t(Vlhkx)ZyCHssH^fi5g!rkK5cisgxEDRd z2y2KD*mksBRba-_<;4mN1C$A{nWvzg68X67)D)f%Bnk>YIaaU6V}fNp%t(xLFVSjT zB3fmIR%`Xcl+$QUg8^A%)c_7p)tffkIAyZh(A?dGJvd7@c4cU$XQ3OVBQ&CwB3I z*x_SeI>8mmea1SI={2?Hz27cPTpw+e3DGEJLDX*xkg~P6#8$$k{|9QBtn1y4|;G zs;fHn*qK2XY*`_@;zk0tLW~gb-x7)cBLNW-Ac2%fQN%9~--%d|eI^qt)ID+ixTD9<#mr9JFerxe89vMBK9jY1 zOUxv0;KA|j5?$5^lf%XM2zb4`AktZJG4MYlJPasG7G}_ z1u?7X-4oNk8?bCI?OI~NN|MO!rV02YzAm^esxJ4$FtGW$#C< zM}1N;msovzmGM=+!I${s`~trsKD5ol0o#t!AYjq~9T^5*`N4M-Uuu zhm!S96oZSayXVs`KPP6~z+s0KF)0c1p9R(Y2}tK%`2QaKzlQ&t!~uj5xsvWScz1(7 zq%58w*=o_YC69(17(`P?t-6_s^~z(X?4R-3y(F_z{$9RSvbe{uLXaSE8c?y1(bvYC z6?$XFF65J>QBBoX%jw%zns9R%g?C(sMK|}tfNe^>(-f<63M&Z0#A+Z(JpJh#?@EA+ z9pjp0=-RF8#*KVQGagzt+cAnR#-4Lf;S<#vteSqr)Inxdl|-`qIIWs?S*>TalV}|d{2j>$Hrg;^F^lf7jK+QpW1rVh z>z);Aq~#oH!=oKS9sm>cjj&e*L=6E~cc-MXmy|wWAqeuhRp2vXsfwLkKJ~^@RN;70 zwZ$R;vjuMD3SyZSl**FNtSTVx@qLoUpp*vpv2hfsElFyV&V>?qIhEC>lEzmj(Kt^u zDgx(enenv!&PduWN!nnrAjO15zKb1S5$2`iTS5_=@2O(sX-3gLl47K-Xf_41Tw5!b zNu#wC%b$-Ii z*l_HbSj~T$R$%j*B2MxyEjYf!iux?c#KYzwbW)$i(wS+K0=J1Su9NZC#4LWnykufl z`50-t{Qs-Wp9!vDA8@ivs%I<;J>o9Ja-@TwI(V9+4k9+EP-kX#^tl9-?VByj6Tn z!g7HM{#`_q1dxH{2AOAIoR~vHax?@+wJyaXTG-*xcWoCqmmLnQD8SDagsXADe?WvO zQ4{d0D6L@6TP6~(h@X_pgfvK}lbk#W?t-MsdmnwldtuZ$`YA!^P2;DEz2Rk_`bZcd zZX@*~u!hS%a1(BjOEVO{44>U$zR_bc;)*-DwLAO35*{}+G5m_!uXT7-9dgOcPg2C= zg!RfZhD55-8zr=avzp*2xN>b4cNU&aBRWXK=vS?xk_!jrEn zW~e;;>5)vdIXXsVedE2q79|;N z+H%j}+_GtGZ5huYMlEE+q>bVCrFOE#!ASvB~EfrpH*Ey zeTrFsLv_t9a_%v()n=o#8$r~inGo~OA6kPU!p8zSMMEiof2J8_PUSSt=UdJ7bJMku zcIzAZi?_KO({Y!MA}lU!_X{ffq#VaEBwyalg(6Gb7APi#T0J$%=kWz|8 zzK5T1;5b|h889yn1H%aq0zb4IOi?(9d@vFoJq$O7R$to*fa3odRizsK<4kJM0gZMW zi%qw&j57gbo|s)fwD+r!c=6V)TLzh0<7Qz~+Xw)W``{*t>*kY9AwRjf(CKt?Kdgo+ zCCbE-N+m(G@5IzfK49;A5Kr7Vzlk}`X8pXV&wSonS0?(FrqE zFxcKS+CX@o;j1Kc45S@+=pg6!?$I4OwTbE(z#=*=w)cnX9d4u>R@()TM^*P)9 z)OD__aEeLYnm~h0^2Iklf-O{J0beO5!#NzmSI%B;HX5xZXdgX4$#%54;9smAV)ElS zayH)OVyqax^9i=PXejwhIjlb{7=PkKVM$@M`Rm1yX&RzL^k<_Q*M;g)itDL@<&mcL zjbj;1(Oa}I(rZ%gieS>9xm46UWsyxi9~h zJOx$RIo>s*SYi3!axVYx5=`Qeakd2sCz)8VGyYu!I~*ye3R%splXnqhs>BojFaB2D zBz(V~V&ZS}*Z2>;-y_C;?ax0AduT zH%H$)GkFQ-Kha#~K4kKdKm`;(B})vQyk6+U`xN|kQ!VC*HmA~7JH+Y(-sp4fn`aV> zKG*&Q4Jt4MbL=IR#f#(kVi!44mW)2G(~WG4a>*u=hl5H?riRy%cTJ%j(FJ^rK}X<^ ze&S=#(ftvnKr|MUP+#MDFIT7$vubRPv;46{#@Ejz0)4>!M+_Qqz@_Hu>0!hH*UPHZ zE!Q~8iEOl%w0@^C|6~;FgYCB^t>e2^v!Z7@*#0Lb_Pzpk?s{Lvr!-IAoA||FtDIt$ zsOoG_lkReE)kDeTj~|3dy~^=~LVe-o8enn?8m%QMD;Mhe94|y-Sj&46gC>P2Re5`F zgV|9z=TV7-i>K2HR~+d@|SyG1kD=l;Wwt_Wlz%IXl>%&Z7(iXZk^SN2gt? zu?std3!;2VH?{X!G7^0A`82sc%Z5^UubxSH8iX%PmXCpun$HBnYo}x{XW-QROaA_- zLDP7|RV?9s$=~>{4-C%NG4aXZEW}#_XH&YT0_Sg@z{xRiPM-B^%4q(TG@9e(L$m6{ zDaBl;Oq{+UyLu-EiE}S9lt~3eI<$B$wf@aBXRhFO(U%WCIG zguD8BTLu<$uyrz$@Rp|$XUN*2>T?iosd7JDbO%U2Q{~@1v644$QEA^1T9)+7{CN#M zbd^F}bXpCA{hdC|mik-UMhGrz;H zNyJ+N=N`TGF43=d)5k-_uZQvLo_AS(uFKD#k)Myq&qw9wWAur=$Tj7tx;#dC}H%oT_gizl8tQV_kXcrRwzyWH z+7t&Fk55u33YdWP6Bp!!QAyP+L3{F*}SL(_vIxgk`8$cu&m2SoBbK z1&O#$4hWP|t>8W;G|MJ&9(iRXy3)bWEFcNN$_81Rg7gwixGGyD*h%|k(=cYK6Pl=Q zMX!q}?g?XNR!2&d*eJJiW0&d#F_-DMvDHPIxS(<_-zwO4OJIiLMpYvW)aY*VUP0D! zugkLyF6LQ82{7n}W^zB@qK(XU;+CRT=QXi_Z_YC}*a z0-8{pH3Zs0J8cc|2v3q>ytBQH=D4G(ygOmk$Bw#8JtYC?X(GP@^(0WoJleP3^VBaw zo-0w$ZcI-t<@7(7Pfsa5g6uwvIxb6kat#=SZJrE#EY?b_E_RWV@N9QpTmdErX0bU7 z26S2TJ#jHU3KHwkiemW%oMHgXI?61whJ)kGF-Jk~yXuEKU3`LxF8{OOiVVAB@k*8q|T3H5Zp^tyIM#n=xCjc%T$C{ZRqB&rzfL z?QLO;dq0nlShT2Fx?^;bFYd+s3Dot=_wZ^r`13M3EtA)&Sgxv3PP~kwIOS`wm};Tj zn)g#2R9gsQvK49{bVI*DhHQMe(OC3u)n;tvtI9!CtX!-}hBrzwY@^G~x%3YhEmxr8XDc!1hyz U(97n2KyAN()|M}b8j&4{hb853`*-g#u`J+v{ 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 CF1?EY literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/tools.doctree b/docs/_build/doctrees/tools.doctree new file mode 100644 index 0000000000000000000000000000000000000000..97758bb312430415ee9dbb0ae65aee1d54cb498d GIT binary patch literal 5251 zcmeHL-;W$e5x(=??%m#xJ)dJ+NdCbjD2Xk6yGS5`g5U*_K#pusFj06gqu!a`?e@(~ z58XY!+lU}|2(qPqBEugLA)b*Ut}X7|={BtPUWEA8EOO-*%m^;cD2_g{Pe zytuyMKkmqsLKYVzmZpVDxvAZ5s*)<_g{?oU@Bgj-q`v0{nw=X}>4evA0~(2tS*m$a zKdRl3)UC|SsCj?K@We`0bgzq^=!>04^*u3gJu7X-S01^&cX;u`=%G@XsYwe;+Yk8# z&3@_Gr*-h9Uoy;WYjNxbap$Voa{b1`iQCR(!RtviWp0mItL3z^SQ)KkOQwdr-bpfM z421aID_9 zz?x{Lbd;z(S4G4ckt`w#+-@mJ0yB+?QC z3p~#6d%tsTS;{PX&Nxj7>#LSK-REtM0z7Vh8i?2GRL@Zwcu z)c5dx9p5+cy$>*p?~4<0M?3)fwp%a*g`<$|qW94OaQC|^5iQ6%cm!nRYyrePQQ4Cf z*@bzWouCLw}FIV`!aKl(uBphogEW^l0k6)AkGSKaphW{(>n`p`mM3h}# z-XZVXxU9uxiM^k_Jofrug*_L)jSAG3fd_uG2z3C(BAOE3=0HZkNyhY?M=Vzr3K6i< zz7@^1%A36lFr)$&N>aO*-~2qw*qpw6Y<9mgHjmy@AuF(+uEF-l>?NB* zV5znvCcpJnP2A8+$Eh}PS!G%M_qvm{rEyi( z;t(?K4rGyJRm!Qrcyr=o@n`WD?sju_k@C`t`rZHG14_b5&znGC=9!w-PhDTg6#cb+ z<_;SxonW`9@+sFmtxq@Ho@Z4?71;v1dthrz_o>=vO|?Hj^yGSLa7Rs`PR_wU(AsOZ z-Yw>B)PosR*cm;QX@UliR-F?HJ|le%`-a+OvY|7k?DY19P&I0#QxWTHQ@HKVos zW9dt1bYM??OO;?rSX;)qY=NJ%^)3ki4d$tzlF@&G%l+|Xxg5C{xZF67Wg%@GkIKbc zMDc(fbTXvh>JsjrZnnNxQ{MUJ_DJa@ti5wHNCS_4MEL=tM zT-0uJT)X|?LX3IOps?2rE1h9<2q4GA+UY4==}{Ie0J0g(6w30Ihfm!hol}rS@dY?< zj%*v!wv{oJNW5rZ@K%uUjC)B;q%>|%4w$cbp*c!S+=1q$(l*Y(S`f}FZcnhR8}{5W z=nA4}nXOE#)N{R*Ppdhm8=f;=Ad1icyU8ILV9OFtOCtYdftba-NE8vJ+6^i@JNd~8 zm{sj=Uw#;Kt(A@i&J7td8Zf}x5?i~Y5cw4=J#VFUch;V)nGpYV!(epjK>OIAl)Tk(c;vpsinuO2eyE#TPlD=_)v) zG8~z`eA7cDvGEgWWWeiDoJzx{87-voa;MD`5NBsJ>z;Lxt;krPz}by<{2g%ST;oprRaF4yY3DEna5pbb_Kn6WIMfxt_f#B#!&)kg!T4yoO znapC`vQW|WULQC2B*1Dm3kB_&+v3F&y18(>p_CwZfkbp#iQKSp=yU$o;uuZ=Sr+sU z;|3(KixM7wQj0I28SyHeBEP_m z$LHeTl{;MBFmK{8k=SZ`Uj66VIbt>y^`6RJi+#|Em6`-#djL>Fs7)7be%BmWE$__Y228GySP9SoN; zO`fOi!C%~Z{4S2`=4(g*b@3DEy#u|kB@4Z#ac#P7!T@mn>&e^iQ}+m$f8syQ-P-9U kY(D;Fu;=!>Xn45pH(V9zF{k^ry_Cv&Qvr#%RMXM_0oI1r9{>OV literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/tools/drs_pull.doctree b/docs/_build/doctrees/tools/drs_pull.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5d16b18e73d3b6b150506d5b6d5cf678edb2c541 GIT binary patch literal 130160 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 uaF?R7wtsoBT&~B&{8hngwoA} literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/tools/metadata.doctree b/docs/_build/doctrees/tools/metadata.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6aa7f6deca2a08ed0a1263bff82c073f612ea702 GIT binary patch literal 35929 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/wss.doctree b/docs/_build/doctrees/wss.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4d973cdd25440d97c4fbbbe71725a8cd81d51cde GIT binary patch literal 33818 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 I{_@iQ0|>XEVE_OC literal 0 HcmV?d00001 diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 000000000..16006a834 --- /dev/null +++ b/docs/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: b941f35ac2dd283dbbba3d55c4f31d39 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_modules/gen3/auth.html b/docs/_build/html/_modules/gen3/auth.html new file mode 100644 index 000000000..9f955aea5 --- /dev/null +++ b/docs/_build/html/_modules/gen3/auth.html @@ -0,0 +1,763 @@ + + + + + + + gen3.auth — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.auth

+import base64
+import hashlib
+import json
+from requests.auth import AuthBase
+import os
+import random
+import requests
+import time
+from cdislogging import get_logger
+
+from urllib.parse import urlparse
+import backoff
+
+from gen3.utils import (
+    DEFAULT_BACKOFF_SETTINGS,
+    raise_for_status_and_print_error,
+    remove_trailing_whitespace_and_slashes_in_url,
+)
+
+logging = get_logger("__name__")
+
+
+class Gen3AuthError(Exception):
+    pass
+
+
+def decode_token(token_str):
+    """
+    jq -r '.api_key' < ~/.gen3/qa-covid19.planx-pla.net.json | awk -F . '{ print $2 }' | base64 --decode | jq -r .
+    """
+    tokenParts = token_str.split(".")
+    if len(tokenParts) < 3:
+        raise Exception("Invalid JWT. Could not split into parts.")
+    padding = "===="
+    infoStr = tokenParts[1] + padding[0 : len(tokenParts[1]) % 4]
+    jsonStr = base64.urlsafe_b64decode(infoStr)
+    return json.loads(jsonStr)
+
+
+def endpoint_from_token(token_str):
+    """
+    Extract the endpoint from a JWT issue ("iss" property)
+    """
+    info = decode_token(token_str)
+    urlparts = urlparse(info["iss"])
+    endpoint = urlparts.scheme + "://" + urlparts.hostname
+    if urlparts.port:
+        endpoint += ":" + str(urlparts.port)
+    return remove_trailing_whitespace_and_slashes_in_url(endpoint)
+
+
+def _handle_access_token_response(resp, token_key):
+    """
+    Shared helper for both get_access_token_with_key and get_access_token_from_wts
+    """
+    err_msg = "Failed to get an access token from {}:\n{}"
+    if resp.status_code != 200:
+        raise Gen3AuthError(err_msg.format(resp.url, resp.text))
+    try:
+        json_resp = resp.json()
+        return json_resp[token_key]
+    except ValueError:  # cannot parse JSON
+        raise Gen3AuthError(err_msg.format(resp.url, resp.text))
+    except KeyError:  # no access_token in JSON response
+        raise Gen3AuthError(err_msg.format(resp.url, json_resp))
+
+
+def get_access_token_with_key(api_key):
+    """
+    Try to fetch an access token given the api key
+    """
+    endpoint = endpoint_from_token(api_key["api_key"])
+    # attempt to get a token from Fence
+    auth_url = "{}/user/credentials/cdis/access_token".format(endpoint)
+    resp = requests.post(auth_url, json=api_key)
+    token_key = "access_token"
+    return _handle_access_token_response(resp, token_key)
+
+
+def get_access_token_with_client_credentials(endpoint, client_credentials, scopes):
+    """
+    Try to get an access token from Fence using client credentials
+
+    Args:
+        endpoint (str): URL of the Gen3 instance to get an access token for
+        client_credentials ((str, str) tuple): (client ID, client secret) tuple
+        scopes (str): space-delimited list of scopes to request
+    """
+    if not endpoint:
+        raise ValueError("'endpoint' must be specified when using client credentials")
+    url = f"{endpoint}/user/oauth2/token?grant_type=client_credentials&scope={scopes}"
+    resp = requests.post(url, auth=client_credentials)
+    return _handle_access_token_response(resp, "access_token")
+
+
+def get_wts_endpoint(namespace=os.getenv("NAMESPACE", "default")):
+    return "http://workspace-token-service.{}.svc.cluster.local".format(namespace)
+
+
+def get_wts_idps(namespace=os.getenv("NAMESPACE", "default"), external_wts_host=None):
+    wts_url = None
+    if external_wts_host == None:
+        wts_url = get_wts_endpoint(namespace)
+    else:
+        wts_url = external_wts_host
+    url = wts_url.rstrip("/") + "/external_oidc/"
+    resp = requests.get(url)
+    raise_for_status_and_print_error(resp)
+    return resp.json()
+
+
+def get_token_cache_file_name(key):
+    """Compute the path to the access-token cache file"""
+    cache_folder = "{}/.cache/gen3/".format(os.path.expanduser("~"))
+    if not os.path.isdir(cache_folder):
+        os.makedirs(cache_folder)
+
+    cache_prefix = cache_folder + "token_cache_"
+    s = hashlib.sha256()
+    s.update(key.encode("utf-8"))
+    return cache_prefix + s.hexdigest()
+
+
+
+[docs] +class Gen3Auth(AuthBase): + """Gen3 auth helper class for use with requests auth. + + Implements requests.auth.AuthBase in order to support JWT authentication. + Generates access tokens from the provided refresh token file or string. + Automatically refreshes access tokens when they expire. + + Args: + refresh_file (str, opt): The file containing the downloaded JSON web token. Optional if working in a Gen3 Workspace. + Defaults to (env["GEN3_API_KEY"] || "credentials") if refresh_token and idp not set. + Includes ~/.gen3/ in search path if value does not include /. + Interprets "idp://wts/<idp>" as an idp. + Interprets "accesstoken:///<token>" as an access token + refresh_token (str, opt): The JSON web token. Optional if working in a Gen3 Workspace. + idp (str, opt): If working in a Gen3 Workspace, the IDP to use can be specified - + "local" indicates the local environment fence idp + client_credentials (tuple, opt): The (client_id, client_secret) credentials for an OIDC client + that has the 'client_credentials' grant, allowing it to obtain access tokens. + client_scopes (str, opt): Space-separated list of scopes requested for access tokens obtained from client + credentials. Default: "user data openid" + access_token (str, opt): provide an access token to override the use of any + API key/refresh token. This is intended for cases where you may want to + pass a token that was issued to a particular OIDC client (rather than acting on + your own direct behalf, you can provide a key that was client-issued to your user) + + Examples: + This generates the Gen3Auth class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page + and installed in ~/.gen3/credentials.json + + >>> auth = Gen3Auth() + + or use ~/.gen3/crdc.json: + + >>> auth = Gen3Auth(refresh_file="crdc") + + or use some arbitrary file: + + >>> auth = Gen3Auth(refresh_file="./key.json") + + or set the GEN3_API_KEY environment variable rather + than pass the refresh_file argument to the Gen3Auth + constructor. + + If working with an OIDC client that has the 'client_credentials' grant, allowing it to obtain + access tokens, provide the client ID and secret: + + Note: client secrets should never be hardcoded! + + >>> auth = Gen3Auth( + endpoint="https://datacommons.example", + client_credentials=("client ID", os.environ["GEN3_OIDC_CLIENT_CREDS_SECRET"]) + ) + + If working in a Gen3 Workspace, initialize as follows: + + >>> auth = Gen3Auth() + """ + + def __init__( + self, + endpoint=None, + refresh_file=None, + refresh_token=None, + idp=None, + client_credentials=None, + client_scopes=None, + access_token=None, + ): + logging.debug("Initializing auth..") + self.endpoint = remove_trailing_whitespace_and_slashes_in_url(endpoint) + # note - `_refresh_token` is not actually a JWT refresh token - it's a + # gen3 api key with a token as the "api_key" property + self._refresh_token = refresh_token + self._access_token = access_token + self._access_token_info = None + self._wts_idp = idp or "local" + self._wts_namespace = os.environ.get("NAMESPACE", "default") + self._use_wts = False + self._external_wts_host = None + self._refresh_file = refresh_file + self._client_credentials = client_credentials + if self._client_credentials: + self._client_scopes = client_scopes or "user data openid" + elif client_scopes: + raise ValueError( + "'client_scopes' cannot be specified without 'client_credentials'" + ) + + if refresh_file and refresh_token: + raise ValueError( + "Only one of 'refresh_file' and 'refresh_token' can be specified." + ) + + if endpoint and idp: + raise ValueError("Only one of 'endpoint' and 'idp' can be specified.") + + if not refresh_file and not refresh_token and not idp: + refresh_file = os.getenv("GEN3_API_KEY", "credentials") + + if refresh_file and not idp: + idp_prefix = "idp://wts/" + access_token_prefix = "accesstoken:///" + if refresh_file[0 : len(idp_prefix)] == idp_prefix: + idp = refresh_file[len(idp_prefix) :] + refresh_file = None + elif refresh_file[0 : len(access_token_prefix)] == access_token_prefix: + self._access_token = refresh_file[len(access_token_prefix) :] + self._access_token_info = decode_token(self._access_token) + refresh_file = None + elif ( + not os.path.isfile(refresh_file) + and "/" not in refresh_file + and "\\" not in refresh_file + ): + refresh_file = "{}/.gen3/{}".format( + os.path.expanduser("~"), refresh_file + ) + if not os.path.isfile(refresh_file) and refresh_file[-5:] != ".json": + refresh_file += ".json" + if not os.path.isfile(refresh_file): + logging.warning("Unable to find refresh_file") + refresh_file = None + + if self._client_credentials: + if not endpoint: + raise ValueError( + "'endpoint' must be specified when '_client_credentials' is specified" + ) + self._access_token = get_access_token_with_client_credentials( + endpoint, self._client_credentials, self._client_scopes + ) + + if not self._access_token: + # at this point - refresh_file either exists or is None + if not refresh_file and not refresh_token: + # check if this is a Gen3 workspace environment + # most production environments are in the "default" namespace + # attempt to get a token from the workspace-token-service + self._use_wts = True + # hate calling a method from the constructor, but avoids copying code + self.get_access_token() + elif refresh_file: + try: + with open(refresh_file) as f: + file_data = f.read() + self._refresh_token = json.loads(file_data) + except Exception as e: + raise ValueError( + "Couldn't load your refresh token file: {}\n{}".format( + refresh_file, str(e) + ) + ) + + assert "api_key" in self._refresh_token + # if both endpoint and refresh file are provided, compare endpoint with iss in refresh file + # May need to use network wts endpoint + if idp or ( + endpoint + and ( + not endpoint.rstrip("/") + == endpoint_from_token(self._refresh_token["api_key"]) + ) + ): + try: + logging.debug( + "Switch to using WTS and set external WTS host url.." + ) + self._use_wts = True + self._external_wts_host = ( + endpoint_from_token(self._refresh_token["api_key"]) + + "/wts/" + ) + self.get_access_token() + except Gen3AuthError as g: + logging.warning( + "Could not obtain access token from WTS service." + ) + raise g + + if not self.endpoint: + if self._access_token: + self.endpoint = endpoint_from_token(self._access_token) + else: + self.endpoint = endpoint_from_token(self._refresh_token["api_key"]) + + @property + def _token_info(self): + """ + Wrapper to fix intermittent errors when the token is being refreshed + and `_access_token_info` == None + """ + if not self._access_token_info: + self.refresh_access_token() + return self._access_token_info + + def __call__(self, request): + """Adds authorization header to the request + + This gets called by the python.requests package on outbound requests + so that authentication can be added. + + Args: + request (object): The incoming request object + + """ + request.headers["Authorization"] = self._get_auth_value() + request.register_hook("response", self._handle_401) + return request + + def _handle_401(self, response, **kwargs): + """Handles failed requests when authorization failed. + + This gets called after a failed request when an HTTP 401 error + occurs. This then tries to refresh the access token in the event + that it expired. + + Args: + request (object): The failed request object + + """ + if not response.status_code == 401 and not response.status_code == 403: + return response + + # Free the original connection + response.content + response.close() + + # copy the request to resend + newreq = response.request.copy() + + newreq.headers["Authorization"] = self._get_auth_value() + + _response = response.connection.send(newreq, **kwargs) + _response.history.append(response) + _response.request = newreq + + return _response + +
+[docs] + def refresh_access_token(self, endpoint=None): + """Get a new access token""" + if self._use_wts: + self._access_token = self.get_access_token_from_wts(endpoint) + elif self._client_credentials: + self._access_token = get_access_token_with_client_credentials( + endpoint, self._client_credentials, self._client_scopes + ) + elif self._refresh_token: + self._access_token = get_access_token_with_key(self._refresh_token) + else: + logging.warning( + f"Unable to refresh access token. " + f"Authorized API calls will stop working when this token expires." + ) + + self._access_token_info = decode_token(self._access_token) + + cache_file = None + if self._use_wts: + cache_file = get_token_cache_file_name(self._wts_idp) + elif self._refresh_file: + cache_file = get_token_cache_file_name(self._refresh_token["api_key"]) + + if cache_file: + try: + self._write_to_file(cache_file, self._access_token) + except Exception as e: + logging.warning( + f"Unable to write access token to cache file. Exceeded number of retries. Details: {e}" + ) + + return self._access_token
+ + + @backoff.on_exception( + wait_gen=backoff.expo, exception=Exception, **DEFAULT_BACKOFF_SETTINGS + ) + def _write_to_file(self, cache_file, content): + # write a temp file, then rename - to avoid + # simultaneous writes to same file race condition + temp = cache_file + ( + ".tmp_eraseme_%d_%d" % (random.randrange(100000), time.time()) + ) + try: + with open(temp, "w") as f: + f.write(content) + os.rename(temp, cache_file) + return True + except Exception as e: + logging.warning("failed to write token cache file: " + cache_file) + logging.warning(str(e)) + raise e + +
+[docs] + def get_access_token(self): + """Get the access token - auto refresh if within 5 minutes of expiration""" + if not self._access_token: + if self._use_wts == True: + cache_file = get_token_cache_file_name(self._wts_idp) + else: + if self._refresh_token: + cache_file = get_token_cache_file_name( + self._refresh_token["api_key"] + ) + if cache_file and os.path.isfile(cache_file): + try: # don't freak out on invalid cache + with open(cache_file) as f: + self._access_token = f.read() + self._access_token_info = decode_token(self._access_token) + except Exception as e: + logging.warning("ignoring invalid token cache: " + cache_file) + self._access_token = None + self._access_token_info = None + logging.warning(str(e)) + + need_new_token = ( + not self._access_token + or not self._access_token_info + or time.time() + 300 > self._access_token_info["exp"] + ) + if need_new_token: + return self.refresh_access_token( + self.endpoint if hasattr(self, "endpoint") else None + ) + # use cache + return self._access_token
+ + + def _get_auth_value(self): + """Returns the Authorization header value for the request + + This gets called when added the Authorization header to the request. + This fetches the access token from the refresh token if the access token is missing. + + """ + return "bearer " + self.get_access_token() + +
+[docs] + def curl(self, path, request=None, data=None): + """ + Curl the given endpoint - ex: gen3 curl /user/user. Return requests.Response + + Args: + path (str): path under the commons to curl (/user/user, /index/index, /authz/mapping, ...) + request (str in GET|POST|PUT|DELETE): default to GET if data is not set, else default to POST + data (str): json string or "@filename" of a json file + """ + if not request: + request = "GET" + if data: + request = "POST" + json_data = data + output = None + if data and data[0] == "@": + with open(data[1:]) as f: + json_data = f.read() + if request == "GET": + output = requests.get(self.endpoint + "/" + path, auth=self) + elif request == "POST": + output = requests.post( + self.endpoint + "/" + path, json=json_data, auth=self + ) + elif request == "PUT": + output = requests.put(self.endpoint + "/" + path, json=json_data, auth=self) + elif request == "DELETE": + output = requests.delete(self.endpoint + "/" + path, auth=self) + else: + raise Exception("Invalid request type: " + request) + return output
+ + +
+[docs] + def get_access_token_from_wts(self, endpoint=None): + """ + Try to fetch an access token for the given idp from the wts + in the given namespace. If idp is not set, then default to "local" + """ + # attempt to get a token from the workspace-token-service + logging.debug("getting access token from wts..") + auth_url = get_wts_endpoint(self._wts_namespace) + "/token/" + + # If non "local" idp value exists, append to auth url + # If user specified endpoint value, then first attempt to determine idp value. + if self.endpoint or (self._wts_idp and self._wts_idp != "local"): + # If user supplied endpoint value and not idp, figure out the idp value + if self.endpoint: + logging.debug( + "First try to use the local WTS to figure out idp name for the supplied endpoint.." + ) + try: + provider_List = get_wts_idps(self._wts_namespace) + matchProviders = list( + filter( + lambda provider: provider["base_url"] == endpoint, + provider_List["providers"], + ) + ) + if len(matchProviders) == 1: + logging.debug("Found matching idp from local WTS.") + self._wts_idp = matchProviders[0]["idp"] + elif len(matchProviders) > 1: + raise ValueError( + "Multiple idps matched with endpoint value provided." + ) + else: + logging.debug("Could not find matching idp from local WTS.") + except Exception as e: + logging.debug( + "Exception occured when making network call to local WTS." + ) + if not self._external_wts_host: + raise e + else: + logging.debug("Since external WTS host exists, continuing on..") + pass + + if self._wts_idp and self._wts_idp != "local": + auth_url += "?idp={}".format(self._wts_idp) + + # If endpoint value exists, only get WTS token if idp value has been successfully determined + # Otherwise skip to querying external WTS + # This is to prevent local WTS from supplying an incorrect token to user + if ( + not self._external_wts_host + or not self.endpoint + or (self.endpoint and self._wts_idp != "local") + ): + try: + logging.debug("Try to get access token from local WTS..") + logging.debug(f"{auth_url=}") + resp = requests.get(auth_url) + if (resp and resp.status_code == 200) or (not self._external_wts_host): + return _handle_access_token_response(resp, "token") + except Exception as e: + if not self._external_wts_host: + raise e + else: + # Try to obtain token from external wts + logging.debug("Could get obtain token from Local WTS.") + pass + + # local workspace wts call failed, try using a network call + # First get access token with WTS host + logging.debug("Trying to get access token from external WTS Host..") + wts_token = get_access_token_with_key(self._refresh_token) + auth_url = self._external_wts_host + "token/" + + provider_List = get_wts_idps(self._wts_namespace, self._external_wts_host) + + # if user already supplied idp, use that + if self._wts_idp and self._wts_idp != "local": + matchProviders = list( + filter( + lambda provider: provider["idp"] == self._wts_idp, + provider_List["providers"], + ) + ) + elif endpoint: + matchProviders = list( + filter( + lambda provider: provider["base_url"] == endpoint, + provider_List["providers"], + ) + ) + else: + raise Exception( + "Unable to generate matching identity providers (no IdP or endpoint provided)" + ) + + if len(matchProviders) == 1: + self._wts_idp = matchProviders[0]["idp"] + logging.debug("Succesfully determined idp value: {}".format(self._wts_idp)) + else: + idp_list = "\n " + + if len(matchProviders) > 1: + for idp in matchProviders: + idp_list = ( + idp_list + + "idp name: " + + idp["idp"] + + " url: " + + idp["base_url"] + + "\n " + ) + raise ValueError( + "Multiple idps matched with endpoint value provided." + + idp_list + + "Query /wts/external_oidc/ for more information." + ) + else: + for idp in provider_List["providers"]: + idp_list = ( + idp_list + + "idp name: " + + idp["idp"] + + " Endpoint url: " + + idp["base_url"] + + "\n " + ) + raise ValueError( + "No idp matched with the endpoint or idp value provided.\n" + + "Please make sure your endpoint or idp value matches exactly with the output below.\n" + + "i.e. check trailing '/' character for the endpoint url\n" + + "Available Idps:" + + idp_list + + "Query /wts/external_oidc/ for more information." + ) + logging.debug("Finally getting access token..") + auth_url += "?idp={}".format(self._wts_idp) + header = {"Authorization": "Bearer " + wts_token} + resp = requests.get(auth_url, headers=header) + err_msg = "Please make sure the target commons is connected on your profile page and that connection has not expired." + if resp.status_code != 200: + logging.warning(err_msg) + return _handle_access_token_response(resp, "token")
+
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/file.html b/docs/_build/html/_modules/gen3/file.html new file mode 100644 index 000000000..3a7945131 --- /dev/null +++ b/docs/_build/html/_modules/gen3/file.html @@ -0,0 +1,397 @@ + + + + + + + gen3.file — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.file

+import json
+import requests
+import json
+import asyncio
+import aiohttp
+import aiofiles
+import time
+from tqdm import tqdm
+from types import SimpleNamespace as Namespace
+import os
+import requests
+from pathlib import Path
+
+from cdislogging import get_logger
+
+from gen3.index import Gen3Index
+from gen3.utils import DEFAULT_BACKOFF_SETTINGS, raise_for_status_and_print_error
+from urllib.parse import parse_qsl, urlencode, urlparse, urlunparse
+
+logging = get_logger("__name__")
+
+
+MAX_RETRIES = 3
+
+
+
+[docs] +class Gen3File: + """For interacting with Gen3 file management features. + + A class for interacting with the Gen3 file download services. + Supports getting presigned urls right now. + + Args: + auth_provider (Gen3Auth): A Gen3Auth class instance. + + Examples: + This generates the Gen3File class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page. + + >>> auth = Gen3Auth(refresh_file="credentials.json") + ... file = Gen3File(auth) + + """ + + def __init__(self, endpoint=None, auth_provider=None): + # auth_provider legacy interface required endpoint as 1st arg + self._auth_provider = auth_provider or endpoint + self._endpoint = self._auth_provider.endpoint + self.unsuccessful_downloads = [] + +
+[docs] + def get_presigned_url(self, guid, protocol=None): + """Generates a presigned URL for a file. + + Retrieves a presigned url for a file giving access to a file for a limited time. + + Args: + guid (str): The GUID for the object to retrieve. + protocol (:obj:`str`, optional): The protocol to use for picking the available URL for generating the presigned URL. + + Examples: + + >>> Gen3File.get_presigned_url(query) + + """ + api_url = "{}/user/data/download/{}".format(self._endpoint, guid) + if protocol: + api_url += "?protocol={}".format(protocol) + resp = requests.get(api_url, auth=self._auth_provider) + raise_for_status_and_print_error(resp) + + try: + return resp.json() + except: + return resp.text
+ + +
+[docs] + def delete_file(self, guid): + """ + This method is DEPRECATED. Use delete_file_locations() instead. + Delete all locations of a stored data file and remove its record from indexd + + Args: + guid (str): provide a UUID for file id to delete + Returns: + text: requests.delete text result + """ + print("This method is DEPRECATED. Use delete_file_locations() instead.") + api_url = "{}/user/data/{}".format(self._endpoint, guid) + output = requests.delete(api_url, auth=self._auth_provider).text + + return output
+ + +
+[docs] + def delete_file_locations(self, guid): + """ + Delete all locations of a stored data file and remove its record from indexd + + Args: + guid (str): provide a UUID for file id to delete + Returns: + requests.Response : requests.delete result + """ + api_url = "{}/user/data/{}".format(self._endpoint, guid) + output = requests.delete(api_url, auth=self._auth_provider) + + return output
+ + +
+[docs] + def upload_file( + self, file_name, authz=None, protocol=None, expires_in=None, bucket=None + ): + """ + Get a presigned url for a file to upload + + Args: + file_name (str): file_name to use for upload + authz (list): authorization scope for the file as list of paths, optional. + protocol (str): Storage protocol to use for upload: "s3", "az". + If this isn't set, the default will be "s3" + expires_in (int): Amount in seconds that the signed url will expire from datetime.utcnow(). + Be sure to use a positive integer. + This value will also be treated as <= MAX_PRESIGNED_URL_TTL in the fence configuration. + bucket (str): Bucket to upload to. The bucket must be configured in the Fence instance's + `ALLOWED_DATA_UPLOAD_BUCKETS` setting. If not specified, Fence defaults to the + `DATA_UPLOAD_BUCKET` setting. + Returns: + Document: json representation for the file upload + """ + api_url = f"{self._endpoint}/user/data/upload" + body = {} + if protocol: + body["protocol"] = protocol + if authz: + body["authz"] = authz + if expires_in: + body["expires_in"] = expires_in + if file_name: + body["file_name"] = file_name + if bucket: + body["bucket"] = bucket + + headers = {"Content-Type": "application/json"} + resp = requests.post( + api_url, auth=self._auth_provider, json=body, headers=headers + ) + raise_for_status_and_print_error(resp) + try: + data = json.loads(resp.text) + except: + return resp.text + + return data
+ + + def _ensure_dirpath_exists(path: Path) -> Path: + """Utility to create a directory if missing. + Returns the path so that the call can be inlined in another call + Args: + path (Path): path to create + Returns + path of created directory + """ + assert path + out_path: Path = path + + if not out_path.exists(): + out_path.mkdir(parents=True, exist_ok=True) + + return out_path + +
+[docs] + def download_single(self, object_id, path): + """ + Download a single file using its GUID. + + Args: + object_id (str): The file's unique ID + path (str): Path to store the downloaded file at + """ + try: + url = self.get_presigned_url(object_id) + except Exception as e: + logging.critical(f"Unable to get a presigned URL for download: {e}") + return False + + response = requests.get(url["url"], stream=True) + if response.status_code != 200: + logging.error(f"Response code: {response.status_code}") + if response.status_code >= 500: + for _ in range(MAX_RETRIES): + logging.info("Retrying now...") + # NOTE could be updated with exponential backoff + time.sleep(1) + response = requests.get(url["url"], stream=True) + if response.status == 200: + break + if response.status != 200: + logging.critical("Response status not 200, try again later") + return False + else: + return False + + response.raise_for_status() + + total_size_in_bytes = int(response.headers.get("content-length")) + total_downloaded = 0 + + index = Gen3Index(self._auth_provider) + record = index.get_record(object_id) + + filename = record["file_name"] + + out_path = Gen3File._ensure_dirpath_exists(Path(path)) + + with open(os.path.join(out_path, filename), "wb") as f: + for data in response.iter_content(4096): + total_downloaded += len(data) + f.write(data) + + if total_size_in_bytes == total_downloaded: + logging.info(f"File {filename} downloaded successfully") + + else: + logging.error(f"File {filename} not downloaded successfully") + return False + + return True
+ + +
+[docs] + def upload_file_to_guid( + self, guid, file_name, protocol=None, expires_in=None, bucket=None + ): + """ + Get a presigned url for a file to upload to the specified existing GUID + + Args: + file_name (str): file_name to use for upload + protocol (str): Storage protocol to use for upload: "s3", "az". + If this isn't set, the default will be "s3" + expires_in (int): Amount in seconds that the signed url will expire from datetime.utcnow(). + Be sure to use a positive integer. + This value will also be treated as <= MAX_PRESIGNED_URL_TTL in the fence configuration. + bucket (str): Bucket to upload to. The bucket must be configured in the Fence instance's + `ALLOWED_DATA_UPLOAD_BUCKETS` setting. If not specified, Fence defaults to the + `DATA_UPLOAD_BUCKET` setting. + Returns: + Document: json representation for the file upload + """ + url = f"{self._endpoint}/user/data/upload/{guid}" + params = {} + if protocol: + params["protocol"] = protocol + if expires_in: + params["expires_in"] = expires_in + if file_name: + params["file_name"] = file_name + if bucket: + params["bucket"] = bucket + + url_parts = list(urlparse(url)) + query = dict(parse_qsl(url_parts[4])) + query.update(params) + url_parts[4] = urlencode(query) + url = urlunparse(url_parts) + + resp = requests.get(url, auth=self._auth_provider) + raise_for_status_and_print_error(resp) + return resp.json()
+
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/index.html b/docs/_build/html/_modules/gen3/index.html new file mode 100644 index 000000000..4938dcf44 --- /dev/null +++ b/docs/_build/html/_modules/gen3/index.html @@ -0,0 +1,1138 @@ + + + + + + + gen3.index — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.index

+import aiohttp
+import backoff
+import requests
+import urllib.parse
+from cdislogging import get_logger
+
+import sys
+
+import indexclient.client as client
+
+from gen3.utils import DEFAULT_BACKOFF_SETTINGS, raise_for_status_and_print_error
+from gen3.auth import Gen3Auth
+
+logging = get_logger("__name__")
+
+
+
+[docs] +class Gen3Index: + """ + + A class for interacting with the Gen3 Index services. + + Args: + endpoint (str): public endpoint for reading/querying indexd - only necessary if auth_provider not provided + auth_provider (Gen3Auth): A Gen3Auth class instance or indexd basic creds tuple + + Examples: + This generates the Gen3Index class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page. + + >>> auth = Gen3Auth(refresh_file="credentials.json") + ... index = Gen3Index(auth) + + """ + + def __init__(self, endpoint=None, auth_provider=None, service_location="index"): + # legacy interface required endpoint as 1st arg + if endpoint and isinstance(endpoint, Gen3Auth): + auth_provider = endpoint + endpoint = None + if auth_provider and isinstance(auth_provider, Gen3Auth): + endpoint = auth_provider.endpoint + endpoint = endpoint.strip("/") + # if running locally, indexd is deployed by itself without a location relative + # to the commons + if "http://localhost" in endpoint: + service_location = "" + + if not endpoint.endswith(service_location): + endpoint += "/" + service_location + + self.client = client.IndexClient(endpoint, auth=auth_provider) + + ### Get Requests +
+[docs] + def is_healthy(self): + """ + + Return if indexd is healthy or not + + """ + try: + response = self.client._get("_status") + response.raise_for_status() + except Exception: + return False + return response.text == "Healthy"
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_version(self): + """ + + Return the version of indexd + + """ + response = self.client._get("_version") + raise_for_status_and_print_error(response) + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_stats(self): + """ + + Return basic info about the records in indexd + + """ + response = self.client._get("_stats") + raise_for_status_and_print_error(response) + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_all_records(self, limit=None, paginate=False): + """ + + Get a list of all records + + """ + all_records = [] + url = "index/" + + if limit: + url += f"?limit={limit}" + + response = self.client._get(url) + raise_for_status_and_print_error(response) + + records = response.json().get("records") + all_records.extend(records) + + if paginate and records: + previous_did = None + start_did = records[-1].get("did") + + while start_did != previous_did: + previous_did = start_did + + params = {"start": f"{start_did}"} + url_parts = list(urllib.parse.urlparse(url)) + query = dict(urllib.parse.parse_qsl(url_parts[4])) + query.update(params) + + url_parts[4] = urllib.parse.urlencode(query) + + url = urllib.parse.urlunparse(url_parts) + response = self.client._get(url) + raise_for_status_and_print_error(response) + + records = response.json().get("records") + all_records.extend(records) + + if records: + start_did = response.json().get("records")[-1].get("did") + + return all_records
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_records_on_page(self, limit=None, page=None): + """ + + Get a list of all records given the page and page size limit + + """ + params = {} + url = "index/" + + if limit is not None: + params["limit"] = limit + + if page is not None: + params["page"] = page + + query = urllib.parse.urlencode(params) + + response = self.client._get(url + "?" + query) + raise_for_status_and_print_error(response) + + return response.json().get("records")
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_get_record(self, guid=None, _ssl=None): + """ + Asynchronous function to request a record from indexd. + + Args: + guid (str): record guid + + Returns: + dict: indexd record + """ + url = f"{self.client.url}/index/{guid}" + async with aiohttp.ClientSession() as session: + async with session.get(url, ssl=_ssl) as response: + raise_for_status_and_print_error(response) + response = await response.json() + + return response
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_get_records_on_page(self, limit=None, page=None, _ssl=None): + """ + Asynchronous function to request a page from indexd. + + Args: + page (int/str): indexd page to request + + Returns: + List[dict]: List of indexd records from the page + """ + all_records = [] + params = {} + + if limit is not None: + params["limit"] = limit + + if page is not None: + params["page"] = page + + query = urllib.parse.urlencode(params) + + url = f"{self.client.url}/index" + "?" + query + async with aiohttp.ClientSession() as session: + async with session.get(url, ssl=_ssl) as response: + response = await response.json() + + return response.get("records")
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_get_records_from_checksum( + self, checksum, checksum_type="md5", _ssl=None + ): + """ + Asynchronous function to request records from indexd matching checksum. + + Args: + checksum (str): indexd checksum to request + checksum_type (str): type of checksum, defaults to md5 + + Returns: + List[dict]: List of indexd records + """ + all_records = [] + params = {} + + params["hash"] = f"{checksum_type}:{checksum}" + + query = urllib.parse.urlencode(params) + + url = f"{self.client.url}/index" + "?" + query + async with aiohttp.ClientSession() as session: + async with session.get(url, ssl=_ssl) as response: + response = await response.json() + + return response.get("records")
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get(self, guid, dist_resolution=True): + """ + + Get the metadata associated with the given id, alias, or + distributed identifier + + Args: + guid: string + - record id + dist_resolution: boolean + - *optional* Specify if we want distributed dist_resolution or not + + """ + rec = self.client.global_get(guid, dist_resolution) + + if not rec: + return rec + + return rec.to_json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_urls(self, size=None, hashes=None, guids=None): + """ + + Get a list of urls that match query params + + Args: + size: integer + - object size + hashes: string + - hashes specified as algorithm:value + guids: list + - list of ids + + """ + if guids: + guids = ",".join(guids) + p = {"size": size, "hash": hashes, "ids": guids} + urls = self.client._get("urls", params=p).json() + return [url for _, url in urls.items()]
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_record(self, guid): + """ + + Get the metadata associated with a given id + + """ + rec = self.client.get(guid) + + if not rec: + return rec + + return rec.to_json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_record_doc(self, guid): + """ + + Get the metadata associated with a given id + + """ + return self.client.get(guid)
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_with_params(self, params=None): + """ + + Return a document object corresponding to the supplied parameters, such + as ``{'hashes': {'md5': '...'}, 'size': '...', 'metadata': {'file_state': '...'}}``. + + - need to include all the hashes in the request + - index client like signpost or indexd will need to handle the + query param `'hash': 'hash_type:hash'` + + """ + rec = self.client.get_with_params(params) + + if not rec: + return rec + + return rec.to_json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_get_with_params(self, params, _ssl=None): + """ + + Return a document object corresponding to the supplied parameter + + - need to include all the hashes in the request + - need to handle the query param `'hash': 'hash_type:hash'` + + Args: + params (dict): params to search with + _ssl (None, optional): whether or not to use ssl + + Returns: + Document: json representation of an entry in indexd + + """ + query_params = urllib.parse.urlencode(params) + url = f"{self.client.url}/index/?{query_params}" + async with aiohttp.ClientSession() as session: + async with session.get(url, ssl=_ssl) as response: + await response.raise_for_status() + response = await response.json() + + return response
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_latest_version(self, guid, has_version=False): + """ + + Get the metadata of the latest index record version associated + with the given id + + Args: + guid: string + - record id + has_version: boolean + - *optional* exclude entries without a version + + """ + rec = self.client.get_latest_version(guid, has_version) + + if not rec: + return rec + + return rec.to_json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_versions(self, guid): + """ + + Get the metadata of index record version associated with the + given id + + Args: + guid: string + - record id + + """ + response = self.client._get(f"/index/{guid}/versions") + raise_for_status_and_print_error(response) + versions = response.json() + + return [r for _, r in versions.items()]
+ + + ### Post Requests + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def create_record( + self, + hashes, + size, + did=None, + urls=None, + file_name=None, + metadata=None, + baseid=None, + acl=None, + urls_metadata=None, + version=None, + authz=None, + description=None, + content_created_date=None, + content_updated_date=None, + ): + """ + + Create a new record and add it to the index + + Args: + hashes (dict): {hash type: hash value,} + eg ``hashes={'md5': ab167e49d25b488939b1ede42752458b'}`` + size (int): file size metadata associated with a given uuid + did (str): provide a UUID for the new indexd to be made + urls (list): list of URLs where you can download the UUID + acl (list): access control list + authz (str): RBAC string + file_name (str): name of the file associated with a given UUID + metadata (dict): additional key value metadata for this entry + urls_metadata (dict): metadata attached to each url + baseid (str): optional baseid to group with previous entries versions + version (str): entry version string + description (str): optional description of the object + content_created_date (datetime): optional creation date and time of the content being indexed + content_updated_date (datetime): optional update date and time of the content being indexed + Returns: + Document: json representation of an entry in indexd + + """ + if urls is None: + urls = [] + json = { + "urls": urls, + "form": "object", + "hashes": hashes, + "size": size, + "file_name": file_name, + "metadata": metadata, + "urls_metadata": urls_metadata, + "baseid": baseid, + "acl": acl, + "authz": authz, + "version": version, + "description": description, + "content_created_date": content_created_date, + "content_updated_date": content_updated_date, + } + if did: + json["did"] = did + resp = self.client._post( + "index/", + headers={"content-type": "application/json"}, + data=client.json_dumps(json), + auth=self.client.auth, + ) + raise_for_status_and_print_error(resp) + + return resp.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_create_record( + self, + hashes, + size, + did=None, + urls=None, + file_name=None, + metadata=None, + baseid=None, + acl=None, + urls_metadata=None, + version=None, + authz=None, + _ssl=None, + description=None, + content_created_date=None, + content_updated_date=None, + ): + """ + Asynchronous function to create a record in indexd. + + Args: + hashes (dict): {hash type: hash value,} + eg ``hashes={'md5': ab167e49d25b488939b1ede42752458b'}`` + size (int): file size metadata associated with a given uuid + did (str): provide a UUID for the new indexd to be made + urls (list): list of URLs where you can download the UUID + acl (list): access control list + authz (str): RBAC string + file_name (str): name of the file associated with a given UUID + metadata (dict): additional key value metadata for this entry + urls_metadata (dict): metadata attached to each url + baseid (str): optional baseid to group with previous entries versions + version (str): entry version string + description (str): optional description of the object + content_created_date (datetime): optional creation date and time of the content being indexed + content_updated_date (datetime): optional update date and time of the content being indexed + + Returns: + Document: json representation of an entry in indexd + """ + async with aiohttp.ClientSession() as session: + if urls is None: + urls = [] + + json = { + "form": "object", + "hashes": hashes, + "size": size, + "urls": urls or [], + } + if did: + json["did"] = did + if file_name: + json["file_name"] = file_name + if metadata: + json["metadata"] = metadata + if baseid: + json["baseid"] = baseid + if acl: + json["acl"] = acl + if urls_metadata: + json["urls_metadata"] = urls_metadata + if version: + json["version"] = version + if authz: + json["authz"] = authz + if description: + json["description"] = description + if content_created_date: + json["content_created_date"] = content_created_date + if content_updated_date: + json["content_updated_date"] = content_updated_date + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self.client.auth._get_auth_value()} + + async with session.post( + f"{self.client.url}/index/", + json=json, + headers=headers, + ssl=_ssl, + ) as response: + assert response.status == 200, await response.json() + response = await response.json() + + return response
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def create_blank(self, uploader, file_name=None): + """ + + Create a blank record + + Args: + json - json in the format: + { + 'uploader': type(string) + 'file_name': type(string) (optional*) + } + + """ + json = {"uploader": uploader, "file_name": file_name} + response = self.client._post( + "index/blank", + headers={"content-type": "application/json"}, + auth=self.client.auth, + data=client.json_dumps(json), + ) + raise_for_status_and_print_error(response) + rec = response.json() + + return self.get_record(rec["did"])
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def create_new_version( + self, + guid, + hashes, + size, + did=None, + urls=None, + file_name=None, + metadata=None, + acl=None, + urls_metadata=None, + version=None, + authz=None, + description=None, + content_created_date=None, + content_updated_date=None, + ): + """ + + Add new version for the document associated to the provided uuid + + Since data content is immutable, when you want to change the + size or hash, a new index document with a new uuid needs to be + created as its new version. That uuid is returned in the did + field of the response. The old index document is not deleted. + + Args: + guid: (string): record id + hashes (dict): {hash type: hash value,} + eg ``hashes={'md5': ab167e49d25b488939b1ede42752458b'}`` + size (int): file size metadata associated with a given uuid + did (str): provide a UUID for the new indexd to be made + urls (list): list of URLs where you can download the UUID + file_name (str): name of the file associated with a given UUID + metadata (dict): additional key value metadata for this entry + acl (list): access control list + urls_metadata (dict): metadata attached to each url + version (str): entry version string + authz (str): RBAC string + description (str): optional description of the object + content_created_date (datetime): optional creation date and time of the content being indexed + content_updated_date (datetime): optional update date and time of the content being indexed + + body: json/dictionary format + - Metadata object that needs to be added to the store. + Providing size and at least one hash is necessary and + sufficient. Note: it is a good idea to add a version + number + + """ + if urls is None: + urls = [] + json = { + "urls": urls, + "form": "object", + "hashes": hashes, + "size": size, + "file_name": file_name, + "metadata": metadata, + "urls_metadata": urls_metadata, + "acl": acl, + "authz": authz, + "version": version, + "description": description, + "content_created_date": content_created_date, + "content_updated_date": content_updated_date, + } + if did: + json["did"] = did + response = self.client._post( + "index", + guid, + headers={"content-type": "application/json"}, + data=client.json_dumps(json), + auth=self.client.auth, + ) + raise_for_status_and_print_error(response) + rec = response.json() + + if rec and "did" in rec: + return self.get_record(rec["did"]) + return None
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_records(self, dids): + """ + + Get a list of documents given a list of dids + + Args: + dids: list + - a list of record ids + + Returns: + list: json representing index records + + """ + try: + response = self.client._post( + "bulk/documents", json=dids, auth=self.client.auth + ) + except requests.HTTPError as exception: + if exception.response.status_code == 404: + return None + else: + raise exception + + return response.json()
+ + + ### Put Requests + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def update_blank(self, guid, rev, hashes, size, urls=None, authz=None): + """ + + Update only hashes and size for a blank index + + Args: + guid (string): record id + rev (string): data revision - simple consistency mechanism + hashes (dict): {hash type: hash value,} + eg ``hashes={'md5': ab167e49d25b488939b1ede42752458b'}`` + size (int): file size metadata associated with a given uuid + + """ + params = {"rev": rev} + json = {"hashes": hashes, "size": size} + if urls: + json["urls"] = urls + if authz: + json["authz"] = authz + + response = self.client._put( + "index/blank", + guid, + headers={"content-type": "application/json"}, + params=params, + auth=self.client.auth, + data=client.json_dumps(json), + ) + raise_for_status_and_print_error(response) + rec = response.json() + + return self.get_record(rec["did"])
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def update_record( + self, + guid, + file_name=None, + urls=None, + version=None, + metadata=None, + acl=None, + authz=None, + urls_metadata=None, + description=None, + content_created_date=None, + content_updated_date=None, + ): + """ + + Update an existing entry in the index + + Args: + guid: string + - record id + body: json/dictionary format + - index record information that needs to be updated. + - can not update size or hash, use new version for that + + """ + updatable_attrs = { + "file_name": file_name, + "urls": urls, + "version": version, + "metadata": metadata, + "acl": acl, + "authz": authz, + "urls_metadata": urls_metadata, + "description": description, + "content_created_date": content_created_date, + "content_updated_date": content_updated_date, + } + rec = self.client.get(guid) + for k, v in updatable_attrs.items(): + if v is not None: + exec(f"rec.{k} = v") + rec.patch() + return rec.to_json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_update_record( + self, + guid, + file_name=None, + urls=None, + version=None, + metadata=None, + acl=None, + authz=None, + urls_metadata=None, + _ssl=None, + description=None, + content_created_date=None, + content_updated_date=None, + **kwargs, + ): + """ + Asynchronous function to update a record in indexd. + + Args: + guid: string + - record id + body: json/dictionary format + - index record information that needs to be updated. + - can not update size or hash, use new version for that + """ + async with aiohttp.ClientSession() as session: + updatable_attrs = { + "file_name": file_name, + "urls": urls, + "version": version, + "metadata": metadata, + "acl": acl, + "authz": authz, + "urls_metadata": urls_metadata, + "description": description, + "content_created_date": content_created_date, + "content_updated_date": content_updated_date, + } + record = await self.async_get_record(guid) + revision = record.get("rev") + + for key, value in updatable_attrs.items(): + if value is not None: + record[key] = value + + del record["created_date"] + del record["rev"] + del record["updated_date"] + del record["version"] + del record["uploader"] + del record["form"] + del record["urls_metadata"] + del record["baseid"] + del record["size"] + del record["hashes"] + del record["did"] + + logging.info(f"PUT-ing record: {record}") + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self.client.auth._get_auth_value()} + + async with session.put( + f"{self.client.url}/index/{guid}?rev={revision}", + json=record, + headers=headers, + ssl=_ssl, + ) as response: + assert response.status == 200, await response.json() + response = await response.json() + + return response
+ + + ### Delete Requests + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def delete_record(self, guid): + """ + + Delete an entry from the index + + Args: + guid: string + - record id + + Returns: Nothing + + """ + rec = self.client.get(guid) + if rec: + rec.delete() + return rec
+ + + ### Query Requests + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def query_urls(self, pattern): + """ + + Query all record URLs for given pattern + + Args: + pattern (str): pattern to match against indexd urls + + Returns: + List[records]: indexd records with urls matching pattern + """ + response = self.client._get(f"/_query/urls/q?include={pattern}") + raise_for_status_and_print_error(response) + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_query_urls(self, pattern, _ssl=None): + """ + Asynchronous function to query urls from indexd. + + Args: + pattern (str): pattern to match against indexd urls + + Returns: + List[records]: indexd records with urls matching pattern + """ + url = f"{self.client.url}/_query/urls/q?include={pattern}" + async with aiohttp.ClientSession() as session: + logging.debug(f"request: {url}") + async with session.get(url, ssl=_ssl) as response: + raise_for_status_and_print_error(response) + response = await response.json() + + return response
+ + + ## Mint GUID Requests + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_valid_guids(self, count=None): + """ + Get a list of valid GUIDs without indexing + Args: + count (int): number of GUIDs to request + Returns: + List[str]: list of valid indexd GUIDs + """ + url = "/guid/mint" + if count: + url += f"?count={count}" + + response = self.client._get(url) + response.raise_for_status() + return response.json().get("guids", [])
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_guids_prefix(self): + """ + Get the prefix for GUIDs if there is one + Returns: + str: prefix for this instance + """ + response = self.client._get("/guid/prefix") + response.raise_for_status() + return response.json().get("prefix")
+
+ + + +def _print_func_name(function): + return "{}.{}".format(function.__module__, function.__name__) + + +def _print_kwargs(kwargs): + return ", ".join("{}={}".format(k, repr(v)) for k, v in list(kwargs.items())) +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/jobs.html b/docs/_build/html/_modules/gen3/jobs.html new file mode 100644 index 000000000..b3f266ef7 --- /dev/null +++ b/docs/_build/html/_modules/gen3/jobs.html @@ -0,0 +1,369 @@ + + + + + + + gen3.jobs — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.jobs

+"""
+Contains class for interacting with Gen3's Job Dispatching Service(s).
+"""
+import aiohttp
+import asyncio
+import backoff
+import json
+import requests
+import urllib.parse
+from cdislogging import get_logger
+
+import sys
+import time
+
+from gen3.utils import (
+    append_query_params,
+    DEFAULT_BACKOFF_SETTINGS,
+    raise_for_status_and_print_error,
+)
+
+# sower's "action" mapping to the relevant job
+INGEST_METADATA_JOB = "ingest-metadata-manifest"
+DBGAP_METADATA_JOB = "get-dbgap-metadata"
+INDEX_MANIFEST_JOB = "index-object-manifest"
+DOWNLOAD_MANIFEST_JOB = "download-indexd-manifest"
+MERGE_MANIFEST_JOB = "merge-manifests"
+
+logging = get_logger("__name__")
+
+
+
+[docs] +class Gen3Jobs: + """ + A class for interacting with the Gen3's Job Dispatching Service(s). + + Examples: + This generates the Gen3Jobs class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page. + + >>> auth = Gen3Auth(refresh_file="credentials.json") + ... jobs = Gen3Jobs(auth) + """ + + def __init__(self, endpoint=None, auth_provider=None, service_location="job"): + """ + Initialization for instance of the class to setup basic endpoint info. + + Args: + auth_provider (Gen3Auth, optional): Gen3Auth class to handle passing your + token, required for admin endpoints + service_location (str, optional): deployment location relative to the + endpoint provided + """ + # auth_provider legacy interface required endpoint as 1st arg + auth_provider = auth_provider or endpoint + endpoint = auth_provider.endpoint.strip("/") + # if running locally, mds is deployed by itself without a location relative + # to the commons + if "http://localhost" in endpoint: + service_location = "" + + if not endpoint.endswith(service_location): + endpoint += "/" + service_location + + self.endpoint = endpoint.rstrip("/") + self._auth_provider = auth_provider + +
+[docs] + async def async_run_job_and_wait(self, job_name, job_input, _ssl=None, **kwargs): + """ + Asynchronous function to create a job, wait for output, and return. Will + sleep in a linear delay until the job is done, starting with 1 second. + + Args: + _ssl (None, optional): whether or not to use ssl + job_name (str): name for the job, can use globals in this file + job_input (Dict): dictionary of input for the job + + Returns: + Dict: Response from the endpoint + """ + job_create_response = await self.async_create_job(job_name, job_input) + + status = {"status": "Running"} + sleep_time = 3 + while status.get("status") == "Running": + logging.info(f"job still running, waiting for {sleep_time} seconds...") + time.sleep(sleep_time) + sleep_time *= 1.5 + status = await self.async_get_status(job_create_response.get("uid")) + logging.info(f"{status}") + + logging.info(f"Job is finished!") + + if status.get("status") != "Completed": + raise Exception(f"Job status not complete: {status.get('status')}.") + + response = await self.async_get_output(job_create_response.get("uid")) + return response
+ + +
+[docs] + def is_healthy(self): + """ + Return if is healthy or not + + Returns: + bool: True if healthy + """ + try: + response = requests.get( + self.endpoint + "/_status", auth=self._auth_provider + ) + raise_for_status_and_print_error(response) + except Exception as exc: + logging.error(exc) + return False + + return response.text == "Healthy"
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_version(self): + """ + Return the version + + Returns: + str: the version + """ + response = requests.get(self.endpoint + "/_version", auth=self._auth_provider) + raise_for_status_and_print_error(response) + return response.json().get("version")
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def list_jobs(self): + """ + List all jobs + """ + response = requests.get(self.endpoint + "/list", auth=self._auth_provider) + raise_for_status_and_print_error(response) + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def create_job(self, job_name, job_input): + """ + Create a job with given name and input + + Args: + job_name (str): name for the job, can use globals in this file + job_input (Dict): dictionary of input for the job + + Returns: + Dict: Response from the endpoint + """ + data = {"action": job_name, "input": job_input} + response = requests.post( + self.endpoint + "/dispatch", json=data, auth=self._auth_provider + ) + raise_for_status_and_print_error(response) + return response.json()
+ + + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_create_job(self, job_name, job_input, _ssl=None, **kwargs): + async with aiohttp.ClientSession() as session: + url = self.endpoint + f"/dispatch" + url_with_params = append_query_params(url, **kwargs) + + data = json.dumps({"action": job_name, "input": job_input}) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + async with session.post( + url_with_params, data=data, headers=headers, ssl=_ssl + ) as response: + raise_for_status_and_print_error(response) + response = await response.json(content_type=None) + return response + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_status(self, job_id): + """ + Get the status of a previously created job + """ + response = requests.get( + self.endpoint + f"/status?UID={job_id}", auth=self._auth_provider + ) + raise_for_status_and_print_error(response) + return response.json()
+ + + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_get_status(self, job_id, _ssl=None, **kwargs): + async with aiohttp.ClientSession() as session: + url = self.endpoint + f"/status?UID={job_id}" + url_with_params = append_query_params(url, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + async with session.get( + url_with_params, headers=headers, ssl=_ssl + ) as response: + raise_for_status_and_print_error(response) + response = await response.json(content_type=None) + return response + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_output(self, job_id): + """ + Get the output of a previously completed job + """ + response = requests.get( + self.endpoint + f"/output?UID={job_id}", auth=self._auth_provider + ) + raise_for_status_and_print_error(response) + return response.json()
+ + + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_get_output(self, job_id, _ssl=None, **kwargs): + async with aiohttp.ClientSession() as session: + url = self.endpoint + f"/output?UID={job_id}" + url_with_params = append_query_params(url, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + async with session.get( + url_with_params, headers=headers, ssl=_ssl + ) as response: + raise_for_status_and_print_error(response) + response = await response.json(content_type=None) + return response
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/metadata.html b/docs/_build/html/_modules/gen3/metadata.html new file mode 100644 index 000000000..0dc385551 --- /dev/null +++ b/docs/_build/html/_modules/gen3/metadata.html @@ -0,0 +1,1156 @@ + + + + + + + gen3.metadata — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.metadata

+"""
+Contains class for interacting with Gen3's Metadata Service.
+"""
+import aiohttp
+import backoff
+from datetime import datetime
+import requests
+import json
+import os
+from urllib.parse import urlparse
+
+from gen3.utils import (
+    append_query_params,
+    DEFAULT_BACKOFF_SETTINGS,
+    BACKOFF_NO_LOG_IF_NOT_RETRIED,
+    _verify_schema,
+)
+from gen3.auth import Gen3Auth
+from gen3.tools.utils import (
+    RECORD_TYPE_STANDARD_KEY,
+    GUID_COLUMN_NAMES,
+    FILENAME_COLUMN_NAMES,
+    SIZE_COLUMN_NAMES,
+    MD5_COLUMN_NAMES,
+    ACLS_COLUMN_NAMES,
+    URLS_COLUMN_NAMES,
+    AUTHZ_COLUMN_NAMES,
+    PREV_GUID_COLUMN_NAMES,
+)
+
+from cdislogging import get_logger
+
+logging = get_logger("__name__")
+
+
+PACKAGE_CONTENTS_STANDARD_KEY = "package_contents"
+PACKAGE_CONTENTS_SCHEMA = {
+    "type": "array",
+    "items": {
+        "type": "object",
+        "properties": {
+            "file_name": {
+                "type": "string",
+            },
+            "size": {
+                "type": "integer",
+            },
+            "hashes": {
+                "type": "object",
+            },
+        },
+        "required": ["file_name"],
+        "additionalProperties": True,
+    },
+}
+
+
+
+[docs] +class Gen3Metadata: + """ + A class for interacting with the Gen3 Metadata services. + + Examples: + This generates the Gen3Metadata class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page. + + >>> auth = Gen3Auth(refresh_file="credentials.json") + ... metadata = Gen3Metadata(auth) + + Attributes: + endpoint (str): public endpoint for reading/querying metadata - only necessary if auth_provider not provided + auth_provider (Gen3Auth): auth manager + """ + + def __init__( + self, + endpoint=None, + auth_provider=None, + service_location="mds", + admin_endpoint_suffix="-admin", + ): + """ + Initialization for instance of the class to setup basic endpoint info. + + Args: + endpoint (str): URL for a Data Commons that has metadata service deployed + auth_provider (Gen3Auth, optional): Gen3Auth class to handle passing your + token, required for admin endpoints + service_location (str, optional): deployment location relative to the + endpoint provided + """ + # legacy interface required endpoint as 1st arg + if endpoint and isinstance(endpoint, Gen3Auth): + auth_provider = endpoint + endpoint = None + if auth_provider and isinstance(auth_provider, Gen3Auth): + endpoint = auth_provider.endpoint + endpoint = endpoint.strip("/") + # if running locally, mds is deployed by itself without a location relative + # to the commons + if "http://localhost" in endpoint: + service_location = "" + admin_endpoint_suffix = "" + + if not endpoint.endswith(service_location): + endpoint += "/" + service_location + + self.endpoint = endpoint.rstrip("/") + self.admin_endpoint = endpoint.rstrip("/") + admin_endpoint_suffix + self._auth_provider = auth_provider + +
+[docs] + def is_healthy(self): + """ + Return if is healthy or not + + Returns: + bool: True if healthy + """ + try: + response = requests.get( + self.endpoint + "/_status", auth=self._auth_provider + ) + response.raise_for_status() + except Exception as exc: + logging.error(exc) + return False + + return response.json().get("status") == "OK"
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_version(self): + """ + Return the version + + Returns: + str: the version + """ + response = requests.get(self.endpoint + "/version", auth=self._auth_provider) + response.raise_for_status() + return response.text
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def get_index_key_paths(self): + """ + List all the metadata key paths indexed in the database. + + Returns: + List: list of metadata key paths + """ + response = requests.get( + self.admin_endpoint + "/metadata_index", auth=self._auth_provider + ) + response.raise_for_status() + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def create_index_key_path(self, path): + """ + Create a metadata key path indexed in the database. + + Args: + path (str): metadata key path + """ + response = requests.post( + self.admin_endpoint + f"/metadata_index/{path}", auth=self._auth_provider + ) + response.raise_for_status() + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def delete_index_key_path(self, path): + """ + List all the metadata key paths indexed in the database. + + Args: + path (str): metadata key path + """ + response = requests.delete( + self.admin_endpoint + f"/metadata_index/{path}", auth=self._auth_provider + ) + response.raise_for_status() + return response
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def query( + self, + query, + return_full_metadata=False, + limit=10, + offset=0, + use_agg_mds=False, + **kwargs, + ): + """ + Query the metadata given a query. + + Query format is based off the logic used in the service: + ''' + Without filters, this will return all data. Add filters as query strings like this: + + GET /metadata?a=1&b=2 + + This will match all records that have metadata containing all of: + {"a": 1, "b": 2} + The values are always treated as strings for filtering. Nesting is supported: + + GET /metadata?a.b.c=3 + + Matching records containing: + {"a": {"b": {"c": 3}}} + Providing the same key with more than one value filters records whose value of the given key matches any of the given values. But values of different keys must all match. For example: + + GET /metadata?a.b.c=3&a.b.c=33&a.b.d=4 + + Matches these: + {"a": {"b": {"c": 3, "d": 4}}} + {"a": {"b": {"c": 33, "d": 4}}} + {"a": {"b": {"c": "3", "d": 4, "e": 5}}} + But won't match these: + + {"a": {"b": {"c": 3}}} + {"a": {"b": {"c": 3, "d": 5}}} + {"a": {"b": {"d": 5}}} + {"a": {"b": {"c": "333", "d": 4}}} + ''' + + Args: + query (str): mds query as defined by the metadata api + return_full_metadata (bool, optional): if False will just return a list of guids + limit (int, optional): max num records to return + offset (int, optional): offset for output + + Returns: + List: list of guids matching query + OR if return_full_metadata=True + Dict{guid: {metadata}}: Dictionary with GUIDs as keys and associated + metadata JSON blobs as values + """ + + url = self.endpoint + f"/metadata?{query}" + + url_with_params = append_query_params( + url, data=return_full_metadata, limit=limit, offset=offset, **kwargs + ) + logging.debug(f"hitting: {url_with_params}") + response = requests.get(url_with_params, auth=self._auth_provider) + response.raise_for_status() + + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + async def async_get(self, guid, _ssl=None, **kwargs): + """ + Asynchronous function to get metadata + + Args: + guid (str): guid to use + _ssl (None, optional): whether or not to use ssl + + Returns: + Dict: metadata for given guid + """ + async with aiohttp.ClientSession() as session: + url = self.endpoint + f"/metadata/{guid}" + url_with_params = append_query_params(url, **kwargs) + + logging.debug(f"hitting: {url_with_params}") + + async with session.get(url_with_params, ssl=_ssl) as response: + response.raise_for_status() + response = await response.json() + + return response
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + def get(self, guid, **kwargs): + """ + Get the metadata associated with the guid + Args: + guid (str): guid to use + Returns: + Dict: metadata for given guid + """ + url = self.endpoint + f"/metadata/{guid}" + url_with_params = append_query_params(url, **kwargs) + logging.debug(f"hitting: {url_with_params}") + response = requests.get(url_with_params, auth=self._auth_provider) + + response.raise_for_status() + + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def batch_create(self, metadata_list, overwrite=True, **kwargs): + """ + Create the list of metadata associated with the list of guids + + Args: + metadata_list (List[Dict{"guid": "", "data": {}}]): list of metadata + objects in a specific format. Expects a dict with "guid" and "data" + fields where "data" is another JSON blob to add to the mds + overwrite (bool, optional): whether or not to overwrite existing data + """ + url = self.admin_endpoint + f"/metadata" + + if len(metadata_list) > 1 and ( + "guid" not in metadata_list[0] and "data" not in metadata_list[0] + ): + logging.warning( + "it looks like your metadata list for bulk create is malformed. " + "the expected format is a list of dicts that have 2 keys: 'guid' " + "and 'data', where 'guid' is a string and 'data' is another dict. " + f"The first element doesn't match that pattern: {metadata_list[0]}" + ) + + url_with_params = append_query_params(url, overwrite=overwrite, **kwargs) + logging.debug(f"hitting: {url_with_params}") + logging.debug(f"data: {metadata_list}") + response = requests.post( + url_with_params, json=metadata_list, auth=self._auth_provider + ) + response.raise_for_status() + + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + def create(self, guid, metadata, aliases=None, overwrite=False, **kwargs): + """ + Create the metadata associated with the guid + + Args: + guid (str): guid to use + metadata (Dict): dictionary representing what will end up a JSON blob + attached to the provided GUID as metadata + overwrite (bool, optional): whether or not to overwrite existing data + """ + aliases = aliases or [] + + url = self.admin_endpoint + f"/metadata/{guid}" + + url_with_params = append_query_params(url, overwrite=overwrite, **kwargs) + logging.debug(f"hitting: {url_with_params}") + logging.debug(f"data: {metadata}") + response = requests.post( + url_with_params, json=metadata, auth=self._auth_provider + ) + response.raise_for_status() + + if aliases: + try: + self.create_aliases(guid=guid, aliases=aliases, merge=overwrite) + except Exception: + logging.error( + "Error while attempting to create aliases: " + f"'{aliases}' to GUID: '{guid}' with merge={overwrite}. " + "GUID metadata record was created successfully and " + "will NOT be deleted." + ) + + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + async def async_create( + self, + guid, + metadata, + aliases=None, + overwrite=False, + _ssl=None, + **kwargs, + ): + """ + Asynchronous function to create metadata + + Args: + guid (str): guid to use + metadata (Dict): dictionary representing what will end up a JSON blob + attached to the provided GUID as metadata + overwrite (bool, optional): whether or not to overwrite existing data + _ssl (None, optional): whether or not to use ssl + """ + aliases = aliases or [] + + async with aiohttp.ClientSession() as session: + url = self.admin_endpoint + f"/metadata/{guid}" + url_with_params = append_query_params(url, overwrite=overwrite, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + logging.debug(f"hitting: {url_with_params}") + logging.debug(f"data: {metadata}") + async with session.post( + url_with_params, json=metadata, headers=headers, ssl=_ssl + ) as response: + response.raise_for_status() + response = await response.json() + + if aliases: + logging.info(f"creating aliases: {aliases}") + try: + await self.async_create_aliases( + guid=guid, aliases=aliases, _ssl=_ssl + ) + except Exception: + logging.error( + "Error while attempting to create aliases: " + f"'{aliases}' to GUID: '{guid}'. " + "GUID metadata record was created successfully and " + "will NOT be deleted." + ) + + return response
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def update(self, guid, metadata, aliases=None, merge=False, **kwargs): + """ + Update the metadata associated with the guid + + Args: + guid (str): guid to use + metadata (Dict): dictionary representing what will end up a JSON blob + attached to the provided GUID as metadata + """ + aliases = aliases or [] + + url = self.admin_endpoint + f"/metadata/{guid}" + + url_with_params = append_query_params(url, **kwargs) + logging.debug(f"hitting: {url_with_params}") + logging.debug(f"data: {metadata}") + response = requests.put( + url_with_params, json=metadata, auth=self._auth_provider + ) + response.raise_for_status() + + if aliases: + try: + self.update_aliases(guid=guid, aliases=aliases, merge=merge) + except Exception: + logging.error( + "Error while attempting to update aliases: " + f"'{aliases}' to GUID: '{guid}'. " + "GUID metadata record was created successfully and " + "will NOT be deleted." + ) + + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + async def async_update( + self, guid, metadata, aliases=None, merge=False, _ssl=None, **kwargs + ): + """ + Asynchronous function to update metadata + + Args: + guid (str): guid to use + metadata (Dict): dictionary representing what will end up a JSON blob + attached to the provided GUID as metadata + aliases (list[str], optional): List of aliases to update the GUID with + merge (bool, optional): Whether or not to merge metadata AND aliases + with existing values + _ssl (None, optional): whether or not to use ssl + **kwargs: Description + """ + aliases = aliases or [] + + async with aiohttp.ClientSession() as session: + url = self.admin_endpoint + f"/metadata/{guid}" + url_with_params = append_query_params(url, merge=merge, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + async with session.put( + url_with_params, json=metadata, headers=headers, ssl=_ssl + ) as response: + response.raise_for_status() + response = await response.json() + + if aliases: + try: + await self.async_update_aliases( + guid=guid, aliases=aliases, merge=merge, _ssl=_ssl + ) + except Exception: + logging.error( + "Error while attempting to update aliases: " + f"'{aliases}' to GUID: '{guid}' with merge={merge}. " + "GUID metadata record was created successfully and " + "will NOT be deleted." + ) + + return response
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **DEFAULT_BACKOFF_SETTINGS) + def delete(self, guid, **kwargs): + """ + Delete the metadata associated with the guid + + Args: + guid (str): guid to use + """ + url = self.admin_endpoint + f"/metadata/{guid}" + + url_with_params = append_query_params(url, **kwargs) + logging.debug(f"hitting: {url_with_params}") + response = requests.delete(url_with_params, auth=self._auth_provider) + response.raise_for_status() + + return response.json()
+ + + # + # Alias Support + # + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + def get_aliases(self, guid, **kwargs): + """ + Get Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + **kwargs: additional query params + + Returns: + requests.Response: response from the request to get aliases + """ + url = self.endpoint + f"/metadata/{guid}/aliases" + url_with_params = append_query_params(url, **kwargs) + + logging.debug(f"hitting: {url_with_params}") + response = requests.get(url_with_params, auth=self._auth_provider) + response.raise_for_status() + + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + async def async_get_aliases(self, guid, _ssl=None, **kwargs): + """ + Asyncronously get Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + _ssl (None, optional): whether or not to use ssl + **kwargs: additional query params + + Returns: + requests.Response: response from the request to get aliases + """ + async with aiohttp.ClientSession() as session: + url = self.endpoint + f"/metadata/{guid}/aliases" + url_with_params = append_query_params(url, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + logging.debug(f"hitting: {url_with_params}") + async with session.get( + url_with_params, headers=headers, ssl=_ssl + ) as response: + response.raise_for_status() + + return await response.json()
+ + + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + def delete_alias(self, guid, alias, **kwargs): + """ + Delete single Alias for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + **kwargs: additional query params + + Returns: + requests.Response: response from the request to delete aliases + """ + url = self.admin_endpoint + f"/metadata/{guid}/aliases/{alias}" + url_with_params = append_query_params(url, **kwargs) + + logging.debug(f"hitting: {url_with_params}") + response = requests.delete(url_with_params, auth=self._auth_provider) + response.raise_for_status() + + return response.json() + + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + async def async_delete_alias(self, guid, alias, _ssl=None, **kwargs): + """ + Asyncronously delete single Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + _ssl (None, optional): whether or not to use ssl + **kwargs: additional query params + + Returns: + requests.Response: response from the request to delete aliases + """ + async with aiohttp.ClientSession() as session: + url = self.admin_endpoint + f"/metadata/{guid}/aliases/{alias}" + url_with_params = append_query_params(url, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + logging.debug(f"hitting: {url_with_params}") + async with session.delete( + url_with_params, headers=headers, ssl=_ssl + ) as response: + response.raise_for_status() + + return await response.json() + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + def create_aliases(self, guid, aliases, **kwargs): + """ + Create Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + aliases (list[str]): Aliases to set for the guid + **kwargs: additional query params + + Returns: + requests.Response: response from the request to create aliases + """ + url = self.admin_endpoint + f"/metadata/{guid}/aliases" + url_with_params = append_query_params(url, **kwargs) + + data = {"aliases": aliases} + + logging.debug(f"hitting: {url_with_params}") + logging.debug(f"data: {data}") + response = requests.post(url_with_params, json=data, auth=self._auth_provider) + response.raise_for_status() + + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + async def async_create_aliases(self, guid, aliases, _ssl=None, **kwargs): + """ + Asyncronously create Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + aliases (list[str]): Aliases to set for the guid + _ssl (None, optional): whether or not to use ssl + **kwargs: additional query params + + Returns: + requests.Response: response from the request to create aliases + """ + async with aiohttp.ClientSession() as session: + url = self.admin_endpoint + f"/metadata/{guid}/aliases" + url_with_params = append_query_params(url, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + data = {"aliases": aliases} + + logging.debug(f"hitting: {url_with_params}") + logging.debug(f"data: {data}") + async with session.post( + url_with_params, json=data, headers=headers, ssl=_ssl + ) as response: + response.raise_for_status() + return await response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + def update_aliases(self, guid, aliases, merge=False, **kwargs): + """ + Update Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + aliases (list[str]): Aliases to set for the guid + merge (bool, optional): Whether or not to aliases with existing values + **kwargs: additional query params + + Returns: + requests.Response: response from the request to update aliases + """ + url = self.admin_endpoint + f"/metadata/{guid}/aliases" + url_with_params = append_query_params(url, merge=merge, **kwargs) + + data = {"aliases": aliases} + + logging.debug(f"hitting: {url_with_params}") + logging.debug(f"data: {data}") + response = requests.put(url_with_params, json=data, auth=self._auth_provider) + response.raise_for_status() + + return response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + async def async_update_aliases( + self, guid, aliases, merge=False, _ssl=None, **kwargs + ): + """ + Asyncronously update Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + aliases (list[str]): Aliases to set for the guid + merge (bool, optional): Whether or not to aliases with existing values + _ssl (None, optional): whether or not to use ssl + **kwargs: additional query params + + Returns: + requests.Response: response from the request to update aliases + """ + async with aiohttp.ClientSession() as session: + url = self.admin_endpoint + f"/metadata/{guid}/aliases" + url_with_params = append_query_params(url, merge=merge, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + data = {"aliases": aliases} + + logging.debug(f"hitting: {url_with_params}") + logging.debug(f"data: {data}") + async with session.put( + url_with_params, json=data, headers=headers, ssl=_ssl + ) as response: + response.raise_for_status() + + return await response.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + def delete_aliases(self, guid, **kwargs): + """ + Delete all Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + **kwargs: additional query params + + Returns: + requests.Response: response from the request to delete aliases + """ + url = self.admin_endpoint + f"/metadata/{guid}/aliases" + url_with_params = append_query_params(url, **kwargs) + + logging.debug(f"hitting: {url_with_params}") + response = requests.delete(url_with_params, auth=self._auth_provider) + response.raise_for_status() + + return response.text
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + async def async_delete_aliases(self, guid, _ssl=None, **kwargs): + """ + Asyncronously delete all Aliases for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + _ssl (None, optional): whether or not to use ssl + **kwargs: additional query params + + Returns: + requests.Response: response from the request to delete aliases + """ + async with aiohttp.ClientSession() as session: + url = self.admin_endpoint + f"/metadata/{guid}/aliases" + url_with_params = append_query_params(url, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + logging.debug(f"hitting: {url_with_params}") + async with session.delete( + url_with_params, headers=headers, ssl=_ssl + ) as response: + response.raise_for_status() + + return await response.text
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + def delete_alias(self, guid, alias, **kwargs): + """ + Delete single Alias for the given guid + + Args: + guid (TYPE): Globally unique ID for the metadata blob + alias (str): alternative identifier (alias) to delete + **kwargs: additional query params + + Returns: + requests.Response: response from the request to delete aliases + """ + url = self.admin_endpoint + f"/metadata/{guid}/aliases/{alias}" + url_with_params = append_query_params(url, **kwargs) + + logging.debug(f"hitting: {url_with_params}") + response = requests.delete(url_with_params, auth=self._auth_provider) + response.raise_for_status() + + return response.text
+ + +
+[docs] + @backoff.on_exception(backoff.expo, Exception, **BACKOFF_NO_LOG_IF_NOT_RETRIED) + async def async_delete_alias(self, guid, alias, _ssl=None, **kwargs): + """ + Asyncronously delete single Aliases for the given guid + + Args: + guid (str): Globally unique ID for the metadata blob + alias (str): alternative identifier (alias) to delete + _ssl (None, optional): whether or not to use ssl + **kwargs: additional query params + + Returns: + requests.Response: response from the request to delete aliases + """ + async with aiohttp.ClientSession() as session: + url = self.admin_endpoint + f"/metadata/{guid}/aliases/{alias}" + url_with_params = append_query_params(url, **kwargs) + + # aiohttp only allows basic auth with their built in auth, so we + # need to manually add JWT auth header + headers = {"Authorization": self._auth_provider._get_auth_value()} + + logging.debug(f"hitting: {url_with_params}") + async with session.delete( + url_with_params, headers=headers, ssl=_ssl + ) as response: + response.raise_for_status() + + return await response.text
+ + + def _prepare_metadata( + self, metadata, indexd_doc, force_metadata_columns_even_if_empty + ): + """ + Validate and generate the provided metadata for submission to the metadata + service. + + If the record is of type "package", also prepare package metadata. + + Args: + metadata (dict): metadata provided by the submitter + indexd_doc (dict): the indexd document created for this data + force_metadata_columns_even_if_empty (bool): see description in calling function + + Returns: + dict: metadata ready to be submitted to the metadata service + """ + + def _extract_non_indexd_metadata(metadata): + """ + Get the "additional metadata": metadata that was provided but is + not stored in indexd, so should be stored in the metadata service. + """ + return { + k: v + for k, v in metadata.items() + if k.lower() + not in GUID_COLUMN_NAMES + + FILENAME_COLUMN_NAMES + + SIZE_COLUMN_NAMES + + MD5_COLUMN_NAMES + + ACLS_COLUMN_NAMES + + URLS_COLUMN_NAMES + + AUTHZ_COLUMN_NAMES + + PREV_GUID_COLUMN_NAMES + } + + to_submit = _extract_non_indexd_metadata(metadata) + + # some additional metadata columns must be validated + valid = True + + # validate package columns + record_type = to_submit.pop(RECORD_TYPE_STANDARD_KEY, "").strip().lower() + package_contents = to_submit.pop(PACKAGE_CONTENTS_STANDARD_KEY, None) + if record_type == "package": + if package_contents: + package_contents = json.loads(package_contents) + if not _verify_schema(package_contents, PACKAGE_CONTENTS_SCHEMA): + logging.error( + f"ERROR: {package_contents} is not in package contents format" + ) + valid = False + # generate package metadata + package_metadata = self._get_package_metadata( + metadata, + indexd_doc.file_name, + indexd_doc.size, + indexd_doc.hashes, + indexd_doc.urls, + package_contents, + ) + to_submit.update(package_metadata) + elif package_contents: + logging.error( + f"ERROR: tried to set '{PACKAGE_CONTENTS_STANDARD_KEY}' for a non-package row. Ignoring '{PACKAGE_CONTENTS_STANDARD_KEY}'. Set '{RECORD_TYPE_STANDARD_KEY}' to 'package' to create packages." + ) + valid = False + + if not valid: + raise Exception(f"Metadata is not valid: {metadata}") + + if not force_metadata_columns_even_if_empty: + # remove any empty columns if we're not being forced to include them + to_submit = { + key: value + for key, value in to_submit.items() + if value is not None and value != "" + } + + return to_submit + + def _get_package_metadata( + self, submitted_metadata, file_name, file_size, hashes, urls, contents + ): + """ + The MDS Objects API currently expects files that have not been + uploaded yet. For files we only needs to index, not upload, create + object records manually by generating the expected object fields. + TODO: update the MDS objects API to not create upload URLs if the + relevant data is provided. + """ + + def _get_filename_from_urls(submitted_metadata, urls): + file_name = "" + if not urls: + logging.warning(f"No URLs provided for: {submitted_metadata}") + for url in urls: + _file_name = os.path.basename(url) + if not file_name: + file_name = _file_name + else: + if file_name != _file_name: + logging.warning( + f"Received multiple URLs with different file names; will use the first URL (file name '{file_name}'): {submitted_metadata}" + ) + return file_name + + file_name_from_url = _get_filename_from_urls(submitted_metadata, urls) + if not file_name: + file_name = file_name_from_url + + now = str(datetime.utcnow()) + metadata = { + "type": "package", + "package": { + "version": "0.1", + "file_name": file_name, + "created_time": now, + "updated_time": now, + "size": file_size, + "hashes": hashes, + "contents": contents or None, + }, + "_upload_status": "uploaded", + } + return metadata
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/object.html b/docs/_build/html/_modules/gen3/object.html new file mode 100644 index 000000000..ec15a5180 --- /dev/null +++ b/docs/_build/html/_modules/gen3/object.html @@ -0,0 +1,188 @@ + + + + + + + gen3.object — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.object

+import requests
+from gen3.utils import raise_for_status_and_print_error
+
+
+class Gen3ObjectError(Exception):
+    pass
+
+
+
+[docs] +class Gen3Object: + """For interacting with Gen3 object level features. + + A class for interacting with the Gen3 object services. + Currently allows creating and deleting of an object from the Gen3 System. + + Args: + auth_provider (Gen3Auth): A Gen3Auth class instance. + + Examples: + This generates the Gen3Object class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page. + + >>> auth = Gen3Auth(refresh_file="credentials.json") + ... object = Gen3Object(auth) + + """ + + def __init__(self, auth_provider=None): + self._auth_provider = auth_provider + self.service_endpoint = "/mds" + + def create_object(self, file_name, authz, metadata=None, aliases=None): + url = ( + self._auth_provider.endpoint.rstrip("/") + + self.service_endpoint + + "/objects" + ) + body = { + "file_name": file_name, + "authz": authz, + "metadata": metadata, + "aliases": aliases, + } + response = requests.post(url, json=body, auth=self._auth_provider) + raise_for_status_and_print_error(response) + data = response.json() + return data["guid"], data["upload_url"] + +
+[docs] + def delete_object(self, guid, delete_file_locations=False): + """ + Delete the object from indexd, metadata service and optionally all storage locations + + Args: + `guid` -- GUID of the object to delete + `delete_file_locations` -- if True, removes the object from existing bucket location(s) through fence + Returns: + Nothing + """ + delete_param = "?delete_file_locations" if delete_file_locations else "" + url = ( + self._auth_provider.endpoint.rstrip("/") + + self.service_endpoint + + "/objects/" + + guid + + delete_param + ) + response = requests.delete(url, auth=self._auth_provider) + raise_for_status_and_print_error(response)
+
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/query.html b/docs/_build/html/_modules/gen3/query.html new file mode 100644 index 000000000..090d4c48f --- /dev/null +++ b/docs/_build/html/_modules/gen3/query.html @@ -0,0 +1,344 @@ + + + + + + + gen3.query — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.query

+import requests
+
+from gen3.utils import raise_for_status_and_print_error
+
+
+
+[docs] +class Gen3Query: + """ + Query ElasticSearch data from a Gen3 system. + + Args: + auth_provider (Gen3Auth): A Gen3Auth class instance. + + Examples: + This generates the Gen3Query class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page. + + >>> auth = Gen3Auth(endpoint, refresh_file="credentials.json") + ... query = Gen3Query(auth) + """ + + def __init__(self, auth_provider): + self._auth_provider = auth_provider + +
+[docs] + def query( + self, + data_type, + fields, + first=None, + offset=None, + filters=None, + filter_object=None, + sort_object=None, + accessibility=None, + verbose=True, + ): + """ + Execute a query against a Data Commons. + + Args: + data_type (str): Data type to query. + fields (list): List of fields to return. + first (int, optional): Number of rows to return (default: 10). + offset (int, optional): Starting position (default: 0). + filters: (object, optional): { field: sort method } object. Will filter data with ALL fields EQUAL to the provided respective value. If more complex filters are needed, use the `filter_object` parameter instead. + filter_object (object, optional): Filter to apply. For syntax details, see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#filter. + sort_object (object, optional): { field: sort method } object. + accessibility (list, optional): One of ["accessible" (default), "unaccessible", "all"]. Only valid when querying a data type in "regular" tier access mode. + + Returns: + Object: {"data": {<data_type>: [<record>, <record>, ...]}} + + Examples: + >>> Gen3Query.query( + data_type="subject", + first=50, + fields=[ + "vital_status", + "submitter_id", + ], + filters={"vital_status": "Alive"}, + sort_object={"submitter_id": "asc"}, + ) + """ + if not first: + first = 10 + if not offset: + offset = 0 + if not sort_object: + sort_object = {} + if not accessibility: + accessibility = "accessible" + if filters and filter_object: + raise Exception( + "Only one of `filters` and `filter_object` can be used at a time." + ) + if filters: + filter_object = { + "AND": [{"=": {field: val}} for field, val in filters.items()] + } + + if first + offset > 10000: # ElasticSearch limitation + sort_fields = [{field: val} for field, val in sort_object.items()] + data = self.raw_data_download( + data_type=data_type, + fields=fields, + filter_object=filter_object, + sort_fields=sort_fields, + accessibility=accessibility, + first=first, + offset=offset, + ) + return {"data": {data_type: data}} + + # convert sort_object to graphql: [ { field_name: "sort_method" } ] + sorts = [f'{{{field}: "{val}"}}' for field, val in sort_object.items()] + sort_string = f'[{", ".join(sorts)}]' + + query_string = f"""query($filter: JSON) {{ + {data_type}( + first: {first}, + offset: {offset}, + sort: {sort_string}, + accessibility: {accessibility}, + filter: $filter + ) {{ + {" ".join(fields)} + }} + }}""" + variables = {"filter": filter_object} + return self.graphql_query(query_string=query_string, variables=variables)
+ + +
+[docs] + def graphql_query(self, query_string, variables=None): + """ + Execute a GraphQL query against a Data Commons. + + Args: + query_txt (str): GraphQL query as text. For syntax details, see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md. + variables (:obj:`object`, optional): Dictionary of variables to pass with the query. + + Returns: + Object: {"data": {<data_type>: [<record>, <record>, ...]}} + + Examples: + >>> query_string = "{ my_index { my_field } }" + ... Gen3Query.graphql_query(query_string) + """ + url = f"{self._auth_provider.endpoint}/guppy/graphql" + response = requests.post( + url, + json={"query": query_string, "variables": variables}, + auth=self._auth_provider, + ) + try: + raise_for_status_and_print_error(response) + except Exception: + print( + f"Unable to query.\nQuery: {query_string}\nVariables: {variables}\n{response.text}" + ) + raise + try: + return response.json() + except Exception: + print(f"Did not receive JSON: {response.text}") + raise
+ + +
+[docs] + def raw_data_download( + self, + data_type, + fields, + filter_object=None, + sort_fields=None, + accessibility=None, + first=None, + offset=None, + ): + """ + Execute a raw data download against a Data Commons. + + Args: + data_type (str): Data type to download from. + fields (list): List of fields to return. + filter_object (object, optional): Filter to apply. For syntax details, see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#filter. + sort_fields (list, optional): List of { field: sort method } objects. + accessibility (list, optional): One of ["accessible" (default), "unaccessible", "all"]. Only valid when downloading from a data type in "regular" tier access mode. + first (int, optional): Number of rows to return (default: all rows). + offset (int, optional): Starting position (default: 0). + + Returns: + List: [<record>, <record>, ...] + + Examples: + >>> Gen3Query.raw_data_download( + data_type="subject", + fields=[ + "vital_status", + "submitter_id", + "project_id" + ], + filter_object={"=": {"project_id": "my_program-my_project"}}, + sort_fields=[{"submitter_id": "asc"}], + accessibility="accessible" + ) + """ + if not accessibility: + accessibility = "accessible" + if not offset: + offset = 0 + + body = {"type": data_type, "fields": fields, "accessibility": accessibility} + if filter_object: + body["filter"] = filter_object + if sort_fields: + body["sort"] = sort_fields + + url = f"{self._auth_provider.endpoint}/guppy/download" + response = requests.post( + url, + json=body, + auth=self._auth_provider, + ) + try: + raise_for_status_and_print_error(response) + except Exception: + print(f"Unable to download.\nBody: {body}\n{response.text}") + raise + try: + data = response.json() + except Exception: + print(f"Did not receive JSON: {response.text}") + raise + + if offset: + data = data[offset:] + if first: + data = data[:first] + + return data
+
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/submission.html b/docs/_build/html/_modules/gen3/submission.html new file mode 100644 index 000000000..982c67c80 --- /dev/null +++ b/docs/_build/html/_modules/gen3/submission.html @@ -0,0 +1,895 @@ + + + + + + + gen3.submission — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.submission

+import itertools
+import json
+import requests
+import os
+from cdislogging import get_logger
+import pandas as pd
+
+from gen3.utils import raise_for_status_and_print_error
+
+logging = get_logger("__name__")
+
+
+class Gen3Error(Exception):
+    pass
+
+
+class Gen3SubmissionQueryError(Gen3Error):
+    pass
+
+
+class Gen3UserError(Gen3Error):
+    pass
+
+
+
+[docs] +class Gen3Submission: + """Submit/Export/Query data from a Gen3 Submission system. + + A class for interacting with the Gen3 submission services. + Supports submitting and exporting from Sheepdog. + Supports GraphQL queries through Peregrine. + + Args: + auth_provider (Gen3Auth): A Gen3Auth class instance. + + Examples: + This generates the Gen3Submission class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page. + + >>> auth = Gen3Auth(refresh_file="credentials.json") + ... sub = Gen3Submission(auth) + + """ + + def __init__(self, endpoint=None, auth_provider=None): + # auth_provider legacy interface required endpoint as 1st arg + self._auth_provider = auth_provider or endpoint + self._endpoint = self._auth_provider.endpoint + + def __export_file(self, filename, output): + """Writes an API response to a file.""" + with open(filename, "w") as outfile: + outfile.write(output) + print("\nOutput written to file: " + filename) + + ### Program functions + +
+[docs] + def get_programs(self): + """List registered programs""" + api_url = f"{self._endpoint}/api/v0/submission/" + output = requests.get(api_url, auth=self._auth_provider) + raise_for_status_and_print_error(output) + return output.json()
+ + +
+[docs] + def create_program(self, json): + """Create a program. + Args: + json (object): The json of the program to create + + Examples: + This creates a program in the sandbox commons. + + >>> Gen3Submission.create_program(json) + """ + api_url = "{}/api/v0/submission/".format(self._endpoint) + output = requests.post(api_url, auth=self._auth_provider, json=json) + raise_for_status_and_print_error(output) + return output.json()
+ + +
+[docs] + def delete_program(self, program): + """Delete a program. + + This deletes an empty program from the commons. + + Args: + program (str): The program to delete. + + Examples: + This deletes the "DCF" program. + + >>> Gen3Submission.delete_program("DCF") + + """ + api_url = "{}/api/v0/submission/{}".format(self._endpoint, program) + output = requests.delete(api_url, auth=self._auth_provider) + raise_for_status_and_print_error(output) + return output
+ + + ### Project functions + +
+[docs] + def get_projects(self, program): + """List registered projects for a given program + + Args: + program: the name of the program you want the projects from + + Example: + This lists all the projects under the DCF program + + >>> Gen3Submission.get_projects("DCF") + + """ + api_url = f"{self._endpoint}/api/v0/submission/{program}" + output = requests.get(api_url, auth=self._auth_provider) + raise_for_status_and_print_error(output) + return output.json()
+ + +
+[docs] + def create_project(self, program, json): + """Create a project. + Args: + program (str): The program to create a project on + json (object): The json of the project to create + + Examples: + This creates a project on the DCF program in the sandbox commons. + + >>> Gen3Submission.create_project("DCF", json) + """ + api_url = "{}/api/v0/submission/{}".format(self._endpoint, program) + output = requests.put(api_url, auth=self._auth_provider, json=json) + raise_for_status_and_print_error(output) + return output.json()
+ + +
+[docs] + def delete_project(self, program, project): + """Delete a project. + + This deletes an empty project from the commons. + + Args: + program (str): The program containing the project to delete. + project (str): The project to delete. + + Examples: + This deletes the "CCLE" project from the "DCF" program. + + >>> Gen3Submission.delete_project("DCF", "CCLE") + + """ + api_url = "{}/api/v0/submission/{}/{}".format(self._endpoint, program, project) + output = requests.delete(api_url, auth=self._auth_provider) + raise_for_status_and_print_error(output) + return output
+ + +
+[docs] + def get_project_dictionary(self, program, project): + """Get dictionary schema for a given project + + Args: + program: the name of the program the project is from + project: the name of the project you want the dictionary schema from + + Example: + + >>> Gen3Submission.get_project_dictionary("DCF", "CCLE") + + """ + api_url = f"{self._endpoint}/api/v0/submission/{program}/{project}/_dictionary" + output = requests.get(api_url, auth=self._auth_provider) + raise_for_status_and_print_error(output) + return output.json()
+ + +
+[docs] + def open_project(self, program, project): + """Mark a project ``open``. Opening a project means uploads, deletions, etc. are allowed. + + Args: + program: the name of the program the project is from + project: the name of the project you want to 'open' + + Example: + + >>> Gen3Submission.get_project_manifest("DCF", "CCLE") + + """ + api_url = f"{self._endpoint}/api/v0/submission/{program}/{project}/open" + output = requests.put(api_url, auth=self._auth_provider) + raise_for_status_and_print_error(output) + return output.json()
+ + + ### Record functions + +
+[docs] + def submit_record(self, program, project, json): + """Submit record(s) to a project as json. + + Args: + program (str): The program to submit to. + project (str): The project to submit to. + json (object): The json defining the record(s) to submit. For multiple records, the json should be an array of records. + + Examples: + This submits records to the CCLE project in the sandbox commons. + + >>> Gen3Submission.submit_record("DCF", "CCLE", json) + + """ + api_url = "{}/api/v0/submission/{}/{}".format(self._endpoint, program, project) + logging.debug("Using the Sheepdog API URL: {}".format(api_url)) + + output = requests.put(api_url, auth=self._auth_provider, json=json) + output.raise_for_status() + return output.json()
+ + +
+[docs] + def delete_record(self, program, project, uuid): + """ + Delete a record from a project. + + Args: + program (str): The program to delete from. + project (str): The project to delete from. + uuid (str): The uuid of the record to delete + + Examples: + This deletes a record from the CCLE project in the sandbox commons. + + >>> Gen3Submission.delete_record("DCF", "CCLE", uuid) + """ + return self.delete_records(program, project, [uuid])
+ + +
+[docs] + def delete_records(self, program, project, uuids, batch_size=100): + """ + Delete a list of records from a project. + + Args: + program (str): The program to delete from. + project (str): The project to delete from. + uuids (list): The list of uuids of the records to delete + batch_size (int, optional, default: 100): how many records to delete at a time + + Examples: + This deletes a list of records from the CCLE project in the sandbox commons. + + >>> Gen3Submission.delete_records("DCF", "CCLE", ["uuid1", "uuid2"]) + """ + if not uuids: + return + api_url = "{}/api/v0/submission/{}/{}/entities".format( + self._endpoint, program, project + ) + for i in itertools.count(): + uuids_to_delete = uuids[batch_size * i : batch_size * (i + 1)] + if len(uuids_to_delete) == 0: + break + output = requests.delete( + "{}/{}".format(api_url, ",".join(uuids_to_delete)), + auth=self._auth_provider, + ) + try: + raise_for_status_and_print_error(output) + except requests.exceptions.HTTPError: + print( + "\n{}\nFailed to delete uuids: {}".format( + output.text, uuids_to_delete + ) + ) + raise + return output
+ + +
+[docs] + def delete_node(self, program, project, node_name, batch_size=100, verbose=True): + """ + Delete all records for a node from a project. + + Args: + program (str): The program to delete from. + project (str): The project to delete from. + node_name (str): Name of the node to delete + batch_size (int, optional, default: 100): how many records to query and delete at a time + verbose (bool, optional, default: True): whether to print progress logs + + Examples: + This deletes a node from the CCLE project in the sandbox commons. + + >>> Gen3Submission.delete_node("DCF", "CCLE", "demographic") + """ + return self.delete_nodes( + program, project, [node_name], batch_size, verbose=verbose + )
+ + +
+[docs] + def delete_nodes( + self, program, project, ordered_node_list, batch_size=100, verbose=True + ): + """ + Delete all records for a list of nodes from a project. + + Args: + program (str): The program to delete from. + project (str): The project to delete from. + ordered_node_list (list): The list of nodes to delete, in reverse graph submission order + batch_size (int, optional, default: 100): how many records to query and delete at a time + verbose (bool, optional, default: True): whether to print progress logs + + Examples: + This deletes a list of nodes from the CCLE project in the sandbox commons. + + >>> Gen3Submission.delete_nodes("DCF", "CCLE", ["demographic", "subject", "experiment"]) + """ + project_id = f"{program}-{project}" + for node in ordered_node_list: + if verbose: + print(node, end="", flush=True) + first_uuid = "" + while True: + query_string = f"""{{ + {node} (first: {batch_size}, project_id: "{project_id}") {{ + id + }} + }}""" + res = self.query(query_string) + uuids = [x["id"] for x in res["data"][node]] + if len(uuids) == 0: + break # all done + if first_uuid == uuids[0]: + raise Exception("Failed to delete. Exiting") + first_uuid = uuids[0] + if verbose: + print(".", end="", flush=True) + self.delete_records(program, project, uuids, batch_size) + if verbose: + print()
+ + +
+[docs] + def export_record(self, program, project, uuid, fileformat, filename=None): + """Export a single record into json. + + Args: + program (str): The program the record is under. + project (str): The project the record is under. + uuid (str): The UUID of the record to export. + fileformat (str): Export data as either 'json' or 'tsv' + filename (str): Name of the file to export to; if no filename is provided, prints data to screen + + Examples: + This exports a single record from the sandbox commons. + + >>> Gen3Submission.export_record("DCF", "CCLE", "d70b41b9-6f90-4714-8420-e043ab8b77b9", "json", filename="DCF-CCLE_one_record.json") + + """ + assert fileformat in [ + "json", + "tsv", + ], "File format must be either 'json' or 'tsv'" + api_url = "{}/api/v0/submission/{}/{}/export?ids={}&format={}".format( + self._endpoint, program, project, uuid, fileformat + ) + output = requests.get(api_url, auth=self._auth_provider).text + if filename is None: + if fileformat == "json": + try: + output = json.loads(output) + except ValueError as e: + print(f"Output: {output}\nUnable to parse JSON: {e}") + raise + return output + else: + self.__export_file(filename, output) + return output
+ + +
+[docs] + def export_node(self, program, project, node_type, fileformat, filename=None): + """Export all records in a single node type of a project. + + Args: + program (str): The program to which records belong. + project (str): The project to which records belong. + node_type (str): The name of the node to export. + fileformat (str): Export data as either 'json' or 'tsv' + filename (str): Name of the file to export to; if no filename is provided, prints data to screen + + Examples: + This exports all records in the "sample" node from the CCLE project in the sandbox commons. + + >>> Gen3Submission.export_node("DCF", "CCLE", "sample", "tsv", filename="DCF-CCLE_sample_node.tsv") + + """ + assert fileformat in [ + "json", + "tsv", + ], "File format must be either 'json' or 'tsv'" + api_url = "{}/api/v0/submission/{}/{}/export/?node_label={}&format={}".format( + self._endpoint, program, project, node_type, fileformat + ) + output = requests.get(api_url, auth=self._auth_provider).text + if filename is None: + if fileformat == "json": + try: + output = json.loads(output) + except ValueError as e: + print(f"Output: {output}\nUnable to parse JSON: {e}") + raise + return output + else: + self.__export_file(filename, output) + return output
+ + + ### Query functions + +
+[docs] + def query(self, query_txt, variables=None, max_tries=1): + """Execute a GraphQL query against a Data Commons. + + Args: + query_txt (str): Query text. + variables (:obj:`object`, optional): Dictionary of variables to pass with the query. + max_tries (:obj:`int`, optional): Number of times to retry if the request fails. + + Examples: + This executes a query to get the list of all the project codes for all the projects + in the Data Commons. + + >>> query = "{ project(first:0) { code } }" + ... Gen3Submission.query(query) + + """ + api_url = "{}/api/v0/submission/graphql".format(self._endpoint) + if variables == None: + query = {"query": query_txt} + else: + query = {"query": query_txt, "variables": variables} + + tries = 0 + while tries < max_tries: + output = requests.post(api_url, auth=self._auth_provider, json=query).text + data = json.loads(output) + + if "errors" in data: + raise Gen3SubmissionQueryError(data["errors"]) + + if not "data" in data: + print(query_txt) + print(data) + + tries += 1 + + return data
+ + +
+[docs] + def get_graphql_schema(self): + """Returns the GraphQL schema for a commons. + + This runs the GraphQL introspection query against a commons and returns the results. + + Examples: + This returns the GraphQL schema. + + >>> Gen3Submission.get_graphql_schema() + + """ + api_url = "{}/api/v0/submission/getschema".format(self._endpoint) + output = requests.get(api_url).text + data = json.loads(output) + return data
+ + + ### Dictionary functions + +
+[docs] + def get_dictionary_node(self, node_type): + """Returns the dictionary schema for a specific node. + + This gets the current json dictionary schema for a specific node type in a commons. + + Args: + node_type (str): The node_type (or name of the node) to retrieve. + + Examples: + This returns the dictionary schema the "subject" node. + + >>> Gen3Submission.get_dictionary_node("subject") + + """ + api_url = "{}/api/v0/submission/_dictionary/{}".format( + self._endpoint, node_type + ) + output = requests.get(api_url).text + data = json.loads(output) + return data
+ + +
+[docs] + def get_dictionary_all(self): + """Returns the entire dictionary object for a commons. + + This gets a json of the current dictionary schema for a commons. + + Examples: + This returns the dictionary schema for a commons. + + >>> Gen3Submission.get_dictionary_all() + + """ + return self.get_dictionary_node("_all")
+ + + ### File functions + +
+[docs] + def get_project_manifest(self, program, project): + """Get a projects file manifest + + Args: + program: the name of the program the project is from + project: the name of the project you want the manifest from + + Example: + + >>> Gen3Submission.get_project_manifest("DCF", "CCLE") + + """ + api_url = f"{self._endpoint}/api/v0/submission/{program}/{project}/manifest" + output = requests.get(api_url, auth=self._auth_provider) + return output
+ + +
+[docs] + def submit_file(self, project_id, filename, chunk_size=30, row_offset=0): + """Submit data in a spreadsheet file containing multiple records in rows to a Gen3 Data Commons. + + Args: + project_id (str): The project_id to submit to. + filename (str): The file containing data to submit. The format can be TSV, CSV or XLSX (first worksheet only for now). + chunk_size (integer): The number of rows of data to submit for each request to the API. + row_offset (integer): The number of rows of data to skip; '0' starts submission from the first row and submits all data. + + Examples: + This submits a spreadsheet file containing multiple records in rows to the CCLE project in the sandbox commons. + + >>> Gen3Submission.submit_file("DCF-CCLE","data_spreadsheet.tsv") + + """ + # Read the file in as a pandas DataFrame + f = os.path.basename(filename) + if f.lower().endswith(".csv"): + df = pd.read_csv(filename, header=0, sep=",", dtype=str).fillna("") + elif f.lower().endswith(".xlsx"): + xl = pd.ExcelFile(filename) # load excel file + sheet = xl.sheet_names[0] # sheetname + df = xl.parse(sheet) # save sheet as dataframe + converters = { + col: str for col in list(df) + } # make sure int isn't converted to float + df = pd.read_excel(filename, converters=converters).fillna("") # remove nan + elif filename.lower().endswith((".tsv", ".txt")): + df = pd.read_csv(filename, header=0, sep="\t", dtype=str).fillna("") + else: + raise Gen3UserError("Please upload a file in CSV, TSV, or XLSX format.") + df.rename( + columns={c: c.lstrip("*") for c in df.columns}, inplace=True + ) # remove any leading asterisks in the DataFrame column names + + # Check uniqueness of submitter_ids: + if len(list(df.submitter_id)) != len(list(df.submitter_id.unique())): + raise Gen3Error( + "Warning: file contains duplicate submitter_ids. \nNote: submitter_ids must be unique within a node!" + ) + + # Chunk the file + print("\nSubmitting {} with {} records.".format(filename, len(df))) + program, project = project_id.split("-", 1) + api_url = "{}/api/v0/submission/{}/{}".format(self._endpoint, program, project) + headers = {"content-type": "text/tab-separated-values"} + + start = row_offset + end = row_offset + chunk_size + chunk = df[start:end] + + count = 0 + + results = { + "invalid": {}, # these are invalid records + "other": [], # any unhandled API responses + "details": [], # entire API response details + "succeeded": [], # list of submitter_ids that were successfully updated/created + "responses": [], # list of API response codes + } + + # Start the chunking loop: + while (start + len(chunk)) <= len(df): + timeout = False + valid_but_failed = [] + invalid = [] + count += 1 + print( + "Chunk {} (chunk size: {}, submitted: {} of {})".format( + count, + chunk_size, + len(results["succeeded"]) + len(results["invalid"]), + len(df), + ) + ) + + try: + response = requests.put( + api_url, + auth=self._auth_provider, + data=chunk.to_csv(sep="\t", index=False), + headers=headers, + ).text + except requests.exceptions.ConnectionError as e: + results["details"].append(e.message) + continue + + # Handle the API response + if ( + "Request Timeout" in response + or "413 Request Entity Too Large" in response + or "Connection aborted." in response + or "service failure - try again later" in response + ): # time-out, response is not valid JSON at the moment + print("\t Reducing Chunk Size: {}".format(response)) + results["responses"].append("Reducing Chunk Size: {}".format(response)) + timeout = True + + else: + try: + json_res = json.loads(response) + except ValueError as e: + print(response) + print(str(e)) + raise Gen3Error("Unable to parse API response as JSON!") + + if "message" in json_res and "code" not in json_res: + print( + "\t No code in the API response for Chunk {}: {}".format( + count, json_res.get("message") + ) + ) + print("\t {}".format(json_res.get("transactional_errors"))) + results["responses"].append( + "Error Chunk {}: {}".format(count, json_res.get("message")) + ) + results["other"].append(json_res.get("transactional_errors")) + + elif "code" not in json_res: + print("\t Unhandled API-response: {}".format(response)) + results["responses"].append( + "Unhandled API response: {}".format(response) + ) + + elif json_res["code"] == 200: # success + entities = json_res.get("entities", []) + print("\t Succeeded: {} entities.".format(len(entities))) + results["responses"].append( + "Chunk {} Succeeded: {} entities.".format(count, len(entities)) + ) + + for entity in entities: + sid = entity["unique_keys"][0]["submitter_id"] + results["succeeded"].append(sid) + + elif json_res["code"] == 500: # internal server error + print("\t Internal Server Error: {}".format(response)) + results["responses"].append( + "Internal Server Error: {}".format(response) + ) + + else: # failure (400, 401, 403, 404...) + entities = json_res.get("entities", []) + print( + "\tChunk Failed (status code {}): {} entities.".format( + json_res.get("code"), len(entities) + ) + ) + results["responses"].append( + "Chunk {} Failed: {} entities.".format(count, len(entities)) + ) + + for entity in entities: + sid = entity["unique_keys"][0]["submitter_id"] + if entity["valid"]: # valid but failed + valid_but_failed.append(sid) + else: # invalid and failed + message = str(entity["errors"]) + results["invalid"][sid] = message + invalid.append(sid) + print("\tInvalid records in this chunk: {}".format(len(invalid))) + + if ( + len(valid_but_failed) > 0 and len(invalid) > 0 + ): # if valid entities failed bc grouped with invalid, retry submission + chunk = chunk.loc[ + df["submitter_id"].isin(valid_but_failed) + ] # these are records that weren't successful because they were part of a chunk that failed, but are valid and can be resubmitted without changes + print( + "Retrying submission of valid entities from failed chunk: {} valid entities.".format( + len(chunk) + ) + ) + + elif ( + len(valid_but_failed) > 0 and len(invalid) == 0 + ): # if all entities are valid but submission still failed, probably due to duplicate submitter_ids. Can remove this section once the API response is fixed: https://ctds-planx.atlassian.net/browse/PXP-3065 + raise Gen3Error( + "Please check your data for correct file encoding, special characters, or duplicate submitter_ids or ids." + ) + + elif timeout is False: # get new chunk if didn't timeout + start += chunk_size + end = start + chunk_size + chunk = df[start:end] + + else: # if timeout, reduce chunk size and retry smaller chunk + if chunk_size >= 2: + chunk_size = int(chunk_size / 2) + end = start + chunk_size + chunk = df[start:end] + print( + "Retrying Chunk with reduced chunk_size: {}".format(chunk_size) + ) + timeout = False + else: + print("Last chunk:\n{}".format(chunk)) + raise Gen3Error( + "Submission is timing out. Please contact the Helpdesk." + ) + + print("Finished data submission.") + print("Successful records: {}".format(len(set(results["succeeded"])))) + print("Failed invalid records: {}".format(len(results["invalid"]))) + + return results
+
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/tools/download/drs_download.html b/docs/_build/html/_modules/gen3/tools/download/drs_download.html new file mode 100644 index 000000000..7fe0f1c3a --- /dev/null +++ b/docs/_build/html/_modules/gen3/tools/download/drs_download.html @@ -0,0 +1,1565 @@ + + + + + + + gen3.tools.download.drs_download — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.tools.download.drs_download

+"""
+Module for downloading and listing JSON DRS manifest and DRS objects. The main classes in
+this module for downloading DRS objects are DownloadManager and Manifest.
+
+    Examples:
+        This generates the Gen3Jobs class pointed at the sandbox commons while
+        using the credentials.json downloaded from the commons profile page.
+
+        >>> datafiles = Manifest.load('sample/manifest_1.json')
+            downloadManager = DownloadManager("source.my_commons.org",
+                              Gen3Auth(refresh_file="~.gen3/my_credentials.json"), datafiles)
+            for i in datafiles:
+                print(i)
+            downloadManager.download(datafiles, ".")
+
+        See docs/howto/drsDownloading.md for more details
+
+"""
+
+
+import re
+import os
+from dataclasses import dataclass, field
+from datetime import datetime, timezone, timedelta
+from enum import Enum
+from json import load as json_load, loads as json_loads, JSONDecodeError
+from pathlib import Path
+from typing import Any, Dict, List, Optional, Tuple
+
+import humanfriendly
+import requests
+import zipfile
+from cdislogging import get_logger
+from dataclasses_json import dataclass_json, LetterCase, Undefined
+from dateutil import parser as date_parser
+from tqdm import tqdm
+from urllib.parse import urlparse
+
+from gen3.auth import Gen3Auth, Gen3AuthError, decode_token
+from gen3.auth import _handle_access_token_response
+from gen3.tools.download.drs_resolvers import resolve_drs
+from gen3.utils import remove_trailing_whitespace_and_slashes_in_url
+from gen3.metadata import Gen3Metadata
+
+DEFAULT_EXPIRE: timedelta = timedelta(hours=1)
+
+# package formats we handle for unpacking
+PACKAGE_EXTENSIONS = [".zip"]
+
+logger = get_logger("__name__")
+
+
+# Add undefined=Undefined.EXCLUDE here because we only cares if the input manifest has the minimal required metadata fields for data download, any extra metadata fields should be ignored and should not cause a failure
+
+[docs] +@dataclass_json(letter_case=LetterCase.SNAKE, undefined=Undefined.EXCLUDE) +@dataclass +class Manifest: + """Data class representing a Gen3 JSON manifest typically exported from a Gen3 discovery page. + + The class is passed to the DownloadManager to download or list all of the files in the manifest. + The Download manager will cache additional information (if available) + + Attributes: + object_id(str): the DRS object id. This is the only attribute that needs to be defined + file_size(Optional[int]): the filesize of the object, if contained in the manifest + file_name(Optional[str]): the name of the file pointed to by the DRS object id + md5sum(Optional[str]): the checksum of the object + commons_url(Optional[str]): url of the indexd server to retrieve file/bundle from + """ + + object_id: str # only required member + file_size: Optional[int] = -1 # -1 indicated not set + file_name: Optional[str] = None + md5sum: Optional[str] = None + commons_url: Optional[str] = None + +
+[docs] + @staticmethod + def load_manifest(path: Path): + """Loads a json manifest""" + with open(path, "rt") as fin: + data = json_load(fin) + return Manifest.schema().load(data, many=True)
+ + +
+[docs] + @staticmethod + def create_object_list(manifest) -> List["Downloadable"]: + """Create a list of Downloadable instances from the manifest + + Args: + manifest(list): list of manifest objects + Returns: + List of Downloadable instances + """ + results = [] + for entry in manifest: + results.append( + Downloadable( + object_id=entry.object_id, + hostname=remove_trailing_whitespace_and_slashes_in_url( + entry.commons_url + ), + ) + ) + return results
+ + +
+[docs] + @staticmethod + def load(filename: Path) -> Optional[List["Downloadable"]]: + """ + Method to load a json manifest and return a list of Bownloadable object. + This list is passed to the DownloadManager methods of download, and list + + Args: + filename(Path): path to manifest file + Returns: + list of Downloadable objects if successfully opened/parsed None otherwise + """ + try: + manifest = Manifest.load_manifest(filename) + return Manifest.create_object_list(manifest) + except FileNotFoundError as ex: + logger.critical(f"Error file not found: {ex.filename}") + except JSONDecodeError as ex: + logger.critical(f"format of manifest file is valid JSON: {ex.msg}") + + return None
+
+ + + +@dataclass +class KnownDRSEndpoint: + """ + Dataclass used internally by the DownloadManager class to cache hostnames and tokens + for Gen3 commons possibly accessed using the Workspace Token Service (WTS). The endpoint is + assumed to support DRS and therefore caches additional DRS information. + + Attributes: + hostname (str): hostname of DRS server + last_refresh_time (datetime): last time the token has been refreshed + idp (Optional[str]): cached idp information + access_token (Optional[str]): current bearer token initially None + identifier (Optional[str]): DRS prefix (if used) + use_wts (bool): if True use WTS to create tokens + + """ + + hostname: str + expire: datetime = None + idp: Optional[str] = None + access_token: Optional[str] = None + identifier: Optional[str] = None + use_wts: bool = True + + @property + def available(self): + """If endpoint has access token it is available""" + return self.access_token is not None + + def expired(self) -> bool: + """check if WTS token is older than the default expiration date + + If not using the WTS return false and use standard Gen3 Auth + """ + if not self.use_wts: + return False + + return datetime.now() > self.expire + + def renew_token(self, wts_server_name: str, server_access_token): + """Gets a new token from the WTS and updates the token and refresh time + + Args: + wts_server_name (str): hostname of WTS server + server_access_token (str): token used to authenticate use of WTS + + """ + token = wts_get_token( + hostname=wts_server_name, + idp=self.idp, + access_token=server_access_token, + ) + token_info = decode_token(token) + # TODO: this would break if user is trying to download object from different commons + # keep BRH token and wts sparate + self.access_token = token + self.expire = datetime.fromtimestamp(token_info["exp"]) + + +class DRSObjectType(str, Enum): + """Enum defining the 3 possible DRS object types.""" + + unknown = "unknown" + object = "object" + bundle = "bundle" + + +
+[docs] +@dataclass +class Downloadable: + """ + Class handling the information for a DRS object. The information is populated from the manifest or + by retrieving the information from a DRS server. + + Attributes: + object_id (str): DRS object id (REQUIRED) + object_type (DRSObjectType): type of DRS object + hostname (str): hostname of DRS object + file_size (int): size in bytes + file_name (str): name of file + updated_time (datetime): timestamp of last update to file + created_time (datetime): timestamp when file is created + access_methods (List[Dict[str, Any]]): list of access methods (e.g. s3) for DRS object + children (List[Downloadable]): list of child objects (in the case of DRS bundles) + _manager (DownloadManager): manager for this Downloadable + """ + + object_id: str + object_type: Optional[DRSObjectType] = DRSObjectType.unknown + hostname: Optional[str] = None + file_size: Optional[int] = -1 + file_name: Optional[str] = None + updated_time: Optional[datetime] = None + created_time: Optional[datetime] = None + access_methods: List[Dict[str, Any]] = field(default_factory=list) + children: List["Downloadable"] = field(default_factory=list) + _manager = None + + def __str__(self): + return ( + f'{self.file_name if self.file_name is not None else "not available" : >45}; ' + f"{humanfriendly.format_size(self.file_size) :>12}; " + f'{self.hostname if self.hostname is not None else "not resolved"}; ' + f'{self.created_time.strftime("%m/%d/%Y, %H:%M:%S") if self.created_time is not None else "not available"}' + ) + + def __repr__(self): + return ( + f'(Downloadable: {self.file_name if self.file_name is not None else "not available"}; ' + f"{humanfriendly.format_size(self.file_size)}; " + f'{self.hostname if self.hostname is not None else "not resolved"}; ' + f'{self.created_time.strftime("%m/%d/%Y, %H:%M:%S") if self.created_time is not None else "not available"})' + ) + +
+[docs] + def download(self): + """calls the manager to download this object. Allows Downloadables to be self downloading""" + self._manager.download([self])
+ + +
+[docs] + def pprint(self, indent: str = ""): + """ + Pretty prints the object information. This is used for listing an object. + In the case of a DRS bundle the child objects are listed similar to the linux tree command + """ + + from os import linesep + + res = self.__str__() + linesep + child_indent = f"{indent} " + + pos = -1 + for x in self.children: + pos += 1 + if pos == len(self.children) - 1: + res += f"{child_indent}└── {x.pprint(child_indent)}" + else: + res += f"{child_indent}├── {x.pprint(child_indent)}" + return res
+
+ + + +
+[docs] +@dataclass +class DownloadStatus: + """Stores the download status of objectIDs. + + The DataManager will return a list of DownloadStatus as a result of calling the download method + + Status is "pending" until it is downloaded or an error occurs. + Attributes: + filename (str): the name of the file to download + status (str): status of file download initially "pending" + start_time (Optional[datetime]): start time of download as datetime initially None + end_time (Optional[datetime]): end time of download as datetime initially None + """ + + filename: str + status: str = "pending" + start_time: Optional[datetime] = None + end_time: Optional[datetime] = None + + def __str__(self): + return ( + f'filename: {self.filename if self.filename is not None else "not available"}; ' + f"status: {self.status}; " + f'start_time: {self.start_time.strftime("%m/%d/%Y, %H:%M:%S") if self.start_time is not None else "n/a"}; ' + f'end_time: {self.end_time.strftime("%m/%d/%Y, %H:%M:%S") if self.start_time is not None else "n/a"}' + ) + + def __repr__(self): + return self.__str__()
+ + + +def wts_external_oidc(hostname: str) -> Dict[str, Any]: + """ + Get the external_oidc from a connected WTS. Will report if WTS service + is missing. Note that in some cases this can be considered a warning not a error. + + Args: + hostname (str): hostname to access the WTS endpoint + + Returns: + dict containing the oidc information + """ + oidc = {} + try: + response = requests.get(f"https://{hostname}/wts/external_oidc/") + response.raise_for_status() + data = response.json() + if "providers" not in data: + logger.warning( + 'cannot find "providers". Likely no WTS service running for this commons' + ) + return oidc + for item in data["providers"]: + oidc[urlparse(item["base_url"]).netloc] = item + + except requests.exceptions.HTTPError as exc: + logger.critical( + f'HTTP Error ({exc.response.status_code}): {json_loads(exc.response.text).get("message", "")}' + ) + except JSONDecodeError as ex: + logger.warning( + f"Unable to process WTS response. Likely no WTS service running on this commons. " + f"Certain commands might fail." + ) + + return oidc + + +def wts_get_token(hostname: str, idp: str, access_token: str): + """ + Gets a auth token from a Gen3 WTS server for the supplied idp + Args: + hostname (str): Gen3 common's WTS service + idp: identity provider to use + access_token: Gen3 Auth to use to with WTS + + Returns: + Token for idp if successful, None if failure + """ + headers = { + "Content-Type": "application/json", + "Accept": "application/json", + "Connection": "keep-alive", + "Authorization": "bearer " + access_token, + } + + try: + url = f"https://{hostname}/wts/token/?idp={idp}" + try: + response = requests.get(url=url, headers=headers) + response.raise_for_status() + except requests.exceptions.HTTPError as exc: + logger.critical( + f"HTTP Error ({exc.response.status_code}): getting WTS token: {exc.response.text}" + ) + logger.critical( + "Please make sure the target commons is connected on your profile page and that connection has not expired." + ) + return None + + return _handle_access_token_response(response, "token") + + except Gen3AuthError: + logger.critical(f"Unable to authenticate your credentials with {hostname}") + return None + + +def get_drs_object_info(hostname: str, object_id: str) -> Optional[dict]: + """ + Retrieves information for a DRS object residing on the hostname + Args: + hostname (str): hostname of DRS object + object_id (str): DRS object id + + Returns: + GAG4H DRS object information if sucessful otherwise None + """ + try: + response = requests.get(f"https://{hostname}/ga4gh/drs/v1/objects/{object_id}") + response.raise_for_status() + data = response.json() + return data + + except requests.HTTPError as exc: + if exc.response.status_code == 404: + logger.critical( + f"HTTP Error ({exc.response.status_code}): {object_id} not found at {hostname}" + ) + else: + logger.critical( + f"HTTP Error ({exc.response.status_code}): accessing object: {object_id}" + ) + return None + except ConnectionError as exc: + logger.critical(f"Connection Error {exc} when accessing object: {object_id}") + return None + + +def extract_filename_from_object_info(object_info: dict) -> Optional[str]: + """Extracts the filename from the object_info. + + if filename is in object_info use that, otherwise try to extract it from the one of the access methods. + Returns filename if found, else return None + + Args + object_info (dict): DRS object dictionary + """ + if "name" in object_info and object_info["name"]: + return object_info["name"] + + for access_method in object_info["access_methods"]: + url = access_method["access_url"]["url"] + parts = url.split("/") + if parts: + return parts[-1] + + return None + + +def get_access_methods(object_info: dict) -> List[str]: + """ + Returns the DRS GA4GH access methods from the object_info. + + Args: + object_info (dict): dict of GA4GH DRS Object information + + Returns: + List of access methods + """ + if object_info is None: + logger.critical("no access methods defined for this file") + return [] + return object_info["access_methods"] + + +def get_drs_object_type(object_info: dict) -> DRSObjectType: + """From the object info determine the type of object. + + Args: + object_info (dict): DRS object dictionary + + Returns: + type of object: either bundle or object + """ + if "form" in object_info: + if object_info["form"] is None: + return DRSObjectType.object + return DRSObjectType(object_info["form"]) + + if "contents" in object_info and len(object_info["contents"]) > 0: + return DRSObjectType.bundle + else: + return DRSObjectType.object + + +def get_drs_object_timestamp(s: Optional[str]) -> Optional[datetime]: + """returns the timestamp in datetime if not none otherwise returns None + + Args: + s (Optional[str]): string to parse + Returns: + datetime if not None + """ + return date_parser.parse(s) if s is not None else None + + +def add_drs_object_info(info: Downloadable) -> bool: + """ + Given a downloader object fill in the required fields + from the resolved hostname. + In the case of a bundle, try to resolve all object_ids contained in the bundle including other objects and bundles. + + Args: + info (Downloadable): Downloadable to add information to + Returns: + True if object is valid and resolvable. + """ + if info.hostname is None: + return False + + object_info = get_drs_object_info(info.hostname, info.object_id) + if (object_info) is None: + return False + + # Get common information we want + info.file_name = extract_filename_from_object_info(object_info) + info.file_size = object_info.get("size", -1) + info.updated_time = get_drs_object_timestamp(object_info.get("updated_time", None)) + info.created_time = get_drs_object_timestamp(object_info.get("created_time", None)) + + info.object_type = get_drs_object_type(object_info) + if info.object_type == DRSObjectType.object: + info.access_methods = get_access_methods(object_info) + return True + else: # a bundle,get everything else + for item in object_info["contents"]: + child_id = item.get("id", None) + if child_id is None: + continue + child_object = Downloadable(hostname=info.hostname, object_id=child_id) + add_drs_object_info(child_object) + info.children.append(child_object) + + return True + + +class InvisibleProgress: + """ + Invisible progress bar which stubs a tqdm progress bar + """ + + def update(self, value): # pragma: no cover + pass + + +def download_file_from_url( + url: str, filename: Path, show_progress: bool = True +) -> bool: + """ + Downloads a file using the URL. The URL is a pre-signed url created by the download manager + from the access method of the DRS object. + + Args: + url (str): URL to download from + filename (str): name of the file to write data to + show_progress (bool): show a progress bar (default) + + Returns: + True if object has been downloaded + """ + try: + response = requests.get(url, stream=True) + response.raise_for_status() + + except requests.exceptions.Timeout: + logger.critical(f"Was unable to get the download url: {url}. Timeout Error.") + return False + except requests.exceptions.HTTPError as exc: + logger.critical( + f"HTTP Error ({exc.response.status_code}): downloading file from {url}" + ) + return False + + total_size_in_bytes = int(response.headers.get("content-length", 0)) + + if total_size_in_bytes == 0: + logger.critical(f"content-length is 0 and it should not be") + return False + + total_downloaded = 0 + block_size = 8092 # 8K blocks might want to tune this. + + progress_bar = ( + tqdm( + desc=f"{str(filename) : <45}", + total=total_size_in_bytes, + unit="iB", + unit_scale=True, + bar_format="{l_bar:45}{bar:35}{r_bar}{bar:-10b}", + ) + if show_progress + else InvisibleProgress() + ) + + # if the file name contains '/', create subdirectories and download there + ensure_dirpath_exists(Path(os.path.dirname(filename))) + + try: + with open(filename, "wb") as file: + for data in response.iter_content(block_size): + progress_bar.update(len(data)) + total_downloaded += len(data) + file.write(data) + except IOError as ex: + logger.critical(f"IOError opening {filename} for writing: {ex}") + return False + + if total_downloaded != total_size_in_bytes: + logger.critical( + f"Error in downloading {filename}: expected {total_size_in_bytes} bytes, downloaded {total_downloaded} bytes" + ) + return False + return True + + +def unpackage_object(filepath: str): + # allowed formats are set in PACKAGE_EXTENSIONS + with zipfile.ZipFile(filepath, "r") as package: + package.extractall(os.path.dirname(filepath)) + + +def parse_drs_identifier(drs_candidate: str) -> Tuple[str, str, str]: + """ + Parses a DRS identifier to extract a hostname in the case of hostname based DRS + otherwise it look for a DRS compact identifier. + + If neither one is recognized return an empty string and a type of 'unknown' + Note: The regex expressions used to extract hostname or identifier has a potential for + a false positive. + + Args: + drs_candidate (str): a drs object identifier + + Returns: + Tuple (str): tuple of hostname/drs prefix, guid, string: one of "hostname", "compact", "unknown" + """ + # determine if hostname or compact identifier or unknown + drs_regex = r"drs://([A-Za-z0-9\.\-\~]+)/([A-Za-z0-9\.\-\_\~\/]+)" + # either a drs prefix: + + matches = re.findall(drs_regex, drs_candidate, re.UNICODE) + + if len(matches) == 1: # this could be a hostname DRS id + hostname_regex = ( + r"^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*" + r"([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$" + ) + hostname_matches = re.findall(hostname_regex, matches[0][0], re.UNICODE) + if len(hostname_matches) == 1: + return matches[0][0], matches[0][1], "hostname" + # possible compact rep + compact_regex = r"([A-Za-z0-9\.\-\~]+)/([A-Za-z0-9\.\-\_\~\/]+)" + matches = re.findall(compact_regex, drs_candidate, re.UNICODE) + if len(matches) == 1 and len(matches[0]) == 2: + return matches[0][0], matches[0][1], "compact" + + # can't figure out a this identifier + return "", "", "unknown" + + +def resolve_drs_hostname_from_id( + object_id: str, resolved_drs_prefix_cache: dict, mds_url: str +) -> Optional[Tuple[str, str, str]]: + """Resolves and returns a DRS identifier + The resolved_drs_prefix_cache is updated if needed and is a potential side effect of this + call + Args: + object_id (str): DRS object id to resolve + resolved_drs_prefix_cache (dict) : cache of resolved DRS prefixes + mds_url (str): the URL for the Gen3 Aggregate MDS to use to help resolved DRS hostname + + Returns: + the hostname of the DRS server if resolved, otherwise it returns None + """ + hostname = None + + prefix, identifier, identifier_type = parse_drs_identifier(object_id) + if identifier_type == "hostname": + return prefix, identifier, identifier_type + if identifier_type == "compact": + if prefix not in resolved_drs_prefix_cache: + hostname = resolve_drs(prefix, object_id, metadata_service_url=mds_url) + if hostname is not None: + resolved_drs_prefix_cache[prefix] = hostname + else: + hostname = resolved_drs_prefix_cache[prefix] + + return hostname, identifier, identifier_type + + +def resolve_objects_drs_hostname_from_id( + object_ids: List[Downloadable], resolved_drs_prefix_cache: dict, mds_url: str +) -> None: + """Given a list of object_ids go through list and resolve + cache any unknown hosts + + Args: + object_ids (List[Downloadable]): list of object to resolve + resolved_drs_prefix_cache (dict): cache of resolved DRS prefixes + mds_url (str): Gen3 metadata service to resolve DRS prefixes + + """ + for entry in object_ids: + if entry.hostname is None: + # if resolution fails the entry hostname will still be None + entry.hostname, nid, drs_type = resolve_drs_hostname_from_id( + entry.object_id, resolved_drs_prefix_cache, mds_url + ) + if ( + drs_type == "hostname" + ): # drs_type is a hostname so object id will be the GUID + entry.object_id = nid + + +def ensure_dirpath_exists(path: Path) -> Path: + """Utility to create a directory if missing. + Returns the path so that the call can be inlined in a another call + + Args: + path (Path): path to create + Returns + path of created directory + """ + assert path + out_path: Path = path + + if not out_path.exists(): + out_path.mkdir(parents=True, exist_ok=True) + + return out_path + + +def get_download_url_using_drs( + drs_hostname: str, object_id: str, access_method: str, access_token: str +) -> Optional[str]: + """ + Returns the presigned URL for a DRS object, from a DRS hostname, via the access method + Args: + drs_hostname (str): hostname of DRS server + object_id (str): DRS object id + access_method (str): access method to use + access_token (str): access token to DRS server + + Returns: + presigned url to object + """ + headers = { + "Content-Type": "application/json", + "Accept": "application/json", + "Authorization": "bearer " + access_token, + } + try: + response = requests.get( + url=f"https://{drs_hostname}/ga4gh/drs/v1/objects/{object_id}/access/{access_method}", + headers=headers, + ) + response.raise_for_status() + data = response.json() + return data.get("url", None) + + except requests.exceptions.Timeout: + logger.critical(f"Was unable to download: {object_id}. Timeout Error.") + except requests.exceptions.HTTPError as exc: + logger.critical( + f"HTTP Error ({exc.response.status_code}) when requesting download url from {access_method}" + ) + return None + + +def get_user_auth(commons_url: str, access_token: str) -> Optional[List[str]]: + """ + Retrieves a user's authz for the commons based on the access token. + Any error will be logged and None is returned + + Args: + commons_url (str): hostname of Gen3 indexd + access_token (str): user's auth token + + Returns: + The authz object from the user endpoint + """ + """ + + """ + headers = { + "Content-Type": "application/json", + "Accept": "application/json", + "Authorization": "bearer " + access_token, + } + + try: + response = requests.get(url=f"https://{commons_url}/user/user", headers=headers) + response.raise_for_status() + data = response.json() + authz = data["authz"] + return authz + except requests.exceptions.HTTPError as exc: + logger.critical(f"HTTP Error ({exc.response.status_code}): getting user access") + + return None + + +def list_auth(hostname: str, authz: dict): + """ + Prints the authz for a DRS hostname + Args: + hostname (str): hostname to list access + authz (str): dictionary of authz stringts + """ + print( + f"───────────────────────────────────────────────────────────────────────────────────────────────────────" + ) + print(f"Access for {hostname}:") + if authz is not None and len(authz) > 0: + for access, methods in authz.items(): + print( + f" {access : <55}: {' '.join(dict.fromkeys(x['method'] for x in methods).keys()):>40}" + ) + else: + print(" No access") + + +
+[docs] +class DownloadManager: + """ + Class to assist in downloading a list of Downloadable object which at a minimum is a json manifest + of DRS object ids. The methods of interest are download and user_access. + """ + + def __init__( + self, + hostname: str, + auth: Gen3Auth, + download_list: List[Downloadable], + show_progress: bool = False, + ): + """ + Initialize the DownloadManager so that is ready to start downloading. + Note the downloadable objects are required so that all tokens are available + to support the download. + + Args: + hostname (str): Gen3 commons home commons + auth (Gen3Auth) : Gen3 authentication + download_list (List[Downloadable]): list of objects to download + """ + + self.hostname = hostname + self.access_token = auth.get_access_token() + self.metadata = Gen3Metadata(auth) + self.wts_endpoints = wts_external_oidc(hostname) + self.resolved_compact_drs = {} + # add COMMONS host as a DRSEndpoint as it does not use the WTS + self.known_hosts = { + self.hostname: KnownDRSEndpoint( + hostname=self.hostname, + access_token=self.access_token, + use_wts=False, + expire=datetime.fromtimestamp(decode_token(self.access_token)["exp"]), + ) + } + self.download_list = download_list + self.resolve_objects(self.download_list, show_progress) + +
+[docs] + def resolve_objects(self, object_list: List[Downloadable], show_progress: bool): + """ + Given an Downloadable object list, resolve the DRS hostnames and update each Downloadable + + Args: + object_list (List[Downloadable]): list of Downloadable objects to resolve + """ + resolve_objects_drs_hostname_from_id( + object_list, + self.resolved_compact_drs, + f"http://{self.hostname}/mds/aggregate/info", + ) + progress_bar = ( + tqdm(desc=f"Resolving objects", total=len(object_list)) + if show_progress + else InvisibleProgress() + ) + for entry in object_list: + add_drs_object_info(entry) + # sugar to allow download objects to self download + entry._manager = self + progress_bar.update(1)
+ + +
+[docs] + def cache_hosts_wts_tokens(self, object_list): + """ + Using the list of DRS host obtain a WTS token for all DRS hosts in the list. It's is possible + """ + # create two sets: one of the know WTS host and the other of the host in the manifest + wts_endpoint_set = set(self.wts_endpoints.keys()) + object_id_hostnames = { + x.hostname for x in object_list if x.hostname is not None + } + + drs_in_wts = wts_endpoint_set.intersection( + object_id_hostnames + ) # all DRS host in WTS + drs_not_in_wts = object_id_hostnames.difference( + wts_endpoint_set + ) # all DRS host not in WTS + for drs_hostname in drs_in_wts: + endpoint = KnownDRSEndpoint( + hostname=drs_hostname, + idp=self.wts_endpoints[drs_hostname]["idp"], + ) + endpoint.renew_token(self.hostname, self.access_token) + self.known_hosts[drs_hostname] = endpoint + for drs_hostname in drs_not_in_wts: + # if we already know the host then we don't need to reset the host + if drs_hostname in self.known_hosts: + continue + # mark hostname as unavailable + self.known_hosts[drs_hostname] = KnownDRSEndpoint( + hostname=drs_hostname, + ) + logger.critical( + f"Could not retrieve a token for {drs_hostname}: it is not available as a WTS endpoint." + )
+ + +
+[docs] + def get_fresh_token(self, drs_hostname: str) -> Optional[str]: + """Will return and/or refresh and return a WTS token if hostname is known otherwise returns None. + Args: + drs_hostname (str): hostname to get token for + + Returns: + access token if successful otherwise None + """ + if drs_hostname not in self.known_hosts: + logger.critical(f"Could not find {drs_hostname} in cache.") + return None + if self.known_hosts[drs_hostname].available: + if not self.known_hosts[drs_hostname].expired(): + return self.known_hosts[drs_hostname].access_token + else: + # update the token + self.known_hosts[drs_hostname].renew_token( + self.hostname, self.access_token + ) + return self.known_hosts[drs_hostname].access_token + + return None
+ + +
+[docs] + def download( + self, + object_list: List[Downloadable], + save_directory: str = ".", + show_progress: bool = False, + unpack_packages: bool = True, + delete_unpacked_packages: bool = False, + ) -> Dict[str, Any]: + """ + Downloads objects to the directory or current working directory. + The input is an list of Downloadable object created by loading a manifest + using the Manifest class or a call to Manifest.load(... + + The download manager will download each file in the manifest, in the + case of errors they are logged and it continues. + + The return value is a list of DownloadStatus object, detailing the results + of the download. + + Args: + object_list (List[Downloadable]): + save_directory (str): directory to save to (will be created) + show_progress (bool): show a download progress bar + unpack_packages (bool): set to False to disable the unpacking of downloaded packages + delete_unpacked_packages (bool): set to True to delete package files after unpacking them + + Returns: + List of DownloadStatus objects for each object id in object_list + """ + + self.cache_hosts_wts_tokens(object_list) + output_dir = Path(save_directory) + + completed = { + entry.object_id: DownloadStatus(filename=entry.file_name) + for entry in object_list + } + + for entry in object_list: + # handle bundles first + if entry.object_type is DRSObjectType.bundle: + # append the filename to the directory path and + child_dir = Path(save_directory, entry.file_name) + # call download with the children object list + child_status = self.download( + entry.children, + child_dir, + show_progress, + unpack_packages, + delete_unpacked_packages, + ) + # when complete, append the return status + completed[entry.object_id] = child_status + continue + + if entry.hostname is None: + logger.critical( + f"{entry.hostname} was not resolved, skipping {entry.object_id}." + f"Skipping {entry.file_name}" + ) + completed[entry.object_id].status = "error (resolving DRS host)" + continue + + # check to see if we have tokens + if entry.hostname not in self.known_hosts: + logger.critical( + f"{entry.hostname} is not present in this commons remote user access." + f"Skipping {entry.file_name}" + ) + completed[entry.object_id].status = "error (resolving DRS host)" + continue + if self.known_hosts[entry.hostname].available is False: + logger.critical( + f"Was unable to get user authorization from {entry.hostname}. Skipping {entry.file_name}" + ) + completed[entry.object_id].status = "error (no auth)" + continue + + drs_hostname = entry.hostname + access_token = self.get_fresh_token(drs_hostname) + + if access_token is None: + logger.critical( + f"No access token defined for {entry.object_id}. Skipping" + ) + completed[entry.object_id].status = "error (no access token)" + continue + # TODO refine the selection of access_method + if len(entry.access_methods) == 0: + logger.critical( + f"No access methods defined for {entry.object_id}. Skipping" + ) + completed[entry.object_id].status = "error (no access methods)" + continue + access_method = entry.access_methods[0]["access_id"] + + download_url = get_download_url_using_drs( + drs_hostname, + entry.object_id, + access_method, + access_token, + ) + + if download_url is None: + completed[entry.object_id].status = "error" + continue + + completed[entry.object_id].start_time = datetime.now(timezone.utc) + filepath = output_dir.joinpath(entry.file_name) + res = download_file_from_url( + url=download_url, filename=filepath, show_progress=show_progress + ) + + # check if the file is a package; if so, unpack it in place + ext = os.path.splitext(entry.file_name)[-1] + if unpack_packages and ext in PACKAGE_EXTENSIONS: + try: + mds_entry = self.metadata.get(entry.object_id) + except Exception: + mds_entry = {} # no MDS or object not in MDS + logger.debug( + f"{entry.file_name} is not a package and will not be expanded" + ) + + # if the metadata type is "package", then unpack + if mds_entry.get("type") == "package": + try: + unpackage_object(filepath) + except Exception as e: + logger.critical( + f"{entry.file_name} had an issue while being unpackaged: {e}" + ) + res = False + + if delete_unpacked_packages: + filepath.unlink() + if res: + completed[entry.object_id].status = "downloaded" + logger.debug( + f"object {entry.object_id} has been successfully downloaded." + ) + else: + completed[entry.object_id].status = "error" + logger.debug(f"object {entry.object_id} has failed to be downloaded.") + completed[entry.object_id].end_time = datetime.now(timezone.utc) + + return completed
+ + +
+[docs] + def user_access(self): + """ + List the user's access permissions on each host needed to download + DRS objects in the manifest. A useful way to determine if access permissions + are one reason a download failed. + + Returns: + list of authz for each DRS host + """ + results = {} + self.cache_hosts_wts_tokens(self.download_list) + for hostname in self.known_hosts.keys(): + if self.known_hosts[hostname].available is False: + logger.critical( + f"Was unable to get user authorization from {hostname}." + ) + continue + access_token = self.known_hosts[hostname].access_token + authz = get_user_auth(hostname, access_token) + results[hostname] = authz + + return results
+
+ + + +def _download( + hostname, + auth, + infile, + output_dir=".", + show_progress=False, + unpack_packages=True, + delete_unpacked_packages=False, +) -> Optional[Dict[str, Any]]: + """ + A convenience function used to download a json manifest. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth (str): Gen3 Auth instance + infile (str): manifest file + output_dir: directory to save downloaded files to + show_progress: show progress bar + unpack_packages (bool): set to False to disable the unpacking of downloaded packages + delete_unpacked_packages (bool): set to True to delete package files after unpacking them + + Returns: + List of DownloadStatus objects for each object id in object_list + """ + object_list = Manifest.load(Path(infile)) + if object_list is None: + logger.critical(f"Error loading {infile}") + return None + try: + auth.get_access_token() + except Gen3AuthError: + logger.critical(f"Unable to authenticate your credentials with {hostname}") + return + + downloader = DownloadManager( + hostname=hostname, + auth=auth, + download_list=object_list, + show_progress=show_progress, + ) + + out_dir_path = ensure_dirpath_exists(Path(output_dir)) + return downloader.download( + object_list, + str(out_dir_path), + show_progress=show_progress, + unpack_packages=unpack_packages, + delete_unpacked_packages=delete_unpacked_packages, + ) + + +def _download_obj( + hostname, + auth, + object_ids, + output_dir=".", + show_progress=False, + unpack_packages=True, + delete_unpacked_packages=False, +) -> Optional[Dict[str, Any]]: + """ + A convenience function used to download a single DRS object. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth: Gen3 Auth instance + object_ids (List[str]): DRS object id + output_dir: directory to save downloaded files to + show_progress: show progress bar + unpack_packages (bool): set to False to disable the unpacking of downloaded packages + delete_unpacked_packages (bool): set to True to delete package files after unpacking them + + Returns: + List of DownloadStatus objects for the DRS object + """ + try: + auth.get_access_token() + except Gen3AuthError: + logger.critical(f"Unable to authenticate your credentials with {hostname}") + return None + + object_list = [Downloadable(object_id=object_id) for object_id in object_ids] + downloader = DownloadManager( + hostname=hostname, + auth=auth, + download_list=object_list, + show_progress=show_progress, + ) + + out_dir_path = ensure_dirpath_exists(Path(output_dir)) + return downloader.download( + object_list, + str(out_dir_path), + show_progress=show_progress, + unpack_packages=unpack_packages, + delete_unpacked_packages=delete_unpacked_packages, + ) + + +def _listfiles(hostname, auth, infile: str) -> bool: + """ + A wrapper function used by the cli to list files in a manifest. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth: Gen3 Auth instance + infile (str): manifest file + + Returns: + True if successfully listed + """ + object_list = Manifest.load(Path(infile)) + if object_list is None: + return False + + try: + auth.get_access_token() + except Gen3AuthError: + logger.critical(f"Unable to authenticate your credentials with {hostname}") + return False + except requests.exceptions.RequestException as ex: + logger.critical( + f"Unable to authenticate your credentials with {hostname}: {str(ex)}" + ) + return False + + DownloadManager( + hostname=hostname, auth=auth, download_list=object_list, show_progress=True + ) + + for x in object_list: + print(x.pprint()) + + return True + + +def _list_object(hostname, auth, object_id: str) -> bool: + """ + Lists a DRS object. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth: Gen3 Auth instance + object_id (str): DRS object + + Returns: + True if successfully listed + """ + try: + auth.get_access_token() + except Gen3AuthError: + logger.critical(f"Unable to authenticate your credentials with {hostname}") + return False + except requests.exceptions.RequestException as ex: + logger.critical( + f"Unable to authenticate your credentials with {hostname}: {ex}" + ) + return False + + object_list = [Downloadable(object_id=object_id)] + DownloadManager( + hostname=hostname, auth=auth, download_list=object_list, show_progress=False + ) + + for x in object_list: + print(x.pprint()) + + return True + + +def _list_access(hostname, auth, infile: str) -> bool: + """ + A convenience function to list a users access for all DRS hostname in a manifest. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth: Gen3 Auth instance + infile (str): manifest file + + Returns: + True if successfully listed + """ + object_list = Manifest.load(Path(infile)) + if object_list is None: + return False + + try: + auth.get_access_token() + except Gen3AuthError: + logger.critical(f"Unable to authenticate your credentials with {hostname}") + return False + except requests.exceptions.RequestException as ex: + logger.critical( + f"Unable to authenticate your credentials with {hostname}: {ex}" + ) + return False + + download = DownloadManager( + hostname=hostname, auth=auth, download_list=object_list, show_progress=False + ) + access = download.user_access() + for h, access in access.items(): + list_auth(h, access) + + return True + + +# These functions are exposed to the SDK's cli under the drs-pull subcommand +
+[docs] +def list_files_in_drs_manifest(hostname, auth, infile: str) -> bool: + """ + A wrapper function used by the cli to list files in a manifest. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth: Gen3 Auth instance + infile (str): manifest file + + Returns: + True if successfully listed + """ + return _listfiles(hostname, auth, infile)
+ + + +
+[docs] +def list_drs_object(hostname, auth, object_id: str) -> bool: + """ + A convenience function used to list a DRS object. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth: Gen3 Auth instance + object_id (str): DRS object + + Returns: + True if successfully listed + """ + return _list_object(hostname, auth, object_id) # pragma: no cover
+ + + +
+[docs] +def download_files_in_drs_manifest( + hostname, + auth, + infile, + output_dir, + show_progress=True, + unpack_packages=True, + delete_unpacked_packages=False, +) -> None: + """ + A convenience function used to download a json manifest. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth (str): Gen3 Auth instance + infile (str): manifest file + output_dir: directory to save downloaded files to + unpack_packages (bool): set to False to disable the unpacking of downloaded packages + delete_unpacked_packages (bool): set to True to delete package files after unpacking them + + Returns: + """ + _download( + hostname, + auth, + infile, + output_dir, + show_progress, + unpack_packages, + delete_unpacked_packages, + )
+ + + +def download_drs_objects( + hostname, + auth, + object_ids, + output_dir, + show_progress=True, + unpack_packages=True, + delete_unpacked_packages=False, +) -> None: + """ + A convenience function used to download a single DRS object. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth: Gen3 Auth instance + object_ids (List[str]): DRS object ids + output_dir: directory to save downloaded files to + unpack_packages (bool): set to False to disable the unpacking of downloaded packages + delete_unpacked_packages (bool): set to True to delete package files after unpacking them + + Returns: + List of DownloadStatus objects for the DRS object + """ + return _download_obj( + hostname, + auth, + object_ids, + output_dir, + show_progress, + unpack_packages, + delete_unpacked_packages, + ) + + +
+[docs] +def list_access_in_drs_manifest(hostname, auth, infile) -> bool: + """ + A convenience function to list a users access for all DRS hostname in a manifest. + Args: + hostname (str): hostname of Gen3 commons to use for access and WTS + auth: Gen3 Auth instance + infile (str): manifest file + + Returns: + True if successfully listed + """ + return _list_access(hostname, auth, infile)
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/tools/indexing/download_manifest.html b/docs/_build/html/_modules/gen3/tools/indexing/download_manifest.html new file mode 100644 index 000000000..5d84308c7 --- /dev/null +++ b/docs/_build/html/_modules/gen3/tools/indexing/download_manifest.html @@ -0,0 +1,645 @@ + + + + + + + gen3.tools.indexing.download_manifest — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.tools.indexing.download_manifest

+"""
+Module for indexing actions for downloading a manifest of
+indexed file objects (against indexd's API). Supports
+multiple processes and coroutines using Python's asyncio library.
+
+The default manifest format created is a Comma-Separated Value file (csv)
+with rows for every record. A header row is created with field names:
+guid,authz,acl,file_size,md5,urls,file_name
+
+Fields that are lists (like acl, authz, and urls) separate the values with spaces.
+
+Attributes:
+    CURRENT_DIR (str): directory this file is in
+    INDEXD_RECORD_PAGE_SIZE (int): number of records to request per page
+    MAX_CONCURRENT_REQUESTS (int): maximum number of desired concurrent requests across
+        processes/threads
+    TMP_FOLDER (str): Folder directory for placing temporary files
+        NOTE - We have to use a temporary folder b/c Python's file writing is not
+              thread-safe so we can't have all processes writing to the same file.
+              To workaround this, we have each process write to a file and concat
+              them all post-processing.
+"""
+import asyncio
+import aiofiles
+import click
+import json
+import time
+import json
+import csv
+import glob
+from cdislogging import get_logger
+
+import os
+import sys
+import shutil
+import math
+
+from gen3.tools.utils import (
+    get_and_verify_fileinfos_from_manifest,
+    GUID_STANDARD_KEY,
+    FILENAME_STANDARD_KEY,
+    SIZE_STANDARD_KEY,
+    MD5_STANDARD_KEY,
+    ACL_STANDARD_KEY,
+    URLS_STANDARD_KEY,
+    AUTHZ_STANDARD_KEY,
+    PREV_GUID_STANDARD_KEY,
+)
+
+from gen3.utils import get_or_create_event_loop_for_thread, yield_chunks
+from gen3.index import Gen3Index
+
+INDEXD_RECORD_PAGE_SIZE = 1024
+MAX_CONCURRENT_REQUESTS = 24
+CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
+TMP_FOLDER = os.path.abspath(CURRENT_DIR + "/tmp") + "/"
+
+logging = get_logger("__name__")
+
+
+
+[docs] +async def async_download_object_manifest( + commons_url, + output_filename="object-manifest.csv", + num_processes=4, + max_concurrent_requests=MAX_CONCURRENT_REQUESTS, + input_manifest=None, + python_subprocess_command="python", +): + """ + Download all file object records into a manifest csv + + Args: + commons_url (str): root domain for commons where indexd lives + output_filename (str, optional): filename for output + num_processes (int, optional): number of parallel python processes to use for + hitting indexd api and processing + max_concurrent_requests (int): the maximum number of concurrent requests allowed + NOTE: This is the TOTAL number, not just for this process. Used to help + determine how many requests a process should be making at one time + input_manifest (str): Input file. Read available object data from objects in this + file instead of reading everything in indexd. This will attempt to query + indexd for only the records identified in this manifest. + python_subprocess_command (str, optional): Command used to execute a + python process. By default you should not need to change this, but + if you are running something like MacOS and only installed Python 3.x + you may need to specify "python3". + """ + start_time = time.perf_counter() + logging.info(f"start time: {start_time}") + + # ensure tmp directories exists and are empty + os.makedirs(TMP_FOLDER, exist_ok=True) + os.makedirs(TMP_FOLDER + "input", exist_ok=True) + os.makedirs(TMP_FOLDER + "output", exist_ok=True) + for file in os.listdir(TMP_FOLDER): + file_path = os.path.join(TMP_FOLDER, file) + if os.path.isfile(file_path): + os.unlink(file_path) + + for file in os.listdir(TMP_FOLDER + "input"): + file_path = os.path.join(TMP_FOLDER + "input", file) + if os.path.isfile(file_path): + os.unlink(file_path) + + for file in os.listdir(TMP_FOLDER + "output"): + file_path = os.path.join(TMP_FOLDER + "output", file) + if os.path.isfile(file_path): + os.unlink(file_path) + + result = await _write_all_index_records_to_file( + commons_url, + output_filename, + num_processes, + max_concurrent_requests, + input_manifest, + python_subprocess_command, + ) + + end_time = time.perf_counter() + logging.info(f"end time: {end_time}") + logging.info(f"run time: {end_time-start_time}")
+ + + +async def _write_all_index_records_to_file( + commons_url, + output_filename, + num_processes, + max_concurrent_requests, + input_manifest, + python_subprocess_command, +): + """ + Spins up number of processes provided to parse indexd records and eventually + write to a single output file manifest. + + Args: + commons_url (str): root domain for commons where indexd lives + output_filename (str, optional): filename for output + num_processes (int, optional): number of parallel python processes to use for + hitting indexd api and processing + max_concurrent_requests (int): the maximum number of concurrent requests allowed + NOTE: This is the TOTAL number, not just for this process. Used to help + determine how many requests a process should be making at one time + input_manifest (str): Input file. Read available object data from objects in this + file instead of reading everything in indexd. This will attempt to query + indexd for only the records identified in this manifest. + """ + # used when requesting all records + page_chunks = [] + + # used when an input manifest is provided, this will only read record info for + # the records referenced in the manifest based on their checksums + record_chunks = [] + + if input_manifest: + # create chunks of checksums + logging.debug(f"parsing input file {input_manifest}") + input_records, headers = get_and_verify_fileinfos_from_manifest(input_manifest) + num_input_records = len(input_records) + + if not num_input_records: + raise AttributeError( + f"No valid records found in provided input file: {input_manifest}. " + "Please check previous logs." + ) + + logging.debug(f"number input_records: {num_input_records}") + logging.debug(f"num processes: {num_processes}") + + # batch records into subprocesses chunks + chunk_size = int(math.ceil(float(num_input_records) / num_processes)) + logging.debug(f"records chunk size: {chunk_size}") + + record_chunks = list(yield_chunks(input_records, chunk_size)) + else: + index = Gen3Index(commons_url) + logging.debug(f"requesting indexd stats...") + num_files = int(index.get_stats().get("fileCount")) + logging.debug(f"number files: {num_files}") + # paging is 0-based, so subtract 1 from ceiling + # note: float() is necessary to force Python 3 to not floor the result + max_page = int(math.ceil(float(num_files) / INDEXD_RECORD_PAGE_SIZE)) - 1 + logging.debug(f"max page: {max_page}") + logging.debug(f"num processes: {num_processes}") + + pages = [x for x in range(max_page + 1)] + + # batch pages into subprocesses + chunk_size = int(math.ceil(float(len(pages)) / num_processes)) + logging.debug(f"page chunk size: {chunk_size}") + + if chunk_size: + page_chunks = [ + pages[i : i + chunk_size] for i in range(0, len(pages), chunk_size) + ] + + processes = [] + for x in range(max(len(page_chunks), len(record_chunks))): + pages = ",".join(map(str, page_chunks[x])) if page_chunks else "," + input_record_chunks = ( + "|||".join(map(json.dumps, record_chunks[x])) if record_chunks else "|||" + ) + + # write record_checksum chunks to temporary files since the size can overload + # command line arguments + input_records_chunk_filename = TMP_FOLDER + f"input/input_records_chunk_{x}.txt" + logging.info( + f"writing input_record_chunks chunk {x} into {input_records_chunk_filename}" + ) + with open(input_records_chunk_filename, "wb") as outfile: + outfile.write(input_record_chunks.encode("utf8")) + + # call the cli function below and pass in chunks of pages for each process + command = ( + f"{python_subprocess_command} {CURRENT_DIR}/download_manifest.py --commons_url " + f"{commons_url} --pages {pages} --input-record-chunks-file {input_records_chunk_filename} " + f"--num_processes {num_processes} --max_concurrent_requests {max_concurrent_requests}" + ) + logging.info(command) + + process = await asyncio.create_subprocess_shell(command) + + logging.info(f"Process_{process.pid} - Started w/: {command}") + processes.append(process) + + for process in processes: + # wait for the subprocesses to finish + stdout, stderr = await process.communicate() + + if process.returncode == 0: + logging.info(f"Process_{process.pid} - Done") + else: + logging.info(f"Process_{process.pid} - FAILED") + + logging.info(f"done processing, combining outputs to single file {output_filename}") + + # remove existing output if it exists + if os.path.isfile(output_filename): + os.unlink(output_filename) + + with open(output_filename, "wb") as outfile: + outfile.write("guid,urls,authz,acl,md5,file_size,file_name\n".encode("utf8")) + for filename in glob.glob(TMP_FOLDER + "output/*"): + if output_filename == filename: + # don't want to copy the output into the output + continue + logging.info(f"combining {filename} into {output_filename}") + with open(filename, "rb") as readfile: + shutil.copyfileobj(readfile, outfile) + + logging.info(f"done writing output to file {output_filename}") + + +@click.command() +@click.option( + "--commons_url", help="Root domain (url) for a commons containing indexd." +) +@click.option( + "--pages", + help='Comma-Separated string of integers representing pages. ex: "2,4,5,6"', +) +@click.option( + "--input-record-chunks-file", + help=( + "File containing delimited string of records to retrieve." "ex: /foo/bar.txt" + ), +) +@click.option( + "--num_processes", + type=int, + help="number of processes you are running so we can make sure we don't open " + 'too many http connections. ex: "4"', +) +@click.option( + "--max_concurrent_requests", + type=int, + help="number of processes you are running so we can make sure we don't open " + 'too many http connections. ex: "4"', +) +def write_page_records_to_files( + commons_url, pages, input_record_chunks_file, num_processes, max_concurrent_requests +): + """ + Command line interface function for requesting a number of + records from indexd and writing to a file in that process. num_processes + is only used to calculate how many open connections this process should request. + + NOTE: YOU MUST USE EITHER `pages` OR `input-record-chunks-file`, YOU CANNOT USE BOTH + + Args: + commons_url (str): root domain for commons where indexd lives + pages (List[int/str]): List of indexd pages to request + input_record_chunks_file (str): File with indexd records to request + num_processes (int): number of concurrent processes being requested + (including this one) + max_concurrent_requests (int): the maximum number of concurrent requests allowed + NOTE: This is the TOTAL number, not just for this process. Used to help + determine how many requests a process should be making at one time + + Raises: + AttributeError: No pages specified to get records from + """ + if not pages and not input_record_chunks_file: + raise AttributeError( + "No info specified to get records with. " + "Supply either pages or input-record-chunks-file" + ) + + pages = [item for item in pages.strip().strip(",").split(",") if item] + input_record_chunks = [] + if input_record_chunks_file: + with open(input_record_chunks_file, "r", encoding="utf8") as file: + input_record_chunks_from_file = "|||".join(file.readlines()) + input_record_chunks = [ + json.loads(item) + for item in input_record_chunks_from_file.strip().split("|||") + if item + ] + + if not pages and not input_record_chunks: + raise AttributeError( + "No info specified to get records with. " + "Supply either pages or input-record-chunks-file with records in the file. " + ) + + if pages and input_record_chunks: + raise AttributeError( + "YOU MUST USE EITHER `pages` OR `input-record-chunks-file`, YOU CANNOT USE BOTH. " + f"You provided pages={pages} and input-record-chunks-file={input_record_chunks_file}." + ) + + loop = get_or_create_event_loop_for_thread() + + result = loop.run_until_complete( + _get_records_and_write_to_file( + commons_url, + pages, + input_record_chunks, + num_processes, + max_concurrent_requests, + ) + ) + return result + + +async def _get_records_and_write_to_file( + commons_url, pages, input_record_chunks, num_processes, max_concurrent_requests +): + """ + Getting indexd records and writing to a file. This function + creates semaphores to limit the number of concurrent http connections that + get opened to send requests to indexd. + + It then uses asyncio to start a number of coroutines. Steps: + 1) requests to indexd to get records (writes resulting records to a queue) + 2) puts a final "DONE" in the queue to stop coroutine that will read from queue + 3) reading those records from the queue and writing to a file + + Args: + commons_url (str): root domain for commons where indexd lives + pages (List[int/str]): List of indexd pages to request + input_record_chunks (List[dict]): List of indexd records to request + num_processes (int): number of concurrent processes being requested + (including this one) + """ + max_requests = int(max_concurrent_requests / num_processes) + logging.debug(f"max concurrent requests per process: {max_requests}") + lock = asyncio.Semaphore(max_requests) + queue = asyncio.Queue() + write_to_file_task = asyncio.ensure_future(_parse_from_queue(queue)) + + if pages: + logging.debug("putting records from page into queue") + await asyncio.gather( + *( + _put_records_from_page_in_queue(page, commons_url, lock, queue) + for page in pages + ) + ) + else: + logging.debug("putting records from input manifest into queue") + await asyncio.gather( + *( + _put_records_from_input_manifest_in_queue( + input_record, commons_url, lock, queue + ) + for input_record in input_record_chunks + ) + ) + + await queue.put("DONE") + await write_to_file_task + + +async def _put_records_from_input_manifest_in_queue( + input_record, commons_url, lock, queue +): + """ + Gets a semaphore then requests records for the given input_record and + puts them in a queue. + + Args: + commons_url (str): root domain for commons where indexd lives + input_record (int/str): indexd record to request (must contain checksum) + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + queue (asyncio.Queue): queue to put indexd records in + """ + checksum = input_record.get(MD5_STANDARD_KEY) + + index = Gen3Index(commons_url) + async with lock: + # default ssl handling unless it's explicitly http:// + ssl = None + if "https" not in commons_url: + ssl = False + + records = await index.async_get_records_from_checksum( + checksum=checksum, _ssl=ssl + ) + + # if nothing was found, we still want to output the input record + if not records: + records.append(input_record) + + await queue.put(records) + + +async def _put_records_from_page_in_queue(page, commons_url, lock, queue): + """ + Gets a semaphore then requests records for the given page and + puts them in a queue. + + Args: + commons_url (str): root domain for commons where indexd lives + page (int/str): indexd page to request + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + queue (asyncio.Queue): queue to put indexd records in + """ + index = Gen3Index(commons_url) + async with lock: + # default ssl handling unless it's explicitly http:// + ssl = None + if "https" not in commons_url: + ssl = False + + records = await index.async_get_records_on_page( + page=page, limit=INDEXD_RECORD_PAGE_SIZE, _ssl=ssl + ) + await queue.put(records) + + +async def _parse_from_queue(queue): + """ + Read from the queue and write to a file + + Args: + queue (asyncio.Queue): queue to read indexd records from + """ + loop = get_or_create_event_loop_for_thread() + + file_name = TMP_FOLDER + f"output/{os.getpid()}.csv" + async with aiofiles.open(file_name, "w+", encoding="utf8") as file: + logging.info(f"Writing to {file_name}") + csv_writer = csv.writer(file) + + records = await queue.get() + while records != "DONE": + if records: + for record in list(records): + # we want to represent records that are found correctly + # (e.g. ones with did's), but records that are directly from an input + # manifest (e.g. no did) we do NOT want to modify, so + # treat these cases separately + if record.get("did"): + urls = " ".join( + sorted( + [ + url.replace(" ", "%20") + for url in record.get("urls") + if url + ] + ) + ) + authz = " ".join( + sorted( + [ + authz_resource.replace(" ", "%20") + for authz_resource in record.get("authz") + if authz_resource + ] + ) + ) + acl = " ".join( + sorted( + [a.replace(" ", "%20") for a in record.get("acl") if a] + ) + ) + manifest_row = [ + record.get("did", ""), + urls, + authz, + acl, + record.get("hashes", {}).get("md5", ""), + record.get("size", ""), + record.get("file_name", ""), + ] + else: + manifest_row = [ + record.get(GUID_STANDARD_KEY, ""), + record.get(URLS_STANDARD_KEY, ""), + record.get(AUTHZ_STANDARD_KEY, ""), + record.get(ACL_STANDARD_KEY, ""), + record.get(MD5_STANDARD_KEY, ""), + record.get(SIZE_STANDARD_KEY, ""), + record.get(FILENAME_STANDARD_KEY, ""), + ] + await csv_writer.writerow(manifest_row) + + records = await queue.get() + + file.flush() + + +if __name__ == "__main__": + write_page_records_to_files() +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/tools/indexing/index_manifest.html b/docs/_build/html/_modules/gen3/tools/indexing/index_manifest.html new file mode 100644 index 000000000..a43fad6bf --- /dev/null +++ b/docs/_build/html/_modules/gen3/tools/indexing/index_manifest.html @@ -0,0 +1,753 @@ + + + + + + + gen3.tools.indexing.index_manifest — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.tools.indexing.index_manifest

+"""
+Module for indexing object files in a manifest (against indexd's API).
+
+The default manifest format created is a Tab-Separated Value file (tsv)
+with rows for every record.
+
+Fields that are lists (like acl, authz, and urls) separate the values with commas or spaces
+See the Attributes session for supported column names.
+
+All supported formats of acl, authz and url fields are shown in the below example.
+
+guid    md5 size    acl authz   url
+255e396f-f1f8-11e9-9a07-0a80fada099c    473d83400bc1bc9dc635e334faddf33c    363455714   ['Open']    [s3://pdcdatastore/test1.raw]
+255e396f-f1f8-11e9-9a07-0a80fada098c    473d83400bc1bc9dc635e334faddd33c    343434344   Open    s3://pdcdatastore/test2.raw
+255e396f-f1f8-11e9-9a07-0a80fada097c    473d83400bc1bc9dc635e334fadd433c    543434443   phs0001 phs0002 s3://pdcdatastore/test3.raw
+255e396f-f1f8-11e9-9a07-0a80fada096c    473d83400bc1bc9dc635e334fadd433c    363455714   ['phs0001', 'phs0002']  ['s3://pdcdatastore/test4.raw']
+255e396f-f1f8-11e9-9a07-0a80fada010c    473d83400bc1bc9dc635e334fadde33c    363455714   ['Open']    s3://pdcdatastore/test5.raw
+
+Attributes:
+    CURRENT_DIR (str): directory this file is in
+    GUID (list(string)): supported file id column names
+    SIZE (list(string)): supported file size column names
+    MD5 (list(string)): supported md5 hash column names
+    ACLS (list(string)): supported acl column names
+    URLS (list(string)): supported url column names
+    AUTHZ (list(string)): supported authz column names
+    PREV_GUID (list(string)): supported previous guid column names
+
+Usages:
+    python index_manifest.py --commons_url https://giangb.planx-pla.net  --manifest_file path_to_manifest --auth "admin,admin" --replace_urls False --thread_num 10
+    python index_manifest.py --commons_url https://giangb.planx-pla.net  --manifest_file path_to_manifest --api_key ./credentials.json --replace_urls False --thread_num 10
+"""
+import os
+import csv
+import click
+from functools import partial
+from multiprocessing.dummy import Pool as ThreadPool
+import threading
+import copy
+import sys
+import traceback
+
+from gen3.index import Gen3Index
+from gen3.auth import Gen3Auth
+from gen3.metadata import Gen3Metadata
+from gen3.tools.utils import (
+    GUID_STANDARD_KEY,
+    FILENAME_STANDARD_KEY,
+    SIZE_STANDARD_KEY,
+    MD5_STANDARD_KEY,
+    ACL_STANDARD_KEY,
+    URLS_STANDARD_KEY,
+    AUTHZ_STANDARD_KEY,
+    PREV_GUID_STANDARD_KEY,
+)
+from gen3.utils import (
+    _standardize_str,
+    get_urls,
+)
+from gen3.tools.utils import get_and_verify_fileinfos_from_manifest
+import indexclient.client as client
+from indexclient.client import Document
+from cdislogging import get_logger
+
+
+CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
+
+logging = get_logger("__name__")
+
+
+
+[docs] +class ThreadControl(object): + """ + Class for thread synchronization + """ + + def __init__(self, processed_files=0, num_total_files=0): + self.mutexLock = threading.Lock() + self.num_processed_files = processed_files + self.num_total_files = num_total_files
+ + + +def _write_csv(filename, files, fieldnames=None): + """ + write to csv file + + Args: + filename(str): file name + files(list(dict)): list of file info + [ + { + "guid": "guid_example", + "filename": "example", + "size": 100, + "acl": "['open']", + "md5": "md5_hash", + }, + ] + fieldnames(list(str)): list of column names + + Returns: + None + """ + + if not files: + return None + fieldnames = fieldnames or files[0].keys() + with open(filename, mode="w") as outfile: + writer = csv.DictWriter(outfile, delimiter="\t", fieldnames=fieldnames) + writer.writeheader() + + for f in files: + writer.writerow(f) + + return filename + + +def _index_record( + indexclient, + mds, + replace_urls, + thread_control, + submit_additional_metadata_columns, + force_metadata_columns_even_if_empty, + fi, +): + """ + Index a single file, and submit additional metadata to the metadata service if provided + + Args: + indexclient(IndexClient): indexd client + mds(Gen3Metadata): optional Gen3Metadata instance + replace_urls(bool): replace urls or not + thread_num(int): number of threads for indexing + submit_additional_metadata_columns(bool): whether to submit additional metadata to the metadata service + force_metadata_columns_even_if_empty (bool): see description in calling function + fi(dict): file info + + Returns: + None + + """ + index_success = True + try: + urls = ( + get_urls(fi[URLS_STANDARD_KEY]) + if URLS_STANDARD_KEY in fi + and fi[URLS_STANDARD_KEY] != "[]" + and fi[URLS_STANDARD_KEY] + else [] + ) + authz = ( + [ + element.strip().replace("'", "").replace('"', "").replace("%20", " ") + for element in _standardize_str(fi[AUTHZ_STANDARD_KEY]) + .strip() + .lstrip("[") + .rstrip("]") + .split(" ") + ] + if AUTHZ_STANDARD_KEY in fi + and fi[AUTHZ_STANDARD_KEY] != "[]" + and fi[AUTHZ_STANDARD_KEY] + else [] + ) + + if ACL_STANDARD_KEY in fi: + if fi[ACL_STANDARD_KEY].strip().lower() in {"[u'open']", "['open']"}: + acl = ["*"] + else: + acl = ( + [ + element.strip() + .replace("'", "") + .replace('"', "") + .replace("%20", " ") + for element in _standardize_str(fi[ACL_STANDARD_KEY]) + .strip() + .lstrip("[") + .rstrip("]") + .split(" ") + ] + if ACL_STANDARD_KEY in fi + and fi[ACL_STANDARD_KEY] != "[]" + and fi[ACL_STANDARD_KEY] + else [] + ) + else: + acl = [] + + if FILENAME_STANDARD_KEY in fi: + file_name = _standardize_str(fi[FILENAME_STANDARD_KEY]) + else: + file_name = "" + + if fi.get(PREV_GUID_STANDARD_KEY): + prev_guid = fi[PREV_GUID_STANDARD_KEY] + else: + prev_guid = None + + doc = None + + if fi.get(GUID_STANDARD_KEY): + doc = indexclient.get(fi[GUID_STANDARD_KEY]) + + if doc is not None: + if doc.size != fi.get(SIZE_STANDARD_KEY) or doc.hashes.get( + MD5_STANDARD_KEY + ) != fi.get(MD5_STANDARD_KEY): + logging.error( + "The guid {} with different size/hash already exists. Can not index it without getting a new guid".format( + fi.get(GUID_STANDARD_KEY) + ) + ) + else: + need_update = False + + if replace_urls and set(urls) != set(doc.urls): + doc.urls = urls + need_update = True + + # indexd doesn't like when records have metadata for non-existing + # urls + new_urls_metadata = copy.deepcopy(doc.urls_metadata) + for url, metadata in doc.urls_metadata.items(): + if url not in urls: + del new_urls_metadata[url] + doc.urls_metadata = new_urls_metadata + + elif not replace_urls: + for url in urls: + if url not in doc.urls: + doc.urls.append(url) + need_update = True + + if set(doc.acl) != set(acl): + doc.acl = acl + need_update = True + + if set(doc.authz) != set(authz): + doc.authz = authz + need_update = True + + if doc.file_name != file_name: + doc.file_name = file_name + need_update = True + + if need_update: + logging.info(f"updating {doc.did} to: {doc.to_json()}") + doc.patch() + else: + if fi.get(GUID_STANDARD_KEY): + guid = fi.get(GUID_STANDARD_KEY, "").strip() + else: + guid = None + + record = { + "did": guid, + "hashes": {MD5_STANDARD_KEY: fi.get(MD5_STANDARD_KEY, "").strip()}, + SIZE_STANDARD_KEY: fi.get(SIZE_STANDARD_KEY, 0), + ACL_STANDARD_KEY: acl, + AUTHZ_STANDARD_KEY: authz, + URLS_STANDARD_KEY: urls, + FILENAME_STANDARD_KEY: file_name, + } + + if prev_guid: + logging.info(f"creating new version of {prev_guid}: {record}") + + # indexd exports a "form" field that gets populated in indexclient.create, + # but not indexclient.add_version, need to add manually here + record.update({"form": "object"}) + + # to generate new GUID, new version indexd API expects body to not + # contain "did", rather than have it be None or "" + new_guid = record["did"] + if not record["did"]: + del record["did"] + new_guid = None + + new_doc = Document(client=None, did=new_guid, json=record) + + # TODO: in the case where a new GUID *is* provided AND a version with that + # guid already exists AND you run this, it's gonna throw an error. + # We need to gracefully handle the error from indexd. there will + # be a conflict where a version with this GUID already exists... + # but if we can verify that the version has the correct values + # for all the fields, we can effectively ignore this error and continue + doc = indexclient.add_version(current_did=prev_guid, new_doc=new_doc) + else: + logging.info(f"creating: {record}") + doc = indexclient.create(**record) + + fi[GUID_STANDARD_KEY] = doc.did + + except Exception as e: + # Don't break for any reason + index_success = False + exc_info = sys.exc_info() + traceback.print_exception(*exc_info) + logging.error( + "Can not update/create an indexd record with guid {}. Detail: {}".format( + fi.get(GUID_STANDARD_KEY), e + ) + ) + + # submit additional metadata to the metadata service + if submit_additional_metadata_columns and index_success: + try: + if not mds: + raise Exception( + "Can not submit to the metadata service when using indexd basic auth" + ) + metadata = mds._prepare_metadata( + fi, + doc, + force_metadata_columns_even_if_empty=force_metadata_columns_even_if_empty, + ) + if metadata: + mds.create(guid=doc.did, metadata=metadata, overwrite=True) + except Exception as e: + # Don't break, but delete indexd record + exc_info = sys.exc_info() + traceback.print_exception(*exc_info) + logging.error( + "Can not create package metadata for guid {}. Deleting indexd record. Detail: {}".format( + fi[GUID_STANDARD_KEY], e + ) + ) + try: + doc.delete() + except Exception as e: + exc_info = sys.exc_info() + traceback.print_exception(*exc_info) + logging.error( + "Cannot delete indexd record with {}. Detail: {}".format( + fi[GUID_STANDARD_KEY], e + ) + ) + + thread_control.mutexLock.acquire() + thread_control.num_processed_files += 1 + if (thread_control.num_processed_files * 10) % thread_control.num_total_files == 0: + logging.info( + "Progress: {}%".format( + thread_control.num_processed_files + * 100.0 + / thread_control.num_total_files + ) + ) + thread_control.mutexLock.release() + + +
+[docs] +def index_object_manifest( + commons_url, + manifest_file, + thread_num, + auth=None, + replace_urls=True, + manifest_file_delimiter=None, + output_filename="indexing-output-manifest.csv", + submit_additional_metadata_columns=False, + force_metadata_columns_even_if_empty=True, +): + """ + Loop through all the files in the manifest, update/create records in indexd + update indexd if the url is not in the record url list or acl has changed + + Args: + commons_url(str): common url + manifest_file(str): path to the manifest + thread_num(int): number of threads for indexing + auth(Gen3Auth): Gen3 auth or tuple with basic auth name and password + replace_urls(bool): flag to indicate if replace urls or not + manifest_file_delimiter(str): manifest's delimiter + output_filename(str): output file name for manifest + submit_additional_metadata_columns(bool): whether to submit additional metadata to the metadata service + force_metadata_columns_even_if_empty(bool): force the creation of a metadata column + entry for a GUID even if the value is empty. Enabling + this will force the creation of metadata entries for every column. + See below for an illustrative example + + Example manifest_file: + guid, ..., columnA, columnB, ColumnC + 1, ..., dataA, , + 2, ..., , dataB, + + Resulting metadata if force_metadata_columns_even_if_empty=True : + "1": { + "columnA": "dataA", + "columnB": "", + "ColumnC": "", + }, + "2": { + "columnA": "", + "columnB": "dataB", + "ColumnC": "", + }, + + Resulting metadata if force_metadata_columns_even_if_empty=False : + "1": { + "columnA": "dataA", + }, + "2": { + "columnB": "dataB", + }, + + Returns: + files(list(dict)): list of file info + [ + { + "guid": "guid_example", + "filename": "example", + "size": 100, + "acl": "['open']", + "md5": "md5_hash", + }, + ] + headers(list(str)): list of fieldnames + + """ + logging.info("Start the process ...") + service_location = "index" + commons_url = commons_url.strip("/") + # if running locally, indexd is deployed by itself without a location relative + # to the commons + if "http://localhost" in commons_url: + service_location = "" + + if not commons_url.endswith(service_location): + commons_url += "/" + service_location + + logging.info("\nUsing URL {}\n".format(commons_url)) + + indexclient = client.IndexClient(commons_url, "v0", auth=auth) + + if isinstance(auth, tuple): # basic auth + if submit_additional_metadata_columns: + logging.warning( + f"'submit_additional_metadata_columns' is on, but using indexd basic auth. Will not be able to submit to the metadata service. To create metadata, use Gen3Auth instance instead." + ) + mds = None + else: # Gen3Auth + mds = Gen3Metadata(auth_provider=auth) + + try: + files, headers = get_and_verify_fileinfos_from_manifest( + manifest_file, manifest_file_delimiter, include_additional_columns=True + ) + except Exception as e: + exc_info = sys.exc_info() + traceback.print_exception(*exc_info) + logging.error("Can not read {}. Detail: {}".format(manifest_file, e)) + return None, None + + # Early terminate + if not files: + return None, None + + try: + headers.index(GUID_STANDARD_KEY) + except ValueError: + headers.insert(0, GUID_STANDARD_KEY) + + pool = ThreadPool(thread_num) + + thread_control = ThreadControl(num_total_files=len(files)) + part_func = partial( + _index_record, + indexclient, + mds, + replace_urls, + thread_control, + submit_additional_metadata_columns, + force_metadata_columns_even_if_empty, + ) + + try: + pool.map_async(part_func, files).get() + except KeyboardInterrupt: + pool.terminate() + + # close the pool and wait for the work to finish + pool.close() + pool.join() + + output_filename = os.path.abspath(output_filename) + logging.info(f"Writing output to {output_filename}") + + # remove existing output if it exists + if os.path.isfile(output_filename): + os.unlink(output_filename) + + _write_csv(os.path.join(CURRENT_DIR, output_filename), files, headers) + + return files, headers
+ + + +@click.command() +@click.option( + "--commons-url", + "commons_url", + help="Root domain (url) for a commons containing indexd.", + required=True, +) +@click.option("--manifest_file", help="The path to input manifest") +@click.option( + "--thread-num", + "thread_num", + type=int, + help="Number of threads", + default=1, + show_default=True, +) +@click.option("--api-key", "api_key", help="path to api key") +@click.option("--auth", help="basic auth") +@click.option( + "--replace-urls", + "replace_urls", + type=bool, + help="If supplied, will replace urls for existing records. e.g. existing urls will be overwritten by the new ones", + default=False, + show_default=True, +) +@click.option( + "--manifest-file-delimiter", + "manifest_file_delimiter", + help="string character that delimites the file (tab or comma). Defaults to tab.", + default="\t", + show_default=True, +) +@click.option( + "--out-manifest-file", + "out_manifest_file", + help="The path to output manifest", + default="indexing-output-manifest.csv", + show_default=True, +) +def index_object_manifest_cli( + commons_url, + manifest_file, + thread_num, + api_key, + auth, + replace_urls, + manifest_file_delimiter, + out_manifest_file, +): + """ + Commandline interface for indexing a given manifest to indexd + + Args: + commons_url (str): root domain for common + manifest_file (str): the full path to the manifest + thread_num (int): number of threads being requested + api_key (str): the path to api key + auth(str): the basic auth + replace_urls(bool): Replace urls or not + NOTE: if both api_key and auth are specified, it will ignore the later and + take the former as a default + manifest_file_delimiter(str): manifest's delimiter + out_manifest_file(str): path to the output manifest + + """ + + if api_key: + auth = Gen3Auth(commons_url, refresh_file=api_key) + else: + auth = tuple(auth.split(",")) if auth else None + + files, headers = index_object_manifest( + commons_url + "/index", + manifest_file, + int(thread_num), + auth, + replace_urls, + manifest_file_delimiter, + output_filename=out_manifest_file, + ) + + +if __name__ == "__main__": + logging.basicConfig(filename="index_object_manifest.log", level=logging.DEBUG) + logging.getLogger().addHandler(logging.StreamHandler(sys.stdout)) + index_object_manifest_cli() + + +
+[docs] +def delete_all_guids(auth, file): + """ + Delete all GUIDs specified in the object manifest. + + WARNING: THIS COMPLETELY REMOVES INDEX RECORDS. USE THIS ONLY IF YOU KNOW + THE IMPLICATIONS. + """ + index = Gen3Index(auth.endpoint, auth_provider=auth) + if not index.is_healthy(): + logging.debug( + f"uh oh! The indexing service is not healthy in the commons {auth.endpoint}" + ) + exit() + + # try to get delimeter based on file ext + file_ext = os.path.splitext(file) + if file_ext[-1].lower() == ".tsv": + manifest_file_delimiter = "\t" + else: + # default, assume CSV + manifest_file_delimiter = "," + + with open(file, "r", encoding="utf-8-sig") as input_file: + csvReader = csv.DictReader(input_file, delimiter=manifest_file_delimiter) + fieldnames = csvReader.fieldnames + + logging.debug(f"got fieldnames from {file}: {fieldnames}") + + # figure out which permutation of the name GUID is being used 1 time + # then use it for all future rows + guid_name = "guid" + for name in ["guid", "GUID", "did", "DID"]: + if name in fieldnames: + guid_name = name + + logging.debug(f"using {guid_name} to retrieve GUID to delete...") + + for row in csvReader: + guid = row.get(guid_name) + + if guid: + logging.debug(f"deleting GUID record:{guid}") + logging.debug(index.delete_record(guid=guid))
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/tools/indexing/verify_manifest.html b/docs/_build/html/_modules/gen3/tools/indexing/verify_manifest.html new file mode 100644 index 000000000..04f9b5602 --- /dev/null +++ b/docs/_build/html/_modules/gen3/tools/indexing/verify_manifest.html @@ -0,0 +1,551 @@ + + + + + + + gen3.tools.indexing.verify_manifest — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.tools.indexing.verify_manifest

+"""
+Module for indexing actions for verifying a manifest of
+indexed file objects (against indexd's API). Supports
+multiple processes and coroutines using Python's asyncio library.
+
+The default manifest format created is a Comma-Separated Value file (csv)
+with rows for every record. A header row is created with field names:
+guid,authz,acl,file_size,md5,urls,file_name
+
+Fields that are lists (like acl, authz, and urls) separate the values with spaces.
+
+There is a default mapping for those column names above but you can override it.
+Fields that expect lists (like acl, authz, and urls) by default assume these values are
+separated with spaces. If you need alternate behavior, you can simply override the
+`manifest_row_parsers` for specific fields and replace the default parsing function
+with a custom one. For example:
+
+```
+from gen3.tools import indexing
+from gen3.tools.indexing.verify_manifest import manifest_row_parsers
+
+def _get_authz_from_row(row):
+    return [row.get("authz").strip().strip("[").strip("]").strip("'")]
+
+# override default parsers
+manifest_row_parsers["authz"] = _get_authz_from_row
+
+indexing.verify_object_manifest(COMMONS)
+```
+
+The output from this verification is a file containing any errors in the following
+format:
+
+{guid}|{error_name}|expected {value_from_manifest}|actual {value_from_indexd}
+ex: 93d9af72-b0f1-450c-a5c6-7d3d8d2083b4|authz|expected ['']|actual ['/programs/DEV/projects/test']
+
+Attributes:
+    CURRENT_DIR (str): directory this file is in
+    MAX_CONCURRENT_REQUESTS (int): maximum number of desired concurrent requests across
+        processes/threads
+"""
+import aiohttp
+import asyncio
+import csv
+from cdislogging import get_logger
+
+import os
+import time
+
+from gen3.index import Gen3Index
+from gen3.utils import get_or_create_event_loop_for_thread
+
+MAX_CONCURRENT_REQUESTS = 24
+CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
+
+logging = get_logger("__name__")
+
+
+def _get_guid_from_row(row):
+    """
+    Given a row from the manifest, return the field representing expected indexd guid.
+
+    Args:
+        row (dict): column_name:row_value
+
+    Returns:
+        str: guid
+    """
+    guid = row.get("guid")
+    if not guid:
+        guid = row.get("GUID")
+    return guid
+
+
+def _get_md5_from_row(row):
+    """
+    Given a row from the manifest, return the field representing file's md5 sum.
+
+    Args:
+        row (dict): column_name:row_value
+
+    Returns:
+        str: md5 sum for file
+    """
+    if "md5" in row:
+        return row["md5"]
+    elif "md5sum" in row:
+        return row["md5sum"]
+    else:
+        return None
+
+
+def _get_file_size_from_row(row):
+    """
+    Given a row from the manifest, return the field representing file's size in bytes.
+
+    Args:
+        row (dict): column_name:row_value
+
+    Returns:
+        int: integer representing file size in bytes
+    """
+    try:
+        if "file_size" in row:
+            return int(row["file_size"])
+        elif "size" in row:
+            return int(row["size"])
+        else:
+            return None
+    except Exception:
+        logging.warning(f"could not convert this to an int: {row.get('file_size')}")
+        return row.get("file_size")
+
+
+def _get_acl_from_row(row):
+    """
+    Given a row from the manifest, return the field representing file's expected acls.
+
+    Args:
+        row (dict): column_name:row_value
+
+    Returns:
+        List[str]: acls for the indexd record
+    """
+    return [item for item in row.get("acl", "").strip().split(" ") if item]
+
+
+def _get_authz_from_row(row):
+    """
+    Given a row from the manifest, return the field representing file's expected authz
+    resources.
+
+    Args:
+        row (dict): column_name:row_value
+
+    Returns:
+        List[str]: authz resources for the indexd record
+    """
+    return [item for item in row.get("authz", "").strip().split(" ") if item]
+
+
+def _get_urls_from_row(row):
+    """
+    Given a row from the manifest, return the field representing file's expected urls.
+
+    Args:
+        row (dict): column_name:row_value
+
+    Returns:
+        List[str]: urls for indexd record file location(s)
+    """
+    if "urls" in row:
+        return [item for item in row.get("urls", "").strip().split(" ") if item]
+    elif "url" in row:
+        return [item for item in row.get("urls", "").strip().split(" ") if item]
+    else:
+        return []
+
+
+def _get_file_name_from_row(row):
+    """
+    Given a row from the manifest, return the field representing file's expected file_name.
+
+    Args:
+        row (dict): column_name:row_value
+
+    Returns:
+        List[str]: file_name for indexd record file location(s)
+    """
+    if "file_name" in row:
+        return row["file_name"]
+    elif "filename" in row:
+        return row["filename"]
+    elif "name" in row:
+        return row["name"]
+    else:
+        return None
+
+
+manifest_row_parsers = {
+    "guid": _get_guid_from_row,
+    "md5": _get_md5_from_row,
+    "file_size": _get_file_size_from_row,
+    "acl": _get_acl_from_row,
+    "authz": _get_authz_from_row,
+    "urls": _get_urls_from_row,
+    "file_name": _get_file_name_from_row,
+}
+
+
+
+[docs] +async def async_verify_object_manifest( + commons_url, + manifest_file, + max_concurrent_requests=MAX_CONCURRENT_REQUESTS, + manifest_row_parsers=manifest_row_parsers, + manifest_file_delimiter=None, + output_filename=f"verify-manifest-errors-{time.time()}.log", +): + """ + Verify all file object records into a manifest csv + + Args: + commons_url (str): root domain for commons where indexd lives + manifest_file (str): the file to verify against + max_concurrent_requests (int): the maximum number of concurrent requests allowed + manifest_row_parsers (Dict{indexd_field:func_to_parse_row}): Row parsers + manifest_file_delimiter (str): delimeter in manifest_file + output_filename (str): filename for output logs + """ + start_time = time.perf_counter() + logging.info(f"start time: {start_time}") + + # if delimiter not specified, try to get based on file ext + if not manifest_file_delimiter: + file_ext = os.path.splitext(manifest_file) + if file_ext[-1].lower() == ".tsv": + manifest_file_delimiter = "\t" + else: + # default, assume CSV + manifest_file_delimiter = "," + + logging.debug(f"detected {manifest_file_delimiter} as delimiter between columns") + + await _verify_all_index_records_in_file( + commons_url, + manifest_file, + manifest_file_delimiter, + max_concurrent_requests, + output_filename, + ) + + end_time = time.perf_counter() + logging.info(f"end time: {end_time}") + logging.info(f"run time: {end_time-start_time}")
+ + + +async def _verify_all_index_records_in_file( + commons_url, + manifest_file, + manifest_file_delimiter, + max_concurrent_requests, + output_filename, +): + """ + Getting indexd records and writing to a file. This function + creates semaphores to limit the number of concurrent http connections that + get opened to send requests to indexd. + + It then uses asyncio to start a number of coroutines. Steps: + 1) requests to indexd to get records (writes resulting records to a queue) + 2) puts a final "DONE" in the queue to stop coroutine that will read from queue + 3) reading those records from the queue and writing to a file + + Args: + commons_url (str): root domain for commons where indexd lives + manifest_file (str): the file to verify against + manifest_file_delimiter (str): delimeter in manifest_file + output_filename (str, optional): filename for output + max_concurrent_requests (int): the maximum number of concurrent requests allowed + """ + max_requests = int(max_concurrent_requests) + logging.debug(f"max concurrent requests: {max_requests}") + lock = asyncio.Semaphore(max_requests) + queue = asyncio.Queue() + output_queue = asyncio.Queue() + + with open(manifest_file, encoding="utf-8-sig") as manifest: + reader = csv.DictReader(manifest, delimiter=manifest_file_delimiter) + + for row in reader: + new_row = {} + for key, value in row.items(): + if value: + value = value.strip() + + new_row[key.strip()] = value + await queue.put(new_row) + + for _ in range(0, int(max_concurrent_requests + (max_concurrent_requests / 4))): + await queue.put("DONE") + + await asyncio.gather( + *( + _parse_from_queue(queue, lock, commons_url, output_queue) + # why "+ (max_concurrent_requests / 4)"? + # This is because the max requests at any given time could be + # waiting for metadata responses all at once and there's processing done + # before that semaphore, so this just adds a few extra processes to get + # through the queue up to that point of metadata requests so it's ready + # right away when a lock is released. Not entirely necessary but speeds + # things up a tiny bit to always ensure something is waiting for that lock + for x in range( + 0, int(max_concurrent_requests + (max_concurrent_requests / 4)) + ) + ) + ) + + output_filename = os.path.abspath(output_filename) + logging.info( + f"done processing, writing output queue to single file {output_filename}" + ) + + # remove existing output if it exists + if os.path.isfile(output_filename): + os.unlink(output_filename) + + with open(output_filename, "w") as outfile: + while not output_queue.empty(): + line = await output_queue.get() + outfile.write(line) + + logging.info(f"done writing output to file {output_filename}") + + +async def _parse_from_queue(queue, lock, commons_url, output_queue): + """ + Keep getting items from the queue and verifying that indexd contains the expected + fields from that row. If there are any issues, log errors into a file. Return + when nothing is left in the queue. + + Args: + queue (asyncio.Queue): queue to read indexd records from + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + commons_url (str): root domain for commons where indexd lives + output_queue (asyncio.Queue): queue for output + """ + loop = get_or_create_event_loop_for_thread() + + row = await queue.get() + + while row != "DONE": + guid = manifest_row_parsers["guid"](row) + authz = manifest_row_parsers["authz"](row) + acl = manifest_row_parsers["acl"](row) + file_size = manifest_row_parsers["file_size"](row) + md5 = manifest_row_parsers["md5"](row) + urls = manifest_row_parsers["urls"](row) + file_name = manifest_row_parsers["file_name"](row) + + actual_record = await _get_record_from_indexd(guid, commons_url, lock) + if not actual_record: + output = f"{guid}|no_record|expected {row}|actual None\n" + await output_queue.put(output) + logging.error(output) + else: + logging.info(f"verifying {guid}...") + + if sorted(authz) != sorted(actual_record["authz"]): + output = ( + f"{guid}|authz|expected {authz}|actual {actual_record['authz']}\n" + ) + await output_queue.put(output) + logging.error(output) + + if sorted(acl) != sorted(actual_record["acl"]): + output = f"{guid}|acl|expected {acl}|actual {actual_record['acl']}\n" + await output_queue.put(output) + logging.error(output) + + if file_size != actual_record["size"]: + if ( + not file_size + and file_size != 0 + and not actual_record["size"] + and actual_record["size"] != 0 + ): + # actual and expected are both either empty string or None + # so even though they're not equal, they represent null value so + # we don't need to consider this an error in validation + pass + else: + output = f"{guid}|file_size|expected {file_size}|actual {actual_record['size']}\n" + await output_queue.put(output) + logging.error(output) + + if md5 != actual_record["hashes"].get("md5"): + if ( + not md5 + and md5 != 0 + and not actual_record["hashes"].get("md5") + and actual_record["hashes"].get("md5") != 0 + ): + # actual and expected are both either empty string or None + # so even though they're not equal, they represent null value so + # we don't need to consider this an error in validation + pass + else: + output = f"{guid}|md5|expected {md5}|actual {actual_record['hashes'].get('md5')}\n" + await output_queue.put(output) + logging.error(output) + urls = [url.replace("%20", " ") for url in urls] + if sorted(urls) != sorted(actual_record["urls"]): + output = f"{guid}|urls|expected {urls}|actual {actual_record['urls']}\n" + await output_queue.put(output) + logging.error(output) + + if not actual_record["file_name"] and file_name: + # if the actual record name is "" or None but something was specified + # in the manifest, we have a problem + output = f"{guid}|file_name|expected {file_name}|actual {actual_record['file_name']}\n" + await output_queue.put(output) + logging.error(output) + + row = await queue.get() + + +async def _get_record_from_indexd(guid, commons_url, lock): + """ + Gets a semaphore then requests a record for the given guid + + Args: + guid (str): indexd record globally unique id + commons_url (str): root domain for commons where indexd lives + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + """ + index = Gen3Index(commons_url) + async with lock: + # default ssl handling unless it's explicitly http:// + ssl = None + if "https" not in commons_url: + ssl = False + + record = None + + try: + return await index.async_get_record(guid, _ssl=ssl) + + except aiohttp.client_exceptions.ClientResponseError as exc: + logging.warning(f"couldn't get record. error: {exc}") + + return record +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/tools/metadata/ingest_manifest.html b/docs/_build/html/_modules/gen3/tools/metadata/ingest_manifest.html new file mode 100644 index 000000000..b4f1bc9fd --- /dev/null +++ b/docs/_build/html/_modules/gen3/tools/metadata/ingest_manifest.html @@ -0,0 +1,655 @@ + + + + + + + gen3.tools.metadata.ingest_manifest — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.tools.metadata.ingest_manifest

+"""
+Tools for ingesting a CSV/TSV metadata manifest into the Metdata Service.
+
+Attributes:
+    COLUMN_TO_USE_AS_GUID (str): file column containing guid to use
+    GUID_TYPE_FOR_INDEXED_FILE_OBJECT (str): type to populate in mds when guid exists
+        in indexd
+    GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT (str): type to populate in mds when guid does
+        NOT exist in indexd
+    manifest_row_parsers (Dict{str: function}): functions for parsing, users can override
+        manifest_row_parsers = {
+            "guid_from_file": _get_guid_for_row,
+            "indexed_file_object_guid": _query_for_associated_indexd_record_guid,
+        }
+
+        "guid_for_row" is the function to retrieve the guid from the given file
+        "indexed_file_object_guid" is the function to retrieve the guid from elsewhere,
+            like indexd (by querying)
+
+    MAX_CONCURRENT_REQUESTS (int): Maximum concurrent requests to mds for ingestion
+"""
+import aiohttp
+import asyncio
+import csv
+import json
+from cdislogging import get_logger
+
+import os
+import time
+import urllib.parse
+
+from gen3.index import Gen3Index
+from gen3.metadata import Gen3Metadata
+
+TMP_FOLDER = os.path.abspath("./tmp") + "/"
+CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
+
+MAX_CONCURRENT_REQUESTS = 24
+COLUMN_TO_USE_AS_GUID = "guid"
+GUID_TYPE_FOR_INDEXED_FILE_OBJECT = "indexed_file_object"
+GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT = "metadata_object"
+
+logging = get_logger("__name__")
+
+
+def _get_guid_for_row(commons_url, row, lock):
+    """
+    Given a row from the manifest, return the guid to use for the metadata object.
+
+    Args:
+        commons_url (str): root domain for commons where mds lives
+        row (dict): column_name:row_value
+        lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http
+            connections
+
+    Returns:
+        str: guid
+    """
+    return row.get(COLUMN_TO_USE_AS_GUID)
+
+
+async def _query_for_associated_indexd_record_guid(
+    commons_url, row, lock, output_queue
+):
+    """
+    Given a row from the manifest, return the guid for the related indexd record.
+
+    By default attempts to use a column "submitted_sample_id" to pattern match
+    URLs in indexd records to find a single match.
+
+    For example:
+        "NWD12345" would match a record with url: "s3://some-bucket/file_NWD12345.cram"
+
+    WARNING: The query endpoint this uses in indexd is incredibly slow when there are
+             lots of indexd records.
+
+    Args:
+        commons_url (str): root domain for commons where mds lives
+        row (dict): column_name:row_value
+        lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http
+            connections
+        output_queue (asyncio.Queue): queue for logging output
+
+    Returns:
+        str: guid or None
+    """
+    mapping = {"urls": "submitted_sample_id"}
+    # Alternate example:
+    #
+    # mapping = {
+    #     "acl": "study_with_consent",
+    #     "size": "file_size",
+    # }
+
+    if "urls" in mapping and len(mapping.items()) > 1:
+        msg = (
+            "You cannot pattern match 'urls' and exact match other fields for mapping "
+            "from indexd record to metadata columns. You can match by URL pattern "
+            "*OR* match exact record fields like size, hash, uploader, url, acl, authz."
+            f"\nYou provided mapping: {mapping}"
+        )
+        logging.error(msg)
+        await output_queue.put(msg)
+        raise Exception(msg)
+
+    # special query endpoint for matching url patterns, other fields
+    # just use get with params
+    if "urls" in mapping:
+        pattern = row.get(mapping["urls"])
+        logging.debug(f"trying to find matching record matching url pattern: {pattern}")
+        records = await async_query_urls_from_indexd(pattern, commons_url, lock)
+    else:
+        params = {
+            mapping_key: row.get(mapping_value)
+            for mapping_key, mapping_value in mapping.items()
+        }
+        logging.debug(f"trying to find matching record matching params: {params}")
+        records = await _get_with_params_from_indexd(params, commons_url, lock)
+
+    logging.debug(f"matching record(s): {records}")
+
+    if len(records) > 1:
+        msg = (
+            "Multiple records were found with the given search criteria, this is assumed "
+            "to be unintentional so the metadata will NOT be linked to these records:\n"
+            f"{records}"
+        )
+        logging.warning(msg)
+        await output_queue.put(msg)
+        records = []
+
+    guid = None
+    if len(records) == 1:
+        guid = records[0].get("did")
+
+    return guid
+
+
+manifest_row_parsers = {
+    "guid_for_row": _get_guid_for_row,
+    "indexed_file_object_guid": _query_for_associated_indexd_record_guid,
+}
+
+
+
+[docs] +async def async_ingest_metadata_manifest( + commons_url, + manifest_file, + metadata_source, + auth=None, + max_concurrent_requests=MAX_CONCURRENT_REQUESTS, + manifest_row_parsers=manifest_row_parsers, + manifest_file_delimiter=None, + output_filename=f"ingest-metadata-manifest-errors-{time.time()}.log", + get_guid_from_file=True, + metadata_type=None, +): + """ + Ingest all metadata records into a manifest csv + + Args: + commons_url (str): root domain for commons where mds lives + manifest_file (str): the file to ingest against + metadata_source (str): the name of the source of metadata (used to namespace + in the metadata service) ex: dbgap + auth (Gen3Auth): Gen3 auth or tuple with basic auth name and password + max_concurrent_requests (int): the maximum number of concurrent requests allowed + manifest_row_parsers (Dict{indexd_field:func_to_parse_row}): Row parsers + manifest_file_delimiter (str): delimeter in manifest_file + output_filename (str): filename for output logs + get_guid_from_file (bool): whether or not to get the guid for metadata from file + NOTE: When this is True, will use the function in + manifest_row_parsers["guid_for_row"] to determine the GUID + (usually just a specific column in the file row like "guid") + metadata_type (str): the type of metadata to be filled into the _guid_type field. + If provided, will override the default logic per GUID: (GUID_TYPE_FOR_INDEXED_FILE_OBJECT + if is_indexed_file_object + else GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT) + """ + # if delimiter not specified, try to get based on file ext + if not manifest_file_delimiter: + file_ext = os.path.splitext(manifest_file) + if file_ext[-1].lower() == ".tsv": + manifest_file_delimiter = "\t" + else: + # default, assume CSV + manifest_file_delimiter = "," + + await _ingest_all_metadata_in_file( + commons_url, + manifest_file, + metadata_source, + auth, + manifest_file_delimiter, + max_concurrent_requests, + output_filename.split("/")[-1], + get_guid_from_file, + metadata_type, + )
+ + + +async def _ingest_all_metadata_in_file( + commons_url, + manifest_file, + metadata_source, + auth, + manifest_file_delimiter, + max_concurrent_requests, + output_filename, + get_guid_from_file, + metadata_type, +): + """ + Ingest metadata from file into metadata service. This function + creates semaphores to limit the number of concurrent http connections that + get opened to send requests to mds. + + It then uses asyncio to start a number of coroutines. Steps: + 1) reads given metadata file (writes resulting rows to a queue) + 2) posts/puts to mds to write metadata for rows + + Args: + commons_url (str): root domain for commons where mds lives + manifest_file (str): the file to ingest against + metadata_source (str): the name of the source of metadata (used to namespace + in the metadata service) ex: dbgap + auth (Gen3Auth): Gen3 auth or tuple with basic auth name and password + max_concurrent_requests (int): the maximum number of concurrent requests allowed + manifest_file_delimiter (str): delimeter in manifest_file + output_filename (str): filename for output logs + get_guid_from_file (bool): whether or not to get the guid for metadata from file + NOTE: When this is True, will use the function in + manifest_row_parsers["guid_for_row"] to determine the GUID + (usually just a specific column in the file row like "guid") + metadata_type (str): the type of metadata to be filled into the _guid_type field. + If provided, will override the default logic per GUID: (GUID_TYPE_FOR_INDEXED_FILE_OBJECT + if is_indexed_file_object + else GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT) + """ + max_requests = int(max_concurrent_requests) + logging.debug(f"max concurrent requests: {max_requests}") + lock = asyncio.Semaphore(max_requests) + queue = asyncio.Queue() + output_queue = asyncio.Queue() + + start_time = time.perf_counter() + msg = f"start time: {start_time}" + logging.info(msg) + await output_queue.put(msg) + + with open(manifest_file, encoding="utf-8-sig") as manifest: + reader = csv.DictReader(manifest, delimiter=manifest_file_delimiter) + for row in reader: + new_row = {} + for key, value in row.items(): + # I know this looks crazy, DictReader is doing goofy things when + # column contains a JSON-like string so we're trying to fix it here + # Basically make sure the resulting column is something that we can + # later json.loads(). + # remove redudant quoting + if value: + value = value.strip().strip("'").strip('"').replace("''", "'") + new_row[key.strip()] = value + await queue.put(new_row) + + await asyncio.gather( + *( + _parse_from_queue( + queue, + lock, + commons_url, + output_queue, + auth, + get_guid_from_file, + metadata_source, + metadata_type, + ) + # why "+ (max_concurrent_requests / 4)"? + # This is because the max requests at any given time could be + # waiting for metadata responses all at once and there's processing done + # before that semaphore, so this just adds a few extra processes to get + # through the queue up to that point of metadata requests so it's ready + # right away when a lock is released. Not entirely necessary but speeds + # things up a tiny bit to always ensure something is waiting for that lock + for x in range( + 0, int(max_concurrent_requests + (max_concurrent_requests / 4)) + ) + ) + ) + + end_time = time.perf_counter() + msg = f"end time: {end_time}" + logging.info(msg) + await output_queue.put(msg) + + msg = f"run time: {end_time-start_time}" + logging.info(msg) + await output_queue.put(msg) + + output_filename = os.path.abspath(output_filename) + logging.info( + f"done processing, writing output queue to single file {output_filename}" + ) + + # remove existing output if it exists + if os.path.isfile(output_filename): + os.unlink(output_filename) + + with open(output_filename, "w") as outfile: + while not output_queue.empty(): + line = await output_queue.get() + outfile.write(line + "\n") + + logging.info(f"done writing output to file {output_filename}") + + +async def _parse_from_queue( + queue, + lock, + commons_url, + output_queue, + auth, + get_guid_from_file, + metadata_source, + metadata_type, +): + """ + Keep getting items from the queue and checking if indexd contains a record with + that guid. Then create/update metadta for that GUID in the metadata service. + Also log to output queue. Return when nothing is left in the queue. + + Args: + queue (asyncio.Queue): queue to read metadata from + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + commons_url (str): root domain for commons where mds lives + output_queue (asyncio.Queue): queue for logging output + auth (Gen3Auth): Gen3 auth or tuple with basic auth name and password + get_guid_from_file (bool): whether or not to get the guid for metadata from file + NOTE: When this is True, will use the function in + manifest_row_parsers["guid_for_row"] to determine the GUID + (usually just a specific column in the file row like "guid") + metadata_source (str): the name of the source of metadata (used to namespace + in the metadata service) ex: dbgap + metadata_type (str): the type of metadata to be filled into the _guid_type field. + If provided, will override the default logic per GUID: (GUID_TYPE_FOR_INDEXED_FILE_OBJECT + if is_indexed_file_object + else GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT) + """ + while not queue.empty(): + row = await queue.get() + + if get_guid_from_file: + guid = manifest_row_parsers["guid_for_row"](commons_url, row, lock) + is_indexed_file_object = await _is_indexed_file_object( + guid, commons_url, lock + ) + else: + guid = await manifest_row_parsers["indexed_file_object_guid"]( + commons_url, row, lock, output_queue + ) + is_indexed_file_object = True + + if guid: + # construct metadata from rows, don't include redundant guid column + logging.debug(f"row: {row}") + metadata_from_file = {} + + for key, value in row.items(): + try: + new_value = json.loads(value) + except json.decoder.JSONDecodeError as exc: + if "}" in value or "{" in value or "[" in value or "]" in value: + msg = ( + f"Unable to json.loads a string that looks like json: {value}. " + f"adding as a string instead of nested json. Exception: {exc}" + ) + logging.warning(msg) + await output_queue.put(msg) + new_value = value + + metadata_from_file[key] = new_value + + if COLUMN_TO_USE_AS_GUID in metadata_from_file.keys(): + del metadata_from_file[COLUMN_TO_USE_AS_GUID] + + logging.debug(f"metadata from file: {metadata_from_file}") + + # namespace by metadata source + metadata = {metadata_source: metadata_from_file} + + if metadata_type: + metadata["_guid_type"] = metadata_type + else: + metadata["_guid_type"] = ( + GUID_TYPE_FOR_INDEXED_FILE_OBJECT + if is_indexed_file_object + else GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT + ) + + logging.debug(f"metadata: {metadata}") + + try: + await _create_metadata(guid, metadata, auth, commons_url, lock) + msg = f"Successfully created {guid}" + logging.info(msg) + await output_queue.put(msg) + except Exception as exc: + logging.debug( + f"Got conflict for {guid}. Let's update instead of create..." + ) + await _update_metadata(guid, metadata, auth, commons_url, lock) + msg = f"Successfully updated {guid}" + logging.info(msg) + await output_queue.put(msg) + else: + msg = ( + f"Did not add a metadata object for row because an invalid " + f"GUID was parsed or no record with this GUID was found in " + f"indexd: {guid}.\nRow: {row}" + ) + logging.warning(msg) + await output_queue.put(msg) + + +async def _create_metadata(guid, metadata, auth, commons_url, lock): + """ + Gets a semaphore then creates metadata for guid + + Args: + guid (str): indexd record globally unique id + metadata (str): the metadata to add + auth (Gen3Auth): Gen3 auth or tuple with basic auth name and password + commons_url (str): root domain for commons where metadata service lives + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + """ + mds = Gen3Metadata(commons_url, auth_provider=auth) + async with lock: + # default ssl handling unless it's explicitly http:// + ssl = None + if "https" not in commons_url: + ssl = False + + response = await mds.async_create(guid, metadata, _ssl=ssl) + return response + + +async def _update_metadata(guid, metadata, auth, commons_url, lock): + """ + Gets a semaphore then updates metadata for guid + + Args: + guid (str): indexd record globally unique id + metadata (str): the metadata to add + auth (Gen3Auth): Gen3 auth or tuple with basic auth name and password + commons_url (str): root domain for commons where metadata service lives + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + """ + mds = Gen3Metadata(commons_url, auth_provider=auth) + async with lock: + # default ssl handling unless it's explicitly http:// + ssl = None + if "https" not in commons_url: + ssl = False + + response = await mds.async_update(guid, metadata, _ssl=ssl) + return response + + +async def _is_indexed_file_object(guid, commons_url, lock): + """ + Gets a semaphore then requests a record for the given guid + + Args: + guid (str): indexd record globally unique id + commons_url (str): root domain for commons where mds lives + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + """ + index = Gen3Index(commons_url) + async with lock: + # default ssl handling unless it's explicitly http:// + ssl = None + if "https" not in commons_url: + ssl = False + + try: + record = await index.async_get_record(guid, _ssl=ssl) + except Exception as exc: + # if error, assume it does not exist + return False + + return bool(record) + + +
+[docs] +async def async_query_urls_from_indexd(pattern, commons_url, lock): + """ + Gets a semaphore then requests a record for the given pattern + + Args: + pattern (str): url pattern to match + commons_url (str): root domain for commons where mds lives + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + """ + index = Gen3Index(commons_url) + async with lock: + # default ssl handling unless it's explicitly http:// + ssl = None + if "https" not in commons_url: + ssl = False + + return await index.async_query_urls(pattern, _ssl=ssl)
+ + + +async def _get_with_params_from_indexd(params, commons_url, lock): + """ + Gets a semaphore then requests a record for the given params + + Args: + params (str): params to match + commons_url (str): root domain for commons where mds lives + lock (asyncio.Semaphore): semaphones used to limit ammount of concurrent http + connections + """ + index = Gen3Index(commons_url) + async with lock: + # default ssl handling unless it's explicitly http:// + ssl = None + if "https" not in commons_url: + ssl = False + + return await index.async_get_with_params(params, _ssl=ssl) +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gen3/wss.html b/docs/_build/html/_modules/gen3/wss.html new file mode 100644 index 000000000..815b18805 --- /dev/null +++ b/docs/_build/html/_modules/gen3/wss.html @@ -0,0 +1,327 @@ + + + + + + + gen3.wss — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Source code for gen3.wss

+import backoff
+import requests
+import urllib.parse
+from cdislogging import get_logger
+
+import sys
+from urllib.parse import urlparse
+
+from gen3.utils import (
+    append_query_params,
+    DEFAULT_BACKOFF_SETTINGS,
+    raise_for_status_and_print_error,
+)
+
+logging = get_logger("__name__")
+
+
+def wsurl_to_tokens(ws_urlstr):
+    """Tokenize ws:/// paths - so ws:///@user/bla/foo returns ("@user", "bla/foo")"""
+    urlparts = urlparse(ws_urlstr)
+    if urlparts.scheme != "ws":
+        raise Exception("invalid path {}".format(ws_urlstr))
+    pathparts = [part for part in urlparts.path.split("/") if part]
+    if len(pathparts) < 1:
+        raise Exception("invalid path {}".format(ws_urlstr))
+    return (pathparts[0], "/".join(pathparts[1:]))
+
+
+@backoff.on_exception(backoff.expo, requests.HTTPError, **DEFAULT_BACKOFF_SETTINGS)
+def get_url(urlstr, dest_path):
+    """Simple url fetch to dest_path with backoff"""
+    res = requests.get(urlstr)
+    raise_for_status_and_print_error(res)
+    if dest_path == "-":
+        sys.stdout.write(res.text)
+    else:
+        with open(dest_path, "wb") as f:
+            f.write(res.content)
+
+
+@backoff.on_exception(backoff.expo, requests.HTTPError, **DEFAULT_BACKOFF_SETTINGS)
+def put_url(urlstr, src_path):
+    """Simple put src_path to url with backoff"""
+    with open(src_path, "rb") as f:
+        res = requests.put(urlstr, data=f)
+    raise_for_status_and_print_error(res)
+
+
+
+[docs] +class Gen3WsStorage: + """A class for interacting with the Gen3 workspace storage service. + + Examples: + This generates the Gen3WsStorage class pointed at the sandbox commons while + using the credentials.json downloaded from the commons profile page. + + >>> auth = Gen3Auth(endpoint, refresh_file="credentials.json") + ... wss = Gen3WsStorage(auth) + """ + + def __init__(self, auth_provider=None): + """ + Initialization for instance of the class to setup basic endpoint info. + + Args: + auth_provider (Gen3Auth, optional): Gen3Auth class to handle passing your + token, required for admin endpoints + """ + self._auth_provider = auth_provider + +
+[docs] + @backoff.on_exception(backoff.expo, requests.HTTPError, **DEFAULT_BACKOFF_SETTINGS) + def upload_url(self, ws, wskey): + """ + Get a upload url for the given workspace key + + Args: + ws (string): name of the workspace + wskey (string): key of the object in the workspace + """ + wskey = wskey.lstrip("/") + res = self._auth_provider.curl("/ws-storage/upload/{}/{}".format(ws, wskey)) + raise_for_status_and_print_error(res) + return res.json()
+ + +
+[docs] + @backoff.on_exception(backoff.expo, requests.HTTPError, **DEFAULT_BACKOFF_SETTINGS) + def upload(self, src_path, dest_ws, dest_wskey): + """ + Upload a local file to the specified workspace path + """ + url = self.upload_url(dest_ws, dest_wskey)["Data"] + put_url(url, src_path)
+ + +
+[docs] + @backoff.on_exception(backoff.expo, requests.HTTPError, **DEFAULT_BACKOFF_SETTINGS) + def download_url(self, ws, wskey): + """ + Get a download url for the given workspace key + + Args: + ws (string): name of the workspace + wskey (string): key of the object in the workspace + """ + wskey = wskey.lstrip("/") + res = self._auth_provider.curl("/ws-storage/download/{}/{}".format(ws, wskey)) + raise_for_status_and_print_error(res) + return res.json()
+ + +
+[docs] + def download(self, src_ws, src_wskey, dest_path): + """ + Download a file from the workspace to local disk + + Args: + src_ws (string): name of the workspace + src_wskey (string): key of the object in the workspace + dest_path (string): to download the file to + """ + durl = self.download_url(src_ws, src_wskey)["Data"] + get_url(durl, dest_path)
+ + +
+[docs] + def copy(self, src_urlstr, dest_urlstr): + """ + Parse src_urlstr and dest_urlstr, and call upload or download + as appropriate + """ + if src_urlstr[0:3] == "ws:": + if dest_urlstr[0:3] == "ws:": + raise Exception( + "source and destination may not both reference a workspace" + ) + pathparts = wsurl_to_tokens(src_urlstr) + return self.download(pathparts[0], pathparts[1], dest_urlstr) + if dest_urlstr[0:3] == "ws:": + pathparts = wsurl_to_tokens(dest_urlstr) + return self.upload(src_urlstr, pathparts[0], pathparts[1]) + raise Exception("source and destination may not both be local")
+ + +
+[docs] + @backoff.on_exception(backoff.expo, requests.HTTPError, **DEFAULT_BACKOFF_SETTINGS) + def ls(self, ws, wskey): + """ + List the contents under the given workspace path + + Args: + ws (string): name of the workspace + wskey (string): key of the object in the workspace + """ + wskey = wskey.lstrip("/") + res = self._auth_provider.curl("/ws-storage/list/{}/{}".format(ws, wskey)) + raise_for_status_and_print_error(res) + return res.json()
+ + +
+[docs] + def ls_path(self, ws_urlstr): + """ + Same as ls - but parses ws_urlstr argument of form: + ws:///workspace/key + + Args: + ws (string): name of the workspace + wskey (string): key of the object in the workspace + """ + pathparts = wsurl_to_tokens(ws_urlstr) + return self.ls(pathparts[0], pathparts[1])
+ + +
+[docs] + @backoff.on_exception(backoff.expo, requests.HTTPError, **DEFAULT_BACKOFF_SETTINGS) + def rm(self, ws, wskey): + """ + Remove the given workspace key + + Args: + ws (string): name of the workspace + wskey (string): key of the object in the workspace + """ + wskey = wskey.lstrip("/") + res = self._auth_provider.curl( + "/ws-storage/list/{}/{}".format(ws, wskey), request="DELETE" + ) + raise_for_status_and_print_error(res) + return res.json()
+ + +
+[docs] + def rm_path(self, ws_urlstr): + """ + Same as rm - but parses the ws_urlstr argument + """ + pathparts = wsurl_to_tokens(ws_urlstr) + return self.rm(pathparts[0], pathparts[1])
+
+ +
+ +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html new file mode 100644 index 000000000..6ddccd2a7 --- /dev/null +++ b/docs/_build/html/_modules/index.html @@ -0,0 +1,127 @@ + + + + + + + Overview: module code — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/_sources/auth.rst.txt b/docs/_build/html/_sources/auth.rst.txt new file mode 100644 index 000000000..56925f9e3 --- /dev/null +++ b/docs/_build/html/_sources/auth.rst.txt @@ -0,0 +1,6 @@ +Gen3 Auth Helper +---------------- + +.. autoclass:: gen3.auth.Gen3Auth + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/file.rst.txt b/docs/_build/html/_sources/file.rst.txt new file mode 100644 index 000000000..92ef24cbc --- /dev/null +++ b/docs/_build/html/_sources/file.rst.txt @@ -0,0 +1,6 @@ +Gen3 File Class +---------------- + +.. autoclass:: gen3.file.Gen3File + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt new file mode 100644 index 000000000..cb2dadc10 --- /dev/null +++ b/docs/_build/html/_sources/index.rst.txt @@ -0,0 +1,18 @@ +Welcome to Gen3 SDK's documentation! +==================================== + +The README in the Gen3 Python SDK Github Repo contains installation and setup information along with some quickstart scripts. This contains more detailed documentation about the various classes and functions available. + +This documentation is mostly auto-generated from the docstrings within the source code. + +.. toctree:: + :glob: + + * + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_build/html/_sources/indexing.rst.txt b/docs/_build/html/_sources/indexing.rst.txt new file mode 100644 index 000000000..3f4287827 --- /dev/null +++ b/docs/_build/html/_sources/indexing.rst.txt @@ -0,0 +1,6 @@ +Gen3 Index Class +---------------- + +.. autoclass:: gen3.index.Gen3Index + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/jobs.rst.txt b/docs/_build/html/_sources/jobs.rst.txt new file mode 100644 index 000000000..c01e313be --- /dev/null +++ b/docs/_build/html/_sources/jobs.rst.txt @@ -0,0 +1,6 @@ +Gen3 Jobs Class +---------------- + +.. autoclass:: gen3.jobs.Gen3Jobs + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/metadata.rst.txt b/docs/_build/html/_sources/metadata.rst.txt new file mode 100644 index 000000000..953117b99 --- /dev/null +++ b/docs/_build/html/_sources/metadata.rst.txt @@ -0,0 +1,6 @@ +Gen3 Metadata Class +------------------- + +.. autoclass:: gen3.metadata.Gen3Metadata + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/object.rst.txt b/docs/_build/html/_sources/object.rst.txt new file mode 100644 index 000000000..e2a48ac7d --- /dev/null +++ b/docs/_build/html/_sources/object.rst.txt @@ -0,0 +1,6 @@ +Gen3 Object Class +------------------- + +.. autoclass:: gen3.object.Gen3Object + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/query.rst.txt b/docs/_build/html/_sources/query.rst.txt new file mode 100644 index 000000000..ff81529bc --- /dev/null +++ b/docs/_build/html/_sources/query.rst.txt @@ -0,0 +1,6 @@ +Gen3 Query Class +--------------------- + +.. autoclass:: gen3.query.Gen3Query + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/submission.rst.txt b/docs/_build/html/_sources/submission.rst.txt new file mode 100644 index 000000000..5af5c7cf1 --- /dev/null +++ b/docs/_build/html/_sources/submission.rst.txt @@ -0,0 +1,6 @@ +Gen3 Submission Class +--------------------- + +.. autoclass:: gen3.submission.Gen3Submission + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/tools.rst.txt b/docs/_build/html/_sources/tools.rst.txt new file mode 100644 index 000000000..e232e7d99 --- /dev/null +++ b/docs/_build/html/_sources/tools.rst.txt @@ -0,0 +1,19 @@ +Gen3 Tools +---------- + +Tools and functions for common actions in Gen3. These tools are broken up into broad categories like indexing (for tasks related to the file object persistent identifiers within the system) and metadata (for tasks relating to file object metadata within the system). + +Such common indexing tasks may involve indexing file object URLs into Gen3 to assign persistent identifiers, downloading a manifest of every file object that already exists, and verifying that a Gen3 instance contains the expected indexed file objects based on a file. + +For metadata, the task may be ingesting a large amount of metadata from a file into the system. + +Most of these tools utilize async capabilities of Python to make common tasks more efficient. + +.. toctree:: + :glob: + + tools/* + +.. automodule:: gen3.tools + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/tools/drs_pull.rst.txt b/docs/_build/html/_sources/tools/drs_pull.rst.txt new file mode 100644 index 000000000..81d66b2c6 --- /dev/null +++ b/docs/_build/html/_sources/tools/drs_pull.rst.txt @@ -0,0 +1,7 @@ +DRS Download Tools +------------------ + +.. automodule:: gen3.tools.download.drs_download + :members: download_files_in_drs_manifest, download_drs_object, list_files_in_drs_manifest, + list_drs_object, list_access_in_drs_manifest, + Manifest, DownloadManager, Downloadable, DownloadStatus, diff --git a/docs/_build/html/_sources/tools/indexing.rst.txt b/docs/_build/html/_sources/tools/indexing.rst.txt new file mode 100644 index 000000000..49f2bbc24 --- /dev/null +++ b/docs/_build/html/_sources/tools/indexing.rst.txt @@ -0,0 +1,24 @@ +Indexing Tools +-------------- + + +Download +======== + +.. automodule:: gen3.tools.indexing.download_manifest + :members: + :show-inheritance: + +Index +======== + +.. automodule:: gen3.tools.indexing.index_manifest + :members: + :show-inheritance: + +Verify +======== + +.. automodule:: gen3.tools.indexing.verify_manifest + :members: + :show-inheritance: \ No newline at end of file diff --git a/docs/_build/html/_sources/tools/metadata.rst.txt b/docs/_build/html/_sources/tools/metadata.rst.txt new file mode 100644 index 000000000..d8ddc2e3f --- /dev/null +++ b/docs/_build/html/_sources/tools/metadata.rst.txt @@ -0,0 +1,10 @@ +Metadata Tools +-------------- + + +Ingest +======== + +.. automodule:: gen3.tools.metadata.ingest_manifest + :members: + :show-inheritance: diff --git a/docs/_build/html/_sources/wss.rst.txt b/docs/_build/html/_sources/wss.rst.txt new file mode 100644 index 000000000..c9500d2e9 --- /dev/null +++ b/docs/_build/html/_sources/wss.rst.txt @@ -0,0 +1,6 @@ +Gen3 Workspace Storage +----------------------- + +.. autoclass:: gen3.wss.Gen3WsStorage + :members: + :show-inheritance: diff --git a/docs/_build/html/_static/alabaster.css b/docs/_build/html/_static/alabaster.css new file mode 100644 index 000000000..e3174bf93 --- /dev/null +++ b/docs/_build/html/_static/alabaster.css @@ -0,0 +1,708 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar { + max-height: 100%; + overflow-y: auto; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox input[type="text"] { + width: 160px; +} + +div.sphinxsidebar .search > div { + display: table-cell; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin-left: 0; + margin-right: 0; + margin-top: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Hide ugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css new file mode 100644 index 000000000..e5179b7a9 --- /dev/null +++ b/docs/_build/html/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: inherit; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_build/html/_static/custom.css b/docs/_build/html/_static/custom.css new file mode 100644 index 000000000..2a924f1d6 --- /dev/null +++ b/docs/_build/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/docs/_build/html/_static/doctools.js b/docs/_build/html/_static/doctools.js new file mode 100644 index 000000000..4d67807d1 --- /dev/null +++ b/docs/_build/html/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/docs/_build/html/_static/documentation_options.js b/docs/_build/html/_static/documentation_options.js new file mode 100644 index 000000000..7e4c114f2 --- /dev/null +++ b/docs/_build/html/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/language_data.js b/docs/_build/html/_static/language_data.js new file mode 100644 index 000000000..367b8ed81 --- /dev/null +++ b/docs/_build/html/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/docs/_build/html/_static/minus.png b/docs/_build/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/plus.png b/docs/_build/html/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/docs/_build/html/_static/pygments.css b/docs/_build/html/_static/pygments.css new file mode 100644 index 000000000..04a41742e --- /dev/null +++ b/docs/_build/html/_static/pygments.css @@ -0,0 +1,84 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #8f5902; font-style: italic } /* Comment */ +.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */ +.highlight .g { color: #000000 } /* Generic */ +.highlight .k { color: #004461; font-weight: bold } /* Keyword */ +.highlight .l { color: #000000 } /* Literal */ +.highlight .n { color: #000000 } /* Name */ +.highlight .o { color: #582800 } /* Operator */ +.highlight .x { color: #000000 } /* Other */ +.highlight .p { color: #000000; font-weight: bold } /* Punctuation */ +.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #8f5902 } /* Comment.Preproc */ +.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #a40000 } /* Generic.Deleted */ +.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000 } /* Generic.EmphStrong */ +.highlight .gr { color: #ef2929 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #745334 } /* Generic.Prompt */ +.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */ +.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */ +.highlight .ld { color: #000000 } /* Literal.Date */ +.highlight .m { color: #990000 } /* Literal.Number */ +.highlight .s { color: #4e9a06 } /* Literal.String */ +.highlight .na { color: #c4a000 } /* Name.Attribute */ +.highlight .nb { color: #004461 } /* Name.Builtin */ +.highlight .nc { color: #000000 } /* Name.Class */ +.highlight .no { color: #000000 } /* Name.Constant */ +.highlight .nd { color: #888888 } /* Name.Decorator */ +.highlight .ni { color: #ce5c00 } /* Name.Entity */ +.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #000000 } /* Name.Function */ +.highlight .nl { color: #f57900 } /* Name.Label */ +.highlight .nn { color: #000000 } /* Name.Namespace */ +.highlight .nx { color: #000000 } /* Name.Other */ +.highlight .py { color: #000000 } /* Name.Property */ +.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #000000 } /* Name.Variable */ +.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */ +.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */ +.highlight .w { color: #f8f8f8 } /* Text.Whitespace */ +.highlight .mb { color: #990000 } /* Literal.Number.Bin */ +.highlight .mf { color: #990000 } /* Literal.Number.Float */ +.highlight .mh { color: #990000 } /* Literal.Number.Hex */ +.highlight .mi { color: #990000 } /* Literal.Number.Integer */ +.highlight .mo { color: #990000 } /* Literal.Number.Oct */ +.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */ +.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */ +.highlight .sc { color: #4e9a06 } /* Literal.String.Char */ +.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */ +.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */ +.highlight .se { color: #4e9a06 } /* Literal.String.Escape */ +.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */ +.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */ +.highlight .sx { color: #4e9a06 } /* Literal.String.Other */ +.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */ +.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */ +.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */ +.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #000000 } /* Name.Function.Magic */ +.highlight .vc { color: #000000 } /* Name.Variable.Class */ +.highlight .vg { color: #000000 } /* Name.Variable.Global */ +.highlight .vi { color: #000000 } /* Name.Variable.Instance */ +.highlight .vm { color: #000000 } /* Name.Variable.Magic */ +.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/docs/_build/html/_static/searchtools.js b/docs/_build/html/_static/searchtools.js new file mode 100644 index 000000000..92da3f8b2 --- /dev/null +++ b/docs/_build/html/_static/searchtools.js @@ -0,0 +1,619 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms, anchor) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString, anchor) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + for (const removalQuery of [".headerlinks", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent) return docContent.textContent; + + console.warn( + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + _parseQuery: (query) => { + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase().trim(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + normalResults.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } + } + } + } + + // lookup as object + objectTerms.forEach((term) => + normalResults.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/docs/_build/html/_static/sphinx_highlight.js b/docs/_build/html/_static/sphinx_highlight.js new file mode 100644 index 000000000..8a96c69a1 --- /dev/null +++ b/docs/_build/html/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/_build/html/auth.html b/docs/_build/html/auth.html new file mode 100644 index 000000000..a95a7d956 --- /dev/null +++ b/docs/_build/html/auth.html @@ -0,0 +1,229 @@ + + + + + + + + Gen3 Auth Helper — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Auth Helper

+
+
+class gen3.auth.Gen3Auth(endpoint=None, refresh_file=None, refresh_token=None, idp=None, client_credentials=None, client_scopes=None, access_token=None)[source]
+

Bases: AuthBase

+

Gen3 auth helper class for use with requests auth.

+

Implements requests.auth.AuthBase in order to support JWT authentication. +Generates access tokens from the provided refresh token file or string. +Automatically refreshes access tokens when they expire.

+
+
Parameters:
+
    +
  • refresh_file (str, opt) – The file containing the downloaded JSON web token. Optional if working in a Gen3 Workspace. +Defaults to (env[“GEN3_API_KEY”] || “credentials”) if refresh_token and idp not set. +Includes ~/.gen3/ in search path if value does not include /. +Interprets “idp://wts/<idp>” as an idp. +Interprets “accesstoken:///<token>” as an access token

  • +
  • refresh_token (str, opt) – The JSON web token. Optional if working in a Gen3 Workspace.

  • +
  • idp (str, opt) – If working in a Gen3 Workspace, the IDP to use can be specified - +“local” indicates the local environment fence idp

  • +
  • client_credentials (tuple, opt) – The (client_id, client_secret) credentials for an OIDC client +that has the ‘client_credentials’ grant, allowing it to obtain access tokens.

  • +
  • client_scopes (str, opt) – Space-separated list of scopes requested for access tokens obtained from client +credentials. Default: “user data openid”

  • +
  • access_token (str, opt) – provide an access token to override the use of any +API key/refresh token. This is intended for cases where you may want to +pass a token that was issued to a particular OIDC client (rather than acting on +your own direct behalf, you can provide a key that was client-issued to your user)

  • +
+
+
+

Examples

+

This generates the Gen3Auth class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page +and installed in ~/.gen3/credentials.json

+
>>> auth = Gen3Auth()
+
+
+

or use ~/.gen3/crdc.json:

+
>>> auth = Gen3Auth(refresh_file="crdc")
+
+
+

or use some arbitrary file:

+
>>> auth = Gen3Auth(refresh_file="./key.json")
+
+
+

or set the GEN3_API_KEY environment variable rather +than pass the refresh_file argument to the Gen3Auth +constructor.

+

If working with an OIDC client that has the ‘client_credentials’ grant, allowing it to obtain +access tokens, provide the client ID and secret:

+

Note: client secrets should never be hardcoded!

+
>>> auth = Gen3Auth(
+    endpoint="https://datacommons.example",
+    client_credentials=("client ID", os.environ["GEN3_OIDC_CLIENT_CREDS_SECRET"])
+)
+
+
+

If working in a Gen3 Workspace, initialize as follows:

+
>>> auth = Gen3Auth()
+
+
+
+
+curl(path, request=None, data=None)[source]
+

Curl the given endpoint - ex: gen3 curl /user/user. Return requests.Response

+
+
Parameters:
+
    +
  • path (str) – path under the commons to curl (/user/user, /index/index, /authz/mapping, …)

  • +
  • request (str in GET|POST|PUT|DELETE) – default to GET if data is not set, else default to POST

  • +
  • data (str) – json string or “@filename” of a json file

  • +
+
+
+
+ +
+
+get_access_token()[source]
+

Get the access token - auto refresh if within 5 minutes of expiration

+
+ +
+
+get_access_token_from_wts(endpoint=None)[source]
+

Try to fetch an access token for the given idp from the wts +in the given namespace. If idp is not set, then default to “local”

+
+ +
+
+refresh_access_token(endpoint=None)[source]
+

Get a new access token

+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/file.html b/docs/_build/html/file.html new file mode 100644 index 000000000..98b162de3 --- /dev/null +++ b/docs/_build/html/file.html @@ -0,0 +1,278 @@ + + + + + + + + Gen3 File Class — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 File Class

+
+
+class gen3.file.Gen3File(endpoint=None, auth_provider=None)[source]
+

Bases: object

+

For interacting with Gen3 file management features.

+

A class for interacting with the Gen3 file download services. +Supports getting presigned urls right now.

+
+
Parameters:
+

auth_provider (Gen3Auth) – A Gen3Auth class instance.

+
+
+

Examples

+

This generates the Gen3File class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> auth = Gen3Auth(refresh_file="credentials.json")
+... file = Gen3File(auth)
+
+
+
+
+delete_file(guid)[source]
+

This method is DEPRECATED. Use delete_file_locations() instead. +Delete all locations of a stored data file and remove its record from indexd

+
+
Parameters:
+

guid (str) – provide a UUID for file id to delete

+
+
Returns:
+

requests.delete text result

+
+
Return type:
+

text

+
+
+
+ +
+
+delete_file_locations(guid)[source]
+

Delete all locations of a stored data file and remove its record from indexd

+
+
Parameters:
+

guid (str) – provide a UUID for file id to delete

+
+
Returns:
+

requests.delete result

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+download_single(object_id, path)[source]
+

Download a single file using its GUID.

+
+
Parameters:
+
    +
  • object_id (str) – The file’s unique ID

  • +
  • path (str) – Path to store the downloaded file at

  • +
+
+
+
+ +
+
+get_presigned_url(guid, protocol=None)[source]
+

Generates a presigned URL for a file.

+

Retrieves a presigned url for a file giving access to a file for a limited time.

+
+
Parameters:
+
    +
  • guid (str) – The GUID for the object to retrieve.

  • +
  • protocol (str, optional) – The protocol to use for picking the available URL for generating the presigned URL.

  • +
+
+
+

Examples

+
>>> Gen3File.get_presigned_url(query)
+
+
+
+ +
+
+upload_file(file_name, authz=None, protocol=None, expires_in=None, bucket=None)[source]
+

Get a presigned url for a file to upload

+
+
Parameters:
+
    +
  • file_name (str) – file_name to use for upload

  • +
  • authz (list) – authorization scope for the file as list of paths, optional.

  • +
  • protocol (str) – Storage protocol to use for upload: “s3”, “az”. +If this isn’t set, the default will be “s3”

  • +
  • expires_in (int) – Amount in seconds that the signed url will expire from datetime.utcnow(). +Be sure to use a positive integer. +This value will also be treated as <= MAX_PRESIGNED_URL_TTL in the fence configuration.

  • +
  • bucket (str) – Bucket to upload to. The bucket must be configured in the Fence instance’s +ALLOWED_DATA_UPLOAD_BUCKETS setting. If not specified, Fence defaults to the +DATA_UPLOAD_BUCKET setting.

  • +
+
+
Returns:
+

json representation for the file upload

+
+
Return type:
+

Document

+
+
+
+ +
+
+upload_file_to_guid(guid, file_name, protocol=None, expires_in=None, bucket=None)[source]
+

Get a presigned url for a file to upload to the specified existing GUID

+
+
Parameters:
+
    +
  • file_name (str) – file_name to use for upload

  • +
  • protocol (str) – Storage protocol to use for upload: “s3”, “az”. +If this isn’t set, the default will be “s3”

  • +
  • expires_in (int) – Amount in seconds that the signed url will expire from datetime.utcnow(). +Be sure to use a positive integer. +This value will also be treated as <= MAX_PRESIGNED_URL_TTL in the fence configuration.

  • +
  • bucket (str) – Bucket to upload to. The bucket must be configured in the Fence instance’s +ALLOWED_DATA_UPLOAD_BUCKETS setting. If not specified, Fence defaults to the +DATA_UPLOAD_BUCKET setting.

  • +
+
+
Returns:
+

json representation for the file upload

+
+
Return type:
+

Document

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html new file mode 100644 index 000000000..d7372298c --- /dev/null +++ b/docs/_build/html/genindex.html @@ -0,0 +1,716 @@ + + + + + + + Index — Gen3 SDK documentation + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Index

+ +
+ _ + | A + | B + | C + | D + | E + | F + | G + | H + | I + | L + | M + | O + | P + | Q + | R + | S + | T + | U + +
+

_

+ + +
+ +

A

+ + + +
+ +

B

+ + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + +
+ +

I

+ + + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ + + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html new file mode 100644 index 000000000..36787eb40 --- /dev/null +++ b/docs/_build/html/index.html @@ -0,0 +1,388 @@ + + + + + + + + Welcome to Gen3 SDK’s documentation! — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Welcome to Gen3 SDK’s documentation!

+

The README in the Gen3 Python SDK Github Repo contains installation and setup information along with some quickstart scripts. This contains more detailed documentation about the various classes and functions available.

+

This documentation is mostly auto-generated from the docstrings within the source code.

+
+ +
+
+
+

Indices and tables

+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/indexing.html b/docs/_build/html/indexing.html new file mode 100644 index 000000000..dedae24ca --- /dev/null +++ b/docs/_build/html/indexing.html @@ -0,0 +1,635 @@ + + + + + + + + Gen3 Index Class — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Index Class

+
+
+class gen3.index.Gen3Index(endpoint=None, auth_provider=None, service_location='index')[source]
+

Bases: object

+

A class for interacting with the Gen3 Index services.

+
+
Parameters:
+
    +
  • endpoint (str) – public endpoint for reading/querying indexd - only necessary if auth_provider not provided

  • +
  • auth_provider (Gen3Auth) – A Gen3Auth class instance or indexd basic creds tuple

  • +
+
+
+

Examples

+

This generates the Gen3Index class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> auth = Gen3Auth(refresh_file="credentials.json")
+... index = Gen3Index(auth)
+
+
+
+
+async async_create_record(hashes, size, did=None, urls=None, file_name=None, metadata=None, baseid=None, acl=None, urls_metadata=None, version=None, authz=None, _ssl=None, description=None, content_created_date=None, content_updated_date=None)[source]
+

Asynchronous function to create a record in indexd.

+
+
Parameters:
+
    +
  • hashes (dict) – {hash type: hash value,} +eg hashes={'md5': ab167e49d25b488939b1ede42752458b'}

  • +
  • size (int) – file size metadata associated with a given uuid

  • +
  • did (str) – provide a UUID for the new indexd to be made

  • +
  • urls (list) – list of URLs where you can download the UUID

  • +
  • acl (list) – access control list

  • +
  • authz (str) – RBAC string

  • +
  • file_name (str) – name of the file associated with a given UUID

  • +
  • metadata (dict) – additional key value metadata for this entry

  • +
  • urls_metadata (dict) – metadata attached to each url

  • +
  • baseid (str) – optional baseid to group with previous entries versions

  • +
  • version (str) – entry version string

  • +
  • description (str) – optional description of the object

  • +
  • content_created_date (datetime) – optional creation date and time of the content being indexed

  • +
  • content_updated_date (datetime) – optional update date and time of the content being indexed

  • +
+
+
Returns:
+

json representation of an entry in indexd

+
+
Return type:
+

Document

+
+
+
+ +
+
+async async_get_record(guid=None, _ssl=None)[source]
+

Asynchronous function to request a record from indexd.

+
+
Parameters:
+

guid (str) – record guid

+
+
Returns:
+

indexd record

+
+
Return type:
+

dict

+
+
+
+ +
+
+async async_get_records_from_checksum(checksum, checksum_type='md5', _ssl=None)[source]
+

Asynchronous function to request records from indexd matching checksum.

+
+
Parameters:
+
    +
  • checksum (str) – indexd checksum to request

  • +
  • checksum_type (str) – type of checksum, defaults to md5

  • +
+
+
Returns:
+

List of indexd records

+
+
Return type:
+

List[dict]

+
+
+
+ +
+
+async async_get_records_on_page(limit=None, page=None, _ssl=None)[source]
+

Asynchronous function to request a page from indexd.

+
+
Parameters:
+

page (int/str) – indexd page to request

+
+
Returns:
+

List of indexd records from the page

+
+
Return type:
+

List[dict]

+
+
+
+ +
+
+async async_get_with_params(params, _ssl=None)[source]
+

Return a document object corresponding to the supplied parameter

+
    +
  • need to include all the hashes in the request

  • +
  • need to handle the query param ‘hash’: ‘hash_type:hash’

  • +
+
+
Parameters:
+
    +
  • params (dict) – params to search with

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
+
+
Returns:
+

json representation of an entry in indexd

+
+
Return type:
+

Document

+
+
+
+ +
+
+async async_query_urls(pattern, _ssl=None)[source]
+

Asynchronous function to query urls from indexd.

+
+
Parameters:
+

pattern (str) – pattern to match against indexd urls

+
+
Returns:
+

indexd records with urls matching pattern

+
+
Return type:
+

List[records]

+
+
+
+ +
+
+async async_update_record(guid, file_name=None, urls=None, version=None, metadata=None, acl=None, authz=None, urls_metadata=None, _ssl=None, description=None, content_created_date=None, content_updated_date=None, **kwargs)[source]
+

Asynchronous function to update a record in indexd.

+
+
Parameters:
+
    +
  • guid – string +- record id

  • +
  • body – json/dictionary format +- index record information that needs to be updated. +- can not update size or hash, use new version for that

  • +
+
+
+
+ +
+
+create_blank(uploader, file_name=None)[source]
+

Create a blank record

+
+
Parameters:
+
    +
  • format (json - json in the)

  • +
  • { – ‘uploader’: type(string) +‘file_name’: type(string) (optional*)

  • +
  • }

  • +
+
+
+
+ +
+
+create_new_version(guid, hashes, size, did=None, urls=None, file_name=None, metadata=None, acl=None, urls_metadata=None, version=None, authz=None, description=None, content_created_date=None, content_updated_date=None)[source]
+

Add new version for the document associated to the provided uuid

+

Since data content is immutable, when you want to change the +size or hash, a new index document with a new uuid needs to be +created as its new version. That uuid is returned in the did +field of the response. The old index document is not deleted.

+
+
Parameters:
+
    +
  • guid – (string): record id

  • +
  • hashes (dict) – {hash type: hash value,} +eg hashes={'md5': ab167e49d25b488939b1ede42752458b'}

  • +
  • size (int) – file size metadata associated with a given uuid

  • +
  • did (str) – provide a UUID for the new indexd to be made

  • +
  • urls (list) – list of URLs where you can download the UUID

  • +
  • file_name (str) – name of the file associated with a given UUID

  • +
  • metadata (dict) – additional key value metadata for this entry

  • +
  • acl (list) – access control list

  • +
  • urls_metadata (dict) – metadata attached to each url

  • +
  • version (str) – entry version string

  • +
  • authz (str) – RBAC string

  • +
  • description (str) – optional description of the object

  • +
  • content_created_date (datetime) – optional creation date and time of the content being indexed

  • +
  • content_updated_date (datetime) – optional update date and time of the content being indexed

  • +
  • body – json/dictionary format

  • +
  • store. (- Metadata object that needs to be added to the) – Providing size and at least one hash is necessary and +sufficient. Note: it is a good idea to add a version +number

  • +
+
+
+
+ +
+
+create_record(hashes, size, did=None, urls=None, file_name=None, metadata=None, baseid=None, acl=None, urls_metadata=None, version=None, authz=None, description=None, content_created_date=None, content_updated_date=None)[source]
+

Create a new record and add it to the index

+
+
Parameters:
+
    +
  • hashes (dict) – {hash type: hash value,} +eg hashes={'md5': ab167e49d25b488939b1ede42752458b'}

  • +
  • size (int) – file size metadata associated with a given uuid

  • +
  • did (str) – provide a UUID for the new indexd to be made

  • +
  • urls (list) – list of URLs where you can download the UUID

  • +
  • acl (list) – access control list

  • +
  • authz (str) – RBAC string

  • +
  • file_name (str) – name of the file associated with a given UUID

  • +
  • metadata (dict) – additional key value metadata for this entry

  • +
  • urls_metadata (dict) – metadata attached to each url

  • +
  • baseid (str) – optional baseid to group with previous entries versions

  • +
  • version (str) – entry version string

  • +
  • description (str) – optional description of the object

  • +
  • content_created_date (datetime) – optional creation date and time of the content being indexed

  • +
  • content_updated_date (datetime) – optional update date and time of the content being indexed

  • +
+
+
Returns:
+

json representation of an entry in indexd

+
+
Return type:
+

Document

+
+
+
+ +
+
+delete_record(guid)[source]
+

Delete an entry from the index

+
+
Parameters:
+

guid – string +- record id

+
+
+

Returns: Nothing

+
+ +
+
+get(guid, dist_resolution=True)[source]
+

Get the metadata associated with the given id, alias, or +distributed identifier

+
+
Parameters:
+
    +
  • guid – string +- record id

  • +
  • dist_resolution – boolean

  • +
  • not (- optional Specify if we want distributed dist_resolution or)

  • +
+
+
+
+ +
+
+get_all_records(limit=None, paginate=False)[source]
+

Get a list of all records

+
+ +
+
+get_guids_prefix()[source]
+

Get the prefix for GUIDs if there is one +:returns: prefix for this instance +:rtype: str

+
+ +
+
+get_latest_version(guid, has_version=False)[source]
+

Get the metadata of the latest index record version associated +with the given id

+
+
Parameters:
+
    +
  • guid – string +- record id

  • +
  • has_version – boolean +- optional exclude entries without a version

  • +
+
+
+
+ +
+
+get_record(guid)[source]
+

Get the metadata associated with a given id

+
+ +
+
+get_record_doc(guid)[source]
+

Get the metadata associated with a given id

+
+ +
+
+get_records(dids)[source]
+

Get a list of documents given a list of dids

+
+
Parameters:
+

dids – list +- a list of record ids

+
+
Returns:
+

json representing index records

+
+
Return type:
+

list

+
+
+
+ +
+
+get_records_on_page(limit=None, page=None)[source]
+

Get a list of all records given the page and page size limit

+
+ +
+
+get_stats()[source]
+

Return basic info about the records in indexd

+
+ +
+
+get_urls(size=None, hashes=None, guids=None)[source]
+

Get a list of urls that match query params

+
+
Parameters:
+
    +
  • size – integer +- object size

  • +
  • hashes – string +- hashes specified as algorithm:value

  • +
  • guids – list +- list of ids

  • +
+
+
+
+ +
+
+get_valid_guids(count=None)[source]
+

Get a list of valid GUIDs without indexing +:param count: number of GUIDs to request +:type count: int

+
+
Returns:
+

list of valid indexd GUIDs

+
+
Return type:
+

List[str]

+
+
+
+ +
+
+get_version()[source]
+

Return the version of indexd

+
+ +
+
+get_versions(guid)[source]
+

Get the metadata of index record version associated with the +given id

+
+
Parameters:
+

guid – string +- record id

+
+
+
+ +
+
+get_with_params(params=None)[source]
+

Return a document object corresponding to the supplied parameters, such +as {'hashes': {'md5': '...'}, 'size': '...', 'metadata': {'file_state': '...'}}.

+
+
    +
  • need to include all the hashes in the request

  • +
  • index client like signpost or indexd will need to handle the +query param ‘hash’: ‘hash_type:hash’

  • +
+
+
+ +
+
+is_healthy()[source]
+

Return if indexd is healthy or not

+
+ +
+
+query_urls(pattern)[source]
+

Query all record URLs for given pattern

+
+
Parameters:
+

pattern (str) – pattern to match against indexd urls

+
+
Returns:
+

indexd records with urls matching pattern

+
+
Return type:
+

List[records]

+
+
+
+ +
+
+update_blank(guid, rev, hashes, size, urls=None, authz=None)[source]
+

Update only hashes and size for a blank index

+
+
Parameters:
+
    +
  • guid (string) – record id

  • +
  • rev (string) – data revision - simple consistency mechanism

  • +
  • hashes (dict) – {hash type: hash value,} +eg hashes={'md5': ab167e49d25b488939b1ede42752458b'}

  • +
  • size (int) – file size metadata associated with a given uuid

  • +
+
+
+
+ +
+
+update_record(guid, file_name=None, urls=None, version=None, metadata=None, acl=None, authz=None, urls_metadata=None, description=None, content_created_date=None, content_updated_date=None)[source]
+

Update an existing entry in the index

+
+
Parameters:
+
    +
  • guid – string +- record id

  • +
  • body – json/dictionary format +- index record information that needs to be updated. +- can not update size or hash, use new version for that

  • +
+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/jobs.html b/docs/_build/html/jobs.html new file mode 100644 index 000000000..7dc241dd3 --- /dev/null +++ b/docs/_build/html/jobs.html @@ -0,0 +1,237 @@ + + + + + + + + Gen3 Jobs Class — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Jobs Class

+
+
+class gen3.jobs.Gen3Jobs(endpoint=None, auth_provider=None, service_location='job')[source]
+

Bases: object

+

A class for interacting with the Gen3’s Job Dispatching Service(s).

+

Examples

+

This generates the Gen3Jobs class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> auth = Gen3Auth(refresh_file="credentials.json")
+... jobs = Gen3Jobs(auth)
+
+
+
+
+async async_run_job_and_wait(job_name, job_input, _ssl=None, **kwargs)[source]
+

Asynchronous function to create a job, wait for output, and return. Will +sleep in a linear delay until the job is done, starting with 1 second.

+
+
Parameters:
+
    +
  • _ssl (None, optional) – whether or not to use ssl

  • +
  • job_name (str) – name for the job, can use globals in this file

  • +
  • job_input (Dict) – dictionary of input for the job

  • +
+
+
Returns:
+

Response from the endpoint

+
+
Return type:
+

Dict

+
+
+
+ +
+
+create_job(job_name, job_input)[source]
+

Create a job with given name and input

+
+
Parameters:
+
    +
  • job_name (str) – name for the job, can use globals in this file

  • +
  • job_input (Dict) – dictionary of input for the job

  • +
+
+
Returns:
+

Response from the endpoint

+
+
Return type:
+

Dict

+
+
+
+ +
+
+get_output(job_id)[source]
+

Get the output of a previously completed job

+
+ +
+
+get_status(job_id)[source]
+

Get the status of a previously created job

+
+ +
+
+get_version()[source]
+

Return the version

+
+
Returns:
+

the version

+
+
Return type:
+

str

+
+
+
+ +
+
+is_healthy()[source]
+

Return if is healthy or not

+
+
Returns:
+

True if healthy

+
+
Return type:
+

bool

+
+
+
+ +
+
+list_jobs()[source]
+

List all jobs

+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/metadata.html b/docs/_build/html/metadata.html new file mode 100644 index 000000000..4ec193415 --- /dev/null +++ b/docs/_build/html/metadata.html @@ -0,0 +1,650 @@ + + + + + + + + Gen3 Metadata Class — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Metadata Class

+
+
+class gen3.metadata.Gen3Metadata(endpoint=None, auth_provider=None, service_location='mds', admin_endpoint_suffix='-admin')[source]
+

Bases: object

+

A class for interacting with the Gen3 Metadata services.

+

Examples

+

This generates the Gen3Metadata class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> auth = Gen3Auth(refresh_file="credentials.json")
+... metadata = Gen3Metadata(auth)
+
+
+
+
+endpoint
+

public endpoint for reading/querying metadata - only necessary if auth_provider not provided

+
+
Type:
+

str

+
+
+
+ +
+
+auth_provider
+

auth manager

+
+
Type:
+

Gen3Auth

+
+
+
+ +
+
+async async_create(guid, metadata, aliases=None, overwrite=False, _ssl=None, **kwargs)[source]
+

Asynchronous function to create metadata

+
+
Parameters:
+
    +
  • guid (str) – guid to use

  • +
  • metadata (Dict) – dictionary representing what will end up a JSON blob +attached to the provided GUID as metadata

  • +
  • overwrite (bool, optional) – whether or not to overwrite existing data

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
+
+
+
+ +
+
+async async_create_aliases(guid, aliases, _ssl=None, **kwargs)[source]
+

Asyncronously create Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • aliases (list[str]) – Aliases to set for the guid

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to create aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+async async_delete_alias(guid, alias, _ssl=None, **kwargs)[source]
+

Asyncronously delete single Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (str) – Globally unique ID for the metadata blob

  • +
  • alias (str) – alternative identifier (alias) to delete

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to delete aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+async async_delete_aliases(guid, _ssl=None, **kwargs)[source]
+

Asyncronously delete all Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to delete aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+async async_get(guid, _ssl=None, **kwargs)[source]
+

Asynchronous function to get metadata

+
+
Parameters:
+
    +
  • guid (str) – guid to use

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
+
+
Returns:
+

metadata for given guid

+
+
Return type:
+

Dict

+
+
+
+ +
+
+async async_get_aliases(guid, _ssl=None, **kwargs)[source]
+

Asyncronously get Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to get aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+async async_update(guid, metadata, aliases=None, merge=False, _ssl=None, **kwargs)[source]
+

Asynchronous function to update metadata

+
+
Parameters:
+
    +
  • guid (str) – guid to use

  • +
  • metadata (Dict) – dictionary representing what will end up a JSON blob +attached to the provided GUID as metadata

  • +
  • aliases (list[str], optional) – List of aliases to update the GUID with

  • +
  • merge (bool, optional) – Whether or not to merge metadata AND aliases +with existing values

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
  • **kwargs – Description

  • +
+
+
+
+ +
+
+async async_update_aliases(guid, aliases, merge=False, _ssl=None, **kwargs)[source]
+

Asyncronously update Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • aliases (list[str]) – Aliases to set for the guid

  • +
  • merge (bool, optional) – Whether or not to aliases with existing values

  • +
  • _ssl (None, optional) – whether or not to use ssl

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to update aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+batch_create(metadata_list, overwrite=True, **kwargs)[source]
+

Create the list of metadata associated with the list of guids

+
+
Parameters:
+
    +
  • (List[Dict{"guid" (metadata_list) – “”, “data”: {}}]): list of metadata +objects in a specific format. Expects a dict with “guid” and “data” +fields where “data” is another JSON blob to add to the mds

  • +
  • overwrite (bool, optional) – whether or not to overwrite existing data

  • +
+
+
+
+ +
+
+create(guid, metadata, aliases=None, overwrite=False, **kwargs)[source]
+

Create the metadata associated with the guid

+
+
Parameters:
+
    +
  • guid (str) – guid to use

  • +
  • metadata (Dict) – dictionary representing what will end up a JSON blob +attached to the provided GUID as metadata

  • +
  • overwrite (bool, optional) – whether or not to overwrite existing data

  • +
+
+
+
+ +
+
+create_aliases(guid, aliases, **kwargs)[source]
+

Create Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • aliases (list[str]) – Aliases to set for the guid

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to create aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+create_index_key_path(path)[source]
+

Create a metadata key path indexed in the database.

+
+
Parameters:
+

path (str) – metadata key path

+
+
+
+ +
+
+delete(guid, **kwargs)[source]
+

Delete the metadata associated with the guid

+
+
Parameters:
+

guid (str) – guid to use

+
+
+
+ +
+
+delete_alias(guid, alias, **kwargs)[source]
+

Delete single Alias for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • alias (str) – alternative identifier (alias) to delete

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to delete aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+delete_aliases(guid, **kwargs)[source]
+

Delete all Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to delete aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+delete_index_key_path(path)[source]
+

List all the metadata key paths indexed in the database.

+
+
Parameters:
+

path (str) – metadata key path

+
+
+
+ +
+
+get(guid, **kwargs)[source]
+

Get the metadata associated with the guid +:param guid: guid to use +:type guid: str

+
+
Returns:
+

metadata for given guid

+
+
Return type:
+

Dict

+
+
+
+ +
+
+get_aliases(guid, **kwargs)[source]
+

Get Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to get aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+
+get_index_key_paths()[source]
+

List all the metadata key paths indexed in the database.

+
+
Returns:
+

list of metadata key paths

+
+
Return type:
+

List

+
+
+
+ +
+
+get_version()[source]
+

Return the version

+
+
Returns:
+

the version

+
+
Return type:
+

str

+
+
+
+ +
+
+is_healthy()[source]
+

Return if is healthy or not

+
+
Returns:
+

True if healthy

+
+
Return type:
+

bool

+
+
+
+ +
+
+query(query, return_full_metadata=False, limit=10, offset=0, use_agg_mds=False, **kwargs)[source]
+

Query the metadata given a query.

+
+
Query format is based off the logic used in the service:

‘’’ +Without filters, this will return all data. Add filters as query strings like this:

+

GET /metadata?a=1&b=2

+
+
This will match all records that have metadata containing all of:

{“a”: 1, “b”: 2} +The values are always treated as strings for filtering. Nesting is supported:

+

GET /metadata?a.b.c=3

+
+
Matching records containing:

{“a”: {“b”: {“c”: 3}}} +Providing the same key with more than one value filters records whose value of the given key matches any of the given values. But values of different keys must all match. For example:

+

GET /metadata?a.b.c=3&a.b.c=33&a.b.d=4

+
+
Matches these:

{“a”: {“b”: {“c”: 3, “d”: 4}}} +{“a”: {“b”: {“c”: 33, “d”: 4}}} +{“a”: {“b”: {“c”: “3”, “d”: 4, “e”: 5}}} +But won’t match these:

+

{“a”: {“b”: {“c”: 3}}} +{“a”: {“b”: {“c”: 3, “d”: 5}}} +{“a”: {“b”: {“d”: 5}}} +{“a”: {“b”: {“c”: “333”, “d”: 4}}} +‘’’

+
+
+
+
Parameters:
+
    +
  • query (str) – mds query as defined by the metadata api

  • +
  • return_full_metadata (bool, optional) – if False will just return a list of guids

  • +
  • limit (int, optional) – max num records to return

  • +
  • offset (int, optional) – offset for output

  • +
+
+
Returns:
+

+
list of guids matching query

OR if return_full_metadata=True

+
+
Dict{guid: {metadata}}: Dictionary with GUIDs as keys and associated

metadata JSON blobs as values

+
+
+

+
+
Return type:
+

List

+
+
+
+ +
+
+update(guid, metadata, aliases=None, merge=False, **kwargs)[source]
+

Update the metadata associated with the guid

+
+
Parameters:
+
    +
  • guid (str) – guid to use

  • +
  • metadata (Dict) – dictionary representing what will end up a JSON blob +attached to the provided GUID as metadata

  • +
+
+
+
+ +
+
+update_aliases(guid, aliases, merge=False, **kwargs)[source]
+

Update Aliases for the given guid

+
+
Parameters:
+
    +
  • guid (TYPE) – Globally unique ID for the metadata blob

  • +
  • aliases (list[str]) – Aliases to set for the guid

  • +
  • merge (bool, optional) – Whether or not to aliases with existing values

  • +
  • **kwargs – additional query params

  • +
+
+
Returns:
+

response from the request to update aliases

+
+
Return type:
+

requests.Response

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/object.html b/docs/_build/html/object.html new file mode 100644 index 000000000..77c44e217 --- /dev/null +++ b/docs/_build/html/object.html @@ -0,0 +1,168 @@ + + + + + + + + Gen3 Object Class — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Object Class

+
+
+class gen3.object.Gen3Object(auth_provider=None)[source]
+

Bases: object

+

For interacting with Gen3 object level features.

+

A class for interacting with the Gen3 object services. +Currently allows creating and deleting of an object from the Gen3 System.

+
+
Parameters:
+

auth_provider (Gen3Auth) – A Gen3Auth class instance.

+
+
+

Examples

+

This generates the Gen3Object class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> auth = Gen3Auth(refresh_file="credentials.json")
+... object = Gen3Object(auth)
+
+
+
+
+delete_object(guid, delete_file_locations=False)[source]
+

Delete the object from indexd, metadata service and optionally all storage locations

+
+
Parameters:
+
    +
  • delete (guid -- GUID of the object to)

  • +
  • True (delete_file_locations -- if)

  • +
  • location (removes the object from existing bucket)

  • +
+
+
Returns:
+

Nothing

+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..8f2fb369e10a277a49c29de1f9aeb6fd64436a33 GIT binary patch literal 1894 zcmV-s2buUIAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkMWo|Pd zQ$$M&BOq2~a&u{KZaN?eBOp|0Wgv28ZDDC{WMy(7Z)PBLXlZjGW@&6?AZc?TV{dJ6 za%FRKWn>_Ab7^j8AbMu>rfAbB8h+eX?Qc(p2&KB&SC{fhzMzL4Pr|K!oE*9M}j_))D4X`j3#I&csm+K zHjMDF)kHQ?Oft+{z9pm)L0iTi`dM1p^NOfT8ej7GrbSIFj+7X6u92efzl|qF&S2<@By>#V>r3JZg zSp~P~J)luQeK!W~2zQBcMZ*Oao#)Usq80WT$5CM1p)-Y>16X)x^^U1A;wU6I7U8}N z+AXEpWZF3wwob<1=$dQ%NBN_=ck6*OvNrp(JVo+4!fAkZII3r`iySuT%8TuAYL#g& zvRt&ssldv4dt8%KUj)A5OBZo*B=hJuyCmmeatzBQ#~M1df2!+P3S5D!J&DyccV>}W zQ-nF;u55O9)ohSl?lU{yw!2Y4&Bi1E7#4szDH<#Ui`KcEVN0ep7JlgL znJ{>FyI3BblhG5|%iYQx|GUu{hjzug1{YLVSsp0kkTl3>lnN*Ja|&{h@Kz*slQ@z! z?Psk>UfJ7Pap2tW_v9 zLubXkEyG#(Jw~Udz6RY5#qbU(v~ligwRu4N|6%4r|a4B zz45z#Oyc=r6bHxZv#=PtR_V{V#!PPl|6=a@IlZ2+cXnX;kX>o|R3#lqCFvczwz(;4D z8Zan$F6!wy!qJmI-xgO&F7PcB^uw&n|>e*fOOOG8$hks0ccy?IBekt1t=G zUUjy2Sv!>isv-1@z3XMxW_!Oz=Z$9ftLXz;&d_QxLAQ%Dq5MiY_kse&hn9amPUJ2& zM|xkLjM2Nh`w5!;{&6x|_NVM&_RzP&R({n@h4HK6s+BtLSuTnW&6lQcUwdiLM$L|! zF1*itAtUEIQZk%gyEa?F0rpkQ6 z(h+vvj;ft)$VKp0b(h~%zEv73uA%;h>jQ~1!UnoXRS_*eoH3&MOQw->D>WbOrdm42 zYZ5E@;;O;u=H9_U%#v0lK9ks|36aii6fDMn{P)kld?+RJgrq`$!SutRNZThYMJhLF z^Cgd&pYB4fh?h;MMpX9=8_6Q1s?xPEGl;TF)uL$7aR1rvgf zszBQHJct@SrW{#;9jcKAu~h#D^)vH{eEl>%9M2cS;+ + + + + + + Python Module Index — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ + +

Python Module Index

+ +
+ g +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
 
+ g
+ gen3 +
    + gen3.tools +
    + gen3.tools.download.drs_download +
    + gen3.tools.indexing.download_manifest +
    + gen3.tools.indexing.index_manifest +
    + gen3.tools.indexing.verify_manifest +
    + gen3.tools.metadata.ingest_manifest +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/query.html b/docs/_build/html/query.html new file mode 100644 index 000000000..9acf1a925 --- /dev/null +++ b/docs/_build/html/query.html @@ -0,0 +1,253 @@ + + + + + + + + Gen3 Query Class — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Query Class

+
+
+class gen3.query.Gen3Query(auth_provider)[source]
+

Bases: object

+

Query ElasticSearch data from a Gen3 system.

+
+
Parameters:
+

auth_provider (Gen3Auth) – A Gen3Auth class instance.

+
+
+

Examples

+

This generates the Gen3Query class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> auth = Gen3Auth(endpoint, refresh_file="credentials.json")
+... query = Gen3Query(auth)
+
+
+
+
+graphql_query(query_string, variables=None)[source]
+

Execute a GraphQL query against a Data Commons.

+
+
Parameters:
+
+
+
Returns:
+

{“data”: {<data_type>: [<record>, <record>, …]}}

+
+
Return type:
+

Object

+
+
+

Examples

+
>>> query_string = "{ my_index { my_field } }"
+... Gen3Query.graphql_query(query_string)
+
+
+
+ +
+
+query(data_type, fields, first=None, offset=None, filters=None, filter_object=None, sort_object=None, accessibility=None, verbose=True)[source]
+

Execute a query against a Data Commons.

+
+
Parameters:
+
    +
  • data_type (str) – Data type to query.

  • +
  • fields (list) – List of fields to return.

  • +
  • first (int, optional) – Number of rows to return (default: 10).

  • +
  • offset (int, optional) – Starting position (default: 0).

  • +
  • filters – (object, optional): { field: sort method } object. Will filter data with ALL fields EQUAL to the provided respective value. If more complex filters are needed, use the filter_object parameter instead.

  • +
  • filter_object (object, optional) – Filter to apply. For syntax details, see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#filter.

  • +
  • sort_object (object, optional) – { field: sort method } object.

  • +
  • accessibility (list, optional) – One of [“accessible” (default), “unaccessible”, “all”]. Only valid when querying a data type in “regular” tier access mode.

  • +
+
+
Returns:
+

{“data”: {<data_type>: [<record>, <record>, …]}}

+
+
Return type:
+

Object

+
+
+

Examples

+
>>> Gen3Query.query(
+    data_type="subject",
+    first=50,
+    fields=[
+        "vital_status",
+        "submitter_id",
+    ],
+    filters={"vital_status": "Alive"},
+    sort_object={"submitter_id": "asc"},
+)
+
+
+
+ +
+
+raw_data_download(data_type, fields, filter_object=None, sort_fields=None, accessibility=None, first=None, offset=None)[source]
+

Execute a raw data download against a Data Commons.

+
+
Parameters:
+
    +
  • data_type (str) – Data type to download from.

  • +
  • fields (list) – List of fields to return.

  • +
  • filter_object (object, optional) – Filter to apply. For syntax details, see https://github.com/uc-cdis/guppy/blob/master/doc/queries.md#filter.

  • +
  • sort_fields (list, optional) – List of { field: sort method } objects.

  • +
  • accessibility (list, optional) – One of [“accessible” (default), “unaccessible”, “all”]. Only valid when downloading from a data type in “regular” tier access mode.

  • +
  • first (int, optional) – Number of rows to return (default: all rows).

  • +
  • offset (int, optional) – Starting position (default: 0).

  • +
+
+
Returns:
+

[<record>, <record>, …]

+
+
Return type:
+

List

+
+
+

Examples

+
>>> Gen3Query.raw_data_download(
+        data_type="subject",
+        fields=[
+            "vital_status",
+            "submitter_id",
+            "project_id"
+        ],
+        filter_object={"=": {"project_id": "my_program-my_project"}},
+        sort_fields=[{"submitter_id": "asc"}],
+        accessibility="accessible"
+    )
+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html new file mode 100644 index 000000000..5b922a554 --- /dev/null +++ b/docs/_build/html/search.html @@ -0,0 +1,135 @@ + + + + + + + Search — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js new file mode 100644 index 000000000..5654aaccf --- /dev/null +++ b/docs/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"alltitles": {"DRS Download Tools": [[10, "module-gen3.tools.download.drs_download"]], "Download": [[11, "module-gen3.tools.indexing.download_manifest"]], "Gen3 Auth Helper": [[0, "gen3-auth-helper"]], "Gen3 File Class": [[1, "gen3-file-class"]], "Gen3 Index Class": [[3, "gen3-index-class"]], "Gen3 Jobs Class": [[4, "gen3-jobs-class"]], "Gen3 Metadata Class": [[5, "gen3-metadata-class"]], "Gen3 Object Class": [[6, "gen3-object-class"]], "Gen3 Query Class": [[7, "gen3-query-class"]], "Gen3 Submission Class": [[8, "gen3-submission-class"]], "Gen3 Tools": [[9, "gen3-tools"]], "Gen3 Workspace Storage": [[13, "gen3-workspace-storage"]], "Index": [[11, "module-gen3.tools.indexing.index_manifest"]], "Indexing Tools": [[11, "indexing-tools"]], "Indices and tables": [[2, "indices-and-tables"]], "Ingest": [[12, "module-gen3.tools.metadata.ingest_manifest"]], "Metadata Tools": [[12, "metadata-tools"]], "Verify": [[11, "module-gen3.tools.indexing.verify_manifest"]], "Welcome to Gen3 SDK\u2019s documentation!": [[2, "welcome-to-gen3-sdk-s-documentation"]]}, "docnames": ["auth", "file", "index", "indexing", "jobs", "metadata", "object", "query", "submission", "tools", "tools/drs_pull", "tools/indexing", "tools/metadata", "wss"], "envversion": {"sphinx": 61, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1}, "filenames": ["auth.rst", "file.rst", "index.rst", "indexing.rst", "jobs.rst", "metadata.rst", "object.rst", "query.rst", "submission.rst", "tools.rst", "tools/drs_pull.rst", "tools/indexing.rst", "tools/metadata.rst", "wss.rst"], "indexentries": {"_manager (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable._manager", false]], "access_methods (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.access_methods", false]], "acls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ACLS", false]], "async_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create", false]], "async_create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_create_aliases", false]], "async_create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_create_record", false]], "async_delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_alias", false]], "async_delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_delete_aliases", false]], "async_download_object_manifest() (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.async_download_object_manifest", false]], "async_get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get", false]], "async_get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_get_aliases", false]], "async_get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_record", false]], "async_get_records_from_checksum() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_from_checksum", false]], "async_get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_records_on_page", false]], "async_get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_get_with_params", false]], "async_ingest_metadata_manifest() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest", false]], "async_query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_query_urls", false]], "async_query_urls_from_indexd() (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd", false]], "async_run_job_and_wait() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.async_run_job_and_wait", false]], "async_update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update", false]], "async_update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.async_update_aliases", false]], "async_update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.async_update_record", false]], "async_verify_object_manifest() (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.async_verify_object_manifest", false]], "auth_provider (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.auth_provider", false]], "authz (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.AUTHZ", false]], "batch_create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.batch_create", false]], "cache_hosts_wts_tokens() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.cache_hosts_wts_tokens", false]], "children (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.children", false]], "column_to_use_as_guid (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID", false]], "commons_url (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.commons_url", false]], "copy() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.copy", false]], "create() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create", false]], "create_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_aliases", false]], "create_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_blank", false]], "create_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.create_index_key_path", false]], "create_job() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.create_job", false]], "create_new_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_new_version", false]], "create_object_list() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.create_object_list", false]], "create_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_program", false]], "create_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.create_project", false]], "create_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.create_record", false]], "created_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.created_time", false]], "curl() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.curl", false]], "current_dir (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.CURRENT_DIR", false]], "current_dir (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.CURRENT_DIR", false]], "delete() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete", false]], "delete_alias() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_alias", false]], "delete_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_aliases", false]], "delete_all_guids() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.delete_all_guids", false]], "delete_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file", false]], "delete_file_locations() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.delete_file_locations", false]], "delete_index_key_path() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.delete_index_key_path", false]], "delete_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_node", false]], "delete_nodes() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_nodes", false]], "delete_object() (gen3.object.gen3object method)": [[6, "gen3.object.Gen3Object.delete_object", false]], "delete_program() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_program", false]], "delete_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_project", false]], "delete_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.delete_record", false]], "delete_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_record", false]], "delete_records() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.delete_records", false]], "download() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.download", false]], "download() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.download", false]], "download() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download", false]], "download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_files_in_drs_manifest", false]], "download_single() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.download_single", false]], "download_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.download_url", false]], "downloadable (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Downloadable", false]], "downloadmanager (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadManager", false]], "downloadstatus (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.DownloadStatus", false]], "end_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.end_time", false]], "endpoint (gen3.metadata.gen3metadata attribute)": [[5, "gen3.metadata.Gen3Metadata.endpoint", false]], "export_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_node", false]], "export_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.export_record", false]], "file_name (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_name", false]], "file_name (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_name", false]], "file_size (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.file_size", false]], "file_size (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.file_size", false]], "gen3.tools": [[9, "module-gen3.tools", false]], "gen3.tools.download.drs_download": [[10, "module-gen3.tools.download.drs_download", false]], "gen3.tools.indexing.download_manifest": [[11, "module-gen3.tools.indexing.download_manifest", false]], "gen3.tools.indexing.index_manifest": [[11, "module-gen3.tools.indexing.index_manifest", false]], "gen3.tools.indexing.verify_manifest": [[11, "module-gen3.tools.indexing.verify_manifest", false]], "gen3.tools.metadata.ingest_manifest": [[12, "module-gen3.tools.metadata.ingest_manifest", false]], "gen3auth (class in gen3.auth)": [[0, "gen3.auth.Gen3Auth", false]], "gen3file (class in gen3.file)": [[1, "gen3.file.Gen3File", false]], "gen3index (class in gen3.index)": [[3, "gen3.index.Gen3Index", false]], "gen3jobs (class in gen3.jobs)": [[4, "gen3.jobs.Gen3Jobs", false]], "gen3metadata (class in gen3.metadata)": [[5, "gen3.metadata.Gen3Metadata", false]], "gen3object (class in gen3.object)": [[6, "gen3.object.Gen3Object", false]], "gen3query (class in gen3.query)": [[7, "gen3.query.Gen3Query", false]], "gen3submission (class in gen3.submission)": [[8, "gen3.submission.Gen3Submission", false]], "gen3wsstorage (class in gen3.wss)": [[13, "gen3.wss.Gen3WsStorage", false]], "get() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get", false]], "get() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get", false]], "get_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token", false]], "get_access_token_from_wts() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.get_access_token_from_wts", false]], "get_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_aliases", false]], "get_all_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_all_records", false]], "get_dictionary_all() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_all", false]], "get_dictionary_node() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_dictionary_node", false]], "get_fresh_token() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.get_fresh_token", false]], "get_graphql_schema() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_graphql_schema", false]], "get_guids_prefix() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_guids_prefix", false]], "get_index_key_paths() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_index_key_paths", false]], "get_latest_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_latest_version", false]], "get_output() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_output", false]], "get_presigned_url() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.get_presigned_url", false]], "get_programs() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_programs", false]], "get_project_dictionary() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_dictionary", false]], "get_project_manifest() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_project_manifest", false]], "get_projects() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.get_projects", false]], "get_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record", false]], "get_record_doc() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_record_doc", false]], "get_records() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records", false]], "get_records_on_page() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_records_on_page", false]], "get_stats() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_stats", false]], "get_status() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_status", false]], "get_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_urls", false]], "get_valid_guids() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_valid_guids", false]], "get_version() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_version", false]], "get_version() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.get_version", false]], "get_version() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.get_version", false]], "get_versions() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_versions", false]], "get_with_params() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.get_with_params", false]], "graphql_query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.graphql_query", false]], "guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.GUID", false]], "guid_type_for_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT", false]], "guid_type_for_non_indexed_file_object (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT", false]], "hostname (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.hostname", false]], "index_object_manifest() (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.index_object_manifest", false]], "indexd_record_page_size (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE", false]], "is_healthy() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.is_healthy", false]], "is_healthy() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.is_healthy", false]], "is_healthy() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.is_healthy", false]], "list_access_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_access_in_drs_manifest", false]], "list_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_drs_object", false]], "list_files_in_drs_manifest() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.list_files_in_drs_manifest", false]], "list_jobs() (gen3.jobs.gen3jobs method)": [[4, "gen3.jobs.Gen3Jobs.list_jobs", false]], "load() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load", false]], "load_manifest() (gen3.tools.download.drs_download.manifest static method)": [[10, "gen3.tools.download.drs_download.Manifest.load_manifest", false]], "ls() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls", false]], "ls_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.ls_path", false]], "manifest (class in gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.Manifest", false]], "max_concurrent_requests (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.indexing.verify_manifest)": [[11, "gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS", false]], "max_concurrent_requests (in module gen3.tools.metadata.ingest_manifest)": [[12, "gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS", false]], "md5 (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.MD5", false]], "md5sum (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.md5sum", false]], "module": [[9, "module-gen3.tools", false], [10, "module-gen3.tools.download.drs_download", false], [11, "module-gen3.tools.indexing.download_manifest", false], [11, "module-gen3.tools.indexing.index_manifest", false], [11, "module-gen3.tools.indexing.verify_manifest", false], [12, "module-gen3.tools.metadata.ingest_manifest", false]], "object_id (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_id", false]], "object_id (gen3.tools.download.drs_download.manifest attribute)": [[10, "gen3.tools.download.drs_download.Manifest.object_id", false]], "object_type (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.object_type", false]], "open_project() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.open_project", false]], "pprint() (gen3.tools.download.drs_download.downloadable method)": [[10, "gen3.tools.download.drs_download.Downloadable.pprint", false]], "prev_guid (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.PREV_GUID", false]], "query() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.query", false]], "query() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.query", false]], "query() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.query", false]], "query_urls() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.query_urls", false]], "raw_data_download() (gen3.query.gen3query method)": [[7, "gen3.query.Gen3Query.raw_data_download", false]], "refresh_access_token() (gen3.auth.gen3auth method)": [[0, "gen3.auth.Gen3Auth.refresh_access_token", false]], "resolve_objects() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.resolve_objects", false]], "rm() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm", false]], "rm_path() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.rm_path", false]], "size (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.SIZE", false]], "start_time (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.start_time", false]], "status (gen3.tools.download.drs_download.downloadstatus attribute)": [[10, "gen3.tools.download.drs_download.DownloadStatus.status", false]], "submit_file() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_file", false]], "submit_record() (gen3.submission.gen3submission method)": [[8, "gen3.submission.Gen3Submission.submit_record", false]], "threadcontrol (class in gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.ThreadControl", false]], "tmp_folder (in module gen3.tools.indexing.download_manifest)": [[11, "gen3.tools.indexing.download_manifest.TMP_FOLDER", false]], "update() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update", false]], "update_aliases() (gen3.metadata.gen3metadata method)": [[5, "gen3.metadata.Gen3Metadata.update_aliases", false]], "update_blank() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_blank", false]], "update_record() (gen3.index.gen3index method)": [[3, "gen3.index.Gen3Index.update_record", false]], "updated_time (gen3.tools.download.drs_download.downloadable attribute)": [[10, "gen3.tools.download.drs_download.Downloadable.updated_time", false]], "upload() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload", false]], "upload_file() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file", false]], "upload_file_to_guid() (gen3.file.gen3file method)": [[1, "gen3.file.Gen3File.upload_file_to_guid", false]], "upload_url() (gen3.wss.gen3wsstorage method)": [[13, "gen3.wss.Gen3WsStorage.upload_url", false]], "urls (in module gen3.tools.indexing.index_manifest)": [[11, "gen3.tools.indexing.index_manifest.URLS", false]], "user_access() (gen3.tools.download.drs_download.downloadmanager method)": [[10, "gen3.tools.download.drs_download.DownloadManager.user_access", false]]}, "objects": {"gen3": [[9, 3, 0, "-", "tools"]], "gen3.auth": [[0, 0, 1, "", "Gen3Auth"]], "gen3.auth.Gen3Auth": [[0, 1, 1, "", "curl"], [0, 1, 1, "", "get_access_token"], [0, 1, 1, "", "get_access_token_from_wts"], [0, 1, 1, "", "refresh_access_token"]], "gen3.file": [[1, 0, 1, "", "Gen3File"]], "gen3.file.Gen3File": [[1, 1, 1, "", "delete_file"], [1, 1, 1, "", "delete_file_locations"], [1, 1, 1, "", "download_single"], [1, 1, 1, "", "get_presigned_url"], [1, 1, 1, "", "upload_file"], [1, 1, 1, "", "upload_file_to_guid"]], "gen3.index": [[3, 0, 1, "", "Gen3Index"]], "gen3.index.Gen3Index": [[3, 1, 1, "", "async_create_record"], [3, 1, 1, "", "async_get_record"], [3, 1, 1, "", "async_get_records_from_checksum"], [3, 1, 1, "", "async_get_records_on_page"], [3, 1, 1, "", "async_get_with_params"], [3, 1, 1, "", "async_query_urls"], [3, 1, 1, "", "async_update_record"], [3, 1, 1, "", "create_blank"], [3, 1, 1, "", "create_new_version"], [3, 1, 1, "", "create_record"], [3, 1, 1, "", "delete_record"], [3, 1, 1, "", "get"], [3, 1, 1, "", "get_all_records"], [3, 1, 1, "", "get_guids_prefix"], [3, 1, 1, "", "get_latest_version"], [3, 1, 1, "", "get_record"], [3, 1, 1, "", "get_record_doc"], [3, 1, 1, "", "get_records"], [3, 1, 1, "", "get_records_on_page"], [3, 1, 1, "", "get_stats"], [3, 1, 1, "", "get_urls"], [3, 1, 1, "", "get_valid_guids"], [3, 1, 1, "", "get_version"], [3, 1, 1, "", "get_versions"], [3, 1, 1, "", "get_with_params"], [3, 1, 1, "", "is_healthy"], [3, 1, 1, "", "query_urls"], [3, 1, 1, "", "update_blank"], [3, 1, 1, "", "update_record"]], "gen3.jobs": [[4, 0, 1, "", "Gen3Jobs"]], "gen3.jobs.Gen3Jobs": [[4, 1, 1, "", "async_run_job_and_wait"], [4, 1, 1, "", "create_job"], [4, 1, 1, "", "get_output"], [4, 1, 1, "", "get_status"], [4, 1, 1, "", "get_version"], [4, 1, 1, "", "is_healthy"], [4, 1, 1, "", "list_jobs"]], "gen3.metadata": [[5, 0, 1, "", "Gen3Metadata"]], "gen3.metadata.Gen3Metadata": [[5, 1, 1, "", "async_create"], [5, 1, 1, "", "async_create_aliases"], [5, 1, 1, "", "async_delete_alias"], [5, 1, 1, "", "async_delete_aliases"], [5, 1, 1, "", "async_get"], [5, 1, 1, "", "async_get_aliases"], [5, 1, 1, "", "async_update"], [5, 1, 1, "", "async_update_aliases"], [5, 2, 1, "", "auth_provider"], [5, 1, 1, "", "batch_create"], [5, 1, 1, "", "create"], [5, 1, 1, "", "create_aliases"], [5, 1, 1, "", "create_index_key_path"], [5, 1, 1, "", "delete"], [5, 1, 1, "", "delete_alias"], [5, 1, 1, "", "delete_aliases"], [5, 1, 1, "", "delete_index_key_path"], [5, 2, 1, "", "endpoint"], [5, 1, 1, "", "get"], [5, 1, 1, "", "get_aliases"], [5, 1, 1, "", "get_index_key_paths"], [5, 1, 1, "", "get_version"], [5, 1, 1, "", "is_healthy"], [5, 1, 1, "", "query"], [5, 1, 1, "", "update"], [5, 1, 1, "", "update_aliases"]], "gen3.object": [[6, 0, 1, "", "Gen3Object"]], "gen3.object.Gen3Object": [[6, 1, 1, "", "delete_object"]], "gen3.query": [[7, 0, 1, "", "Gen3Query"]], "gen3.query.Gen3Query": [[7, 1, 1, "", "graphql_query"], [7, 1, 1, "", "query"], [7, 1, 1, "", "raw_data_download"]], "gen3.submission": [[8, 0, 1, "", "Gen3Submission"]], "gen3.submission.Gen3Submission": [[8, 1, 1, "", "create_program"], [8, 1, 1, "", "create_project"], [8, 1, 1, "", "delete_node"], [8, 1, 1, "", "delete_nodes"], [8, 1, 1, "", "delete_program"], [8, 1, 1, "", "delete_project"], [8, 1, 1, "", "delete_record"], [8, 1, 1, "", "delete_records"], [8, 1, 1, "", "export_node"], [8, 1, 1, "", "export_record"], [8, 1, 1, "", "get_dictionary_all"], [8, 1, 1, "", "get_dictionary_node"], [8, 1, 1, "", "get_graphql_schema"], [8, 1, 1, "", "get_programs"], [8, 1, 1, "", "get_project_dictionary"], [8, 1, 1, "", "get_project_manifest"], [8, 1, 1, "", "get_projects"], [8, 1, 1, "", "open_project"], [8, 1, 1, "", "query"], [8, 1, 1, "", "submit_file"], [8, 1, 1, "", "submit_record"]], "gen3.tools.download": [[10, 3, 0, "-", "drs_download"]], "gen3.tools.download.drs_download": [[10, 0, 1, "", "DownloadManager"], [10, 0, 1, "", "DownloadStatus"], [10, 0, 1, "", "Downloadable"], [10, 0, 1, "", "Manifest"], [10, 4, 1, "", "download_files_in_drs_manifest"], [10, 4, 1, "", "list_access_in_drs_manifest"], [10, 4, 1, "", "list_drs_object"], [10, 4, 1, "", "list_files_in_drs_manifest"]], "gen3.tools.download.drs_download.DownloadManager": [[10, 1, 1, "", "cache_hosts_wts_tokens"], [10, 1, 1, "", "download"], [10, 1, 1, "", "get_fresh_token"], [10, 1, 1, "", "resolve_objects"], [10, 1, 1, "", "user_access"]], "gen3.tools.download.drs_download.DownloadStatus": [[10, 2, 1, "", "end_time"], [10, 2, 1, "", "start_time"], [10, 2, 1, "", "status"]], "gen3.tools.download.drs_download.Downloadable": [[10, 2, 1, "", "_manager"], [10, 2, 1, "", "access_methods"], [10, 2, 1, "", "children"], [10, 2, 1, "", "created_time"], [10, 1, 1, "", "download"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 2, 1, "", "hostname"], [10, 2, 1, "", "object_id"], [10, 2, 1, "", "object_type"], [10, 1, 1, "", "pprint"], [10, 2, 1, "", "updated_time"]], "gen3.tools.download.drs_download.Manifest": [[10, 2, 1, "", "commons_url"], [10, 1, 1, "", "create_object_list"], [10, 2, 1, "", "file_name"], [10, 2, 1, "", "file_size"], [10, 1, 1, "", "load"], [10, 1, 1, "", "load_manifest"], [10, 2, 1, "", "md5sum"], [10, 2, 1, "", "object_id"]], "gen3.tools.indexing": [[11, 3, 0, "-", "download_manifest"], [11, 3, 0, "-", "index_manifest"], [11, 3, 0, "-", "verify_manifest"]], "gen3.tools.indexing.download_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "INDEXD_RECORD_PAGE_SIZE"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 2, 1, "", "TMP_FOLDER"], [11, 4, 1, "", "async_download_object_manifest"]], "gen3.tools.indexing.index_manifest": [[11, 2, 1, "", "ACLS"], [11, 2, 1, "", "AUTHZ"], [11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "GUID"], [11, 2, 1, "", "MD5"], [11, 2, 1, "", "PREV_GUID"], [11, 2, 1, "", "SIZE"], [11, 0, 1, "", "ThreadControl"], [11, 2, 1, "", "URLS"], [11, 4, 1, "", "delete_all_guids"], [11, 4, 1, "", "index_object_manifest"]], "gen3.tools.indexing.verify_manifest": [[11, 2, 1, "", "CURRENT_DIR"], [11, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [11, 4, 1, "", "async_verify_object_manifest"]], "gen3.tools.metadata": [[12, 3, 0, "-", "ingest_manifest"]], "gen3.tools.metadata.ingest_manifest": [[12, 2, 1, "", "COLUMN_TO_USE_AS_GUID"], [12, 2, 1, "", "GUID_TYPE_FOR_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT"], [12, 2, 1, "", "MAX_CONCURRENT_REQUESTS"], [12, 4, 1, "", "async_ingest_metadata_manifest"], [12, 4, 1, "", "async_query_urls_from_indexd"]], "gen3.wss": [[13, 0, 1, "", "Gen3WsStorage"]], "gen3.wss.Gen3WsStorage": [[13, 1, 1, "", "copy"], [13, 1, 1, "", "download"], [13, 1, 1, "", "download_url"], [13, 1, 1, "", "ls"], [13, 1, 1, "", "ls_path"], [13, 1, 1, "", "rm"], [13, 1, 1, "", "rm_path"], [13, 1, 1, "", "upload"], [13, 1, 1, "", "upload_url"]]}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "module", "Python module"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:attribute", "3": "py:module", "4": "py:function"}, "terms": {"": [1, 4, 8, 10, 11], "0": [5, 7, 8, 11], "0a80fada010c": 11, "0a80fada096c": 11, "0a80fada097c": 11, "0a80fada098c": 11, "0a80fada099c": 11, "1": [4, 5, 8, 10, 11], "10": [5, 7, 11], "100": [8, 11], "11e9": 11, "1718230126": [11, 12], "2": [5, 11], "24": [11, 12], "255e396f": 11, "3": [5, 11], "30": 8, "33": 5, "333": 5, "343434344": 11, "363455714": 11, "4": [5, 11], "4038992": 11, "450c": 11, "4714": 8, "473d83400bc1bc9dc635e334fadd433c": 11, "473d83400bc1bc9dc635e334faddd33c": 11, "473d83400bc1bc9dc635e334fadde33c": 11, "473d83400bc1bc9dc635e334faddf33c": 11, "5": [0, 5], "50": 7, "543434443": 11, "682094": 12, "6f90": 8, "7d3d8d2083b4": 11, "8420": 8, "93d9af72": 11, "9a07": 11, "A": [1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "AND": 5, "Be": 1, "But": 5, "By": 11, "For": [1, 5, 6, 7, 8, 9, 11], "IF": 11, "If": [0, 1, 7, 11, 12], "In": 10, "It": 10, "NOT": 12, "OR": 5, "One": 7, "Such": 9, "THE": 11, "That": 3, "The": [0, 1, 2, 3, 5, 8, 10, 11], "There": 11, "These": 9, "To": 11, "Will": [4, 7, 10], "_get_acl_from_row": 11, "_get_authz_from_row": 11, "_get_file_name_from_row": 11, "_get_file_size_from_row": 11, "_get_guid_for_row": 12, "_get_guid_from_row": 11, "_get_md5_from_row": 11, "_get_urls_from_row": 11, "_guid_typ": 12, "_manag": [2, 9, 10], "_query_for_associated_indexd_record_guid": 12, "_ssl": [3, 4, 5], "a5c6": 11, "ab167e49d25b488939b1ede42752458b": 3, "about": [2, 3], "abov": 11, "access": [0, 1, 3, 7, 10], "access_method": [2, 9, 10], "access_token": 0, "accesstoken": 0, "acl": [2, 3, 9, 11], "across": 11, "act": 0, "action": [9, 11], "actual": 11, "ad": 3, "add": [3, 5], "addit": [3, 5, 10, 11], "admin": [5, 11], "admin_endpoint_suffix": 5, "after": 10, "against": [3, 7, 8, 11, 12], "algorithm": 3, "alia": [3, 5], "alias": 5, "aliv": 7, "all": [1, 3, 4, 5, 6, 7, 8, 10, 11, 12], "allow": [0, 6, 8, 10, 11, 12], "allowed_data_upload_bucket": 1, "along": 2, "alreadi": 9, "also": 1, "altern": [5, 11], "alwai": 5, "ammount": 12, "amount": [1, 9], "an": [0, 3, 6, 8, 10, 11], "ani": [0, 5, 10, 11], "anoth": 5, "api": [0, 5, 8, 11], "api_kei": 11, "appli": 7, "appropri": 13, "ar": [5, 7, 8, 9, 10, 11], "arbitrari": 0, "argument": [0, 13], "arrai": 8, "asc": 7, "assign": 9, "assist": 10, "associ": [3, 5], "assum": 11, "async": [3, 4, 5, 9, 11, 12], "async_cr": [2, 5], "async_create_alias": [2, 5], "async_create_record": [2, 3], "async_delete_alia": [2, 5], "async_delete_alias": [2, 5], "async_download_object_manifest": [2, 9, 11], "async_get": [2, 5], "async_get_alias": [2, 5], "async_get_record": [2, 3], "async_get_records_from_checksum": [2, 3], "async_get_records_on_pag": [2, 3], "async_get_with_param": [2, 3], "async_ingest_metadata_manifest": [2, 9, 12], "async_query_url": [2, 3], "async_query_urls_from_indexd": [2, 9, 12], "async_run_job_and_wait": [2, 4], "async_upd": [2, 5], "async_update_alias": [2, 5], "async_update_record": [2, 3], "async_verify_object_manifest": [2, 9, 11], "asynchron": [3, 4, 5], "asyncio": [11, 12], "asyncron": 5, "attach": [3, 5], "attempt": 11, "attribut": [10, 11], "auth": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "auth_provid": [1, 2, 3, 4, 5, 6, 7, 8, 13], "authbas": 0, "authent": 0, "author": 1, "authz": [0, 1, 2, 3, 9, 10, 11], "auto": [0, 2], "automat": 0, "avail": [1, 2, 10, 11], "az": 1, "b": [5, 11], "b0f1": 11, "bar": 10, "base": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 13], "baseid": 3, "basic": [3, 11, 12], "batch_creat": [2, 5], "batch_siz": 8, "behalf": 0, "behavior": 11, "being": 3, "belong": 8, "below": 11, "blank": 3, "blob": [5, 7], "bodi": 3, "bool": [4, 5, 8, 10, 11, 12], "boolean": 3, "bownload": 10, "broad": 9, "broken": 9, "bucket": [1, 6], "bundl": 10, "byte": 10, "c": [5, 11], "cach": 10, "cache_hosts_wts_token": [2, 9, 10], "call": [10, 13], "can": [0, 3, 4, 8, 11, 12], "capabl": 9, "case": [0, 10], "categori": 9, "ccle": 8, "ccle_one_record": 8, "ccle_sample_nod": 8, "cdi": 7, "chang": [3, 11], "checksum": [3, 10], "checksum_typ": 3, "child": 10, "children": [2, 9, 10], "chunk_siz": 8, "class": [0, 2, 10, 11, 13], "cli": 10, "client": [0, 3], "client_credenti": 0, "client_id": 0, "client_scop": 0, "client_secret": 0, "code": [2, 8], "column": [11, 12], "column_to_use_as_guid": [2, 9, 12], "columna": 11, "columnb": 11, "columnc": 11, "com": 7, "comma": 11, "command": [10, 11], "common": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "commons_url": [2, 9, 10, 11, 12], "complet": [4, 11], "complex": 7, "concat": 11, "concurr": [11, 12], "configur": 1, "connect": 12, "consist": 3, "constructor": 0, "contain": [0, 2, 5, 8, 9, 10, 11, 12], "content": [3, 13], "content_created_d": 3, "content_updated_d": 3, "continu": 10, "control": 3, "conveni": 10, "copi": [2, 13], "coroutin": 11, "correspond": 3, "count": 3, "crdc": 0, "creat": [2, 3, 4, 5, 6, 8, 10, 11], "create_alias": [2, 5], "create_blank": [2, 3], "create_index_key_path": [2, 5], "create_job": [2, 4], "create_new_vers": [2, 3], "create_object_list": [2, 9, 10], "create_program": [2, 8], "create_project": [2, 8], "create_record": [2, 3], "created_tim": [2, 9, 10], "creation": [3, 11], "cred": 3, "credenti": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "csv": [8, 11, 12], "curl": [0, 2], "current": [6, 8, 10], "current_dir": [2, 9, 11], "custom": 11, "d": 5, "d70b41b9": 8, "data": [0, 1, 3, 5, 7, 8, 10, 11], "data_spreadsheet": 8, "data_typ": 7, "data_upload_bucket": 1, "dataa": 11, "datab": 11, "databas": 5, "datacommon": 0, "datafil": 10, "datamanag": 10, "date": 3, "datetim": [1, 3, 10], "dbgap": 12, "dcf": 8, "def": 11, "default": [0, 1, 3, 7, 8, 11, 12], "defin": [5, 8, 10], "delai": 4, "delet": [0, 1, 2, 3, 5, 6, 8, 10, 11], "delete_alia": [2, 5], "delete_alias": [2, 5], "delete_all_guid": [2, 9, 11], "delete_fil": [1, 2], "delete_file_loc": [1, 2, 6], "delete_index_key_path": [2, 5], "delete_nod": [2, 8], "delete_object": [2, 6], "delete_program": [2, 8], "delete_project": [2, 8], "delete_record": [2, 3, 8], "delete_unpacked_packag": 10, "delimet": [11, 12], "delimit": 11, "demograph": 8, "deprec": 1, "descript": [3, 5], "desir": 11, "dest_path": 13, "dest_urlstr": 13, "dest_w": 13, "dest_wskei": 13, "detail": [2, 7, 10], "determin": [10, 11, 12], "dev": 11, "dict": [3, 4, 5, 10, 11, 12], "dictionari": [3, 4, 5, 7, 8], "did": 3, "differ": 5, "direct": 0, "directori": [10, 11], "disabl": 10, "discoveri": 10, "disk": 13, "dispatch": 4, "dist_resolut": 3, "distribut": 3, "doc": [7, 10], "docstr": 2, "document": [1, 3], "doe": [0, 12], "domain": [11, 12], "done": 4, "download": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "download_files_in_drs_manifest": [2, 9, 10], "download_list": 10, "download_manifest": 11, "download_singl": [1, 2], "download_url": [2, 13], "downloadmanag": [2, 9, 10], "downloadstatu": [2, 9, 10], "dr": [2, 9], "drs_download": 10, "drs_hostnam": 10, "drsdownload": 10, "drsobjecttyp": 10, "e": [5, 10], "e043ab8b77b9": 8, "each": [3, 8, 10, 11], "effici": 9, "eg": 3, "either": 8, "elasticsearch": 7, "els": [0, 12], "elsewher": 12, "empti": [8, 11], "enabl": 11, "end": [5, 10], "end_tim": [2, 9, 10], "endpoint": [0, 1, 2, 3, 4, 5, 7, 8, 13], "entir": 8, "entri": [3, 11], "env": 0, "environ": 0, "equal": 7, "error": [10, 11, 12], "error_nam": 11, "etc": 8, "even": 11, "everi": [9, 11], "everyth": 11, "ex": [0, 11, 12], "exampl": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "exclud": 3, "execut": [7, 8, 11], "exist": [1, 3, 5, 6, 9, 12], "expect": [5, 9, 11], "experi": 8, "expir": [0, 1], "expires_in": 1, "export": [8, 10], "export_nod": [2, 8], "export_record": [2, 8], "f1f8": 11, "factori": 10, "fail": [8, 10], "fals": [3, 5, 6, 10, 11], "featur": [1, 6], "fenc": [0, 1], "fetch": 0, "field": [3, 5, 7, 11, 12], "fieldnam": 11, "file": [0, 2, 3, 4, 8, 9, 10, 11, 12, 13], "file_nam": [1, 2, 3, 9, 10, 11], "file_s": [2, 9, 10, 11], "file_st": 3, "fileformat": 8, "filenam": [0, 8, 10, 11, 12], "files": 10, "fill": 12, "filter": [5, 7], "filter_object": 7, "first": [7, 8], "flag": 11, "folder": 11, "follow": [0, 11], "forc": 11, "force_metadata_columns_even_if_empti": 11, "form": 13, "format": [3, 5, 8, 11], "from": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "func_to_parse_row": [11, 12], "function": [2, 3, 4, 5, 9, 10, 11, 12], "g": 10, "gen3": [10, 11, 12], "gen3_api_kei": 0, "gen3_oidc_client_creds_secret": 0, "gen3auth": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "gen3fil": [1, 2], "gen3index": [2, 3], "gen3job": [2, 4, 10], "gen3metadata": [2, 5], "gen3object": [2, 6], "gen3queri": [2, 7], "gen3submiss": [2, 8], "gen3wsstorag": [2, 13], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13], "get": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12, 13], "get_access_token": [0, 2], "get_access_token_from_wt": [0, 2], "get_alias": [2, 5], "get_all_record": [2, 3], "get_dictionary_al": [2, 8], "get_dictionary_nod": [2, 8], "get_fresh_token": [2, 9, 10], "get_graphql_schema": [2, 8], "get_guid_from_fil": 12, "get_guids_prefix": [2, 3], "get_index_key_path": [2, 5], "get_latest_vers": [2, 3], "get_output": [2, 4], "get_presigned_url": [1, 2], "get_program": [2, 8], "get_project": [2, 8], "get_project_dictionari": [2, 8], "get_project_manifest": [2, 8], "get_record": [2, 3], "get_record_doc": [2, 3], "get_records_on_pag": [2, 3], "get_stat": [2, 3], "get_statu": [2, 4], "get_url": [2, 3], "get_valid_guid": [2, 3], "get_vers": [2, 3, 4, 5], "get_with_param": [2, 3], "giangb": 11, "github": [2, 7], "give": 1, "given": [0, 3, 4, 5, 8, 10, 12, 13], "global": [4, 5], "good": 3, "grant": 0, "graph": 8, "graphql": [7, 8], "graphql_queri": [2, 7], "group": 3, "guid": [1, 2, 3, 5, 6, 9, 11, 12], "guid_exampl": 11, "guid_for_row": 12, "guid_from_fil": 12, "guid_type_for_indexed_file_object": [2, 9, 12], "guid_type_for_non_indexed_file_object": [2, 9, 12], "guppi": 7, "ha": [0, 11], "handl": [3, 10], "hardcod": 0, "has_vers": 3, "hash": [3, 11], "hash_typ": 3, "have": [5, 11], "header": 11, "healthi": [3, 4, 5], "help": 11, "helper": 2, "hit": 11, "host": 10, "hostnam": [2, 9, 10], "how": [8, 11], "howto": 10, "http": [0, 7, 11, 12], "i": [0, 1, 2, 3, 4, 5, 8, 10, 11, 12], "id": [0, 1, 3, 5, 10, 11], "idea": 3, "identifi": [3, 5, 9, 11], "idp": 0, "illustr": 11, "immut": 3, "implement": 0, "implic": 11, "import": 11, "includ": [0, 3], "indent": 10, "index": [0, 2, 5, 9], "index_manifest": 11, "index_object_manifest": [2, 9, 11], "indexd": [1, 3, 6, 10, 11, 12], "indexd_field": [11, 12], "indexd_record_page_s": [2, 9, 11], "indexed_file_object_guid": 12, "indic": [0, 11], "infil": 10, "info": [3, 11], "inform": [2, 3, 10], "ingest": [2, 9], "ingest_manifest": 12, "initi": [0, 10], "input": [4, 10, 11], "input_manifest": 11, "instal": [0, 2, 11], "instanc": [1, 3, 6, 7, 8, 9, 10], "instead": [1, 7, 11], "int": [1, 3, 5, 7, 8, 10, 11, 12], "integ": [1, 3, 8], "intend": 0, "interact": [1, 3, 4, 5, 6, 8, 13], "interest": 10, "interpret": 0, "introspect": 8, "involv": 9, "is_healthi": [2, 3, 4, 5], "is_indexed_file_object": 12, "isn": 1, "issu": 0, "its": [1, 3], "job": 2, "job_id": 4, "job_input": 4, "job_nam": 4, "json": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 13], "just": [5, 11, 12], "jwt": 0, "kei": [0, 3, 5, 13], "know": 11, "known": 10, "kwarg": [3, 4, 5], "l": [2, 13], "larg": 9, "last": 10, "latest": 3, "least": 3, "level": 6, "librari": 11, "like": [3, 5, 9, 11, 12], "limit": [1, 3, 5, 12], "linear": 4, "linux": 10, "list": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13], "list_access_in_drs_manifest": [2, 9, 10], "list_drs_object": [2, 9, 10], "list_files_in_drs_manifest": [2, 9, 10], "list_job": [2, 4], "live": [11, 12], "load": [2, 9, 10], "load_manifest": [2, 9, 10], "local": [0, 13], "locat": [1, 6], "lock": 12, "log": [8, 10, 11, 12], "logic": [5, 12], "loop": 11, "ls_path": [2, 13], "maco": 11, "made": 3, "mai": [0, 9, 11], "main": 10, "make": [9, 11], "manag": [1, 5, 10], "mani": [8, 11], "manifest": [2, 8, 9, 10, 11, 12], "manifest_1": 10, "manifest_fil": [11, 12], "manifest_file_delimit": [11, 12], "manifest_row_pars": [11, 12], "map": [0, 11], "mark": 8, "master": 7, "match": [3, 5, 12], "max": 5, "max_concurrent_request": [2, 9, 11, 12], "max_presigned_url_ttl": 1, "max_tri": 8, "maximum": [11, 12], "md": [5, 7, 10, 12], "md5": [2, 3, 9, 11], "md5_hash": 11, "md5sum": [2, 9, 10], "mean": 8, "mechan": 3, "merg": 5, "metadata": [2, 3, 6, 9, 11], "metadata_list": 5, "metadata_sourc": 12, "metadata_typ": 12, "metdata": 12, "method": [1, 7, 10], "minimum": 10, "minut": 0, "mode": 7, "modul": [2, 10, 11], "more": [2, 5, 7, 9, 10], "most": 9, "mostli": 2, "multipl": [8, 11], "must": [1, 5], "my_common": 10, "my_credenti": 10, "my_field": 7, "my_index": 7, "my_program": 7, "my_project": 7, "name": [3, 4, 8, 10, 11, 12, 13], "namespac": [0, 12], "necessari": [3, 5], "need": [3, 7, 10, 11], "nest": 5, "net": 11, "never": 0, "new": [0, 3], "node": 8, "node_nam": 8, "node_typ": 8, "none": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "note": [0, 3, 11, 12], "noth": [3, 6], "now": [1, 8], "num": 5, "num_process": 11, "num_total_fil": 11, "number": [3, 7, 8, 11, 12], "o": 0, "object": [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 13], "object_id": [1, 2, 9, 10], "object_list": 10, "object_typ": [2, 9, 10], "objectid": 10, "obtain": [0, 10], "occur": 10, "off": 5, "offset": [5, 7], "oidc": 0, "old": 3, "one": [3, 5, 10, 11], "onli": [3, 5, 7, 8, 10, 11], "open": [8, 10, 11], "open_project": [2, 8], "openid": 0, "opt": 0, "option": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "order": [0, 8], "ordered_node_list": 8, "org": 10, "otherwis": 10, "output": [4, 5, 11, 12], "output_dir": 10, "output_filenam": [11, 12], "overrid": [0, 11, 12], "overwrit": 5, "own": 0, "packag": 10, "page": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13], "pagin": 3, "parallel": 11, "param": [3, 5, 8, 10], "paramet": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "pars": [10, 11, 12, 13], "parser": [11, 12], "particular": 0, "pass": [0, 7, 8, 10], "password": [11, 12], "path": [0, 1, 5, 10, 11, 13], "path_to_manifest": 11, "pattern": [3, 12], "pdcdatastor": 11, "pend": 10, "per": [11, 12], "peregrin": 8, "permiss": 10, "persist": 9, "phs0001": 11, "phs0002": 11, "pick": 1, "pla": 11, "place": 11, "planx": 11, "point": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "popul": [10, 12], "posit": [1, 7], "possibl": 10, "post": [0, 11], "pprint": [2, 9, 10], "prefix": 3, "presign": 1, "pretti": 10, "prev_guid": [2, 9, 11], "previou": [3, 11], "previous": 4, "print": [8, 10], "process": 11, "processed_fil": 11, "profil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "program": [8, 11], "progress": [8, 10], "project": [8, 11], "project_id": [7, 8], "protocol": 1, "provid": [0, 1, 3, 5, 7, 8, 12], "public": [3, 5], "put": 0, "py": 11, "python": [2, 9, 11], "python3": 11, "python_subprocess_command": 11, "queri": [1, 2, 3, 5, 8, 11, 12], "query_str": 7, "query_txt": [7, 8], "query_url": [2, 3], "quickstart": 2, "rather": 0, "raw": [7, 11], "raw_data_download": [2, 7], "rbac": 3, "read": [3, 5, 11], "readm": 2, "reason": 10, "record": [1, 3, 5, 7, 8, 11, 12], "refresh": [0, 10], "refresh_access_token": [0, 2], "refresh_fil": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "refresh_token": 0, "regist": 8, "regular": 7, "relat": 9, "remov": [1, 6, 11, 13], "replac": 11, "replace_url": 11, "repo": 2, "repres": [3, 5, 10], "represent": [1, 3], "request": [0, 1, 3, 5, 8, 11, 12], "requir": 10, "resolv": 10, "resolve_object": [2, 9, 10], "respect": 7, "respons": [0, 1, 3, 4, 5], "result": [1, 8, 10, 11], "retri": 8, "retriev": [1, 8, 10, 12], "return": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11], "return_full_metadata": 5, "rev": 3, "revers": 8, "revis": 3, "right": 1, "rm": [2, 13], "rm_path": [2, 13], "root": [11, 12], "row": [7, 8, 11, 12], "row_offset": 8, "rtype": 3, "run": [8, 11], "s3": [1, 10, 11], "safe": 11, "same": [5, 11, 13], "sampl": [8, 10], "sandbox": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "save": 10, "save_directori": 10, "schema": 8, "scope": [0, 1], "screen": 8, "script": 2, "search": [0, 2, 3], "second": [1, 4], "secret": 0, "see": [7, 10, 11], "self": 10, "semaphon": 12, "semaphor": 12, "separ": [0, 11], "server": 10, "servic": [1, 3, 4, 5, 6, 8, 11, 12, 13], "service_loc": [3, 4, 5], "session": 11, "set": [0, 1, 5, 10], "setup": 2, "sheepdog": 8, "should": [0, 8, 11], "show": 10, "show_progress": 10, "shown": 11, "sign": 1, "signpost": 3, "similar": 10, "simpl": 3, "simpli": 11, "sinc": 3, "singl": [1, 5, 8], "size": [2, 3, 9, 10, 11], "skip": 8, "sleep": 4, "so": 11, "some": [0, 2], "someth": 11, "sort": 7, "sort_field": 7, "sort_object": 7, "sourc": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "space": [0, 11], "specif": [5, 8, 11, 12], "specifi": [0, 1, 3, 11, 13], "spreadsheet": 8, "src_path": 13, "src_urlstr": 13, "src_w": 13, "src_wskei": 13, "ssl": [3, 4, 5], "start": [4, 7, 8, 10], "start_tim": [2, 9, 10], "static": 10, "statu": [2, 4, 9, 10], "storag": [1, 2, 6], "store": [1, 3, 10], "str": [0, 1, 3, 4, 5, 7, 8, 10, 11, 12], "string": [0, 3, 5, 11, 13], "strip": 11, "sub": 8, "subject": [7, 8], "submiss": 2, "submit": [8, 11], "submit_additional_metadata_column": 11, "submit_fil": [2, 8], "submit_record": [2, 8], "submitter_id": 7, "success": 10, "successfulli": 10, "suffici": 3, "suppli": 3, "support": [0, 1, 5, 8, 11], "sure": 1, "synchron": 11, "syntax": 7, "system": [6, 7, 8, 9], "t": [1, 5, 11], "tab": 11, "task": 9, "temporari": 11, "test": 11, "test1": 11, "test2": 11, "test3": 11, "test4": 11, "test5": 11, "text": [1, 7, 8], "than": [0, 5], "thei": [0, 10], "them": [10, 11], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "those": 11, "thread": 11, "thread_num": 11, "threadcontrol": [2, 9, 11], "through": [8, 11], "tier": 7, "time": [1, 3, 8, 10, 11], "timestamp": 10, "tmp_folder": [2, 9, 11], "token": [0, 10], "tool": 2, "total": 11, "treat": [1, 5], "tree": 10, "true": [3, 4, 5, 6, 7, 8, 10, 11, 12], "try": 0, "tsv": [8, 11, 12], "tupl": [0, 3, 11, 12], "type": [1, 3, 4, 5, 7, 8, 10, 11, 12], "typic": 10, "uc": 7, "unaccess": 7, "under": [0, 8, 13], "uniqu": [1, 5], "unknown": 10, "unpack": 10, "unpack_packag": 10, "until": [4, 10], "up": [5, 9], "updat": [2, 3, 5, 10, 11], "update_alias": [2, 5], "update_blank": [2, 3], "update_record": [2, 3], "updated_tim": [2, 9, 10], "upload": [1, 2, 3, 8, 13], "upload_fil": [1, 2], "upload_file_to_guid": [1, 2], "upload_url": [2, 13], "url": [1, 2, 3, 9, 10, 11, 12, 13], "urls_metadata": 3, "us": [0, 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "usag": 11, "use_agg_md": 5, "user": [0, 10, 12], "user_access": [2, 9, 10], "usual": 12, "utcnow": 1, "util": 9, "uuid": [1, 3, 8], "uuid1": 8, "uuid2": 8, "valid": [3, 7], "valu": [0, 1, 3, 5, 7, 10, 11], "value_from_indexd": 11, "value_from_manifest": 11, "variabl": [0, 7, 8], "variou": 2, "verbos": [7, 8], "verif": 11, "verifi": [2, 9], "verify_manifest": 11, "verify_object_manifest": 11, "version": [3, 4, 5], "vital_statu": 7, "w": 13, "wa": 0, "wai": 10, "wait": 4, "want": [0, 3, 8], "warn": 11, "we": [3, 11], "web": 0, "what": 5, "when": [0, 3, 7, 10, 12], "where": [0, 3, 5, 11, 12], "whether": [3, 4, 5, 8, 11, 12], "which": [8, 10], "while": [0, 1, 3, 4, 5, 6, 7, 8, 10, 13], "whose": 5, "within": [0, 2, 9], "without": [3, 5], "won": 5, "work": [0, 10], "workaround": 11, "worksheet": 8, "workspac": [0, 2], "wrapper": 10, "write": 11, "ws_urlstr": 13, "wskei": 13, "wss": 13, "wt": [0, 10], "x": 11, "xlsx": 8, "you": [0, 3, 8, 11], "your": 0}, "titles": ["Gen3 Auth Helper", "Gen3 File Class", "Welcome to Gen3 SDK\u2019s documentation!", "Gen3 Index Class", "Gen3 Jobs Class", "Gen3 Metadata Class", "Gen3 Object Class", "Gen3 Query Class", "Gen3 Submission Class", "Gen3 Tools", "DRS Download Tools", "Indexing Tools", "Metadata Tools", "Gen3 Workspace Storage"], "titleterms": {"": 2, "auth": 0, "class": [1, 3, 4, 5, 6, 7, 8], "document": 2, "download": [10, 11], "dr": 10, "file": 1, "gen3": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13], "helper": 0, "index": [3, 11], "indic": 2, "ingest": 12, "job": 4, "metadata": [5, 12], "object": 6, "queri": 7, "sdk": 2, "storag": 13, "submiss": 8, "tabl": 2, "tool": [9, 10, 11, 12], "verifi": 11, "welcom": 2, "workspac": 13}}) \ No newline at end of file diff --git a/docs/_build/html/submission.html b/docs/_build/html/submission.html new file mode 100644 index 000000000..69a9f5e5d --- /dev/null +++ b/docs/_build/html/submission.html @@ -0,0 +1,555 @@ + + + + + + + + Gen3 Submission Class — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Submission Class

+
+
+class gen3.submission.Gen3Submission(endpoint=None, auth_provider=None)[source]
+

Bases: object

+

Submit/Export/Query data from a Gen3 Submission system.

+

A class for interacting with the Gen3 submission services. +Supports submitting and exporting from Sheepdog. +Supports GraphQL queries through Peregrine.

+
+
Parameters:
+

auth_provider (Gen3Auth) – A Gen3Auth class instance.

+
+
+

Examples

+

This generates the Gen3Submission class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> auth = Gen3Auth(refresh_file="credentials.json")
+... sub = Gen3Submission(auth)
+
+
+
+
+create_program(json)[source]
+

Create a program. +:param json: The json of the program to create +:type json: object

+

Examples

+

This creates a program in the sandbox commons.

+
>>> Gen3Submission.create_program(json)
+
+
+
+ +
+
+create_project(program, json)[source]
+

Create a project. +:param program: The program to create a project on +:type program: str +:param json: The json of the project to create +:type json: object

+

Examples

+

This creates a project on the DCF program in the sandbox commons.

+
>>> Gen3Submission.create_project("DCF", json)
+
+
+
+ +
+
+delete_node(program, project, node_name, batch_size=100, verbose=True)[source]
+

Delete all records for a node from a project.

+
+
Parameters:
+
    +
  • program (str) – The program to delete from.

  • +
  • project (str) – The project to delete from.

  • +
  • node_name (str) – Name of the node to delete

  • +
  • (int (batch_size) – 100): how many records to query and delete at a time

  • +
  • optional – 100): how many records to query and delete at a time

  • +
  • default – 100): how many records to query and delete at a time

  • +
  • (bool (verbose) – True): whether to print progress logs

  • +
  • optional – True): whether to print progress logs

  • +
  • default – True): whether to print progress logs

  • +
+
+
+

Examples

+

This deletes a node from the CCLE project in the sandbox commons.

+
>>> Gen3Submission.delete_node("DCF", "CCLE", "demographic")
+
+
+
+ +
+
+delete_nodes(program, project, ordered_node_list, batch_size=100, verbose=True)[source]
+

Delete all records for a list of nodes from a project.

+
+
Parameters:
+
    +
  • program (str) – The program to delete from.

  • +
  • project (str) – The project to delete from.

  • +
  • ordered_node_list (list) – The list of nodes to delete, in reverse graph submission order

  • +
  • (int (batch_size) – 100): how many records to query and delete at a time

  • +
  • optional – 100): how many records to query and delete at a time

  • +
  • default – 100): how many records to query and delete at a time

  • +
  • (bool (verbose) – True): whether to print progress logs

  • +
  • optional – True): whether to print progress logs

  • +
  • default – True): whether to print progress logs

  • +
+
+
+

Examples

+

This deletes a list of nodes from the CCLE project in the sandbox commons.

+
>>> Gen3Submission.delete_nodes("DCF", "CCLE", ["demographic", "subject", "experiment"])
+
+
+
+ +
+
+delete_program(program)[source]
+

Delete a program.

+

This deletes an empty program from the commons.

+
+
Parameters:
+

program (str) – The program to delete.

+
+
+

Examples

+

This deletes the “DCF” program.

+
>>> Gen3Submission.delete_program("DCF")
+
+
+
+ +
+
+delete_project(program, project)[source]
+

Delete a project.

+

This deletes an empty project from the commons.

+
+
Parameters:
+
    +
  • program (str) – The program containing the project to delete.

  • +
  • project (str) – The project to delete.

  • +
+
+
+

Examples

+

This deletes the “CCLE” project from the “DCF” program.

+
>>> Gen3Submission.delete_project("DCF", "CCLE")
+
+
+
+ +
+
+delete_record(program, project, uuid)[source]
+

Delete a record from a project.

+
+
Parameters:
+
    +
  • program (str) – The program to delete from.

  • +
  • project (str) – The project to delete from.

  • +
  • uuid (str) – The uuid of the record to delete

  • +
+
+
+

Examples

+

This deletes a record from the CCLE project in the sandbox commons.

+
>>> Gen3Submission.delete_record("DCF", "CCLE", uuid)
+
+
+
+ +
+
+delete_records(program, project, uuids, batch_size=100)[source]
+

Delete a list of records from a project.

+
+
Parameters:
+
    +
  • program (str) – The program to delete from.

  • +
  • project (str) – The project to delete from.

  • +
  • uuids (list) – The list of uuids of the records to delete

  • +
  • (int (batch_size) – 100): how many records to delete at a time

  • +
  • optional – 100): how many records to delete at a time

  • +
  • default – 100): how many records to delete at a time

  • +
+
+
+

Examples

+

This deletes a list of records from the CCLE project in the sandbox commons.

+
>>> Gen3Submission.delete_records("DCF", "CCLE", ["uuid1", "uuid2"])
+
+
+
+ +
+
+export_node(program, project, node_type, fileformat, filename=None)[source]
+

Export all records in a single node type of a project.

+
+
Parameters:
+
    +
  • program (str) – The program to which records belong.

  • +
  • project (str) – The project to which records belong.

  • +
  • node_type (str) – The name of the node to export.

  • +
  • fileformat (str) – Export data as either ‘json’ or ‘tsv’

  • +
  • filename (str) – Name of the file to export to; if no filename is provided, prints data to screen

  • +
+
+
+

Examples

+

This exports all records in the “sample” node from the CCLE project in the sandbox commons.

+
>>> Gen3Submission.export_node("DCF", "CCLE", "sample", "tsv", filename="DCF-CCLE_sample_node.tsv")
+
+
+
+ +
+
+export_record(program, project, uuid, fileformat, filename=None)[source]
+

Export a single record into json.

+
+
Parameters:
+
    +
  • program (str) – The program the record is under.

  • +
  • project (str) – The project the record is under.

  • +
  • uuid (str) – The UUID of the record to export.

  • +
  • fileformat (str) – Export data as either ‘json’ or ‘tsv’

  • +
  • filename (str) – Name of the file to export to; if no filename is provided, prints data to screen

  • +
+
+
+

Examples

+

This exports a single record from the sandbox commons.

+
>>> Gen3Submission.export_record("DCF", "CCLE", "d70b41b9-6f90-4714-8420-e043ab8b77b9", "json", filename="DCF-CCLE_one_record.json")
+
+
+
+ +
+
+get_dictionary_all()[source]
+

Returns the entire dictionary object for a commons.

+

This gets a json of the current dictionary schema for a commons.

+

Examples

+

This returns the dictionary schema for a commons.

+
>>> Gen3Submission.get_dictionary_all()
+
+
+
+ +
+
+get_dictionary_node(node_type)[source]
+

Returns the dictionary schema for a specific node.

+

This gets the current json dictionary schema for a specific node type in a commons.

+
+
Parameters:
+

node_type (str) – The node_type (or name of the node) to retrieve.

+
+
+

Examples

+

This returns the dictionary schema the “subject” node.

+
>>> Gen3Submission.get_dictionary_node("subject")
+
+
+
+ +
+
+get_graphql_schema()[source]
+

Returns the GraphQL schema for a commons.

+

This runs the GraphQL introspection query against a commons and returns the results.

+

Examples

+

This returns the GraphQL schema.

+
>>> Gen3Submission.get_graphql_schema()
+
+
+
+ +
+
+get_programs()[source]
+

List registered programs

+
+ +
+
+get_project_dictionary(program, project)[source]
+

Get dictionary schema for a given project

+
+
Parameters:
+
    +
  • program – the name of the program the project is from

  • +
  • project – the name of the project you want the dictionary schema from

  • +
+
+
+

Example

+
>>> Gen3Submission.get_project_dictionary("DCF", "CCLE")
+
+
+
+ +
+
+get_project_manifest(program, project)[source]
+

Get a projects file manifest

+
+
Parameters:
+
    +
  • program – the name of the program the project is from

  • +
  • project – the name of the project you want the manifest from

  • +
+
+
+

Example

+
>>> Gen3Submission.get_project_manifest("DCF", "CCLE")
+
+
+
+ +
+
+get_projects(program)[source]
+

List registered projects for a given program

+
+
Parameters:
+

program – the name of the program you want the projects from

+
+
+

Example

+

This lists all the projects under the DCF program

+
>>> Gen3Submission.get_projects("DCF")
+
+
+
+ +
+
+open_project(program, project)[source]
+

Mark a project open. Opening a project means uploads, deletions, etc. are allowed.

+
+
Parameters:
+
    +
  • program – the name of the program the project is from

  • +
  • project – the name of the project you want to ‘open’

  • +
+
+
+

Example

+
>>> Gen3Submission.get_project_manifest("DCF", "CCLE")
+
+
+
+ +
+
+query(query_txt, variables=None, max_tries=1)[source]
+

Execute a GraphQL query against a Data Commons.

+
+
Parameters:
+
    +
  • query_txt (str) – Query text.

  • +
  • variables (object, optional) – Dictionary of variables to pass with the query.

  • +
  • max_tries (int, optional) – Number of times to retry if the request fails.

  • +
+
+
+

Examples

+

This executes a query to get the list of all the project codes for all the projects +in the Data Commons.

+
>>> query = "{ project(first:0) { code } }"
+... Gen3Submission.query(query)
+
+
+
+ +
+
+submit_file(project_id, filename, chunk_size=30, row_offset=0)[source]
+

Submit data in a spreadsheet file containing multiple records in rows to a Gen3 Data Commons.

+
+
Parameters:
+
    +
  • project_id (str) – The project_id to submit to.

  • +
  • filename (str) – The file containing data to submit. The format can be TSV, CSV or XLSX (first worksheet only for now).

  • +
  • chunk_size (integer) – The number of rows of data to submit for each request to the API.

  • +
  • row_offset (integer) – The number of rows of data to skip; ‘0’ starts submission from the first row and submits all data.

  • +
+
+
+

Examples

+

This submits a spreadsheet file containing multiple records in rows to the CCLE project in the sandbox commons.

+
>>> Gen3Submission.submit_file("DCF-CCLE","data_spreadsheet.tsv")
+
+
+
+ +
+
+submit_record(program, project, json)[source]
+

Submit record(s) to a project as json.

+
+
Parameters:
+
    +
  • program (str) – The program to submit to.

  • +
  • project (str) – The project to submit to.

  • +
  • json (object) – The json defining the record(s) to submit. For multiple records, the json should be an array of records.

  • +
+
+
+

Examples

+

This submits records to the CCLE project in the sandbox commons.

+
>>> Gen3Submission.submit_record("DCF", "CCLE", json)
+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/tools.html b/docs/_build/html/tools.html new file mode 100644 index 000000000..0dddee8a4 --- /dev/null +++ b/docs/_build/html/tools.html @@ -0,0 +1,226 @@ + + + + + + + + Gen3 Tools — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Tools

+

Tools and functions for common actions in Gen3. These tools are broken up into broad categories like indexing (for tasks related to the file object persistent identifiers within the system) and metadata (for tasks relating to file object metadata within the system).

+

Such common indexing tasks may involve indexing file object URLs into Gen3 to assign persistent identifiers, downloading a manifest of every file object that already exists, and verifying that a Gen3 instance contains the expected indexed file objects based on a file.

+

For metadata, the task may be ingesting a large amount of metadata from a file into the system.

+

Most of these tools utilize async capabilities of Python to make common tasks more efficient.

+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/tools/drs_pull.html b/docs/_build/html/tools/drs_pull.html new file mode 100644 index 000000000..8148d1361 --- /dev/null +++ b/docs/_build/html/tools/drs_pull.html @@ -0,0 +1,614 @@ + + + + + + + + DRS Download Tools — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

DRS Download Tools

+

Module for downloading and listing JSON DRS manifest and DRS objects. The main classes in +this module for downloading DRS objects are DownloadManager and Manifest.

+
+
+
Examples:

This generates the Gen3Jobs class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> datafiles = Manifest.load('sample/manifest_1.json')
+    downloadManager = DownloadManager("source.my_commons.org",
+                      Gen3Auth(refresh_file="~.gen3/my_credentials.json"), datafiles)
+    for i in datafiles:
+        print(i)
+    downloadManager.download(datafiles, ".")
+
+
+

See docs/howto/drsDownloading.md for more details

+
+
+
+
+
+class gen3.tools.download.drs_download.DownloadManager(hostname: str, auth: Gen3Auth, download_list: List[Downloadable], show_progress: bool = False)[source]
+

Class to assist in downloading a list of Downloadable object which at a minimum is a json manifest +of DRS object ids. The methods of interest are download and user_access.

+
+
+cache_hosts_wts_tokens(object_list)[source]
+

Using the list of DRS host obtain a WTS token for all DRS hosts in the list. It’s is possible

+
+ +
+
+download(object_list: List[Downloadable], save_directory: str = '.', show_progress: bool = False, unpack_packages: bool = True, delete_unpacked_packages: bool = False) Dict[str, Any][source]
+

Downloads objects to the directory or current working directory. +The input is an list of Downloadable object created by loading a manifest +using the Manifest class or a call to Manifest.load(…

+

The download manager will download each file in the manifest, in the +case of errors they are logged and it continues.

+

The return value is a list of DownloadStatus object, detailing the results +of the download.

+
+
Parameters:
+
    +
  • object_list (List[Downloadable])

  • +
  • save_directory (str) – directory to save to (will be created)

  • +
  • show_progress (bool) – show a download progress bar

  • +
  • unpack_packages (bool) – set to False to disable the unpacking of downloaded packages

  • +
  • delete_unpacked_packages (bool) – set to True to delete package files after unpacking them

  • +
+
+
Returns:
+

List of DownloadStatus objects for each object id in object_list

+
+
+
+ +
+
+get_fresh_token(drs_hostname: str) str | None[source]
+

Will return and/or refresh and return a WTS token if hostname is known otherwise returns None. +:param drs_hostname: hostname to get token for +:type drs_hostname: str

+
+
Returns:
+

access token if successful otherwise None

+
+
+
+ +
+
+resolve_objects(object_list: List[Downloadable], show_progress: bool)[source]
+

Given an Downloadable object list, resolve the DRS hostnames and update each Downloadable

+
+
Parameters:
+

object_list (List[Downloadable]) – list of Downloadable objects to resolve

+
+
+
+ +
+
+user_access()[source]
+

List the user’s access permissions on each host needed to download +DRS objects in the manifest. A useful way to determine if access permissions +are one reason a download failed.

+
+
Returns:
+

list of authz for each DRS host

+
+
+
+ +
+ +
+
+class gen3.tools.download.drs_download.DownloadStatus(filename: str, status: str = 'pending', start_time: datetime | None = None, end_time: datetime | None = None)[source]
+

Stores the download status of objectIDs.

+

The DataManager will return a list of DownloadStatus as a result of calling the download method

+

Status is “pending” until it is downloaded or an error occurs. +.. attribute:: filename

+
+

the name of the file to download

+
+
type:
+

str

+
+
+
+
+
+status
+

status of file download initially “pending”

+
+
Type:
+

str

+
+
+
+ +
+
+start_time
+

start time of download as datetime initially None

+
+
Type:
+

Optional[datetime]

+
+
+
+ +
+
+end_time
+

end time of download as datetime initially None

+
+
Type:
+

Optional[datetime]

+
+
+
+ +
+ +
+
+class gen3.tools.download.drs_download.Downloadable(object_id: str, object_type: ~gen3.tools.download.drs_download.DRSObjectType | None = DRSObjectType.unknown, hostname: str | None = None, file_size: int | None = -1, file_name: str | None = None, updated_time: ~datetime.datetime | None = None, created_time: ~datetime.datetime | None = None, access_methods: ~typing.List[~typing.Dict[str, ~typing.Any]] = <factory>, children: ~typing.List[~gen3.tools.download.drs_download.Downloadable] = <factory>)[source]
+

Class handling the information for a DRS object. The information is populated from the manifest or +by retrieving the information from a DRS server.

+
+
+object_id
+

DRS object id (REQUIRED)

+
+
Type:
+

str

+
+
+
+ +
+
+object_type
+

type of DRS object

+
+
Type:
+

DRSObjectType

+
+
+
+ +
+
+hostname
+

hostname of DRS object

+
+
Type:
+

str

+
+
+
+ +
+
+file_size
+

size in bytes

+
+
Type:
+

int

+
+
+
+ +
+
+file_name
+

name of file

+
+
Type:
+

str

+
+
+
+ +
+
+updated_time
+

timestamp of last update to file

+
+
Type:
+

datetime

+
+
+
+ +
+
+created_time
+

timestamp when file is created

+
+
Type:
+

datetime

+
+
+
+ +
+
+access_methods
+

list of access methods (e.g. s3) for DRS object

+
+
Type:
+

List[Dict[str, Any]]

+
+
+
+ +
+
+children
+

list of child objects (in the case of DRS bundles)

+
+
Type:
+

List[Downloadable]

+
+
+
+ +
+
+_manager
+

manager for this Downloadable

+
+
Type:
+

DownloadManager

+
+
+
+ +
+
+download()[source]
+

calls the manager to download this object. Allows Downloadables to be self downloading

+
+ +
+
+pprint(indent: str = '')[source]
+

Pretty prints the object information. This is used for listing an object. +In the case of a DRS bundle the child objects are listed similar to the linux tree command

+
+ +
+ +
+
+class gen3.tools.download.drs_download.Manifest(object_id: str, file_size: int | None = -1, file_name: str | None = None, md5sum: str | None = None, commons_url: str | None = None)[source]
+

Data class representing a Gen3 JSON manifest typically exported from a Gen3 discovery page.

+

The class is passed to the DownloadManager to download or list all of the files in the manifest. +The Download manager will cache additional information (if available)

+
+
+object_id
+

the DRS object id. This is the only attribute that needs to be defined

+
+
Type:
+

str

+
+
+
+ +
+
+file_size
+

the filesize of the object, if contained in the manifest

+
+
Type:
+

Optional[int]

+
+
+
+ +
+
+file_name
+

the name of the file pointed to by the DRS object id

+
+
Type:
+

Optional[str]

+
+
+
+ +
+
+md5sum
+

the checksum of the object

+
+
Type:
+

Optional[str]

+
+
+
+ +
+
+commons_url
+

url of the indexd server to retrieve file/bundle from

+
+
Type:
+

Optional[str]

+
+
+
+ +
+
+static create_object_list(manifest) List[Downloadable][source]
+

Create a list of Downloadable instances from the manifest

+
+
Parameters:
+

manifest (list) – list of manifest objects

+
+
Returns:
+

List of Downloadable instances

+
+
+
+ +
+
+static load(filename: Path) List[Downloadable] | None[source]
+

Method to load a json manifest and return a list of Bownloadable object. +This list is passed to the DownloadManager methods of download, and list

+
+
Parameters:
+

filename (Path) – path to manifest file

+
+
Returns:
+

list of Downloadable objects if successfully opened/parsed None otherwise

+
+
+
+ +
+
+static load_manifest(path: Path)[source]
+

Loads a json manifest

+
+ +
+ +
+
+gen3.tools.download.drs_download.download_files_in_drs_manifest(hostname, auth, infile, output_dir, show_progress=True, unpack_packages=True, delete_unpacked_packages=False) None[source]
+

A convenience function used to download a json manifest. +:param hostname: hostname of Gen3 commons to use for access and WTS +:type hostname: str +:param auth: Gen3 Auth instance +:type auth: str +:param infile: manifest file +:type infile: str +:param output_dir: directory to save downloaded files to +:param unpack_packages: set to False to disable the unpacking of downloaded packages +:type unpack_packages: bool +:param delete_unpacked_packages: set to True to delete package files after unpacking them +:type delete_unpacked_packages: bool

+

Returns:

+
+ +
+
+gen3.tools.download.drs_download.list_access_in_drs_manifest(hostname, auth, infile) bool[source]
+

A convenience function to list a users access for all DRS hostname in a manifest. +:param hostname: hostname of Gen3 commons to use for access and WTS +:type hostname: str +:param auth: Gen3 Auth instance +:param infile: manifest file +:type infile: str

+
+
Returns:
+

True if successfully listed

+
+
+
+ +
+
+gen3.tools.download.drs_download.list_drs_object(hostname, auth, object_id: str) bool[source]
+

A convenience function used to list a DRS object. +:param hostname: hostname of Gen3 commons to use for access and WTS +:type hostname: str +:param auth: Gen3 Auth instance +:param object_id: DRS object +:type object_id: str

+
+
Returns:
+

True if successfully listed

+
+
+
+ +
+
+gen3.tools.download.drs_download.list_files_in_drs_manifest(hostname, auth, infile: str) bool[source]
+

A wrapper function used by the cli to list files in a manifest. +:param hostname: hostname of Gen3 commons to use for access and WTS +:type hostname: str +:param auth: Gen3 Auth instance +:param infile: manifest file +:type infile: str

+
+
Returns:
+

True if successfully listed

+
+
+
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/tools/indexing.html b/docs/_build/html/tools/indexing.html new file mode 100644 index 000000000..001ac5730 --- /dev/null +++ b/docs/_build/html/tools/indexing.html @@ -0,0 +1,524 @@ + + + + + + + + Indexing Tools — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Indexing Tools

+
+

Download

+

Module for indexing actions for downloading a manifest of +indexed file objects (against indexd’s API). Supports +multiple processes and coroutines using Python’s asyncio library.

+

The default manifest format created is a Comma-Separated Value file (csv) +with rows for every record. A header row is created with field names: +guid,authz,acl,file_size,md5,urls,file_name

+

Fields that are lists (like acl, authz, and urls) separate the values with spaces.

+
+
+gen3.tools.indexing.download_manifest.CURRENT_DIR
+

directory this file is in

+
+
Type:
+

str

+
+
+
+ +
+
+gen3.tools.indexing.download_manifest.INDEXD_RECORD_PAGE_SIZE
+

number of records to request per page

+
+
Type:
+

int

+
+
+
+ +
+
+gen3.tools.indexing.download_manifest.MAX_CONCURRENT_REQUESTS
+

maximum number of desired concurrent requests across +processes/threads

+
+
Type:
+

int

+
+
+
+ +
+
+gen3.tools.indexing.download_manifest.TMP_FOLDER
+

Folder directory for placing temporary files +NOTE - We have to use a temporary folder b/c Python’s file writing is not

+
+

thread-safe so we can’t have all processes writing to the same file. +To workaround this, we have each process write to a file and concat +them all post-processing.

+
+
+
Type:
+

str

+
+
+
+ +
+
+async gen3.tools.indexing.download_manifest.async_download_object_manifest(commons_url, output_filename='object-manifest.csv', num_processes=4, max_concurrent_requests=24, input_manifest=None, python_subprocess_command='python')[source]
+

Download all file object records into a manifest csv

+
+
Parameters:
+
    +
  • commons_url (str) – root domain for commons where indexd lives

  • +
  • output_filename (str, optional) – filename for output

  • +
  • num_processes (int, optional) – number of parallel python processes to use for +hitting indexd api and processing

  • +
  • max_concurrent_requests (int) – the maximum number of concurrent requests allowed +NOTE: This is the TOTAL number, not just for this process. Used to help +determine how many requests a process should be making at one time

  • +
  • input_manifest (str) – Input file. Read available object data from objects in this +file instead of reading everything in indexd. This will attempt to query +indexd for only the records identified in this manifest.

  • +
  • python_subprocess_command (str, optional) – Command used to execute a +python process. By default you should not need to change this, but +if you are running something like MacOS and only installed Python 3.x +you may need to specify “python3”.

  • +
+
+
+
+ +
+
+

Index

+

Module for indexing object files in a manifest (against indexd’s API).

+

The default manifest format created is a Tab-Separated Value file (tsv) +with rows for every record.

+

Fields that are lists (like acl, authz, and urls) separate the values with commas or spaces +See the Attributes session for supported column names.

+

All supported formats of acl, authz and url fields are shown in the below example.

+

guid md5 size acl authz url +255e396f-f1f8-11e9-9a07-0a80fada099c 473d83400bc1bc9dc635e334faddf33c 363455714 [‘Open’] [s3://pdcdatastore/test1.raw] +255e396f-f1f8-11e9-9a07-0a80fada098c 473d83400bc1bc9dc635e334faddd33c 343434344 Open s3://pdcdatastore/test2.raw +255e396f-f1f8-11e9-9a07-0a80fada097c 473d83400bc1bc9dc635e334fadd433c 543434443 phs0001 phs0002 s3://pdcdatastore/test3.raw +255e396f-f1f8-11e9-9a07-0a80fada096c 473d83400bc1bc9dc635e334fadd433c 363455714 [‘phs0001’, ‘phs0002’] [‘s3://pdcdatastore/test4.raw’] +255e396f-f1f8-11e9-9a07-0a80fada010c 473d83400bc1bc9dc635e334fadde33c 363455714 [‘Open’] s3://pdcdatastore/test5.raw

+
+
+gen3.tools.indexing.index_manifest.CURRENT_DIR
+

directory this file is in

+
+
Type:
+

str

+
+
+
+ +
+
+gen3.tools.indexing.index_manifest.GUID
+

supported file id column names

+
+
Type:
+

list(string)

+
+
+
+ +
+
+gen3.tools.indexing.index_manifest.SIZE
+

supported file size column names

+
+
Type:
+

list(string)

+
+
+
+ +
+
+gen3.tools.indexing.index_manifest.MD5
+

supported md5 hash column names

+
+
Type:
+

list(string)

+
+
+
+ +
+
+gen3.tools.indexing.index_manifest.ACLS
+

supported acl column names

+
+
Type:
+

list(string)

+
+
+
+ +
+
+gen3.tools.indexing.index_manifest.URLS
+

supported url column names

+
+
Type:
+

list(string)

+
+
+
+ +
+
+gen3.tools.indexing.index_manifest.AUTHZ
+

supported authz column names

+
+
Type:
+

list(string)

+
+
+
+ +
+
+gen3.tools.indexing.index_manifest.PREV_GUID
+

supported previous guid column names

+
+
Type:
+

list(string)

+
+
+
+ +
+
Usages:

python index_manifest.py –commons_url https://giangb.planx-pla.net –manifest_file path_to_manifest –auth “admin,admin” –replace_urls False –thread_num 10 +python index_manifest.py –commons_url https://giangb.planx-pla.net –manifest_file path_to_manifest –api_key ./credentials.json –replace_urls False –thread_num 10

+
+
+
+
+class gen3.tools.indexing.index_manifest.ThreadControl(processed_files=0, num_total_files=0)[source]
+

Bases: object

+

Class for thread synchronization

+
+ +
+
+gen3.tools.indexing.index_manifest.delete_all_guids(auth, file)[source]
+

Delete all GUIDs specified in the object manifest.

+
+
WARNING: THIS COMPLETELY REMOVES INDEX RECORDS. USE THIS ONLY IF YOU KNOW

THE IMPLICATIONS.

+
+
+
+ +
+
+gen3.tools.indexing.index_manifest.index_object_manifest(commons_url, manifest_file, thread_num, auth=None, replace_urls=True, manifest_file_delimiter=None, output_filename='indexing-output-manifest.csv', submit_additional_metadata_columns=False, force_metadata_columns_even_if_empty=True)[source]
+

Loop through all the files in the manifest, update/create records in indexd +update indexd if the url is not in the record url list or acl has changed

+
+
Parameters:
+
    +
  • commons_url (str) – common url

  • +
  • manifest_file (str) – path to the manifest

  • +
  • thread_num (int) – number of threads for indexing

  • +
  • auth (Gen3Auth) – Gen3 auth or tuple with basic auth name and password

  • +
  • replace_urls (bool) – flag to indicate if replace urls or not

  • +
  • manifest_file_delimiter (str) – manifest’s delimiter

  • +
  • output_filename (str) – output file name for manifest

  • +
  • submit_additional_metadata_columns (bool) – whether to submit additional metadata to the metadata service

  • +
  • force_metadata_columns_even_if_empty (bool) –

    force the creation of a metadata column +entry for a GUID even if the value is empty. Enabling +this will force the creation of metadata entries for every column. +See below for an illustrative example

    +
    +
    Example manifest_file:
    +
    guid, …, columnA, columnB, ColumnC

    1, …, dataA, , +2, …, , dataB,

    +
    +
    +
    +
    Resulting metadata if force_metadata_columns_even_if_empty=True :
    +
    ”1”: {

    “columnA”: “dataA”, +“columnB”: “”, +“ColumnC”: “”,

    +
    +
    +

    }, +“2”: {

    +
    +

    ”columnA”: “”, +“columnB”: “dataB”, +“ColumnC”: “”,

    +
    +

    },

    +
    +
    Resulting metadata if force_metadata_columns_even_if_empty=False :
    +
    ”1”: {

    “columnA”: “dataA”,

    +
    +
    +

    }, +“2”: {

    +
    +

    ”columnB”: “dataB”,

    +
    +

    },

    +
    +
    +

  • +
+
+
Returns:
+

list of file info +[

+
+
+
{

“guid”: “guid_example”, +“filename”: “example”, +“size”: 100, +“acl”: “[‘open’]”, +“md5”: “md5_hash”,

+
+
+

},

+
+

] +headers(list(str)): list of fieldnames

+

+
+
Return type:
+

files(list(dict))

+
+
+
+ +
+
+

Verify

+

Module for indexing actions for verifying a manifest of +indexed file objects (against indexd’s API). Supports +multiple processes and coroutines using Python’s asyncio library.

+

The default manifest format created is a Comma-Separated Value file (csv) +with rows for every record. A header row is created with field names: +guid,authz,acl,file_size,md5,urls,file_name

+

Fields that are lists (like acl, authz, and urls) separate the values with spaces.

+

There is a default mapping for those column names above but you can override it. +Fields that expect lists (like acl, authz, and urls) by default assume these values are +separated with spaces. If you need alternate behavior, you can simply override the +manifest_row_parsers for specific fields and replace the default parsing function +with a custom one. For example:

+

``` +from gen3.tools import indexing +from gen3.tools.indexing.verify_manifest import manifest_row_parsers

+
+
def _get_authz_from_row(row):

return [row.get(“authz”).strip().strip(“[“).strip(“]”).strip(”’”)]

+
+
+

# override default parsers +manifest_row_parsers[“authz”] = _get_authz_from_row

+

indexing.verify_object_manifest(COMMONS) +```

+

The output from this verification is a file containing any errors in the following +format:

+

{guid}|{error_name}|expected {value_from_manifest}|actual {value_from_indexd} +ex: 93d9af72-b0f1-450c-a5c6-7d3d8d2083b4|authz|expected [‘’]|actual [‘/programs/DEV/projects/test’]

+
+
+gen3.tools.indexing.verify_manifest.CURRENT_DIR
+

directory this file is in

+
+
Type:
+

str

+
+
+
+ +
+
+gen3.tools.indexing.verify_manifest.MAX_CONCURRENT_REQUESTS
+

maximum number of desired concurrent requests across +processes/threads

+
+
Type:
+

int

+
+
+
+ +
+
+async gen3.tools.indexing.verify_manifest.async_verify_object_manifest(commons_url, manifest_file, max_concurrent_requests=24, manifest_row_parsers={'acl': <function _get_acl_from_row>, 'authz': <function _get_authz_from_row>, 'file_name': <function _get_file_name_from_row>, 'file_size': <function _get_file_size_from_row>, 'guid': <function _get_guid_from_row>, 'md5': <function _get_md5_from_row>, 'urls': <function _get_urls_from_row>}, manifest_file_delimiter=None, output_filename='verify-manifest-errors-1718230126.4038992.log')[source]
+

Verify all file object records into a manifest csv

+
+
Parameters:
+
    +
  • commons_url (str) – root domain for commons where indexd lives

  • +
  • manifest_file (str) – the file to verify against

  • +
  • max_concurrent_requests (int) – the maximum number of concurrent requests allowed

  • +
  • (Dict{indexd_field (manifest_row_parsers) – func_to_parse_row}): Row parsers

  • +
  • manifest_file_delimiter (str) – delimeter in manifest_file

  • +
  • output_filename (str) – filename for output logs

  • +
+
+
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/tools/metadata.html b/docs/_build/html/tools/metadata.html new file mode 100644 index 000000000..358a13e9f --- /dev/null +++ b/docs/_build/html/tools/metadata.html @@ -0,0 +1,259 @@ + + + + + + + + Metadata Tools — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Metadata Tools

+
+

Ingest

+

Tools for ingesting a CSV/TSV metadata manifest into the Metdata Service.

+
+
+gen3.tools.metadata.ingest_manifest.COLUMN_TO_USE_AS_GUID
+

file column containing guid to use

+
+
Type:
+

str

+
+
+
+ +
+
+gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_INDEXED_FILE_OBJECT
+

type to populate in mds when guid exists +in indexd

+
+
Type:
+

str

+
+
+
+ +
+
+gen3.tools.metadata.ingest_manifest.GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT
+

type to populate in mds when guid does +NOT exist in indexd

+
+
Type:
+

str

+
+
+
+ +
+
+manifest_row_parsers (Dict{str
+

function}): functions for parsing, users can override +manifest_row_parsers = {

+
+

“guid_from_file”: _get_guid_for_row, +“indexed_file_object_guid”: _query_for_associated_indexd_record_guid,

+
+

}

+

“guid_for_row” is the function to retrieve the guid from the given file +“indexed_file_object_guid” is the function to retrieve the guid from elsewhere,

+
+

like indexd (by querying)

+
+
+ +
+
+gen3.tools.metadata.ingest_manifest.MAX_CONCURRENT_REQUESTS
+

Maximum concurrent requests to mds for ingestion

+
+
Type:
+

int

+
+
+
+ +
+
+async gen3.tools.metadata.ingest_manifest.async_ingest_metadata_manifest(commons_url, manifest_file, metadata_source, auth=None, max_concurrent_requests=24, manifest_row_parsers={'guid_for_row': <function _get_guid_for_row>, 'indexed_file_object_guid': <function _query_for_associated_indexd_record_guid>}, manifest_file_delimiter=None, output_filename='ingest-metadata-manifest-errors-1718230126.682094.log', get_guid_from_file=True, metadata_type=None)[source]
+

Ingest all metadata records into a manifest csv

+
+
Parameters:
+
    +
  • commons_url (str) – root domain for commons where mds lives

  • +
  • manifest_file (str) – the file to ingest against

  • +
  • metadata_source (str) – the name of the source of metadata (used to namespace +in the metadata service) ex: dbgap

  • +
  • auth (Gen3Auth) – Gen3 auth or tuple with basic auth name and password

  • +
  • max_concurrent_requests (int) – the maximum number of concurrent requests allowed

  • +
  • (Dict{indexd_field (manifest_row_parsers) – func_to_parse_row}): Row parsers

  • +
  • manifest_file_delimiter (str) – delimeter in manifest_file

  • +
  • output_filename (str) – filename for output logs

  • +
  • get_guid_from_file (bool) –

    whether or not to get the guid for metadata from file +NOTE: When this is True, will use the function in

    +
    +

    manifest_row_parsers[“guid_for_row”] to determine the GUID +(usually just a specific column in the file row like “guid”)

    +
    +

  • +
  • metadata_type (str) –

    the type of metadata to be filled into the _guid_type field. +If provided, will override the default logic per GUID: (GUID_TYPE_FOR_INDEXED_FILE_OBJECT

    +
    +

    if is_indexed_file_object +else GUID_TYPE_FOR_NON_INDEXED_FILE_OBJECT)

    +
    +

  • +
+
+
+
+ +
+
+async gen3.tools.metadata.ingest_manifest.async_query_urls_from_indexd(pattern, commons_url, lock)[source]
+

Gets a semaphore then requests a record for the given pattern

+
+
Parameters:
+
    +
  • pattern (str) – url pattern to match

  • +
  • commons_url (str) – root domain for commons where mds lives

  • +
  • lock (asyncio.Semaphore) – semaphones used to limit ammount of concurrent http +connections

  • +
+
+
+
+ +
+
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file diff --git a/docs/_build/html/wss.html b/docs/_build/html/wss.html new file mode 100644 index 000000000..e3daccc57 --- /dev/null +++ b/docs/_build/html/wss.html @@ -0,0 +1,256 @@ + + + + + + + + Gen3 Workspace Storage — Gen3 SDK documentation + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+ +
+

Gen3 Workspace Storage

+
+
+class gen3.wss.Gen3WsStorage(auth_provider=None)[source]
+

Bases: object

+

A class for interacting with the Gen3 workspace storage service.

+

Examples

+

This generates the Gen3WsStorage class pointed at the sandbox commons while +using the credentials.json downloaded from the commons profile page.

+
>>> auth = Gen3Auth(endpoint, refresh_file="credentials.json")
+... wss = Gen3WsStorage(auth)
+
+
+
+
+copy(src_urlstr, dest_urlstr)[source]
+

Parse src_urlstr and dest_urlstr, and call upload or download +as appropriate

+
+ +
+
+download(src_ws, src_wskey, dest_path)[source]
+

Download a file from the workspace to local disk

+
+
Parameters:
+
    +
  • src_ws (string) – name of the workspace

  • +
  • src_wskey (string) – key of the object in the workspace

  • +
  • dest_path (string) – to download the file to

  • +
+
+
+
+ +
+
+download_url(ws, wskey)[source]
+

Get a download url for the given workspace key

+
+
Parameters:
+
    +
  • ws (string) – name of the workspace

  • +
  • wskey (string) – key of the object in the workspace

  • +
+
+
+
+ +
+
+ls(ws, wskey)[source]
+

List the contents under the given workspace path

+
+
Parameters:
+
    +
  • ws (string) – name of the workspace

  • +
  • wskey (string) – key of the object in the workspace

  • +
+
+
+
+ +
+
+ls_path(ws_urlstr)[source]
+
+
Same as ls - but parses ws_urlstr argument of form:

ws:///workspace/key

+
+
+
+
Parameters:
+
    +
  • ws (string) – name of the workspace

  • +
  • wskey (string) – key of the object in the workspace

  • +
+
+
+
+ +
+
+rm(ws, wskey)[source]
+

Remove the given workspace key

+
+
Parameters:
+
    +
  • ws (string) – name of the workspace

  • +
  • wskey (string) – key of the object in the workspace

  • +
+
+
+
+ +
+
+rm_path(ws_urlstr)[source]
+

Same as rm - but parses the ws_urlstr argument

+
+ +
+
+upload(src_path, dest_ws, dest_wskey)[source]
+

Upload a local file to the specified workspace path

+
+ +
+
+upload_url(ws, wskey)[source]
+

Get a upload url for the given workspace key

+
+
Parameters:
+
    +
  • ws (string) – name of the workspace

  • +
  • wskey (string) – key of the object in the workspace

  • +
+
+
+
+ +
+ +
+ + +
+ +
+
+ +
+
+ + + + + Fork me on GitHub + + + + + + \ No newline at end of file