dxpy 0.371.0__tar.gz → 0.373.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. {dxpy-0.371.0 → dxpy-0.373.0}/PKG-INFO +1 -1
  2. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/api.py +8 -0
  3. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxproject.py +6 -1
  4. dxpy-0.373.0/dxpy/nextflow/awscli_assets.json +8 -0
  5. dxpy-0.373.0/dxpy/nextflow/awscli_assets.staging.json +8 -0
  6. dxpy-0.373.0/dxpy/nextflow/nextaur_assets.json +8 -0
  7. dxpy-0.373.0/dxpy/nextflow/nextaur_assets.staging.json +8 -0
  8. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/nextflow_utils.py +11 -7
  9. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/scripts/dx.py +3 -1
  10. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/nextflow/dxapp.json +1 -2
  11. dxpy-0.373.0/dxpy/toolkit_version.py +1 -0
  12. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/describe.py +3 -1
  13. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy.egg-info/PKG-INFO +1 -1
  14. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy.egg-info/SOURCES.txt +3 -0
  15. dxpy-0.373.0/scripts/dx-jobutil-get-identity-token +69 -0
  16. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dx_bash_helpers.py +508 -199
  17. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dxpy.py +0 -1
  18. dxpy-0.371.0/dxpy/nextflow/nextaur_assets.json +0 -8
  19. dxpy-0.371.0/dxpy/nextflow/nextaur_assets.staging.json +0 -8
  20. dxpy-0.371.0/dxpy/toolkit_version.py +0 -1
  21. {dxpy-0.371.0 → dxpy-0.373.0}/MANIFEST.in +0 -0
  22. {dxpy-0.371.0 → dxpy-0.373.0}/Readme.md +0 -0
  23. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/__init__.py +0 -0
  24. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/app_builder.py +0 -0
  25. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/app_categories.py +0 -0
  26. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/asset_builder.py +0 -0
  27. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/__init__.py +0 -0
  28. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/__init__.py +0 -0
  29. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/cmd_line_options_validator.py +0 -0
  30. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/data_transformations.py +0 -0
  31. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/dataset.py +0 -0
  32. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/json_validation_by_schema.py +0 -0
  33. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/schemas/__init__.py +0 -0
  34. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/schemas/assay_filtering_conditions.py +0 -0
  35. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/schemas/assay_filtering_json_schemas.py +0 -0
  36. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/schemas/input_arguments_validation_schemas.py +0 -0
  37. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/vizclient.py +0 -0
  38. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/vizserver_filters_from_json_parser.py +0 -0
  39. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/apollo/vizserver_payload_builder.py +0 -0
  40. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/auth.py +0 -0
  41. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/download_all_inputs.py +0 -0
  42. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxanalysis.py +0 -0
  43. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxapp.py +0 -0
  44. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxapp_container_functions.py +0 -0
  45. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxapplet.py +0 -0
  46. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxdatabase.py +0 -0
  47. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxdatabase_functions.py +0 -0
  48. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxdataobject_functions.py +0 -0
  49. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxfile.py +0 -0
  50. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxfile_functions.py +0 -0
  51. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxglobalworkflow.py +0 -0
  52. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxjob.py +0 -0
  53. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxrecord.py +0 -0
  54. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/dxworkflow.py +0 -0
  55. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/mount_all_inputs.py +0 -0
  56. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/bindings/search.py +0 -0
  57. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/__init__.py +0 -0
  58. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/cp.py +0 -0
  59. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/dataset_utilities.py +0 -0
  60. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/download.py +0 -0
  61. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/exec_io.py +0 -0
  62. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/help_messages.py +0 -0
  63. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/org.py +0 -0
  64. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/output_handling.py +0 -0
  65. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/parsers.py +0 -0
  66. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/cli/workflow.py +0 -0
  67. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/compat.py +0 -0
  68. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest.json +0 -0
  69. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_staging.json +0 -0
  70. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_staging_vep.json +0 -0
  71. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_vep.json +0 -0
  72. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/__init__.py +0 -0
  73. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/cohort_filter_payload.py +0 -0
  74. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/column_conditions.json +0 -0
  75. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/column_conversion.json +0 -0
  76. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/filter_to_payload.py +0 -0
  77. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/input_validation.py +0 -0
  78. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/input_validation_somatic.py +0 -0
  79. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/retrieve_allele_schema.json +0 -0
  80. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/retrieve_annotation_schema.json +0 -0
  81. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/retrieve_bins.py +0 -0
  82. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/retrieve_genotype_schema.json +0 -0
  83. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/return_columns_allele.json +0 -0
  84. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/return_columns_annotation.json +0 -0
  85. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/return_columns_genotype.json +0 -0
  86. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dx_extract_utils/somatic_filter_payload.py +0 -0
  87. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/dxlog.py +0 -0
  88. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/exceptions.py +0 -0
  89. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/executable_builder.py +0 -0
  90. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/ImageRef.py +0 -0
  91. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/ImageRefFactory.py +0 -0
  92. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/__init__.py +0 -0
  93. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/collect_images.py +0 -0
  94. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/nextflow_assets.json +0 -0
  95. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/nextflow_assets.staging.json +0 -0
  96. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/nextflow_builder.py +0 -0
  97. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/nextflow/nextflow_templates.py +0 -0
  98. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/packages/__init__.py +0 -0
  99. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/scripts/__init__.py +0 -0
  100. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/scripts/dx_app_wizard.py +0 -0
  101. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/scripts/dx_build_app.py +0 -0
  102. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/scripts/dx_build_applet.py +0 -0
  103. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/ssh_tunnel_app_support.py +0 -0
  104. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/system_requirements.py +0 -0
  105. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/__init__.py +0 -0
  106. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/bash.py +0 -0
  107. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/python.py +0 -0
  108. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/Readme.md +0 -0
  109. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/bash/basic/dxapp.json +0 -0
  110. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/bash/basic/src/code.sh +0 -0
  111. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/bash/parallelized/dxapp.json +0 -0
  112. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/bash/parallelized/src/code.sh +0 -0
  113. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/bash/scatter-process-gather/dxapp.json +0 -0
  114. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/bash/scatter-process-gather/src/code.sh +0 -0
  115. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/nextflow/src/nextflow.sh +0 -0
  116. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/basic/dxapp.json +0 -0
  117. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/basic/src/code.py +0 -0
  118. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/basic/test/test.py +0 -0
  119. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/parallelized/dxapp.json +0 -0
  120. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/parallelized/src/code.py +0 -0
  121. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/parallelized/test/test.py +0 -0
  122. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/scatter-process-gather/dxapp.json +0 -0
  123. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/scatter-process-gather/src/code.py +0 -0
  124. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/templates/python/scatter-process-gather/test/test.py +0 -0
  125. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/templating/utils.py +0 -0
  126. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/__init__.py +0 -0
  127. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/batch_utils.py +0 -0
  128. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/completer.py +0 -0
  129. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/config.py +0 -0
  130. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/exec_utils.py +0 -0
  131. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/executable_unbuilder.py +0 -0
  132. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/file_handle.py +0 -0
  133. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/file_load_utils.py +0 -0
  134. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/genomic_utils.py +0 -0
  135. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/job_log_client.py +0 -0
  136. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/local_exec_utils.py +0 -0
  137. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/pathmatch.py +0 -0
  138. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/pretty_print.py +0 -0
  139. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/printing.py +0 -0
  140. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/resolver.py +0 -0
  141. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/spelling_corrector.py +0 -0
  142. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/utils/version.py +0 -0
  143. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy/workflow_builder.py +0 -0
  144. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy.egg-info/dependency_links.txt +0 -0
  145. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy.egg-info/entry_points.txt +0 -0
  146. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy.egg-info/not-zip-safe +0 -0
  147. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy.egg-info/requires.txt +0 -0
  148. {dxpy-0.371.0 → dxpy-0.373.0}/dxpy.egg-info/top_level.txt +0 -0
  149. {dxpy-0.371.0 → dxpy-0.373.0}/requirements.txt +0 -0
  150. {dxpy-0.371.0 → dxpy-0.373.0}/requirements_setuptools.txt +0 -0
  151. {dxpy-0.371.0 → dxpy-0.373.0}/requirements_test.txt +0 -0
  152. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-clone-asset +0 -0
  153. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-docker +0 -0
  154. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-download-all-inputs +0 -0
  155. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-fetch-bundled-depends +0 -0
  156. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-generate-dxapp +0 -0
  157. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-jobutil-add-output +0 -0
  158. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-jobutil-dxlink +0 -0
  159. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-jobutil-new-job +0 -0
  160. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-jobutil-parse-link +0 -0
  161. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-jobutil-report-error +0 -0
  162. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-log-stream +0 -0
  163. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-mount-all-inputs +0 -0
  164. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-notebook-reconnect +0 -0
  165. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-print-bash-vars +0 -0
  166. {dxpy-0.371.0 → dxpy-0.373.0}/scripts/dx-upload-all-outputs +0 -0
  167. {dxpy-0.371.0 → dxpy-0.373.0}/setup.cfg +0 -0
  168. {dxpy-0.371.0 → dxpy-0.373.0}/setup.py +0 -0
  169. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_batch.py +0 -0
  170. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_create_cohort.py +0 -0
  171. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_describe.py +0 -0
  172. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dx-docker.py +0 -0
  173. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dx_app_wizard.py +0 -0
  174. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dx_completion.py +0 -0
  175. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dx_symlink.py +0 -0
  176. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dxabs.py +0 -0
  177. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dxasset.py +0 -0
  178. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dxclient.py +0 -0
  179. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dxpy_utils.py +0 -0
  180. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_dxunpack.py +0 -0
  181. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_extract_assay.py +0 -0
  182. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_extract_dataset.py +0 -0
  183. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_extract_expression.py +0 -0
  184. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_extract_somatic.py +0 -0
  185. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_nextflow.py +0 -0
  186. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_nextflow_ImageRef.py +0 -0
  187. {dxpy-0.371.0 → dxpy-0.373.0}/test/test_nextflow_ImageRefFactory.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dxpy
