dxpy 0.395.0__tar.gz → 0.396.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 (193) hide show
  1. {dxpy-0.395.0 → dxpy-0.396.0}/PKG-INFO +1 -1
  2. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/__init__.py +5 -2
  3. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxproject.py +6 -1
  4. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/parsers.py +2 -0
  5. dxpy-0.396.0/dxpy/nextflow/app_asset_projects_ids_prod.json +9 -0
  6. dxpy-0.396.0/dxpy/nextflow/app_asset_projects_ids_staging.json +9 -0
  7. dxpy-0.396.0/dxpy/nextflow/nextaur_assets.json +9 -0
  8. dxpy-0.396.0/dxpy/nextflow/nextaur_assets.staging.json +9 -0
  9. dxpy-0.396.0/dxpy/nextflow/nextflow_assets.json +9 -0
  10. dxpy-0.396.0/dxpy/nextflow/nextflow_assets.staging.json +9 -0
  11. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/nextflow_utils.py +31 -3
  12. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/scripts/dx.py +4 -0
  13. dxpy-0.396.0/dxpy/toolkit_version.py +1 -0
  14. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy.egg-info/PKG-INFO +1 -1
  15. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy.egg-info/SOURCES.txt +2 -0
  16. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dxclient.py +20 -10
  17. dxpy-0.395.0/dxpy/nextflow/nextaur_assets.json +0 -9
  18. dxpy-0.395.0/dxpy/nextflow/nextaur_assets.staging.json +0 -9
  19. dxpy-0.395.0/dxpy/nextflow/nextflow_assets.json +0 -9
  20. dxpy-0.395.0/dxpy/nextflow/nextflow_assets.staging.json +0 -9
  21. dxpy-0.395.0/dxpy/toolkit_version.py +0 -1
  22. {dxpy-0.395.0 → dxpy-0.396.0}/MANIFEST.in +0 -0
  23. {dxpy-0.395.0 → dxpy-0.396.0}/Readme.md +0 -0
  24. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/api.py +0 -0
  25. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/app_builder.py +0 -0
  26. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/app_categories.py +0 -0
  27. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/asset_builder.py +0 -0
  28. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/__init__.py +0 -0
  29. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/__init__.py +0 -0
  30. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/cmd_line_options_validator.py +0 -0
  31. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/data_transformations.py +0 -0
  32. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/dataset.py +0 -0
  33. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/json_validation_by_schema.py +0 -0
  34. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/schemas/__init__.py +0 -0
  35. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/schemas/assay_filtering_conditions.py +0 -0
  36. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/schemas/assay_filtering_json_schemas.py +0 -0
  37. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/schemas/input_arguments_validation_schemas.py +0 -0
  38. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/vizclient.py +0 -0
  39. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/vizserver_filters_from_json_parser.py +0 -0
  40. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/apollo/vizserver_payload_builder.py +0 -0
  41. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/auth.py +0 -0
  42. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/download_all_inputs.py +0 -0
  43. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxanalysis.py +0 -0
  44. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxapp.py +0 -0
  45. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxapp_container_functions.py +0 -0
  46. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxapplet.py +0 -0
  47. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxdatabase.py +0 -0
  48. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxdatabase_functions.py +0 -0
  49. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxdataobject_functions.py +0 -0
  50. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxfile.py +0 -0
  51. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxfile_functions.py +0 -0
  52. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxglobalworkflow.py +0 -0
  53. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxjob.py +0 -0
  54. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxrecord.py +0 -0
  55. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/dxworkflow.py +0 -0
  56. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/mount_all_inputs.py +0 -0
  57. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/bindings/search.py +0 -0
  58. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/__init__.py +0 -0
  59. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/cp.py +0 -0
  60. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/dataset_utilities.py +0 -0
  61. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/download.py +0 -0
  62. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/exec_io.py +0 -0
  63. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/help_messages.py +0 -0
  64. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/org.py +0 -0
  65. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/output_handling.py +0 -0
  66. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/cli/workflow.py +0 -0
  67. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/compat.py +0 -0
  68. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest.json +0 -0
  69. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_staging.json +0 -0
  70. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_staging_vep.json +0 -0
  71. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/Homo_sapiens_genes_manifest_vep.json +0 -0
  72. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/__init__.py +0 -0
  73. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/cohort_filter_payload.py +0 -0
  74. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/column_conditions.json +0 -0
  75. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/column_conversion.json +0 -0
  76. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/filter_to_payload.py +0 -0
  77. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/germline_utils.py +0 -0
  78. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/input_validation.py +0 -0
  79. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/input_validation_somatic.py +0 -0
  80. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/retrieve_allele_schema.json +0 -0
  81. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/retrieve_annotation_schema.json +0 -0
  82. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/retrieve_bins.py +0 -0
  83. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/retrieve_genotype_schema.json +0 -0
  84. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/return_columns_allele.json +0 -0
  85. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/return_columns_annotation.json +0 -0
  86. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/return_columns_genotype.json +0 -0
  87. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/return_columns_genotype_only.json +0 -0
  88. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dx_extract_utils/somatic_filter_payload.py +0 -0
  89. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/dxlog.py +0 -0
  90. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/exceptions.py +0 -0
  91. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/executable_builder.py +0 -0
  92. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/ImageRef.py +0 -0
  93. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/ImageRefFactory.py +0 -0
  94. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/__init__.py +0 -0
  95. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/awscli_assets.json +0 -0
  96. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/awscli_assets.staging.json +0 -0
  97. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/collect_images.py +0 -0
  98. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/nextflow_builder.py +0 -0
  99. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/nextflow/nextflow_templates.py +0 -0
  100. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/packages/__init__.py +0 -0
  101. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/scripts/__init__.py +0 -0
  102. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/scripts/dx_app_wizard.py +0 -0
  103. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/scripts/dx_build_app.py +0 -0
  104. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/scripts/dx_build_applet.py +0 -0
  105. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/ssh_tunnel_app_support.py +0 -0
  106. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/system_requirements.py +0 -0
  107. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/__init__.py +0 -0
  108. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/bash.py +0 -0
  109. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/python.py +0 -0
  110. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/Readme.md +0 -0
  111. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/bash/basic/dxapp.json +0 -0
  112. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/bash/basic/src/code.sh +0 -0
  113. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/bash/parallelized/dxapp.json +0 -0
  114. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/bash/parallelized/src/code.sh +0 -0
  115. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/bash/scatter-process-gather/dxapp.json +0 -0
  116. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/bash/scatter-process-gather/src/code.sh +0 -0
  117. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/nextflow/dxapp.json +0 -0
  118. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/nextflow/src/nextflow.sh +0 -0
  119. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/basic/dxapp.json +0 -0
  120. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/basic/src/code.py +0 -0
  121. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/basic/test/test.py +0 -0
  122. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/parallelized/dxapp.json +0 -0
  123. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/parallelized/src/code.py +0 -0
  124. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/parallelized/test/test.py +0 -0
  125. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/scatter-process-gather/dxapp.json +0 -0
  126. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/scatter-process-gather/src/code.py +0 -0
  127. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/templates/python/scatter-process-gather/test/test.py +0 -0
  128. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/templating/utils.py +0 -0
  129. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/__init__.py +0 -0
  130. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/batch_utils.py +0 -0
  131. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/completer.py +0 -0
  132. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/config.py +0 -0
  133. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/describe.py +0 -0
  134. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/exec_utils.py +0 -0
  135. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/executable_unbuilder.py +0 -0
  136. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/file_handle.py +0 -0
  137. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/file_load_utils.py +0 -0
  138. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/genomic_utils.py +0 -0
  139. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/job_log_client.py +0 -0
  140. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/local_exec_utils.py +0 -0
  141. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/pathmatch.py +0 -0
  142. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/pretty_print.py +0 -0
  143. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/printing.py +0 -0
  144. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/resolver.py +0 -0
  145. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/spelling_corrector.py +0 -0
  146. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/utils/version.py +0 -0
  147. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy/workflow_builder.py +0 -0
  148. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy.egg-info/dependency_links.txt +0 -0
  149. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy.egg-info/entry_points.txt +0 -0
  150. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy.egg-info/not-zip-safe +0 -0
  151. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy.egg-info/requires.txt +0 -0
  152. {dxpy-0.395.0 → dxpy-0.396.0}/dxpy.egg-info/top_level.txt +0 -0
  153. {dxpy-0.395.0 → dxpy-0.396.0}/requirements.txt +0 -0
  154. {dxpy-0.395.0 → dxpy-0.396.0}/requirements_setuptools.txt +0 -0
  155. {dxpy-0.395.0 → dxpy-0.396.0}/requirements_test.txt +0 -0
  156. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-clone-asset +0 -0
  157. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-docker +0 -0
  158. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-download-all-inputs +0 -0
  159. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-fetch-bundled-depends +0 -0
  160. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-generate-dxapp +0 -0
  161. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-jobutil-add-output +0 -0
  162. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-jobutil-dxlink +0 -0
  163. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-jobutil-get-identity-token +0 -0
  164. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-jobutil-new-job +0 -0
  165. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-jobutil-parse-link +0 -0
  166. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-jobutil-report-error +0 -0
  167. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-log-stream +0 -0
  168. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-mount-all-inputs +0 -0
  169. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-notebook-reconnect +0 -0
  170. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-print-bash-vars +0 -0
  171. {dxpy-0.395.0 → dxpy-0.396.0}/scripts/dx-upload-all-outputs +0 -0
  172. {dxpy-0.395.0 → dxpy-0.396.0}/setup.cfg +0 -0
  173. {dxpy-0.395.0 → dxpy-0.396.0}/setup.py +0 -0
  174. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_batch.py +0 -0
  175. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_create_cohort.py +0 -0
  176. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_describe.py +0 -0
  177. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dx-docker.py +0 -0
  178. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dx_app_wizard.py +0 -0
  179. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dx_bash_helpers.py +0 -0
  180. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dx_completion.py +0 -0
  181. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dx_symlink.py +0 -0
  182. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dxabs.py +0 -0
  183. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dxasset.py +0 -0
  184. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dxpy.py +0 -0
  185. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dxpy_utils.py +0 -0
  186. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_dxunpack.py +0 -0
  187. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_extract_assay.py +0 -0
  188. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_extract_dataset.py +0 -0
  189. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_extract_expression.py +0 -0
  190. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_extract_somatic.py +0 -0
  191. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_nextflow.py +0 -0
  192. {dxpy-0.395.0 → dxpy-0.396.0}/test/test_nextflow_ImageRef.py +0 -0
  193. {dxpy-0.395.0 → dxpy-0.396.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.395.0
3
+ Version: 0.396.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
@@ -524,6 +524,9 @@ def DXHTTPRequest(resource, data, method='POST', headers=None, auth=True,
524
524
  through to :func:`DXHTTPRequest`.
525
525
 
526
526
  '''
527
+ # option wasn't named correctly, so to not break existing clients rename it locally for clarity
528
+ safe_to_retry = always_retry
529
+
527
530
  if headers is None:
528
531
  headers = {}
529
532
 
@@ -729,7 +732,7 @@ def DXHTTPRequest(resource, data, method='POST', headers=None, auth=True,
729
732
  # up to (max_retries) subsequent retries.
730
733
  total_allowed_tries = max_retries + 1
731
734
  ok_to_retry = False
732
- is_retryable = always_retry or (method == 'GET') or _is_retryable_exception(e)
735
+ is_retryable = safe_to_retry or (method == 'GET') or _is_retryable_exception(e)
733
736
  # Because try_index is not incremented until we escape
734
737
  # this iteration of the loop, try_index is equal to the
735
738
  # number of tries that have failed so far, minus one.
@@ -810,7 +813,7 @@ def DXHTTPRequest(resource, data, method='POST', headers=None, auth=True,
810
813
  want_full_response=want_full_response,
811
814
  decode_response_body=decode_response_body, prepend_srv=prepend_srv,
812
815
  session_handler=session_handler,
813
- max_retries=max_retries, always_retry=always_retry, **kwargs)
816
+ max_retries=max_retries, always_retry=safe_to_retry, **kwargs)
814
817
  raise AssertionError('Should never reach this line: should never break out of loop')
815
818
 
816
819
 
@@ -367,7 +367,7 @@ class DXProject(DXContainer):
367
367
  allowed_executables=None, unset_allowed_executables=None,
368
368
  database_ui_view_only=None, external_upload_restricted=None,
369
369
  database_results_restricted=None, unset_database_results_restricted=None,
370
- **kwargs):
370
+ https_app_isolated_browsing=None, **kwargs):
371
371
  """
372
372
  :param name: If provided, the new project name
373
373
  :type name: string
@@ -395,6 +395,9 @@ class DXProject(DXContainer):
395
395
  :type unset_database_results_restricted: boolean
396
396
  :param version: If provided, the update will only occur if the value matches the current project's version number
397
397
  :type version: int
398
+ :param https_app_isolated_browsing: Whether all https access to jobs in this project should be wrapped in Isolated Browsing.
399
+ If true, httpsApp-enabled executables must have httpsApp.shared_access set to 'NONE' to run in this project.
400
+ :type https_app_isolated_browsing: boolean
398
401
 
399
402
  Updates the project with the new fields. All fields are
400
403
  optional. Fields that are not provided are not changed.
@@ -430,6 +433,8 @@ class DXProject(DXContainer):
430
433
  update_hash["databaseResultsRestricted"] = database_results_restricted
431
434
  if unset_database_results_restricted is not None:
432
435
  update_hash["databaseResultsRestricted"] = None
436
+ if https_app_isolated_browsing is not None:
437
+ update_hash["httpsAppIsolatedBrowsing"] = https_app_isolated_browsing
433
438
  dxpy.api.project_update(self._dxid, update_hash, **kwargs)
434
439
 
435
440
  def invite(self, invitee, level, send_email=True, **kwargs):
@@ -452,6 +452,8 @@ def get_update_project_args(args):
452
452
  input_params['databaseResultsRestricted'] = None
453
453
  if args.external_upload_restricted is not None:
454
454
  input_params['externalUploadRestricted'] = args.external_upload_restricted == 'true'
455
+ if args.https_app_isolated_browsing is not None:
456
+ input_params['httpsAppIsolatedBrowsing'] = args.https_app_isolated_browsing == 'true'
455
457
  return input_params
456
458
 
457
459
  def process_phi_param(args):
@@ -0,0 +1,9 @@
1
+ {
2
+ "aws:ap-southeast-2": "project-F4gVXbj5qkxXq3v038V7qjxq",
3
+ "aws:eu-central-1": "project-F3zqG304yvb1GVkZ6987jP9F",
4
+ "aws:eu-west-2-g": "project-G4B9FBpKKgK6g9v13q423FXk",
5
+ "aws:me-south-1": "project-GvGXBYV3pK4v9X7F2jv9zz94",
6
+ "aws:us-east-1": "project-B6JG897KGbkGb6Z7pQ9Q02jG",
7
+ "azure:westeurope": "project-FGZZFkjBPJqBXq1X84pq4VJf",
8
+ "azure:westus": "project-F3vk1q09FX8Jxxp20pq6z8P9"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "aws:ap-southeast-2": "project-G0zG49j5K4gjfv5V4FfqFK9X",
3
+ "aws:eu-central-1": "project-G0zG4F04KqpFYVz84FQkvF1P",
4
+ "aws:eu-west-2-g": "project-G4gyXkXK8BX9B0jp1V6029vJ",
5
+ "aws:me-south-1": "project-Gv8PVXk32gZ83kfp0pZ1v3V2",
6
+ "aws:us-east-1": "project-G0zG4B808VFFYVz84FQkvF1K",
7
+ "azure:westeurope": "project-G0zG4BQBq1XQby2F4FqQpPXv",
8
+ "azure:westus": "project-G0zG4B09ZJ5gx1Vz4Fb8Q9XX"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "aws:ap-southeast-2": "record-GzyP89850x72260z2yYyZQfJ",
3
+ "aws:eu-central-1": "record-GzyP7584vB9Yp0j7qfv5F134",
4
+ "aws:eu-west-2-g": "record-GzyP80XKPQ6K81G8XV89fyvZ",
5
+ "aws:me-south-1": "record-GzyP85V306B9xkQ4Pv1yf7Kz",
6
+ "aws:us-east-1": "record-GzyP6580KGjqV4gp6QXFGBzX",
7
+ "azure:westeurope": "record-GzyP9z0BzJx8zjf6bpvY6Yqv",
8
+ "azure:westus": "record-GzyP9vQ9zggPyfkj5GKKYVG5"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "aws:ap-southeast-2": "record-GzyJ2F0506kK1651KKg3K1Xq",
3
+ "aws:eu-central-1": "record-GzyJ2Yj4f2xpzzypx8G484FB",
4
+ "aws:eu-west-2-g": "record-GzyJ28XKKGJ7758Yj62X97bV",
5
+ "aws:me-south-1": "record-GzyJ2GV311jBJYzx2XpgZXQ0",
6
+ "aws:us-east-1": "record-GzyJ08002j9B36YfkbQQxpkf",
7
+ "azure:westeurope": "record-GzyJ4B8B095jZ8F4BF5p2Ggz",
8
+ "azure:westus": "record-GzyJ3q89X1QBpvfvgx9bZzgP"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "aws:ap-southeast-2": "record-GzyP8B05q2Y748ZfZXQ4139j",
3
+ "aws:eu-central-1": "record-GzyP7FQ4p6pX7q2Qbx06zX9v",
4
+ "aws:eu-west-2-g": "record-GzyP8FXKkjkqfjBjjZzFv68F",
5
+ "aws:me-south-1": "record-GzyP8593PgfZjYXPJP9FFqV4",
6
+ "aws:us-east-1": "record-GzyP6X00F3gq8p88gP7PQFkx",
7
+ "azure:westeurope": "record-GzyPB98BB2b867v2KK1BXx8p",
8
+ "azure:westus": "record-GzyPB6j9b5Yy81G8XV89jkZX"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "aws:ap-southeast-2": "record-GzyJ2Y05x444p61z5XKFP54Q",
3
+ "aws:eu-central-1": "record-GzyJ2xQ4Pffppvfvgx9bZzg6",
4
+ "aws:eu-west-2-g": "record-GzyJ2Z2KppXG1ZXvQ2kp08YQ",
5
+ "aws:me-south-1": "record-GzyJ2Y93z3b2Q4202Jpx1j78",
6
+ "aws:us-east-1": "record-GzyJ19j08Ffppvfvgx9bZzfz",
7
+ "azure:westeurope": "record-GzyJ4QjByJz29GJg3K3Gv2yB",
8
+ "azure:westus": "record-GzyJ45Q9xQPB36YfkbQQxpp8"
9
+ }
@@ -5,6 +5,7 @@ import errno
5
5
  import dxpy
6
6
  import json
7
7
  import shutil
8
+ import logging
8
9
  from dxpy.exceptions import ResourceNotFound
9
10
  from dxpy.nextflow.collect_images import run_nextaur_collect, bundle_docker_images
10
11
 
@@ -37,6 +38,22 @@ def get_template_dir():
37
38
  return path.join(path.dirname(dxpy.__file__), 'templating', 'templates', 'nextflow')
38
39
 
39
40
 
41
+ def get_project_with_assets(region):
42
+ nextflow_basepath = path.join(path.dirname(dxpy.__file__), 'nextflow')
43
+ projects_path = path.join(nextflow_basepath, "app_asset_projects_ids_prod.json")
44
+
45
+ try:
46
+ with open(projects_path, 'r') as projects_f:
47
+ project = json.load(projects_f)[region]
48
+ dxpy.describe(project, fields={}) # existence check
49
+ except ResourceNotFound:
50
+ projects_path = path.join(nextflow_basepath, "app_asset_projects_ids_staging.json")
51
+ with open(projects_path, 'r') as projects_f:
52
+ project = json.load(projects_f)[region]
53
+
54
+ return project
55
+
56
+
40
57
  def is_importer_job():
41
58
  try:
42
59
  with open("/home/dnanexus/dnanexus-job.json", "r") as f:
@@ -102,6 +119,8 @@ def get_regional_options(region, resources_dir, profile, cache_docker, nextflow_
102
119
  image_bundled = bundle_docker_images(image_refs)
103
120
  else:
104
121
  image_bundled = {}
122
+
123
+ project_with_assets = get_project_with_assets(region)
105
124
  regional_options = {
106
125
  region: {
107
126
  "systemRequirements": {
@@ -110,9 +129,18 @@ def get_regional_options(region, resources_dir, profile, cache_docker, nextflow_
110
129
  }
111
130
  },
112
131
  "assetDepends": [
113
- {"id": nextaur_asset},
114
- {"id": nextflow_asset},
115
- {"id": awscli_asset}
132
+ {"id": {"$dnanexus_link": {
133
+ "id": nextaur_asset,
134
+ "project": project_with_assets
135
+ }}},
136
+ {"id": {"$dnanexus_link": {
137
+ "id": nextflow_asset,
138
+ "project": project_with_assets
139
+ }}},
140
+ {"id": {"$dnanexus_link": {
141
+ "id": awscli_asset,
142
+ "project": project_with_assets
143
+ }}}
116
144
  ],
117
145
  "bundledDepends": image_bundled
118
146
  }
@@ -5412,6 +5412,10 @@ parser_update_project.add_argument('--external-upload-restricted', choices=["tru
5412
5412
  parser_update_project.add_argument('--database-ui-view-only', choices=["true", "false"],
5413
5413
  help="Whether the viewers on the project can access the database data directly")
5414
5414
  parser_update_project.add_argument('--bill-to', help="Update the user or org ID of the billing account", type=str)
5415
+ parser_update_project.add_argument('--https-app-isolated-browsing',
5416
+ help="Whether all https access to jobs in this project should be wrapped in Isolated Browsing."
5417
+ " If true, httpsApp-enabled executables must have httpsApp.shared_access set to 'NONE' to run in this project.",
5418
+ choices=["true", "false"])
5415
5419
  allowed_executables_group = parser_update_project.add_mutually_exclusive_group()
5416
5420
  allowed_executables_group.add_argument('--allowed-executables', help='Executable ID(s) this project is allowed to run. This operation overrides any existing list of executables.', type=str, nargs="+")
5417
5421
  allowed_executables_group.add_argument('--unset-allowed-executables', help='Removes any restriction to run executables as set by --allowed-executables', action='store_true')
@@ -0,0 +1 @@
1
+ version = '0.396.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dxpy
3
- Version: 0.395.0
3
+ Version: 0.396.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
@@ -90,6 +90,8 @@ dxpy/dx_extract_utils/somatic_filter_payload.py
90
90
  dxpy/nextflow/ImageRef.py
91
91
  dxpy/nextflow/ImageRefFactory.py
92
92
  dxpy/nextflow/__init__.py
93
+ dxpy/nextflow/app_asset_projects_ids_prod.json
94
+ dxpy/nextflow/app_asset_projects_ids_staging.json
93
95
  dxpy/nextflow/awscli_assets.json
94
96
  dxpy/nextflow/awscli_assets.staging.json
95
97
  dxpy/nextflow/collect_images.py
@@ -6848,7 +6848,8 @@ class TestDXClientNewUser(DXTestCase):
6848
6848
  "cloudIntegrationManagement": False,
6849
6849
  "appAccess": True,
6850
6850
  "projectAccess": "CONTRIBUTE",
6851
- "id": user_id
6851
+ "id": user_id,
6852
+ "treManagement": False
6852
6853
  }
6853
6854
  res = dxpy.api.org_find_members(self.org_id, {"id": [user_id]})["results"][0]
6854
6855
  self.assertEqual(res, exp)
@@ -6867,7 +6868,8 @@ class TestDXClientNewUser(DXTestCase):
6867
6868
  "cloudIntegrationManagement": False,
6868
6869
  "appAccess": True,
6869
6870
  "projectAccess": "CONTRIBUTE",
6870
- "id": user_id
6871
+ "id": user_id,
6872
+ "treManagement": False
6871
6873
  }
6872
6874
  res = dxpy.api.org_find_members(self.org_id, {"id": [user_id]})["results"][0]
6873
6875
  self.assertEqual(res, exp)
@@ -6884,7 +6886,8 @@ class TestDXClientNewUser(DXTestCase):
6884
6886
  "cloudIntegrationManagement": False,
6885
6887
  "appAccess": False,
6886
6888
  "projectAccess": "VIEW",
6887
- "id": user_id
6889
+ "id": user_id,
6890
+ "treManagement": False
6888
6891
  }
6889
6892
  res = dxpy.api.org_find_members(self.org_id, {"id": [user_id]})["results"][0]
6890
6893
  self.assertEqual(res, exp)
@@ -6902,7 +6905,8 @@ class TestDXClientNewUser(DXTestCase):
6902
6905
  "cloudIntegrationManagement": False,
6903
6906
  "appAccess": True,
6904
6907
  "projectAccess": "ADMINISTER",
6905
- "id": user_id
6908
+ "id": user_id,
6909
+ "treManagement": False
6906
6910
  }
6907
6911
  res = dxpy.api.org_find_members(self.org_id, {"id": [user_id]})["results"][0]
6908
6912
  self.assertEqual(res, exp)
@@ -7016,7 +7020,8 @@ class TestDXClientMembership(DXTestCase):
7016
7020
  "allowBillableActivities": True,
7017
7021
  "cloudIntegrationManagement": False,
7018
7022
  "appAccess": True,
7019
- "projectAccess": "ADMINISTER"}
7023
+ "projectAccess": "ADMINISTER",
7024
+ "treManagement": False}
7020
7025
  membership = self._org_find_members(self.user_id)
7021
7026
  self.assertEqual(membership, exp_membership)
7022
7027
 
@@ -7028,7 +7033,8 @@ class TestDXClientMembership(DXTestCase):
7028
7033
  "allowBillableActivities": False,
7029
7034
  "cloudIntegrationManagement": False,
7030
7035
  "appAccess": True,
7031
- "projectAccess": "CONTRIBUTE"}
7036
+ "projectAccess": "CONTRIBUTE",
7037
+ "treManagement": False}
7032
7038
  membership = self._org_find_members(self.user_id)
7033
7039
  self.assertEqual(membership, exp_membership)
7034
7040
 
@@ -7089,7 +7095,8 @@ class TestDXClientMembership(DXTestCase):
7089
7095
  "allowBillableActivities": True,
7090
7096
  "cloudIntegrationManagement": False,
7091
7097
  "appAccess": True,
7092
- "projectAccess": "ADMINISTER"}
7098
+ "projectAccess": "ADMINISTER",
7099
+ "treManagement": False}
7093
7100
  membership = self._org_find_members(self.user_id)
7094
7101
  self.assertEqual(membership, exp_membership)
7095
7102
 
@@ -7216,7 +7223,8 @@ class TestDXClientMembership(DXTestCase):
7216
7223
  "allowBillableActivities": True,
7217
7224
  "cloudIntegrationManagement": False,
7218
7225
  "appAccess": True,
7219
- "projectAccess": "ADMINISTER"}
7226
+ "projectAccess": "ADMINISTER",
7227
+ "treManagement": False}
7220
7228
  membership = self._org_find_members(self.user_id)
7221
7229
  self.assertEqual(membership, exp_membership)
7222
7230
 
@@ -7227,7 +7235,8 @@ class TestDXClientMembership(DXTestCase):
7227
7235
  "allowBillableActivities": False,
7228
7236
  "cloudIntegrationManagement": False,
7229
7237
  "projectAccess": "VIEW",
7230
- "appAccess": True}
7238
+ "appAccess": True,
7239
+ "treManagement": False}
7231
7240
  membership = self._org_find_members(self.user_id)
7232
7241
  self.assertEqual(membership, exp_membership)
7233
7242
 
@@ -7238,7 +7247,8 @@ class TestDXClientMembership(DXTestCase):
7238
7247
  "allowBillableActivities": True,
7239
7248
  "cloudIntegrationManagement": False,
7240
7249
  "projectAccess": "VIEW",
7241
- "appAccess": False}
7250
+ "appAccess": False,
7251
+ "treManagement": False}
7242
7252
 
7243
7253
  membership = self._org_find_members(self.user_id)
7244
7254
  self.assertEqual(membership, exp_membership)
@@ -1,9 +0,0 @@
1
- {
2
- "aws:ap-southeast-2": "record-GzKXzG85y5b99vKK95b4vpKy",
3
- "aws:eu-central-1": "record-GzKY0y04V0179X5Bz9K355k3",
4
- "aws:eu-west-2-g": "record-GzKY3jBKXjZ413XPP0yv4fgy",
5
- "aws:me-south-1": "record-GzKY5G132j8qz8yk710gjKJk",
6
- "aws:us-east-1": "record-GzKXx300FZzQ73Q0ykjvQ1GV",
7
- "azure:westeurope": "record-GzKY8zjB5PzvxVg2Gy3g77QK",
8
- "azure:westus": "record-GzKYJf099Z602KYFxJzvJQj1"
9
- }
@@ -1,9 +0,0 @@
1
- {
2
- "aws:ap-southeast-2": "record-GzKXFyj51PXF1f67BYjP54Px",
3
- "aws:eu-central-1": "record-GzKXJgj4bPkjfBg634qfx8pF",
4
- "aws:eu-west-2-g": "record-GzKXPJ2K5b2xPyZbyx3pZg7Y",
5
- "aws:me-south-1": "record-GzKXQv93j7qB0fVgGXVf71Z9",
6
- "aws:us-east-1": "record-GzKX8p00kP5q1f67BYjP54PZ",
7
- "azure:westeurope": "record-GzKXZGjB6fJ6vb04b7VBV2Kx",
8
- "azure:westus": "record-GzKXgVj9YqqxPyZbyx3pZg8G"
9
- }
@@ -1,9 +0,0 @@
1
- {
2
- "aws:ap-southeast-2": "record-Gyv7f7858VGjqZ1jjJjyjJpv",
3
- "aws:eu-central-1": "record-Gyv7g28474vK3JPK4g5BP1PB",
4
- "aws:eu-west-2-g": "record-Gyv810BKZkKyyxkJGzbK2yV4",
5
- "aws:me-south-1": "record-Gyv82vk306Q8b9VbyqJpjbpj",
6
- "aws:us-east-1": "record-Gyv6XQ00zzv5bfPgGqqPJ6Gq",
7
- "azure:westeurope": "record-Gyv86X8B9bQ8160VF0Gfp8QX",
8
- "azure:westus": "record-Gyv8B3j94xjy8K0PK914Pvfp"
9
- }
@@ -1,9 +0,0 @@
1
- {
2
- "aws:ap-southeast-2": "record-Gyqpv0Q5yv814Pf0P8x5Xq79",
3
- "aws:eu-central-1": "record-Gyqpxv842Yx54X2y8zVkQzb5",
4
- "aws:eu-west-2-g": "record-Gyqpz9pKP7qXqyjjGP2Vx4Bp",
5
- "aws:me-south-1": "record-Gyqq12k3q795K9pb8Pfqvzf2",
6
- "aws:us-east-1": "record-GyqkJ5j0z0fqyxpy40ygBGpK",
7
- "azure:westeurope": "record-Gyqq478BqQQGgPBPYK78qJ1J",
8
- "azure:westus": "record-Gyqq7zQ9JP62qyjjGP2Vx4F3"
9
- }
@@ -1 +0,0 @@
1
- version = '0.395.0'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes