From 2c07651e11eca6288b973688b8f8861e7a032f5f Mon Sep 17 00:00:00 2001 From: Alexander VanTol Date: Thu, 24 Aug 2023 10:22:50 -0500 Subject: [PATCH] =?UTF-8?q?feat(drs-pull-objects):=20initial=20support=20f?= =?UTF-8?q?or=20supplying=20a=20list=20of=20DRS=20I=E2=80=A6=20(#195)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(drs-pull-objects): initial support for supplying a list of DRS IDs to download * Apply automatic documentation changes * feat(logging): add arg for silencing logging (that way we can ensure click.echos are the only stdout) * feat(drs-pull): correctly allow list of object IDs as an arg, support JSON output * Apply automatic documentation changes * chore(spelling): fix typo * Apply automatic documentation changes * chore(drs-pull): refactor to reduce function calls, support passing a list of objects to underlying download functions * Apply automatic documentation changes * chore(tests): fix test and version * Apply automatic documentation changes --- docs/_build/doctrees/environment.pickle | Bin 1563011 -> 1554905 bytes docs/_build/doctrees/tools/drs_pull.doctree | Bin 136459 -> 130578 bytes docs/_build/doctrees/tools/indexing.doctree | Bin 101131 -> 101126 bytes docs/_build/doctrees/tools/metadata.doctree | Bin 36397 -> 36402 bytes .../gen3/tools/download/drs_download.html | 19 ++- docs/_build/html/genindex.html | 2 - docs/_build/html/index.html | 1 - docs/_build/html/objects.inv | Bin 1898 -> 1894 bytes docs/_build/html/searchindex.js | 2 +- docs/_build/html/tools.html | 1 - docs/_build/html/tools/drs_pull.html | 22 ---- docs/_build/html/tools/indexing.html | 2 +- docs/_build/html/tools/metadata.html | 2 +- docs/howto/drsDownloading.md | 7 ++ gen3/cli/__main__.py | 19 ++- gen3/cli/drs_pull.py | 113 ++++++++++++++++-- gen3/tools/download/drs_download.py | 14 +-- pyproject.toml | 2 +- tests/download_tests/test_download.py | 7 +- 19 files changed, 148 insertions(+), 65 deletions(-) diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index abe4f0c49e99a9e3778da305620bbe15543e4ff8..938f75edabf21a2fb73f6c9bb45fb5f75f9539e2 100644 GIT binary patch delta 72802 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 BSR4QV delta 74006 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 Ogxzs?8=`Jb{Qn2um@&)% diff --git a/docs/_build/doctrees/tools/drs_pull.doctree b/docs/_build/doctrees/tools/drs_pull.doctree index 223fefec05f801ec3ee3bf11727d53faebdb0398..c433ab810143e0bc8772b13b914dfd3c68e95126 100644 GIT binary patch delta 2162 zcmZ9NZERCj7{~daZjP~*t!!-Q-YApZdwYx9?63@&X@N}8VIUGDim-lIQYtcDrU(fN z2{92SjNQS}XyS-3K|cr;q#2?^G(si}kRVGOuq}Z=G|L)BhC0RPoYQq1`_P>Ge_qZx z&+mE8c7Hj(X((lTGcq3e``>Z&$0L)F&C`R(`o@o`k!aOfgc;`Wz%dl^i|v@sd|Gs{ z9T~v0LR?_?Y2(I)@RN?JcBotTAxst zbYL+WmD(Uxtl*2IcnOD;_-Vqm;{rlBrPPxe?=FLZ4)IxVpcQ#I$-7UW6kSrW`U754 zT3Yc0<-5>|I^0u{v3R77JHL%b##E$JC`%EOQR2kUU&b!Dr5~@ULLMvD)vmJ=u_Re7 zfihIdSmAK66*Fi{+PR1~ayT8M>!b0yE2u)P@XqHo^YI1?>U@KZ&3MRdpBMEkT+RJ$ zw5?C$8w@wI??X5sUMH8XCVNb&nAuK;QVwrGy>QFJxllgegie<$`mDo*gdSRGR< zUN(Wvv4y=FFZIA5op2p%fU9bQ2OnzevK~Eg11Z2QrPZ9#9GBxeQS02K$~9Bx89i8w zA>mS>YJOjr4K$#u2Fl`*cH~>@Tk=_kF>H}d4YwFp@Q%Uu8lnLUnnG!;!Qjp_FxXbZioEA_TpUwt3G$pcvIKcv ztR%?uh5#9e9{B_B2v$^`1xdYRwlXqziSuUh{65U5X(CG@KcZo}Lzv?)zyR$pFrMwB z{!Mf9;7(K^g=^z6$ZRV_GqL z(QV-|ulVX-=Vxo&maDy-cQ3{(G)a^?Q?`T8EoV<;Oi;IvJ{n(l1yclcX2}dzziSot ziUb;O`3NZw-9vF7G!*w<>J6Gfc8#h@+y_O$B==KpT9McCdsK-5Q3-|eh9S8hzK37H zes)_i?WibU4*QXAI?R~;?zS#H@TPWB62eQ>OWD+xH;lz=$_u83y;gI9qP9_$-_-Ayxkb_hwp(?VQe zHz_dAwvtEs=yfmu4;!#dSk)LVG36Lmn`%JUj#xqo%TEvR0=0W0X1ggUQ-@3C?Yw+O z3Xw*OQu+_&2!&|lYo#1H_&WQ_v@o}X3<@;um;mh{J(JBifbb2yM(%<_x=&hWSa49A=kCTu=^kfkzFq-6L7+qo|nb zRbC~ID2I8qSV`8aJy9CwyDZHjsbOO6#*K9wdCbl-qw^fB!={CVXD$6~YDirde66;A z%lg_)&D)y8!tm~rKv6!L>vtb`4E_^(;4;(y@Nvnl`p delta 3187 zcmai0e^6A{72fZz3RE{B3aQEhLE*jKw{L|&LN(e!A%@gw)l|jWMo1wp8w*;vLDLv)z#0vWP8yPowV-XSCNw?w-rct>)0zIW zd++(qJ@>xzedpY}{fmUHuO~hiLdqDY0}h9Sx27VUCs$$O(Gq00Ce5v`f4Xi>eN{D2 z?7=L4$cG%h^9YjolRcQ5)MTTFdXT&0FwS5mU;G=mtuJ5J*!>z`=|_|D*DoMz)`Y14 zs_Gv!tg3%JSo6KcP$1#Ep+I`m|HOVAS|55Qqz9%1A69WIPiwCGHHRaR5pV|F!E%l7 z4j~=&yt4P!4hi2V+a5^qY zlQl4>kSzS&tH`vnFDFybU$&zj|4{1()OyBrzO4*1*nnKiQgmzm>_s#izHap~Y-Jvu zS8XK6TwQL=iX#hib*p(!0ees_Bs99ANPrwaw=r!*<_>bA`qfV4qnf|l35!+gl(IbD z{0b6AxNa*%pYb2M^0ebG+_;9IO%7bPCsJ0DHO~kLsMFmZ~kl_ z(p}{Q1v2M@=q%K%!NxpRk;+Sc3v*0EZQbfMHT>^=*zL@&t>!QO1!>`Xe+MrTl|25R zV-XnFtwAlHSNpL+N^atCjj3Hjl)XyK=C5ACRCYkOy1y(;+DC_0N+Ri}S;u}l9tBoM zVCvnCftu{HC68vu%T!`hMqn|S9@nkKwfU@Fx2it%uzivT5Bn8OSLaxZ+7ehuw_1Nz z=qePch-uh>n1MP!PJm5$WXjyiP2f`lVM zx?(}XD#(RlLCDKiJOv3H!xjw0f?SIP`A;m!HIJ;Aab8(!8e^%J&|e|(q*-R3j2#eurLLGuaKBe6vGfequv1>y!_X;mr&-PO641_1{u$-${Rq-K0-3-+Jc|d| zjR<^wIDGCZvMkZu;;Jaw58V_3_nFl5VF zN|C7LP*S2Thu=Pr`K;Cu%>z$}Q)XG&Z;xe54IxVpmPiw?yc=UFqU<0$YyxCLR|w;8SE zJ|~a4eHJDc(u{Y%j}kWBCu!pY3$TD0gw2{RFuO`=L%T}j&l#hBg^EGcv!%Y+-4^ez z_&+W(A?~)lhT?w@rJ48_cE$fDAB~P1d~F|f*>;f`#eWM?PW*TE;Vf8_kN7`qr!$pp zrjNF-oZUX+zbKIc5&e|Wc=`|d_%zKy-&i@Ecg8h>sMay?koI&0aO|Pi(JvV^K`~+PmeCNk_ zn2j=}0%Cqar>PXMupjH#WK(gOZpy19)l}@?8!`KBbKfU;bnG`whvVn{6X|{FP|N0- zLISM9v`!Y!U^Ei~c*2wdm}e>h{E+^sZj}HU2_pdzW($D!v;`1<%$NXPQ!#`9c8McJ z9yjssN&sW%j6why6j`3+3|{j|0SLPiz&SA*L%aSB`7S3-A_BNhoRa{GuHy<=k0~3# zLj!1G=P4UD_n(=v_WQ*;w@79@`JbDT{C`v0>EX~Xzs;)lGP~{0_?D6)*1KE%6``_hB$3dZK8e!9AinL^)Bm=x5Lue)Ds@0d~sItA>!r W-tt@B6)^etvNXGyV%5mox(a diff --git a/docs/_build/doctrees/tools/indexing.doctree b/docs/_build/doctrees/tools/indexing.doctree index c3d956b2c2cd3f9ce42beec4e98f4ba4572ca395..8c9f9a5495fe9fa0e4caa78b45b3d8a7a9d1aedc 100644 GIT binary patch delta 189 zcmeC4#@05CtzilyFXP9pe2lI(EN>VY7^c4uWR#s;ufeW(0GFjUd;kCd delta 181 zcmZph#@0QJtzilyFXOkZe2lI(EN>YZ7^cfQGRjP@)8N~F%aL(CBcHjUxq-2zp0Tm9 zg}JHGc3V5fZf3@d+fO<&9>9>C=FGU2o6&yyJby+VVN{KJIr-`8(-U18g`x5?SmdW< Uu*Xix5bJ@MfNr&10OJcQ0L9BO1poj5 diff --git a/docs/_build/doctrees/tools/metadata.doctree b/docs/_build/doctrees/tools/metadata.doctree index 2ac638912084b4860c88fef6c18e654d1f2388cf..19f96a3f2cebb3e68f2d9ee24a5096a8d506ddae 100644 GIT binary patch delta 182 zcmZ2GhiTIsCYA=)sp=b9-fFVUWn^HOWGBB_M9Y?u&%(mY+{9SV!ob|b+{AM71_PVT zv$T&hGuCfT(sx9c-n_w}m4ne^@`0h%i|D_e1e0037cGK2sC delta 178 zcmdlqhiUB`CYA=)sY)AJ-fFVUVPs&KJYP?4v#^#OBd@ukxq-2zp1FyMk(tTncx`4D z#=6bP`i^KaljF5*Hor6QDYa8HGFW@S TN~Liq%@Bjgqq#uCiYo*FSource code for gen3.tools.download.drs_download
def _download_obj( hostname, auth, - object_id, + object_ids, output_dir=".", show_progress=False, unpack_packages=True, @@ -1222,7 +1222,7 @@

Source code for gen3.tools.download.drs_download

Args: hostname (str): hostname of Gen3 commons to use for access and WTS auth: Gen3 Auth instance - object_id (str): DRS object id + 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 @@ -1237,7 +1237,7 @@

Source code for gen3.tools.download.drs_download

logger.critical(f"Unable to authenticate your credentials with {hostname}") return None - object_list = [Downloadable(object_id=object_id)] + object_list = [Downloadable(object_id=object_id) for object_id in object_ids] downloader = DownloadManager( hostname=hostname, auth=auth, @@ -1430,12 +1430,10 @@

Source code for gen3.tools.download.drs_download

-
-[docs] -def download_drs_object( +def download_drs_objects( hostname, auth, - object_id, + object_ids, output_dir, show_progress=True, unpack_packages=True, @@ -1446,7 +1444,7 @@

Source code for gen3.tools.download.drs_download

Args: hostname (str): hostname of Gen3 commons to use for access and WTS auth: Gen3 Auth instance - object_id (str): DRS object id + 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 @@ -1457,13 +1455,12 @@

Source code for gen3.tools.download.drs_download

return _download_obj( hostname, auth, - object_id, + object_ids, output_dir, show_progress, unpack_packages, delete_unpacked_packages, - )
- + )
diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 76528c186..3c8704b10 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -220,8 +220,6 @@

D

  • (gen3.wss.Gen3WsStorage method)
  • -
  • download_drs_object() (in module gen3.tools.download.drs_download) -
  • download_files_in_drs_manifest() (in module gen3.tools.download.drs_download)
  • download_single() (gen3.file.Gen3File method) diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html index 0e611b039..57f5e27e3 100644 --- a/docs/_build/html/index.html +++ b/docs/_build/html/index.html @@ -223,7 +223,6 @@

    Welcome to Gen3 SDK’s documentation!Manifest.load_manifest()

  • -
  • download_drs_object()
  • download_files_in_drs_manifest()
  • list_access_in_drs_manifest()
  • list_drs_object()
  • diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index 27e7854f3c8c7a0199e71b5dcfabe11f8c320acc..8f2fb369e10a277a49c29de1f9aeb6fd64436a33 100644 GIT binary patch delta 1709 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 Hz7(d67_L-t diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 0d37b53a1..a470ed6b5 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, 10], "": [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, 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, 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": [2, 9, 10], "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": [3, 5, 11, 12], "you": [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": [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": 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": [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": [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": [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": 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": 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": [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": [11, 12], "3338752": 11, "744264": 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_drs_object"], [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, "drs-download-tools"]], "Indexing Tools": [[11, "indexing-tools"]], "Download": [[11, "download"]], "Index": [[11, "index"]], "Verify": [[11, "verify"]], "Metadata Tools": [[12, "metadata-tools"]], "Ingest": [[12, "ingest"]], "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_drs_object() (in module gen3.tools.download.drs_download)": [[10, "gen3.tools.download.drs_download.download_drs_object"]], "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({"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, 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, 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": [3, 5, 11, 12], "you": [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": [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": 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": [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": [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": [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": 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": 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": [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": [11, 12], "381985": 11, "8074749": 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, "drs-download-tools"]], "Indexing Tools": [[11, "indexing-tools"]], "Download": [[11, "download"]], "Index": [[11, "index"]], "Verify": [[11, "verify"]], "Metadata Tools": [[12, "metadata-tools"]], "Ingest": [[12, "ingest"]], "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 diff --git a/docs/_build/html/tools.html b/docs/_build/html/tools.html index 7411d62fe..dacf213a1 100644 --- a/docs/_build/html/tools.html +++ b/docs/_build/html/tools.html @@ -80,7 +80,6 @@

    Gen3 ToolsManifest.load_manifest() -
  • download_drs_object()
  • download_files_in_drs_manifest()
  • list_access_in_drs_manifest()
  • list_drs_object()
  • diff --git a/docs/_build/html/tools/drs_pull.html b/docs/_build/html/tools/drs_pull.html index 47572cefd..6fe4c33ff 100644 --- a/docs/_build/html/tools/drs_pull.html +++ b/docs/_build/html/tools/drs_pull.html @@ -405,27 +405,6 @@

    DRS Download Tools -
    -gen3.tools.download.drs_download.download_drs_object(hostname, auth, object_id, output_dir, show_progress=True, unpack_packages=True, delete_unpacked_packages=False) None[source]
    -

    A convenience function used to download a single 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 id -:type object_id: 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:
    -

    List of DownloadStatus objects for the DRS object

    -
    -
    -
    -
    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]
    @@ -569,7 +548,6 @@

    Navigation

  • Manifest.load_manifest()
  • -
  • download_drs_object()
  • download_files_in_drs_manifest()
  • list_access_in_drs_manifest()
  • list_drs_object()
  • diff --git a/docs/_build/html/tools/indexing.html b/docs/_build/html/tools/indexing.html index 9ffe61161..77273cc4a 100644 --- a/docs/_build/html/tools/indexing.html +++ b/docs/_build/html/tools/indexing.html @@ -380,7 +380,7 @@

    Verify
    -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-1692717039.3338752.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-1692886743.381985.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 b3764f4aa..02b342e9a 100644 --- a/docs/_build/html/tools/metadata.html +++ b/docs/_build/html/tools/metadata.html @@ -101,7 +101,7 @@

    Ingest
    -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-1692717039.744264.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-1692886743.8074749.log', get_guid_from_file=True, metadata_type=None)[source]

    Ingest all metadata records into a manifest csv

    Parameters:
    diff --git a/docs/howto/drsDownloading.md b/docs/howto/drsDownloading.md index 173b75590..05e93df77 100644 --- a/docs/howto/drsDownloading.md +++ b/docs/howto/drsDownloading.md @@ -67,6 +67,12 @@ You should see something like: Datafile05_T.csv : 100%|████████████████████████████████████████████████████████████████████████| 3.72M/3.72M [00:01<00:00, 1.92MiB/s] ``` +To download a list of files, you can use the `drs-pull objects` command: + +``` +gen3 --endpoint my-commons.org --auth drs-pull objects dg.XXTS/181af989-5d66-4139-91e7-69f4570ccd41 dg.XX22/221af922-2222-2239-22e7-62f4570cc222 +``` + ### Listing Files and Access #### List Contents @@ -93,6 +99,7 @@ BIG_DataCollection.5.2.1.7695.1700.100392922143281268049004312967/1.3.6.1.4.1.14 ├── BIG_Datafile.177741488444741406265552879434.dcm#1592595549340161 527.66 KB test.datacommons4.io 09/19/2020, 09:12:09 └── BIG_Datafile.193538014659307853778370216921.dcm#1592595549438034 527.66 KB test.datacommons4.io 09/18/2020, 14:48:53 ``` + #### List Access Given a manifest or DRS object id, you can query the access rights for that object's host commons, or in the case of a manifest all of the host commons diff --git a/gen3/cli/__main__.py b/gen3/cli/__main__.py index bbc61f087..dcfa1ad9d 100644 --- a/gen3/cli/__main__.py +++ b/gen3/cli/__main__.py @@ -1,6 +1,7 @@ import click import os import sys +import logging import cdislogging import pkg_resources @@ -68,6 +69,13 @@ def get(self): default=False, help="only show ERROR logs", ) +@click.option( + "--silent", + "silent", + is_flag=True, + default=False, + help="don't show ANY logs", +) @click.option( "--version", help="Show Gen3 Version", @@ -80,6 +88,7 @@ def main( verbose_logs, very_verbose_logs, only_error_logs, + silent, version, ): """Gen3 Command Line Interface""" @@ -90,7 +99,15 @@ def main( if version: click.echo(pkg_resources.get_distribution("gen3").version) - if very_verbose_logs: + if silent: + # we still need to define the logger, the log_level here doesn't + # really matter b/c we immediately disable all logging + logger = cdislogging.get_logger( + __name__, format=gen3.LOG_FORMAT, log_level="debug" + ) + # disables all logging + logging.disable(logging.CRITICAL) + elif very_verbose_logs: logger = cdislogging.get_logger( __name__, format=gen3.LOG_FORMAT, log_level="debug" ) diff --git a/gen3/cli/drs_pull.py b/gen3/cli/drs_pull.py index 319bdb753..dc8f0e9a1 100644 --- a/gen3/cli/drs_pull.py +++ b/gen3/cli/drs_pull.py @@ -1,11 +1,13 @@ import click +import json + from cdislogging import get_logger from gen3.tools.download.drs_download import ( list_files_in_drs_manifest, list_drs_object, download_files_in_drs_manifest, - download_drs_object, + download_drs_objects, list_access_in_drs_manifest, ) @@ -94,7 +96,6 @@ def download_manifest( @click.command() @click.argument("object_id") -@click.argument("output-dir", default=".") @click.option( "--no-progress", is_flag=True, @@ -113,6 +114,11 @@ def download_manifest( help="delete package files after unpacking them", show_default=True, ) +@click.option( + "--output-dir", + default=".", + show_default=True, +) @click.pass_context def download_object( ctx, @@ -129,11 +135,11 @@ def download_object( gen3 --endpoint mydata.org drs-pull object dg.XXXT/181af989-5d66-4139-91e7-69f4570ccd41 """ - click.echo(f"GA4GH DRS Object Streaming Starting...") - res = download_drs_object( + logger.info(f"GA4GH DRS Object Streaming Starting...") + res = download_drs_objects( ctx.obj["endpoint"], ctx.obj["auth_factory"].get(), - object_id, + [object_id], output_dir, no_progress, not no_unpack_packages, @@ -141,17 +147,101 @@ def download_object( ) success = True + + results = { + "succeeded": [], + "failed": [], + } + for drs_object_id in res: - if drs_object_id in res and res[drs_object_id].status != "downloaded": - click.echo(f"Object {drs_object_id} download failed.") + if drs_object_id in res and res[drs_object_id].status == "downloaded": + results["succeeded"].append(drs_object_id) + else: + logger.error(f"Object {drs_object_id} download failed.") success = False + results["failed"].append(drs_object_id) if success: - click.echo("All objects downloaded successfully.") + logger.info("All objects downloaded successfully.") else: - click.echo( - f"One or more objects have failed to be downloaded. Please check previous failure messages to see which ones have failed." - ) + logger.error(f"One or more objects have failed to be downloaded. Details:") + + click.echo(json.dumps(results)) + + +@click.command() +@click.argument("object_ids", nargs=-1) +@click.option( + "--output-dir", + default=".", + show_default=True, +) +@click.option( + "--no-progress", + is_flag=True, + help="Hide the progress bar when downloading", + show_default=True, +) +@click.option( + "--no-unpack-packages", + is_flag=True, + help="disable the unpacking of downloaded packages", + show_default=True, +) +@click.option( + "--delete-unpacked-packages", + is_flag=True, + help="delete package files after unpacking them", + show_default=True, +) +@click.pass_context +def download_objects( + ctx, + output_dir: str, + object_ids: list, + no_progress: bool, + no_unpack_packages: bool, + delete_unpacked_packages: bool, +): + """ + Download DRS objects by their object ids + The user credentials use the Gen3Auth class so the Gen3Auth options are applicable (--auth and --endpoint) + An example: + gen3 --endpoint mydata.org drs-pull objects dg.XXXT/181af989-5d66-4139-91e7-69f4570ccd41 dg.YYYT/221af989-2266-2239-22e7-22f4570ccd22 + + """ + success = True + + results = { + "succeeded": [], + "failed": [], + } + + logger.info(f"GA4GH DRS Object Streaming Starting...") + logger.debug(f"object_ids: {object_ids}") + res = download_drs_objects( + ctx.obj["endpoint"], + ctx.obj["auth_factory"].get(), + object_ids, + output_dir, + no_progress, + not no_unpack_packages, + delete_unpacked_packages, + ) + for drs_object_id in res: + if drs_object_id in res and res[drs_object_id].status == "downloaded": + results["succeeded"].append(drs_object_id) + else: + logger.error(f"Object {drs_object_id} download failed.") + success = False + results["failed"].append(drs_object_id) + + if success: + logger.info("All objects downloaded successfully.") + else: + logger.error(f"One or more objects have failed to be downloaded. Details:") + + click.echo(json.dumps(results)) @click.group() @@ -162,4 +252,5 @@ def drs_pull(): drs_pull.add_command(download_manifest, name="manifest") drs_pull.add_command(download_object, name="object") +drs_pull.add_command(download_objects, name="objects") drs_pull.add_command(list_files_or_access, name="ls") diff --git a/gen3/tools/download/drs_download.py b/gen3/tools/download/drs_download.py index 03f57a030..e22752395 100644 --- a/gen3/tools/download/drs_download.py +++ b/gen3/tools/download/drs_download.py @@ -1138,7 +1138,7 @@ def _download( def _download_obj( hostname, auth, - object_id, + object_ids, output_dir=".", show_progress=False, unpack_packages=True, @@ -1149,7 +1149,7 @@ def _download_obj( Args: hostname (str): hostname of Gen3 commons to use for access and WTS auth: Gen3 Auth instance - object_id (str): DRS object id + 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 @@ -1164,7 +1164,7 @@ def _download_obj( logger.critical(f"Unable to authenticate your credentials with {hostname}") return None - object_list = [Downloadable(object_id=object_id)] + object_list = [Downloadable(object_id=object_id) for object_id in object_ids] downloader = DownloadManager( hostname=hostname, auth=auth, @@ -1348,10 +1348,10 @@ def download_files_in_drs_manifest( ) -def download_drs_object( +def download_drs_objects( hostname, auth, - object_id, + object_ids, output_dir, show_progress=True, unpack_packages=True, @@ -1362,7 +1362,7 @@ def download_drs_object( Args: hostname (str): hostname of Gen3 commons to use for access and WTS auth: Gen3 Auth instance - object_id (str): DRS object id + 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 @@ -1373,7 +1373,7 @@ def download_drs_object( return _download_obj( hostname, auth, - object_id, + object_ids, output_dir, show_progress, unpack_packages, diff --git a/pyproject.toml b/pyproject.toml index 29dbbf4c2..e8725ede1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "gen3" homepage = "https://gen3.org/" -version = "4.20.5" +version = "4.21.0" description = "Gen3 CLI and Python SDK" authors = ["Center for Translational Data Science at the University of Chicago "] license = "Apache-2.0" diff --git a/tests/download_tests/test_download.py b/tests/download_tests/test_download.py index 6918acc92..9b08d7cff 100644 --- a/tests/download_tests/test_download.py +++ b/tests/download_tests/test_download.py @@ -287,7 +287,6 @@ def test_get_external_wts_oidc(wts_oidc, hostname): def test_download_file_from_url_failures(download_dir): with requests_mock.Mocker() as m: - m.get( url=f"https://test.commons1.io/ga4gh/drs/v1/objects/blah/access/s3", headers={"content-length": "10"}, @@ -536,7 +535,7 @@ def test_download_objects( results = _download_obj( hostname, auth, - "dg.XXTS/b96018c5-db06-4af8-a195-28e339ba815e", + ["dg.XXTS/b96018c5-db06-4af8-a195-28e339ba815e"], download_dir.join("_download_obj"), ) for id, item in results.items(): @@ -640,7 +639,7 @@ def test_download_objects( results = _download_obj( hostname, auth, - "dg.XXTS/b96018c5-db06-4af8-a195-28e339ba815e", + ["dg.XXTS/b96018c5-db06-4af8-a195-28e339ba815e"], download_dir.join("_download_obj"), ) assert results is None @@ -844,7 +843,6 @@ def test_list_no_auth( manifest_file, expected, ): - test_key = { "api_key": "whatever." # pragma: allowlist secret + base64.urlsafe_b64encode( @@ -899,7 +897,6 @@ def test_unpackage_objects( download_test_files, hostname, ): - exp = time.time() + 300 test_key = { "api_key": "whatever." # pragma: allowlist secret