3
- Version: 0.371.0
3
+ Version: 0.373.0
4
4
  Summary: DNAnexus Platform API bindings for Python
5
5
  Home-page: https://github.com/dnanexus/dx-toolkit
6
6
  Author: Aleksandra Zalcman, Andrey Kislyuk, Anurag Biyani, Geet Duggal, Katherine Lai, Kurt Jensen, Marek Hrvol, Ohad Rodeh, Phil Sung
@@ -961,6 +961,14 @@ def job_update(object_id, input_params={}, always_retry=True, **kwargs):
961
961
  """
962
962
  return DXHTTPRequest('/%s/update' % object_id, input_params, always_retry=always_retry, **kwargs)
963
963
 
964
+ def job_get_identity_token(object_id, input_params={}, always_retry=True, **kwargs):
965
+ """
966
+ Invokes the /job-xxxx/getIdentityToken API method.
967
+
968
+ For more info, see: https://documentation.dnanexus.com/developer/api/running-analyses/applets-and-entry-points#api-method-job-xxxx-getIdentityToken
969
+ """
970
+ return DXHTTPRequest('/%s/getIdentityToken' % object_id, input_params, always_retry=always_retry, **kwargs)
971
+
964
972
  def job_new(input_params={}, always_retry=True, **kwargs):
965
973
  """
