cumulusci 3.53.0.dev1__tar.gz → 3.54.0.dev0__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 (617) hide show
  1. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/HISTORY.rst +21 -0
  2. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/PKG-INFO +22 -1
  3. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/cci.py +7 -1
  4. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/error.py +16 -9
  5. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/org.py +20 -5
  6. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_cci.py +6 -0
  7. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_error.py +63 -49
  8. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_org.py +67 -0
  9. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_service.py +15 -14
  10. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_utils.py +55 -0
  11. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/utils.py +32 -0
  12. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/project_config.py +17 -6
  13. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/tests/test_config.py +10 -3
  14. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/exceptions.py +6 -0
  15. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/encrypted_file_project_keychain.py +25 -2
  16. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/source/github.py +5 -13
  17. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_source.py +80 -3
  18. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_cumulusci_library.py +1 -0
  19. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/package_install.py +29 -0
  20. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/test_metadata.py +15 -15
  21. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/test_package_install.py +24 -0
  22. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/extract.py +2 -2
  23. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/load.py +6 -10
  24. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/mapping_parser.py +12 -15
  25. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery.py +12 -2
  26. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery_utils/queue_manager.py +76 -29
  27. cumulusci-3.54.0.dev0/cumulusci/tasks/bulkdata/tests/integration_test_utils.py +24 -0
  28. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_extract.py +8 -2
  29. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_load.py +18 -9
  30. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_mapping_parser.py +48 -42
  31. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_snowfakery.py +6 -22
  32. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_step.py +27 -36
  33. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_updates.py +115 -8
  34. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/utils.py +9 -1
  35. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/update_data.py +44 -10
  36. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_release_report.py +1 -1
  37. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/metadata_map.yml +8 -0
  38. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/test_generator.py +4 -4
  39. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/libdoc.py +9 -5
  40. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/test_robotframework.py +16 -12
  41. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/composite.py +1 -1
  42. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/install_package_version.py +47 -12
  43. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_install_package_version.py +48 -0
  44. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_update_dependencies.py +66 -1
  45. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/update_dependencies.py +38 -2
  46. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_create_package_version.py +8 -11
  47. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_metadeploy.py +2 -0
  48. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/util.py +21 -6
  49. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/parallel/task_worker_queues/parallel_worker.py +29 -16
  50. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/parallel/task_worker_queues/parallel_worker_queue.py +13 -4
  51. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/parallel/task_worker_queues/tests/test_parallel_worker.py +4 -3
  52. cumulusci-3.54.0.dev0/cumulusci/version.txt +1 -0
  53. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/PKG-INFO +22 -1
  54. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/SOURCES.txt +2 -0
  55. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/requires.txt +1 -1
  56. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/robot.rst +1 -0
  57. cumulusci-3.54.0.dev0/docs/robot_locators.rst +203 -0
  58. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/requirements/dev.txt +4 -0
  59. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/requirements/prod.txt +1 -1
  60. cumulusci-3.53.0.dev1/cumulusci/version.txt +0 -1
  61. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/AUTHORS.rst +0 -0
  62. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/CONTRIBUTING.rst +0 -0
  63. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/LICENSE +0 -0
  64. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/MANIFEST.in +0 -0
  65. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/README.rst +0 -0
  66. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/__init__.py +0 -0
  67. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/__main__.py +0 -0
  68. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/__init__.py +0 -0
  69. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/flow.py +0 -0
  70. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/logger.py +0 -0
  71. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/plan.py +0 -0
  72. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/project.py +0 -0
  73. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/runtime.py +0 -0
  74. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/service.py +0 -0
  75. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/task.py +0 -0
  76. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/__init__.py +0 -0
  77. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_flow.py +0 -0
  78. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_logger.py +0 -0
  79. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_plan.py +0 -0
  80. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_project.py +0 -0
  81. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_runtime.py +0 -0
  82. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_task.py +0 -0
  83. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_ui.py +0 -0
  84. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/utils.py +0 -0
  85. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/ui.py +0 -0
  86. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/conftest.py +0 -0
  87. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/__init__.py +0 -0
  88. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/BaseConfig.py +0 -0
  89. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/BaseTaskFlowConfig.py +0 -0
  90. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/OrgConfig.py +0 -0
  91. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/ScratchOrgConfig.py +0 -0
  92. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/__init__.py +0 -0
  93. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/base_config.py +0 -0
  94. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/base_task_flow_config.py +0 -0
  95. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/marketing_cloud_service_config.py +0 -0
  96. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/oauth2_service_config.py +0 -0
  97. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/org_config.py +0 -0
  98. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/scratch_org_config.py +0 -0
  99. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/sfdx_org_config.py +0 -0
  100. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/tests/_test_config_backwards_compatibility.py +0 -0
  101. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/tests/test_config_expensive.py +0 -0
  102. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/tests/test_config_util.py +0 -0
  103. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/universal_config.py +0 -0
  104. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/util.py +0 -0
  105. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/debug.py +0 -0
  106. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/__init__.py +0 -0
  107. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/dependencies.py +0 -0
  108. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/github.py +0 -0
  109. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/resolvers.py +0 -0
  110. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/__init__.py +0 -0
  111. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/conftest.py +0 -0
  112. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/test_dependencies.py +0 -0
  113. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/test_github.py +0 -0
  114. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/test_resolvers.py +0 -0
  115. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/utils.py +0 -0
  116. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/flowrunner.py +0 -0
  117. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/github.py +0 -0
  118. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/__init__.py +0 -0
  119. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/base_project_keychain.py +0 -0
  120. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/environment_project_keychain.py +0 -0
  121. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/tests/conftest.py +0 -0
  122. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/tests/test_base_project_keychain.py +0 -0
  123. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/tests/test_encrypted_file_project_keychain.py +0 -0
  124. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/metadeploy.py +0 -0
  125. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/runtime.py +0 -0
  126. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/sfdx.py +0 -0
  127. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/source/__init__.py +0 -0
  128. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/source/local_folder.py +0 -0
  129. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tasks.py +0 -0
  130. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/template_utils.py +0 -0
  131. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/__init__.py +0 -0
  132. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_exceptions.py +0 -0
  133. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_flowrunner.py +0 -0
  134. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_github.py +0 -0
  135. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_sfdx.py +0 -0
  136. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_tasks.py +0 -0
  137. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_utils.py +0 -0
  138. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_utils_merge_config.py +0 -0
  139. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_versions.py +0 -0
  140. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/utils.py +0 -0
  141. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/utils.py +0 -0
  142. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/versions.py +0 -0
  143. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cumulusci.yml +0 -0
  144. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/admin_profile.xml +0 -0
  145. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/delete_excludes.txt +0 -0
  146. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/README.md +0 -0
  147. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/cumulusci.yml +0 -0
  148. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/dot-gitignore +0 -0
  149. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/mapping.yml +0 -0
  150. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/scratch_def.json +0 -0
  151. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/__init__.py +0 -0
  152. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/client.py +0 -0
  153. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/exceptions.py +0 -0
  154. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/salesforce.py +0 -0
  155. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/tests/__init__.py +0 -0
  156. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/tests/test_client.py +0 -0
  157. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/tests/test_salesforce.py +0 -0
  158. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/CumulusCI.py +0 -0
  159. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/CumulusCI.robot +0 -0
  160. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/Salesforce.py +0 -0
  161. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/Salesforce.robot +0 -0
  162. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/__init__.py +0 -0
  163. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/form_handlers.py +0 -0
  164. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/locator_manager.py +0 -0
  165. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/locators_52.py +0 -0
  166. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/locators_53.py +0 -0
  167. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/locators_54.py +0 -0
  168. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/BasePageObjects.py +0 -0
  169. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/ObjectManagerPageObject.py +0 -0
  170. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/PageObjectLibrary.py +0 -0
  171. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/PageObjects.py +0 -0
  172. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/__init__.py +0 -0
  173. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/baseobjects.py +0 -0
  174. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/perftests/short/collection_perf.robot +0 -0
  175. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/BarTestPage.py +0 -0
  176. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/FooTestPage.py +0 -0
  177. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/cumulusci/base.robot +0 -0
  178. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/cumulusci/bulkdata.robot +0 -0
  179. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/cumulusci/communities.robot +0 -0
  180. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/cumulusci/datagen.robot +0 -0
  181. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/TestLibraryA.py +0 -0
  182. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/TestLibraryB.py +0 -0
  183. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/TestListener.py +0 -0
  184. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/api.robot +0 -0
  185. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/browsers.robot +0 -0
  186. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/classic.robot +0 -0
  187. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/create_contact.robot +0 -0
  188. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/faker.robot +0 -0
  189. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/forms.robot +0 -0
  190. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/locators.robot +0 -0
  191. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/base_pageobjects.robot +0 -0
  192. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/example_page_object.py +0 -0
  193. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/listing_page.robot +0 -0
  194. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/objectmanager.robot +0 -0
  195. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/pageobjects.robot +0 -0
  196. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/performance.robot +0 -0
  197. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/populate.robot +0 -0
  198. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/test_testlistener.py +0 -0
  199. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/ui.robot +0 -0
  200. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_locator_manager.py +0 -0
  201. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_pageobjects.py +0 -0
  202. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_salesforce.py +0 -0
  203. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_salesforce_locators.py +0 -0
  204. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_template_util.py +0 -0
  205. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_utils.py +0 -0
  206. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/utils.py +0 -0
  207. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/__init__.py +0 -0
  208. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/exceptions.py +0 -0
  209. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/mc_soap_envelopes.py +0 -0
  210. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/metadata.py +0 -0
  211. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/org_schema.py +0 -0
  212. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/org_schema_models.py +0 -0
  213. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/package_zip.py +0 -0
  214. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/soap_envelopes.py +0 -0
  215. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/__init__.py +0 -0
  216. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/metadata_test_strings.py +0 -0
  217. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/test_package_zip.py +0 -0
  218. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/test_utils.py +0 -0
  219. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/utils.py +0 -0
  220. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/schema/cumulusci.jsonschema.json +0 -0
  221. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/__init__.py +0 -0
  222. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/__init__.py +0 -0
  223. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/anon.py +0 -0
  224. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/batch.py +0 -0
  225. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/testrunner.py +0 -0
  226. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/tests/test_apex_tasks.py +0 -0
  227. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/__init__.py +0 -0
  228. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/base_generate_data_task.py +0 -0
  229. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/dates.py +0 -0
  230. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/delete.py +0 -0
  231. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/factory_utils.py +0 -0
  232. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate.py +0 -0
  233. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate_and_load_data.py +0 -0
  234. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate_and_load_data_from_yaml.py +0 -0
  235. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate_from_yaml.py +0 -0
  236. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate_mapping.py +0 -0
  237. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery_utils/snowfakery_run_until.py +0 -0
  238. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery_utils/snowfakery_working_directory.py +0 -0
  239. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery_utils/subtask_configurator.py +0 -0
  240. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/step.py +0 -0
  241. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/Account.json +0 -0
  242. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/Case.json +0 -0
  243. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/Contact.json +0 -0
  244. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/Opportunity.json +0 -0
  245. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/OpportunityContactRole.json +0 -0
  246. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/__init__.py +0 -0
  247. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/dummy_data_factory.py +0 -0
  248. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/global_describe.json +0 -0
  249. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping-oid.yml +0 -0
  250. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_after.yml +0 -0
  251. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_simple.yml +0 -0
  252. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_v1.yml +0 -0
  253. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_v2.yml +0 -0
  254. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_v3.yml +0 -0
  255. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_vanilla_sf.yml +0 -0
  256. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mock_data_factory_without_mapping.py +0 -0
  257. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/recordtypes.yml +0 -0
  258. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/child/child2.yml +0 -0
  259. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/child.yml +0 -0
  260. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/gen_npsp_standard_objects.recipe.yml +0 -0
  261. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/include_parent.yml +0 -0
  262. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/npsp_standard_objects_macros.yml +0 -0
  263. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/options.recipe.yml +0 -0
  264. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml +0 -0
  265. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/sf_standard_object_macros.yml +0 -0
  266. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery.load.yml +0 -0
  267. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery.recipe.yml +0 -0
  268. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_2.load.yml +0 -0
  269. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels.load.yml +0 -0
  270. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels.recipe.yml +0 -0
  271. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels_2.load.yml +0 -0
  272. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/unique_values.recipe.yml +0 -0
  273. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_base_generate_data_tasks.py +0 -0
  274. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_dates.py +0 -0
  275. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_delete.py +0 -0
  276. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_factory_utils.py +0 -0
  277. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_generate_and_load.py +0 -0
  278. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_generate_from_snowfakery_task.py +0 -0
  279. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_generatemapping.py +0 -0
  280. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_utils.py +0 -0
  281. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/utils.py +0 -0
  282. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/command.py +0 -0
  283. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/connectedapp.py +0 -0
  284. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/create_package_version.py +0 -0
  285. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/datadictionary.py +0 -0
  286. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/dx_convert_from.py +0 -0
  287. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/__init__.py +0 -0
  288. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/base.py +0 -0
  289. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/commit_status.py +0 -0
  290. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/merge.py +0 -0
  291. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/publish.py +0 -0
  292. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/pull_request.py +0 -0
  293. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/release.py +0 -0
  294. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/release_report.py +0 -0
  295. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tag.py +0 -0
  296. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/__init__.py +0 -0
  297. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_commit_status.py +0 -0
  298. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_merge.py +0 -0
  299. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_publish.py +0 -0
  300. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_pull_request.py +0 -0
  301. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_release.py +0 -0
  302. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_tag.py +0 -0
  303. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_util.py +0 -0
  304. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/util_github_api.py +0 -0
  305. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/util.py +0 -0
  306. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/__init__.py +0 -0
  307. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/api.py +0 -0
  308. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/base.py +0 -0
  309. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/deploy.py +0 -0
  310. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/get_user_info.py +0 -0
  311. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/mc_constants.py +0 -0
  312. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/__init__.py +0 -0
  313. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/conftest.py +0 -0
  314. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/expected-payload.json +0 -0
  315. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_api.py +0 -0
  316. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_api_soap_envelopes.py +0 -0
  317. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_base.py +0 -0
  318. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_deploy.py +0 -0
  319. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_get_user_info.py +0 -0
  320. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/__init__.py +0 -0
  321. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/ee_src.py +0 -0
  322. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/managed_src.py +0 -0
  323. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/modify.py +0 -0
  324. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/package.py +0 -0
  325. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/__init__.py +0 -0
  326. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/destructiveChanges.xml +0 -0
  327. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/package.xml +0 -0
  328. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/reports/namespace__TestFolder/TestReport.report +0 -0
  329. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/sample_package.xml +0 -0
  330. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/test_ee_src.py +0 -0
  331. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/test_managed_src.py +0 -0
  332. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/test_modify.py +0 -0
  333. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/test_package.py +0 -0
  334. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/__init__.py +0 -0
  335. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/base.py +0 -0
  336. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/duplicate_rules.py +0 -0
  337. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/field_sets.py +0 -0
  338. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/help_text.py +0 -0
  339. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/layouts.py +0 -0
  340. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/permissions.py +0 -0
  341. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/picklists.py +0 -0
  342. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/sharing.py +0 -0
  343. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_base.py +0 -0
  344. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_duplicate_rules.py +0 -0
  345. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_field_sets.py +0 -0
  346. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_help_text.py +0 -0
  347. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_layouts.py +0 -0
  348. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_permissions.py +0 -0
  349. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_picklists.py +0 -0
  350. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_sharing.py +0 -0
  351. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_value_sets.py +0 -0
  352. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/value_sets.py +0 -0
  353. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadeploy.py +0 -0
  354. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metaxml.py +0 -0
  355. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/__init__.py +0 -0
  356. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/licenses.py +0 -0
  357. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/packages.py +0 -0
  358. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/permsets.py +0 -0
  359. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/recordtypes.py +0 -0
  360. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/settings.py +0 -0
  361. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/sobjects.py +0 -0
  362. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_licenses.py +0 -0
  363. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_packages.py +0 -0
  364. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_permset_preflights.py +0 -0
  365. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_recordtypes.py +0 -0
  366. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_settings.py +0 -0
  367. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_sobjects.py +0 -0
  368. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/README.md +0 -0
  369. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/__init__.py +0 -0
  370. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/push_api.py +0 -0
  371. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/pushfails.py +0 -0
  372. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/tasks.py +0 -0
  373. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/tests/conftest.py +0 -0
  374. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/tests/test_push_api.py +0 -0
  375. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/tests/test_push_tasks.py +0 -0
  376. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/README.md +0 -0
  377. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/__init__.py +0 -0
  378. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/exceptions.py +0 -0
  379. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/generator.py +0 -0
  380. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/parser.py +0 -0
  381. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/provider.py +0 -0
  382. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/task.py +0 -0
  383. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/__init__.py +0 -0
  384. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/full/example1.md +0 -0
  385. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/multi/1.txt +0 -0
  386. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/multi/2.txt +0 -0
  387. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/multi/3.txt +0 -0
  388. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/single/1.txt +0 -0
  389. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/test_parser.py +0 -0
  390. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/test_provider.py +0 -0
  391. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/test_task.py +0 -0
  392. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/utils.py +0 -0
  393. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/__init__.py +0 -0
  394. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/debugger/DebugListener.py +0 -0
  395. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/debugger/__init__.py +0 -0
  396. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/debugger/model.py +0 -0
  397. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/debugger/ui.py +0 -0
  398. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/lint.py +0 -0
  399. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/lint_defaults.txt +0 -0
  400. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/robotframework.py +0 -0
  401. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/stylesheet.css +0 -0
  402. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/template.html +0 -0
  403. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/TestLibrary.py +0 -0
  404. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/TestPageObjects.py +0 -0
  405. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/TestResource.robot +0 -0
  406. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/failing_tests.robot +0 -0
  407. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/performance.robot +0 -0
  408. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/test_debugger.py +0 -0
  409. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/test_robot_lint.py +0 -0
  410. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/test_robot_parallel.py +0 -0
  411. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseRetrieveMetadata.py +0 -0
  412. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseSalesforceApiTask.py +0 -0
  413. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseSalesforceMetadataApiTask.py +0 -0
  414. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseSalesforceTask.py +0 -0
  415. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseUninstallMetadata.py +0 -0
  416. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/CreateCommunity.py +0 -0
  417. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/CreatePackage.py +0 -0
  418. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/Deploy.py +0 -0
  419. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/DeployBundles.py +0 -0
  420. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/EnsureRecordTypes.py +0 -0
  421. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/GetInstalledPackages.py +0 -0
  422. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/ListCommunities.py +0 -0
  423. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/ListCommunityTemplates.py +0 -0
  424. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/PublishCommunity.py +0 -0
  425. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/RetrievePackaged.py +0 -0
  426. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/RetrieveReportsAndDashboards.py +0 -0
  427. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/RetrieveUnpackaged.py +0 -0
  428. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/SOQLQuery.py +0 -0
  429. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallLocal.py +0 -0
  430. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallLocalBundles.py +0 -0
  431. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallLocalNamespacedBundles.py +0 -0
  432. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallPackage.py +0 -0
  433. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallPackaged.py +0 -0
  434. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UpdateAdminProfile.py +0 -0
  435. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/__init__.py +0 -0
  436. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/activate_flow.py +0 -0
  437. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/create_permission_sets.py +0 -0
  438. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/custom_settings.py +0 -0
  439. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/custom_settings_wait.py +0 -0
  440. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/enable_prediction.py +0 -0
  441. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/insert_record.py +0 -0
  442. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/license_preflights.py +0 -0
  443. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/network_member_group.py +0 -0
  444. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/org_settings.py +0 -0
  445. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/package_upload.py +0 -0
  446. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/profiles.py +0 -0
  447. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/promote_package_version.py +0 -0
  448. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/sourcetracking.py +0 -0
  449. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/__init__.py +0 -0
  450. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_CreateCommunity.py +0 -0
  451. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_CreatePackage.py +0 -0
  452. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_Deploy.py +0 -0
  453. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_DeployBundles.py +0 -0
  454. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_EnsureRecordTypes.py +0 -0
  455. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_ListCommunities.py +0 -0
  456. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_ListCommunityTemplates.py +0 -0
  457. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_PackageUpload.py +0 -0
  458. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_ProfileGrantAllAccess.py +0 -0
  459. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_PublishCommunity.py +0 -0
  460. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_RetrievePackaged.py +0 -0
  461. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_RetrieveReportsAndDashboards.py +0 -0
  462. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_RetrieveUnpackaged.py +0 -0
  463. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_SOQLQuery.py +0 -0
  464. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallLocal.py +0 -0
  465. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallLocalBundles.py +0 -0
  466. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallLocalNamespacedBundles.py +0 -0
  467. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallPackage.py +0 -0
  468. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallPackaged.py +0 -0
  469. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallPackagedIncremental.py +0 -0
  470. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_activate_flow.py +0 -0
  471. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_base_tasks.py +0 -0
  472. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_composite.py +0 -0
  473. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_create_permission_sets.py +0 -0
  474. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_custom_settings.py +0 -0
  475. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_custom_settings_wait.py +0 -0
  476. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_enable_prediction.py +0 -0
  477. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_insert_record.py +0 -0
  478. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_network_member_group.py +0 -0
  479. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_org_settings.py +0 -0
  480. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_profiles.py +0 -0
  481. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_sourcetracking.py +0 -0
  482. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_trigger_handlers.py +0 -0
  483. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/util.py +0 -0
  484. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/trigger_handlers.py +0 -0
  485. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/uninstall_packaged_incremental.py +0 -0
  486. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/update_profile.py +0 -0
  487. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/permsets.py +0 -0
  488. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/photos.py +0 -0
  489. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/tests/photo.mock.txt +0 -0
  490. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/tests/test_permsets.py +0 -0
  491. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/tests/test_photos.py +0 -0
  492. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/sfdx.py +0 -0
  493. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/__init__.py +0 -0
  494. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/conftest.py +0 -0
  495. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_command.py +0 -0
  496. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_connectedapp.py +0 -0
  497. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_datadictionary.py +0 -0
  498. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_dx_convert_from.py +0 -0
  499. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_metaxml.py +0 -0
  500. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_promote_package_version.py +0 -0
  501. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_pushfails.py +0 -0
  502. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_salesforce.py +0 -0
  503. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_sfdx.py +0 -0
  504. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_util.py +0 -0
  505. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/util.py +0 -0
  506. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/__init__.py +0 -0
  507. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/pytest_plugins/pytest_sf_orgconnect.py +0 -0
  508. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/pytest_plugins/pytest_sf_vcr.py +0 -0
  509. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/pytest_plugins/pytest_typeguard.py +0 -0
  510. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_entry_points.py +0 -0
  511. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_integration_infrastructure.py +0 -0
  512. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_main.py +0 -0
  513. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_schema.py +0 -0
  514. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_utils.py +0 -0
  515. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/__init__.py +0 -0
  516. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/classutils.py +0 -0
  517. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/fileutils.py +0 -0
  518. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/git.py +0 -0
  519. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/http/multi_request.py +0 -0
  520. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/http/requests_utils.py +0 -0
  521. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/http/tests/test_multi_request.py +0 -0
  522. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/iterators.py +0 -0
  523. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/logging.py +0 -0
  524. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_fileutils.py +0 -0
  525. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_git.py +0 -0
  526. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_logging.py +0 -0
  527. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_org_schema.py +0 -0
  528. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_org_schema_models.py +0 -0
  529. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_waiting.py +0 -0
  530. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/waiting.py +0 -0
  531. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/__init__.py +0 -0
  532. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/metadata_tree.py +0 -0
  533. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/robot_xml.py +0 -0
  534. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/salesforce_encoding.py +0 -0
  535. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/test/test_metadata_tree.py +0 -0
  536. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/test/test_salesforce_encoding.py +0 -0
  537. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/cumulusci_yml.py +0 -0
  538. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/model_parser.py +0 -0
  539. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/safer_loader.py +0 -0
  540. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/tests/bad_cci.yml +0 -0
  541. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/tests/test_cumulusci_yml.py +0 -0
  542. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/tests/test_model_parser.py +0 -0
  543. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/tests/test_safer_loader.py +0 -0
  544. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/ziputils.py +0 -0
  545. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/dependency_links.txt +0 -0
  546. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/entry_points.txt +0 -0
  547. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/not-zip-safe +0 -0
  548. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/top_level.txt +0 -0
  549. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/2gp_testing.rst +0 -0
  550. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/Makefile +0 -0
  551. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/about.rst +0 -0
  552. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/cheat_sheet.rst +0 -0
  553. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/cli.rst +0 -0
  554. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/commands.rst +0 -0
  555. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/concepts.rst +0 -0
  556. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/conf.py +0 -0
  557. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/config.rst +0 -0
  558. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/connected_orgs.rst +0 -0
  559. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/continuous_integration.rst +0 -0
  560. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/contributing.rst +0 -0
  561. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/cookbook.rst +0 -0
  562. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/cumulusci_flow.rst +0 -0
  563. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/data.rst +0 -0
  564. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/dev.rst +0 -0
  565. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image1.png +0 -0
  566. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image12.png +0 -0
  567. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image15.png +0 -0
  568. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image17.png +0 -0
  569. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image3.png +0 -0
  570. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/env_var_reference.rst +0 -0
  571. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/get_started.rst +0 -0
  572. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/github_actions.rst +0 -0
  573. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/headless.rst +0 -0
  574. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/history.rst +0 -0
  575. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/cci_service_list.png +0 -0
  576. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/cumulus_ci_workflow.png +0 -0
  577. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/env-var.png +0 -0
  578. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/env-var2.png +0 -0
  579. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github-commit_status_error.png +0 -0
  580. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github-commit_status_pass.png +0 -0
  581. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github-creating_a_uat_release.png +0 -0
  582. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github_checks.png +0 -0
  583. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github_personal_access_token_scopes.png +0 -0
  584. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github_secrets.png +0 -0
  585. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github_workflow.png +0 -0
  586. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/locate_elements_screenshot.png +0 -0
  587. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/pipx.png +0 -0
  588. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/robot_log_screenshot.png +0 -0
  589. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/robot_toggled_results_screenshot.png +0 -0
  590. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/salesforce-org-process.png +0 -0
  591. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/service-list.png +0 -0
  592. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/skipping_task.png +0 -0
  593. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/windows_python.png +0 -0
  594. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/windows_python_success.png +0 -0
  595. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/index.rst +0 -0
  596. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/install.rst +0 -0
  597. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/internals.rst +0 -0
  598. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/intro.rst +0 -0
  599. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/make.bat +0 -0
  600. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/managed_2gp.rst +0 -0
  601. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/managed_package.rst +0 -0
  602. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/metadata_etl.rst +0 -0
  603. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/npsp_eda_2gp.rst +0 -0
  604. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/packaging.rst +0 -0
  605. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/push_upgrades.rst +0 -0
  606. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/reference.rst +0 -0
  607. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/release_notes.rst +0 -0
  608. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/robot_advanced.rst +0 -0
  609. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/robot_debugger.rst +0 -0
  610. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/robot_tutorial.rst +0 -0
  611. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/scratch_orgs.rst +0 -0
  612. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/tutorial.rst +0 -0
  613. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/unlocked_package.rst +0 -0
  614. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/unpackaged.rst +0 -0
  615. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/pyproject.toml +0 -0
  616. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/setup.cfg +0 -0
  617. {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/setup.py +0 -0
@@ -2,6 +2,27 @@
2
2
  History
3
3
  =======
4
4
 
5
+ 3.53.0 (2022-02-24)
6
+ -------------------
7
+
8
+ Critical Changes
9
+
10
+ - CumulusCI now ships with Snowfakery 3.0. See the `Snowfakery release notes <https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v3.0.0>`__. Snowfakery 3.0 ships with opt-in features that will become the default in June 2022; please `test your recipes <https://snowfakery.readthedocs.io/en/latest/#snowfakery-3>`__ now with ``snowfakery_version: 3`` to ensure compatibility.
11
+
12
+ Changes
13
+
14
+ - CumulusCI now has an ``update_data`` task that allows updates to existing datasets, in coordination with Snowfakery 3.0.
15
+ - Orgs connected using ``cci org connect`` now keep track of which ``connected_app`` service was used to connect them, and will use the same ``connected_app`` service when getting a fresh access token, even if it isn't currently the default ``connected_app`` service. This makes it easier to use CumulusCI with multiple ``connected_app`` services. (Orgs that were connected before this update will continue to use the default ``connected_app`` service.)
16
+ - When connecting a custom ``connected_app`` service, a default ``login_url`` can be specified (to use a login URL other than https://login.salesforce.com when connecting orgs using this ``connected_app`` service).
17
+ - The ``deploy_marketing_cloud_package`` task now utilizes the new API endpoint for deployments.
18
+ - CumulusCI commands are more resilient in the face of corrupted or impossible to decode org config files.
19
+ - We added documentation about managing Robot Framework locators
20
+ - CumulusCI will now warn Windows users if long pathname support is not set up correctly.
21
+
22
+ Issues Closed
23
+
24
+ - Fixed a bug in the JSON format output of cci service list --json
25
+
5
26
  3.52.0 (2022-02-03)
6
27
  -------------------
7
28
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cumulusci
3
- Version: 3.53.0.dev1
3
+ Version: 3.54.0.dev0
4
4
  Summary: Build and release tools for Salesforce developers
5
5
  Home-page: https://github.com/SFDO-Tooling/CumulusCI
6
6
  Author: Salesforce.org
@@ -66,6 +66,27 @@ Description: =========
66
66
  History
67
67
  =======
68
68
 
69
+ 3.53.0 (2022-02-24)
70
+ -------------------
71
+
72
+ Critical Changes
73
+
74
+ - CumulusCI now ships with Snowfakery 3.0. See the `Snowfakery release notes <https://github.com/SFDO-Tooling/Snowfakery/releases/tag/v3.0.0>`__. Snowfakery 3.0 ships with opt-in features that will become the default in June 2022; please `test your recipes <https://snowfakery.readthedocs.io/en/latest/#snowfakery-3>`__ now with ``snowfakery_version: 3`` to ensure compatibility.
75
+
76
+ Changes
77
+
78
+ - CumulusCI now has an ``update_data`` task that allows updates to existing datasets, in coordination with Snowfakery 3.0.
79
+ - Orgs connected using ``cci org connect`` now keep track of which ``connected_app`` service was used to connect them, and will use the same ``connected_app`` service when getting a fresh access token, even if it isn't currently the default ``connected_app`` service. This makes it easier to use CumulusCI with multiple ``connected_app`` services. (Orgs that were connected before this update will continue to use the default ``connected_app`` service.)
80
+ - When connecting a custom ``connected_app`` service, a default ``login_url`` can be specified (to use a login URL other than https://login.salesforce.com when connecting orgs using this ``connected_app`` service).
81
+ - The ``deploy_marketing_cloud_package`` task now utilizes the new API endpoint for deployments.
82
+ - CumulusCI commands are more resilient in the face of corrupted or impossible to decode org config files.
83
+ - We added documentation about managing Robot Framework locators
84
+ - CumulusCI will now warn Windows users if long pathname support is not set up correctly.
85
+
86
+ Issues Closed
87
+
88
+ - Fixed a bug in the JSON format output of cci service list --json
89
+
69
90
  3.52.0 (2022-02-03)
70
91
  -------------------
71
92
 
@@ -25,7 +25,12 @@ from .project import project
25
25
  from .runtime import CliRuntime, pass_runtime
26
26
  from .service import service
27
27
  from .task import task
28
- from .utils import check_latest_version, get_installed_version, get_latest_final_version
28
+ from .utils import (
29
+ check_latest_version,
30
+ get_installed_version,
31
+ get_latest_final_version,
32
+ warn_if_no_long_paths,
33
+ )
29
34
 
30
35
  SUGGEST_ERROR_COMMAND = (
31
36
  """Run this command for more information about debugging errors: cci error --help"""
@@ -142,6 +147,7 @@ def show_version_info():
142
147
  console.print(f"CumulusCI version: {cumulusci.__version__} ({sys.argv[0]})")
143
148
  console.print(f"Python version: {sys.version.split()[0]} ({sys.executable})")
144
149
  console.print()
150
+ warn_if_no_long_paths(console=console)
145
151
 
146
152
  current_version = get_installed_version()
147
153
  latest_version = get_latest_final_version()
@@ -8,6 +8,7 @@ import click
8
8
  import github3
9
9
 
10
10
  import cumulusci
11
+ from cumulusci.cli.utils import warn_if_no_long_paths, win32_long_paths_enabled
11
12
  from cumulusci.core.exceptions import CumulusCIException
12
13
  from cumulusci.core.github import check_github_scopes, create_gist, get_github_api
13
14
 
@@ -40,7 +41,8 @@ def error():
40
41
  """
41
42
 
42
43
 
43
- CCI_LOGFILE_PATH = Path.home() / ".cumulusci" / "logs" / "cci.log"
44
+ def get_logfile_path():
45
+ return Path.home() / ".cumulusci" / "logs" / "cci.log"
44
46
 
45
47
 
46
48
  @error.command(
@@ -48,11 +50,13 @@ CCI_LOGFILE_PATH = Path.home() / ".cumulusci" / "logs" / "cci.log"
48
50
  help="Outputs the most recent traceback (if one exists in the most recent log)",
49
51
  )
50
52
  def error_info():
51
- if not CCI_LOGFILE_PATH.is_file():
52
- click.echo(f"No logfile found at: {CCI_LOGFILE_PATH}")
53
+ warn_if_no_long_paths()
54
+ logfile_path = get_logfile_path()
55
+ if not logfile_path.is_file():
56
+ click.echo(f"No logfile found at: {logfile_path}")
53
57
  return
54
58
 
55
- traceback = get_traceback(CCI_LOGFILE_PATH.read_text(encoding="utf-8"))
59
+ traceback = get_traceback(logfile_path.read_text(encoding="utf-8"))
56
60
  click.echo(traceback)
57
61
 
58
62
 
@@ -60,7 +64,7 @@ def get_traceback(log_content: str) -> str:
60
64
  """Returns the the traceback in a logfile if it exists."""
61
65
  stacktrace_start = "Traceback (most recent call last):"
62
66
  if stacktrace_start not in log_content:
63
- return f"\nNo stacktrace found in: {CCI_LOGFILE_PATH}\n"
67
+ return f"\nNo stacktrace found in: {get_logfile_path()}\n"
64
68
 
65
69
  stacktrace = ""
66
70
  for i, line in enumerate(reversed(log_content.split("\n")), 1):
@@ -73,13 +77,14 @@ def get_traceback(log_content: str) -> str:
73
77
 
74
78
  @error.command(name="gist", help="Creates a GitHub gist from the latest logfile")
75
79
  @pass_runtime(require_project=False, require_keychain=True)
76
- def gist(runtime):
77
- if CCI_LOGFILE_PATH.is_file():
78
- log_content = CCI_LOGFILE_PATH.read_text(encoding="utf-8")
80
+ def error_gist(runtime):
81
+ logfile_path = get_logfile_path()
82
+ if logfile_path.is_file():
83
+ log_content = logfile_path.read_text(encoding="utf-8")
79
84
  else:
80
85
  log_not_found_msg = """No logfile to open at path: {}
81
86
  Please ensure you're running this command from the same directory you were experiencing an issue."""
82
- error_msg = log_not_found_msg.format(CCI_LOGFILE_PATH)
87
+ error_msg = log_not_found_msg.format(logfile_path)
83
88
  click.echo(error_msg)
84
89
  raise CumulusCIException(error_msg)
85
90
 
@@ -115,4 +120,6 @@ def get_context_info():
115
120
  info.append(f"CumulusCI version: {cumulusci.__version__}")
116
121
  info.append(f"Python version: {sys.version.split()[0]} ({sys.executable})")
117
122
  info.append(f"Environment Info: {host_info.system} / {host_info.machine}")
123
+ if host_info.system == "Windows":
124
+ info.append(f"Windows long path support enabled: {win32_long_paths_enabled()}")
118
125
  return "\n".join(info)
@@ -348,12 +348,22 @@ def org_info(runtime, org_name, print_json):
348
348
  )
349
349
  @pass_runtime(require_project=False, require_keychain=True)
350
350
  def org_list(runtime, json_flag, plain):
351
+ def _get_org_safe(org):
352
+ try:
353
+ return runtime.keychain.get_org(org)
354
+ except Exception as e:
355
+ click.echo(f"Cannot load org config for `{org}`: {e}")
356
+
351
357
  plain = plain or runtime.universal_config.cli__plain_output
352
- org_configs = {
353
- org: runtime.keychain.get_org(org) for org in runtime.keychain.list_orgs()
354
- }
358
+ org_configs = ((org, _get_org_safe(org)) for org in runtime.keychain.list_orgs())
359
+ org_configs = {org: org_config for org, org_config in org_configs if org_config}
360
+
355
361
  json_data = {}
356
- default_org_name, _ = runtime.keychain.get_default_org()
362
+ try:
363
+ default_org_name, _ = runtime.keychain.get_default_org()
364
+ except Exception: # pragma: no cover
365
+ default_org_name = None
366
+
357
367
  for org, org_config in org_configs.items():
358
368
  is_org_default = org == default_org_name
359
369
  row_data = {"is_default": is_org_default, "name": org}
@@ -369,7 +379,12 @@ def org_list(runtime, json_flag, plain):
369
379
  console.print(scratch_table, justify="left")
370
380
  console.print(persistent_table, justify="left")
371
381
 
372
- runtime.keychain.cleanup_org_cache_dirs()
382
+ try:
383
+ runtime.keychain.cleanup_org_cache_dirs()
384
+ except Exception:
385
+ click.echo(
386
+ "Cannot cleanup org cache dirs, perhaps due to org config files which cannot be decrypted."
387
+ )
373
388
 
374
389
 
375
390
  def _make_tables(json_data: dict):
@@ -416,6 +416,12 @@ def test_version__latest(capsys):
416
416
  assert "You have the latest version of CumulusCI" in console_output
417
417
 
418
418
 
419
+ @mock.patch("cumulusci.cli.cci.warn_if_no_long_paths")
420
+ def test_version__win_path_warning(warn_if):
421
+ run_click_command(cci.version)
422
+ warn_if.assert_called_once()
423
+
424
+
419
425
  @mock.patch("code.interact")
420
426
  def test_shell(interact):
421
427
  run_click_command(cci.shell)
@@ -1,41 +1,46 @@
1
1
  import re
2
- from pathlib import Path
2
+ import sys
3
3
  from unittest import mock
4
4
 
5
5
  import github3
6
6
  import pytest
7
7
 
8
8
  import cumulusci
9
- from cumulusci.cli.error import get_traceback
9
+ from cumulusci.cli.error import get_context_info, get_traceback
10
10
  from cumulusci.core.exceptions import CumulusCIException
11
- from cumulusci.utils import temporary_dir
11
+ from cumulusci.core.runtime import BaseCumulusCI
12
12
 
13
13
  from .. import error
14
- from .utils import run_click_command
14
+ from .utils import run_cli_command
15
15
 
16
16
 
17
17
  class TestErrorCommands:
18
- @mock.patch("click.echo")
19
- @mock.patch("cumulusci.cli.error.CCI_LOGFILE_PATH")
20
- def test_error_info_no_logfile_present(self, log_path, echo):
21
- log_path.is_file.return_value = False
22
- run_click_command(error.error_info)
23
-
24
- echo.assert_called_once_with(f"No logfile found at: {error.CCI_LOGFILE_PATH}")
25
-
26
- @mock.patch("click.echo")
27
- def test_error_info(self, echo):
28
- with temporary_dir() as path:
29
- logfile = Path(path) / "cci.log"
30
- logfile.write_text(
31
- "This\nis\na\ntest\nTraceback (most recent call last):\n1\n2\n3\n\u2603",
32
- encoding="utf-8",
33
- )
34
- with mock.patch("cumulusci.cli.error.CCI_LOGFILE_PATH", logfile):
35
- run_click_command(error.error_info)
36
- echo.assert_called_once_with(
37
- "\nTraceback (most recent call last):\n1\n2\n3\n\u2603"
18
+ def test_error_info(self, capsys):
19
+ logfile = error.get_logfile_path()
20
+ logfile.parent.mkdir(parents=True)
21
+ logfile.write_text(
22
+ "This\nis\na\ntest\nTraceback (most recent call last):\n1\n2\n3\n\u2603",
23
+ encoding="utf-8",
38
24
  )
25
+ result = run_cli_command("error", "info")
26
+
27
+ assert "\nTraceback (most recent call last):\n1\n2\n3\n\u2603" in result.stdout
28
+
29
+ @mock.patch("cumulusci.cli.error.warn_if_no_long_paths")
30
+ def test_error_info_win_warn(self, warn_if):
31
+ logfile = error.get_logfile_path()
32
+ logfile.parent.mkdir(parents=True)
33
+ logfile.write_text(
34
+ "This\nis\na\ntest\nTraceback (most recent call last):\n1\n2\n3\n\u2603",
35
+ encoding="utf-8",
36
+ )
37
+ run_cli_command("error", "info")
38
+
39
+ warn_if.assert_called_once()
40
+
41
+ def test_error_info__no_logfile_present(self, capsys):
42
+ result = run_cli_command("error", "info")
43
+ assert f"No logfile found at: {error.get_logfile_path()}" in result.stdout
39
44
 
40
45
  def test_get_traceback__no_traceback(self):
41
46
  output = get_traceback("test_content")
@@ -47,7 +52,6 @@ class TestErrorCommands:
47
52
  output = get_traceback(content)
48
53
  assert output == traceback
49
54
 
50
- @mock.patch("cumulusci.cli.error.CCI_LOGFILE_PATH")
51
55
  @mock.patch("webbrowser.open")
52
56
  @mock.patch("cumulusci.cli.error.platform")
53
57
  @mock.patch("cumulusci.cli.error.sys")
@@ -55,7 +59,7 @@ class TestErrorCommands:
55
59
  @mock.patch("cumulusci.cli.error.create_gist")
56
60
  @mock.patch("cumulusci.cli.error.get_github_api")
57
61
  def test_error_gist(
58
- self, gh_api, create_gist, date, sys, platform, webbrowser_open, logfile_path
62
+ self, gh_api, create_gist, date, sys, platform, webbrowser_open
59
63
  ):
60
64
 
61
65
  platform.uname.return_value = mock.Mock(system="Rossian", machine="x68_46")
@@ -66,9 +70,10 @@ class TestErrorCommands:
66
70
  expected_gist_url = "https://gist.github.com/1234567890abcdefghijkl"
67
71
  create_gist.return_value = mock.Mock(html_url=expected_gist_url)
68
72
 
73
+ logfile_path = error.get_logfile_path()
74
+ logfile_path.parent.mkdir(parents=True)
69
75
  expected_logfile_content = "Hello there, I'm a logfile."
70
- logfile_path.is_file.return_value = True
71
- logfile_path.read_text.return_value = expected_logfile_content
76
+ logfile_path.write_text(expected_logfile_content)
72
77
 
73
78
  runtime = mock.Mock()
74
79
  runtime.project_config.repo_root = None
@@ -77,7 +82,7 @@ class TestErrorCommands:
77
82
  "token": "token",
78
83
  }
79
84
 
80
- run_click_command(error.gist, runtime=runtime)
85
+ run_cli_command("error", "gist", runtime=runtime)
81
86
 
82
87
  expected_content = f"""CumulusCI version: {cumulusci.__version__}
83
88
  Python version: {sys.version.split()[0]} ({sys.executable})
@@ -93,20 +98,16 @@ Environment Info: Rossian / x68_46
93
98
  )
94
99
  webbrowser_open.assert_called_once_with(expected_gist_url)
95
100
 
96
- @mock.patch("cumulusci.cli.error.CCI_LOGFILE_PATH")
97
- @mock.patch("cumulusci.cli.error.click")
98
101
  @mock.patch("cumulusci.cli.error.platform")
99
102
  @mock.patch("cumulusci.cli.error.sys")
100
103
  @mock.patch("cumulusci.cli.error.datetime")
101
104
  @mock.patch("cumulusci.cli.error.create_gist")
102
105
  @mock.patch("cumulusci.cli.error.get_github_api")
103
- def test_gist__creation_error(
104
- self, gh_api, create_gist, date, sys, platform, click, logfile_path
105
- ):
106
-
106
+ def test_gist__creation_error(self, gh_api, create_gist, date, sys, platform):
107
+ logfile_path = error.get_logfile_path()
108
+ logfile_path.parent.mkdir(parents=True)
107
109
  expected_logfile_content = "Hello there, I'm a logfile."
108
- logfile_path.is_file.return_value = True
109
- logfile_path.read_text.return_value = expected_logfile_content
110
+ logfile_path.write_text(expected_logfile_content)
110
111
 
111
112
  platform.uname.return_value = mock.Mock(sysname="Rossian", machine="x68_46")
112
113
  sys.version = "1.0.0 (default Jul 24 2019)"
@@ -130,7 +131,7 @@ Environment Info: Rossian / x68_46
130
131
  with pytest.raises(
131
132
  CumulusCIException, match="An error occurred attempting to create your gist"
132
133
  ):
133
- run_click_command(error.gist, runtime=runtime)
134
+ run_cli_command("error", "gist", runtime=runtime)
134
135
 
135
136
  class GitHubExceptionWithResponse(github3.exceptions.NotFoundError, mock.Mock):
136
137
  def __init__(self, status_code):
@@ -142,14 +143,27 @@ Environment Info: Rossian / x68_46
142
143
 
143
144
  create_gist.side_effect = GitHubExceptionWithResponse(404)
144
145
  with pytest.raises(CumulusCIException, match=re.escape(error.GIST_404_ERR_MSG)):
145
- run_click_command(error.gist, runtime=runtime)
146
-
147
- @mock.patch("cumulusci.cli.error.CCI_LOGFILE_PATH")
148
- @mock.patch("cumulusci.cli.error.click")
149
- @mock.patch("cumulusci.cli.error.datetime")
150
- @mock.patch("cumulusci.cli.error.create_gist")
151
- @mock.patch("cumulusci.cli.error.get_github_api")
152
- def test_gist__file_not_found(self, gh_api, create_gist, date, click, logfile_path):
153
- logfile_path.is_file.return_value = False
154
- with pytest.raises(CumulusCIException):
155
- run_click_command(error.gist)
146
+ run_cli_command("error", "gist", runtime=runtime)
147
+
148
+ def test_gist__file_not_found(self):
149
+ runtime = BaseCumulusCI()
150
+ with pytest.raises(CumulusCIException, match="No logfile to open"):
151
+ run_cli_command("error", "gist", runtime=runtime)
152
+
153
+ @pytest.mark.skipif(
154
+ sys.platform.startswith("win"), reason="Requires Windows Registry"
155
+ )
156
+ @mock.patch("cumulusci.cli.error.win32_long_paths_enabled")
157
+ def test_get_context_not_win(self, win32_check):
158
+ info = get_context_info()
159
+ win32_check.assert_not_called()
160
+ assert "Windows" not in info
161
+
162
+ @pytest.mark.skipif(
163
+ not sys.platform.startswith("win"), reason="Requires Windows Registry"
164
+ )
165
+ @mock.patch("cumulusci.cli.error.win32_long_paths_enabled")
166
+ def test_get_context_win(self, win32_check):
167
+ info = get_context_info()
168
+ win32_check.assert_called_once()
169
+ assert "Windows" in info
@@ -722,6 +722,73 @@ class TestOrgCommands:
722
722
 
723
723
  echo.assert_called_once_with(json.dumps(expected))
724
724
 
725
+ @mock.patch("click.echo")
726
+ @mock.patch("cumulusci.cli.org.CliTable")
727
+ def test_org_list__error(self, cli_tbl, echo):
728
+ runtime = mock.Mock()
729
+ runtime.universal_config.cli__plain_output = None
730
+ org_configs = {
731
+ "test0": ScratchOrgConfig(
732
+ {
733
+ "default": True,
734
+ "scratch": True,
735
+ "date_created": datetime.now() - timedelta(days=8),
736
+ "days": 7,
737
+ "config_name": "dev",
738
+ "username": "test0@example.com",
739
+ },
740
+ "test0",
741
+ ),
742
+ "test1": AssertionError("NOPE!"),
743
+ "test2": OrgConfig(
744
+ {
745
+ "default": False,
746
+ "scratch": False,
747
+ "expires": "Persistent",
748
+ "expired": False,
749
+ "config_name": "dev",
750
+ "username": "test2@example.com",
751
+ "instance_url": "https://dude-chillin-2330-dev-ed.cs22.my.salesforce.com",
752
+ },
753
+ "test2",
754
+ ),
755
+ }
756
+
757
+ runtime.keychain.list_orgs.return_value = list(org_configs.keys())
758
+
759
+ def get_org(orgname):
760
+ value = org_configs[orgname]
761
+ if isinstance(value, Exception):
762
+ raise value
763
+ return value
764
+
765
+ runtime.keychain.get_org = get_org
766
+ runtime.project_config.cache_dir = Path("does_not_possibly_exist")
767
+ runtime.keychain.cleanup_org_cache_dirs.side_effect = AssertionError("OUCH!")
768
+
769
+ runtime.keychain.get_default_org.return_value = (
770
+ "test0",
771
+ ScratchOrgConfig(
772
+ {
773
+ "default": True,
774
+ "scratch": True,
775
+ "date_created": datetime.now() - timedelta(days=8),
776
+ "days": 7,
777
+ "config_name": "dev",
778
+ "username": "test0@example.com",
779
+ },
780
+ "test0",
781
+ ),
782
+ )
783
+
784
+ run_click_command(org.org_list, runtime=runtime, json_flag=False, plain=False)
785
+
786
+ assert "Cannot load org config for `test1`" in str(
787
+ echo.mock_calls
788
+ ), echo.mock_calls
789
+ assert "NOPE!" in str(echo.mock_calls), echo.mock_calls
790
+ assert "Cannot cleanup org cache dirs" in str(echo.mock_calls), echo.mock_calls
791
+
725
792
  @mock.patch("click.echo")
726
793
  def test_org_prune(self, echo):
727
794
  runtime = mock.Mock()
@@ -1,4 +1,5 @@
1
1
  import json
2
+ from unittest import mock
2
3
 
3
4
  import click
4
5
  import pytest
@@ -10,7 +11,8 @@ from cumulusci.core.tests.utils import EnvironmentVarGuard
10
11
  from .utils import run_cli_command
11
12
 
12
13
 
13
- def test_service_list():
14
+ @mock.patch("cumulusci.cli.service.CliTable")
15
+ def test_service_list(table_mock):
14
16
  runtime = BaseCumulusCI(
15
17
  config={
16
18
  "services": {
@@ -26,19 +28,18 @@ def test_service_list():
26
28
  }
27
29
  runtime.keychain._default_services = {"test": "test_alias", "bad": "bad_alias"}
28
30
 
29
- result = run_cli_command("service", "list", runtime=runtime)
30
- assert (
31
- result.output
32
- == """ Services
33
-
34
- Default Type Name Description
35
- ───────────────────────────────────────────────────────────────
36
- ✔ bad bad_alias Unconfigured Service
37
- something_else something else
38
- test test2_alias Test Service
39
- ✔ test test_alias Test Service
40
-
41
- """ # noqa: W291,W293
31
+ run_cli_command("service", "list", runtime=runtime)
32
+
33
+ table_mock.assert_called_once_with(
34
+ [
35
+ ["Default", "Type", "Name", "Description"],
36
+ [True, "bad", "bad_alias", "Unconfigured Service"],
37
+ [False, "something_else", "", "something else"],
38
+ [False, "test", "test2_alias", "Test Service"],
39
+ [True, "test", "test_alias", "Test Service"],
40
+ ],
41
+ title="Services",
42
+ dim_rows=[2],
42
43
  )
43
44
 
44
45
 
@@ -4,6 +4,7 @@ import time
4
4
  from unittest import mock
5
5
 
6
6
  import pkg_resources
7
+ import pytest
7
8
  import requests
8
9
  import responses
9
10
 
@@ -65,3 +66,57 @@ def test_check_latest_version_request_error(click, get_latest_final_version):
65
66
  utils.check_latest_version()
66
67
 
67
68
  click.echo.assert_any_call("Error checking cci version:", err=True)
69
+
70
+
71
+ @pytest.mark.skipif(
72
+ not sys.platform.startswith("win"), reason="Requires Windows Registry"
73
+ )
74
+ @mock.patch("winreg.QueryValueEx")
75
+ def test_win32_warning(query_value):
76
+ query_value.return_value = (1, 1)
77
+
78
+ is_enabled = utils.win32_long_paths_enabled()
79
+
80
+ query_value.assert_called_once()
81
+ assert "LongPathsEnabled" in query_value.call_args.args
82
+ assert is_enabled
83
+
84
+
85
+ @pytest.mark.skipif(
86
+ sys.platform.startswith("win"), reason="Should not print on non-win32"
87
+ )
88
+ @mock.patch("cumulusci.cli.utils.win32_long_paths_enabled")
89
+ @mock.patch("rich.console.Console.print")
90
+ def test_no_longpath_warn_on_posix(console_print, is_enabled):
91
+ utils.warn_if_no_long_paths()
92
+
93
+ is_enabled.assert_not_called()
94
+ console_print.assert_not_called()
95
+
96
+
97
+ @pytest.mark.skipif(
98
+ not sys.platform.startswith("win"), reason="Requires Windows Registry"
99
+ )
100
+ @mock.patch("cumulusci.cli.utils.win32_long_paths_enabled")
101
+ @mock.patch("rich.console.Console.print")
102
+ def test_no_longpath_warn_on_win(console_print, is_enabled):
103
+ is_enabled.return_value = True
104
+
105
+ utils.warn_if_no_long_paths()
106
+
107
+ is_enabled.assert_called_once()
108
+ console_print.assert_not_called()
109
+
110
+
111
+ @pytest.mark.skipif(
112
+ not sys.platform.startswith("win"), reason="Requires Windows Registry"
113
+ )
114
+ @mock.patch("cumulusci.cli.utils.win32_long_paths_enabled")
115
+ @mock.patch("rich.console.Console.print")
116
+ def test_longpath_warn_on_win(console_print, is_enabled):
117
+ is_enabled.return_value = False
118
+
119
+ utils.warn_if_no_long_paths()
120
+
121
+ is_enabled.assert_called_once()
122
+ console_print.assert_called_once_with(utils.WIN_LONG_PATH_WARNING)
@@ -8,6 +8,7 @@ from collections import defaultdict
8
8
  import click
9
9
  import pkg_resources
10
10
  import requests
11
+ from rich.console import Console
11
12
 
12
13
  from cumulusci import __version__
13
14
  from cumulusci.core.config import UniversalConfig
@@ -15,6 +16,12 @@ from cumulusci.utils import get_cci_upgrade_command
15
16
  from cumulusci.utils.http.requests_utils import safe_json_from_response
16
17
 
17
18
  LOWEST_SUPPORTED_VERSION = (3, 8, 0)
19
+ WIN_LONG_PATH_WARNING = """
20
+ WARNING: Long path support is not enabled. This can lead to errors with some
21
+ tasks. Your administrator will need to activate the "Enable Win32 long paths"
22
+ group policy, or set LongPathsEnabled to 1 in the registry key
23
+ HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\FileSystem.
24
+ """
18
25
 
19
26
 
20
27
  def group_items(items):
@@ -106,3 +113,28 @@ def check_latest_version():
106
113
  def get_installed_version():
107
114
  """returns the version name (e.g. 2.0.0b58) that is installed"""
108
115
  return pkg_resources.parse_version(__version__)
116
+
117
+
118
+ def win32_long_paths_enabled() -> bool:
119
+ """Boolean indicating whether long paths are available on Windows systems.
120
+
121
+ Reads the Windows Registry the running platform. Throws ModuleNotFoundError
122
+ if run on non-Windows platforms.
123
+ """
124
+ # Only present on windows, so import it here instead
125
+ import winreg
126
+
127
+ access_registry = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE)
128
+ access_key = winreg.OpenKey(
129
+ access_registry, r"SYSTEM\CurrentControlSet\Control\FileSystem"
130
+ )
131
+
132
+ is_enabled, _ = winreg.QueryValueEx(access_key, "LongPathsEnabled")
133
+
134
+ return is_enabled == 1
135
+
136
+
137
+ def warn_if_no_long_paths(console: Console = Console()) -> None:
138
+ """Print a warning to the user if long paths are not enabled."""
139
+ if sys.platform.startswith("win") and not win32_long_paths_enabled():
140
+ console.print(WIN_LONG_PATH_WARNING)