966
974
  Invokes the /job/new API method.
@@ -284,7 +284,7 @@ class DXProject(DXContainer):
284
284
  def new(self, name, summary=None, description=None, region=None, protected=None,
285
285
  restricted=None, download_restricted=None, contains_phi=None,
286
286
  tags=None, properties=None, bill_to=None, database_ui_view_only=None,
287
- external_upload_restricted=None,
287
+ external_upload_restricted=None, default_symlink=None,
288
288
  **kwargs):
289
289
  """
290
290
  :param name: The name of the project
@@ -313,6 +313,8 @@ class DXProject(DXContainer):
313
313
  :type database_ui_view_only: boolean
314
314
  :param external_upload_restricted: If provided, whether project members can upload data to project from external sources, e.g. outside of job
315
315
  :type external_upload_restricted: boolean
316
+ :param default_symlink: If provided, the details needed to have writable symlinks in the project. Dict must include drive, container, and optional prefix.
317
+ : type default_symlink: dict
316
318
 
317
319
  Creates a new project. Initially only the user performing this action
318
320
  will be in the permissions/member list, with ADMINISTER access.
@@ -321,6 +323,7 @@ class DXProject(DXContainer):
321
323
  method for more info.
322
324
 
323
325
  """
326
+
324
327
  input_hash = {}
325
328
  input_hash["name"] = name
326
329
  if summary is not None:
@@ -347,6 +350,8 @@ class DXProject(DXContainer):
347
350
  input_hash["tags"] = tags
348
351
  if properties is not None:
349
352
  input_hash["properties"] = properties
353
+ if default_symlink is not None:
354
+ input_hash["defaultSymlink"] = default_symlink
350
355
 
351
356
  self.set_id(dxpy.api.project_new(input_hash, **kwargs)["id"])
352
357
  self._desc = {}
@@ -0,0 +1,8 @@
1
+ {
2
+ "aws:ap-southeast-2": "record-Ggjx0YQ5qP61v7Q7Qq4QQ2f7",
3
+ "aws:eu-central-1": "record-Ggjx2Jj4jbKyKxGXYfZgpJYy",
4
+ "aws:eu-west-2-g": "record-Ggjx4qBKYFQ35Gp87ybKV28Z",
5
+ "aws:us-east-1": "record-GgjvvP00GFJ5JjG1gX3Jbx6j",
6
+ "azure:westeurope": "record-Ggjx8Z8BxzQqXY9Fv4vXBqpj",
7
+ "azure:westus": "record-GgjxGf89ZB67Bz7f3815qk11"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "aws:ap-southeast-2": "record-Ggjp4Fj50y9Vp27Fx8gB65fY",
3
+ "aws:eu-central-1": "record-Ggjp62Q4PFG1K0g562PKZgbV",
4
+ "aws:eu-west-2-g": "record-Ggjp7K2K60b11G4p2X4X8B98",
5
+ "aws:us-east-1": "record-Ggjp2p009010jB06F520vZQG",
6
+ "azure:westeurope": "record-GgjpB2QB7Vp4Kz8FV25Q68Jv",
7
+ "azure:westus": "record-GgjpJ509bvJ1p27Fx8gB65jg"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "aws:ap-southeast-2": "record-GgZBbZ85p6jyZ1vyP78Yz8jq",
3
+ "aws:eu-central-1": "record-GgZBg8Q47BzfBB4FZVkYB3ZB",
4
+ "aws:eu-west-2-g": "record-GgZBjbXK55x4PBF5v265b2zZ",
5
+ "aws:us-east-1": "record-GgZBZ180yJVJQ0X3v70fGk5z",
6
+ "azure:westeurope": "record-GgZBq60BqQpZqzqP5K2g7zk0",
7
+ "azure:westus": "record-GgZByJ89K0f13FGj9Z5K7Q0q"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "aws:ap-southeast-2": "record-GgZB78850V715qfyb7QJ2j4k",
3
+ "aws:eu-central-1": "record-GgZB8jQ4q2vQkZ81YJyPB6P6",
4
+ "aws:eu-west-2-g": "record-GgZB9zBK8G200PKfy6ZPbkXP",
5
+ "aws:us-east-1": "record-GgZB0jQ0zJ8fPbKvfvqPk7J0",
6
+ "azure:westeurope": "record-GgZBJ40BYgvQkZ81YJyPB6PP",
7
+ "azure:westus": "record-GgZBVPQ92xJ9JFjFZgfyx7kV"
8
+ }
@@ -95,7 +95,7 @@ def write_dxapp(folder, content):
95
95
 
96
96
 
97
97
  def get_regional_options(region, resources_dir, profile, cache_docker, nextflow_pipeline_params):
98
- nextaur_asset, nextflow_asset = get_nextflow_assets(region)
98
+ nextaur_asset, nextflow_asset, awscli_asset = get_nextflow_assets(region)
99
99
  regional_instance_type = get_instance_type(region)
100
100
  if cache_docker:
101
101
  image_refs = run_nextaur_collect(resources_dir, profile, nextflow_pipeline_params)
@@ -111,7 +111,8 @@ def get_regional_options(region, resources_dir, profile, cache_docker, nextflow_
111
111
  },
112
112
  "assetDepends": [
113
113
  {"id": nextaur_asset},
114
- {"id": nextflow_asset}
114
+ {"id": nextflow_asset},
115
+ {"id": awscli_asset}
115
116
  ],
116
117
  "bundledDepends": image_bundled
117
118
  }
@@ -138,15 +139,18 @@ def get_nextflow_assets(region):
138
139
  # The order of assets in the tuple is: nextaur, nextflow
139
140
  nextaur_assets = path.join(nextflow_basepath, "nextaur_assets.json")
140
141
  nextflow_assets = path.join(nextflow_basepath, "nextflow_assets.json")
142
+ awscli_assets = path.join(nextflow_basepath, "awscli_assets.json")
141
143
  try:
142
- with open(nextaur_assets, 'r') as nextaur_f, open(nextflow_assets, 'r') as nextflow_f:
144
+ with open(nextaur_assets, 'r') as nextaur_f, open(nextflow_assets, 'r') as nextflow_f, open(awscli_assets, 'r') as awscli_f:
143
145
  nextaur = json.load(nextaur_f)[region]
144
146
  nextflow = json.load(nextflow_f)[region]
145
- dxpy.describe(nextaur, fields={})
146
- return nextaur, nextflow
147
+ awscli = json.load(awscli_f)[region]
148
+ dxpy.describe(nextaur, fields={}) # existence check
149
+ return nextaur, nextflow, awscli
147
150
  except ResourceNotFound:
148
151
  nextaur_assets = path.join(nextflow_basepath, "nextaur_assets.staging.json")
149
152
  nextflow_assets = path.join(nextflow_basepath, "nextflow_assets.staging.json")
153
+ awscli_assets = path.join(nextflow_basepath, "awscli_assets.staging.json")
150
154
 
151
- with open(nextaur_assets, 'r') as nextaur_f, open(nextflow_assets, 'r') as nextflow_f:
152
- return json.load(nextaur_f)[region], json.load(nextflow_f)[region]
155
+ with open(nextaur_assets, 'r') as nextaur_f, open(nextflow_assets, 'r') as nextflow_f, open(awscli_assets, 'r') as awscli_f:
156
+ return json.load(nextaur_f)[region], json.load(nextflow_f)[region], json.load(awscli_f)[region]
@@ -1437,7 +1437,8 @@ def new_project(args):
1437
1437
  inputs["monthlyComputeLimit"] = args.monthly_compute_limit
1438
1438
  if args.monthly_egress_bytes_limit is not None:
1439
1439
  inputs["monthlyEgressBytesLimit"] = args.monthly_egress_bytes_limit
1440
-
1440
+ if args.default_symlink is not None:
1441
+ inputs["defaultSymlink"] = json.loads(args.default_symlink)
1441
1442
  try:
1442
1443
  resp = dxpy.api.project_new(inputs)
1443
1444
  if args.brief:
@@ -5797,6 +5798,7 @@ parser_new_project.add_argument('--database-ui-view-only', help='Viewers on the
5797
5798
  action='store_true')
5798
5799
  parser_new_project.add_argument('--monthly-compute-limit', type=positive_integer, help='Monthly project spending limit for compute')
5799
5800
  parser_new_project.add_argument('--monthly-egress-bytes-limit', type=positive_integer, help='Monthly project spending limit for egress (in Bytes)')
5801
+ parser_new_project.add_argument('--default-symlink', help='Default symlink for external store account')
5800
5802
  parser_new_project.set_defaults(func=new_project)
5801
5803
  register_parser(parser_new_project, subparsers_action=subparsers_new, categories='fs')
5802
5804
 
@@ -103,8 +103,7 @@
103
103
  "categories": [],
104
104
  "access": {
105
105
  "network": ["*"],
106
- "project": "UPLOAD",
107
- "allProjects": "VIEW"
106
+ "project": "UPLOAD"
108
107
  },
109
108
  "ignoreReuse": true
110
109
  }
@@ -0,0 +1 @@
1
+ version = '0.373.0'
@@ -414,7 +414,7 @@ def print_project_desc(desc, verbose=False):
414
414
  'appCaches', 'billTo', 'version', 'createdBy', 'totalSponsoredEgressBytes', 'consumedSponsoredEgressBytes',
415
415
  'containsPHI', 'databaseUIViewOnly', 'externalUploadRestricted', 'region', 'storageCost', 'pendingTransfer',
416
416
  'atSpendingLimit', 'currentMonthComputeAvailableBudget', 'currentMonthEgressBytesAvailableBudget',
417
- 'currentMonthComputeUsage', 'currentMonthEgressBytesUsage',
417
+ 'currentMonthComputeUsage', 'currentMonthEgressBytesUsage', 'defaultSymlink'
418
418
  # Following are app container-specific
419
419
  'destroyAt', 'project', 'type', 'app', 'appName'
420
420
  ]
@@ -452,6 +452,8 @@ def print_project_desc(desc, verbose=False):
452
452
  print_json_field('Database UI View Only', desc['databaseUIViewOnly'])
453
453
  if 'externalUploadRestricted' in desc and desc['externalUploadRestricted']:
454
454
  print_json_field('External Upload Restricted', desc['externalUploadRestricted'])
455
+ if 'defaultSymlink' in desc and verbose:
456
+ print_json_field('Default Symlink', desc['defaultSymlink'])
455
457
 
456
458
  # Usage
457
459
  print_field("Created", render_timestamp(desc['created']))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dxpy
3
- Version: 0.371.0
3
+ Version: 0.373.0
4
4
  Summary: DNAnexus Platform API bindings for Python
5
5
  Home-page: https://github.com/dnanexus/dx-toolkit
6
6
  Author: Aleksandra Zalcman, Andrey Kislyuk, Anurag Biyani, Geet Duggal, Katherine Lai, Kurt Jensen, Marek Hrvol, Ohad Rodeh, Phil Sung
@@ -88,6 +88,8 @@ dxpy/dx_extract_utils/somatic_filter_payload.py
88
88
  dxpy/nextflow/ImageRef.py
89
89
  dxpy/nextflow/ImageRefFactory.py
90
90
  dxpy/nextflow/__init__.py
91
+ dxpy/nextflow/awscli_assets.json
92
+ dxpy/nextflow/awscli_assets.staging.json
91
93
  dxpy/nextflow/collect_images.py
92
94
  dxpy/nextflow/nextaur_assets.json
93
95
  dxpy/nextflow/nextaur_assets.staging.json
@@ -149,6 +151,7 @@ scripts/dx-fetch-bundled-depends
149
151
  scripts/dx-generate-dxapp
150
152
  scripts/dx-jobutil-add-output
151
153
  scripts/dx-jobutil-dxlink
154
+ scripts/dx-jobutil-get-identity-token
152
155
  scripts/dx-jobutil-new-job
153
156
  scripts/dx-jobutil-parse-link
154
157
  scripts/dx-jobutil-report-error
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env python3
2
+ #
3
+ # Copyright (C) 2013-2024 DNAnexus, Inc.
4
+ #
5
+ # This file is part of dx-toolkit (DNAnexus platform client libraries).
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may not
8
+ # use this file except in compliance with the License. You may obtain a copy
9
+ # of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16
+ # License for the specific language governing permissions and limitations
17
+ # under the License.
18
+
19
+ import dxpy
20
+ import os, argparse, sys
21
+
22
+
23
+ def _parse_args():
24
+ """
25
+ Parse the input arguments.
26
+ """
27
+ parser = argparse.ArgumentParser(
28
+ description="calls job-xxxx/getIdentityToken and retrieves a JWT token based on aud and subject claims input"
29
+ )
30
+ parser.add_argument(
31
+ "--aud", help="Audience URI the JWT is intended for", required=True
32
+ )
33
+ parser.add_argument(
34
+ "--subject_claims",
35
+ action="append",
36
+ metavar="<subject_claims>",
37
+ help="Defines the subject claims to be validated by the cloud provider",
38
+ )
39
+
40
+ return parser.parse_args()
41
+
42
+
43
+ def main(aud, subject_claims):
44
+ job_get_identity_token_input = {}
45
+
46
+ # Parse out audience and subject_claims from args
47
+ job_get_identity_token_input["audience"] = aud
48
+
49
+ if subject_claims is not None:
50
+ # Iterate over subject_claims and flatten them into a single list
51
+ subject_claims_input = []
52
+ for subject_claim in subject_claims:
53
+ subject_claims_input.extend(subject_claim.split(","))
54
+ job_get_identity_token_input["subject_claims"] = subject_claims_input
55
+
56
+ # Call job-xxxx/getIdentityToken
57
+ if "DX_JOB_ID" in os.environ:
58
+ response = dxpy.api.job_get_identity_token(
59
+ dxpy.JOB_ID, job_get_identity_token_input
60
+ )
61
+ sys.stdout.write(response["Token"])
62
+ else:
63
+ print("This script should be run from within a job environment.")
64
+ sys.exit(1)
65
+
66
+
67
+ if __name__ == "__main__":
68
+ args = _parse_args()
69
+ main(args.aud, args.subject_claims)