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.
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/HISTORY.rst +21 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/PKG-INFO +22 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/cci.py +7 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/error.py +16 -9
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/org.py +20 -5
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_cci.py +6 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_error.py +63 -49
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_org.py +67 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_service.py +15 -14
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_utils.py +55 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/utils.py +32 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/project_config.py +17 -6
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/tests/test_config.py +10 -3
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/exceptions.py +6 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/encrypted_file_project_keychain.py +25 -2
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/source/github.py +5 -13
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_source.py +80 -3
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_cumulusci_library.py +1 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/package_install.py +29 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/test_metadata.py +15 -15
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/test_package_install.py +24 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/extract.py +2 -2
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/load.py +6 -10
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/mapping_parser.py +12 -15
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery.py +12 -2
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery_utils/queue_manager.py +76 -29
- cumulusci-3.54.0.dev0/cumulusci/tasks/bulkdata/tests/integration_test_utils.py +24 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_extract.py +8 -2
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_load.py +18 -9
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_mapping_parser.py +48 -42
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_snowfakery.py +6 -22
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_step.py +27 -36
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_updates.py +115 -8
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/utils.py +9 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/update_data.py +44 -10
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_release_report.py +1 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/metadata_map.yml +8 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/test_generator.py +4 -4
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/libdoc.py +9 -5
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/test_robotframework.py +16 -12
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/composite.py +1 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/install_package_version.py +47 -12
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_install_package_version.py +48 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_update_dependencies.py +66 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/update_dependencies.py +38 -2
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_create_package_version.py +8 -11
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_metadeploy.py +2 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/util.py +21 -6
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/parallel/task_worker_queues/parallel_worker.py +29 -16
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/parallel/task_worker_queues/parallel_worker_queue.py +13 -4
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/parallel/task_worker_queues/tests/test_parallel_worker.py +4 -3
- cumulusci-3.54.0.dev0/cumulusci/version.txt +1 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/PKG-INFO +22 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/SOURCES.txt +2 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/requires.txt +1 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/robot.rst +1 -0
- cumulusci-3.54.0.dev0/docs/robot_locators.rst +203 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/requirements/dev.txt +4 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/requirements/prod.txt +1 -1
- cumulusci-3.53.0.dev1/cumulusci/version.txt +0 -1
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/AUTHORS.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/CONTRIBUTING.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/LICENSE +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/MANIFEST.in +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/README.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/__main__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/flow.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/logger.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/plan.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/project.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/runtime.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/service.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/task.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_flow.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_logger.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_plan.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_project.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_runtime.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_task.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/test_ui.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/tests/utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cli/ui.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/conftest.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/BaseConfig.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/BaseTaskFlowConfig.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/OrgConfig.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/ScratchOrgConfig.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/base_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/base_task_flow_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/marketing_cloud_service_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/oauth2_service_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/org_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/scratch_org_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/sfdx_org_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/tests/_test_config_backwards_compatibility.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/tests/test_config_expensive.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/tests/test_config_util.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/universal_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/config/util.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/debug.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/dependencies.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/github.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/resolvers.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/conftest.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/test_dependencies.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/test_github.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/tests/test_resolvers.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/dependencies/utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/flowrunner.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/github.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/base_project_keychain.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/environment_project_keychain.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/tests/conftest.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/tests/test_base_project_keychain.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/keychain/tests/test_encrypted_file_project_keychain.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/metadeploy.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/runtime.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/sfdx.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/source/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/source/local_folder.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tasks.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/template_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_exceptions.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_flowrunner.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_github.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_sfdx.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_tasks.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_utils_merge_config.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/test_versions.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/tests/utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/core/versions.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/cumulusci.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/admin_profile.xml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/delete_excludes.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/README.md +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/cumulusci.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/dot-gitignore +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/mapping.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/files/templates/project/scratch_def.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/client.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/exceptions.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/salesforce.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/tests/test_client.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/oauth/tests/test_salesforce.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/CumulusCI.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/CumulusCI.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/Salesforce.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/Salesforce.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/form_handlers.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/locator_manager.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/locators_52.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/locators_53.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/locators_54.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/BasePageObjects.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/ObjectManagerPageObject.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/PageObjectLibrary.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/PageObjects.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/pageobjects/baseobjects.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/perftests/short/collection_perf.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/BarTestPage.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/FooTestPage.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/cumulusci/base.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/cumulusci/bulkdata.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/cumulusci/communities.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/cumulusci/datagen.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/TestLibraryA.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/TestLibraryB.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/TestListener.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/api.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/browsers.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/classic.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/create_contact.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/faker.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/forms.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/locators.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/base_pageobjects.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/example_page_object.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/listing_page.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/objectmanager.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/pageobjects/pageobjects.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/performance.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/populate.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/test_testlistener.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/salesforce/ui.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_locator_manager.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_pageobjects.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_salesforce.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_salesforce_locators.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_template_util.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/tests/test_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/robotframework/utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/exceptions.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/mc_soap_envelopes.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/metadata.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/org_schema.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/org_schema_models.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/package_zip.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/soap_envelopes.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/metadata_test_strings.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/test_package_zip.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/tests/test_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/salesforce_api/utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/schema/cumulusci.jsonschema.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/anon.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/batch.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/testrunner.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/apex/tests/test_apex_tasks.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/base_generate_data_task.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/dates.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/delete.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/factory_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate_and_load_data.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate_and_load_data_from_yaml.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate_from_yaml.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/generate_mapping.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery_utils/snowfakery_run_until.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery_utils/snowfakery_working_directory.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/snowfakery_utils/subtask_configurator.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/step.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/Account.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/Case.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/Contact.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/Opportunity.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/OpportunityContactRole.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/dummy_data_factory.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/global_describe.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping-oid.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_after.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_simple.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_v1.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_v2.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_v3.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mapping_vanilla_sf.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/mock_data_factory_without_mapping.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/recordtypes.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/child/child2.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/child.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/gen_npsp_standard_objects.recipe.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/include_parent.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/npsp_standard_objects_macros.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/options.recipe.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/sf_standard_object_macros.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery.load.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery.recipe.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_2.load.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels.load.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels.recipe.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels_2.load.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/snowfakery/unique_values.recipe.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_base_generate_data_tasks.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_dates.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_delete.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_factory_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_generate_and_load.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_generate_from_snowfakery_task.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_generatemapping.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/tests/test_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/bulkdata/utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/command.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/connectedapp.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/create_package_version.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/datadictionary.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/dx_convert_from.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/base.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/commit_status.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/merge.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/publish.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/pull_request.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/release.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/release_report.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tag.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_commit_status.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_merge.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_publish.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_pull_request.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_release.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_tag.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/test_util.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/tests/util_github_api.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/github/util.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/api.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/base.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/deploy.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/get_user_info.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/mc_constants.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/conftest.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/expected-payload.json +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_api.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_api_soap_envelopes.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_base.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_deploy.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/marketing_cloud/tests/test_get_user_info.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/ee_src.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/managed_src.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/modify.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/package.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/destructiveChanges.xml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/package.xml +0 -0
- {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
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/sample_package.xml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/test_ee_src.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/test_managed_src.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/test_modify.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata/tests/test_package.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/base.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/duplicate_rules.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/field_sets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/help_text.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/layouts.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/permissions.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/picklists.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/sharing.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_base.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_duplicate_rules.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_field_sets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_help_text.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_layouts.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_permissions.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_picklists.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_sharing.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/tests/test_value_sets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadata_etl/value_sets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metadeploy.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/metaxml.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/licenses.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/packages.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/permsets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/recordtypes.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/settings.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/sobjects.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_licenses.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_packages.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_permset_preflights.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_recordtypes.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_settings.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/preflight/tests/test_sobjects.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/README.md +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/push_api.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/pushfails.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/tasks.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/tests/conftest.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/tests/test_push_api.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/push/tests/test_push_tasks.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/README.md +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/exceptions.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/generator.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/parser.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/provider.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/task.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/full/example1.md +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/multi/1.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/multi/2.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/multi/3.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/change_notes/single/1.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/test_parser.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/test_provider.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/test_task.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/release_notes/tests/utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/debugger/DebugListener.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/debugger/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/debugger/model.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/debugger/ui.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/lint.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/lint_defaults.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/robotframework.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/stylesheet.css +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/template.html +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/TestLibrary.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/TestPageObjects.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/TestResource.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/failing_tests.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/performance.robot +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/test_debugger.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/test_robot_lint.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/robotframework/tests/test_robot_parallel.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseRetrieveMetadata.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseSalesforceApiTask.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseSalesforceMetadataApiTask.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseSalesforceTask.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/BaseUninstallMetadata.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/CreateCommunity.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/CreatePackage.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/Deploy.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/DeployBundles.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/EnsureRecordTypes.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/GetInstalledPackages.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/ListCommunities.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/ListCommunityTemplates.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/PublishCommunity.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/RetrievePackaged.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/RetrieveReportsAndDashboards.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/RetrieveUnpackaged.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/SOQLQuery.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallLocal.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallLocalBundles.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallLocalNamespacedBundles.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallPackage.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UninstallPackaged.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/UpdateAdminProfile.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/activate_flow.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/create_permission_sets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/custom_settings.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/custom_settings_wait.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/enable_prediction.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/insert_record.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/license_preflights.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/network_member_group.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/org_settings.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/package_upload.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/profiles.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/promote_package_version.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/sourcetracking.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_CreateCommunity.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_CreatePackage.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_Deploy.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_DeployBundles.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_EnsureRecordTypes.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_ListCommunities.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_ListCommunityTemplates.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_PackageUpload.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_ProfileGrantAllAccess.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_PublishCommunity.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_RetrievePackaged.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_RetrieveReportsAndDashboards.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_RetrieveUnpackaged.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_SOQLQuery.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallLocal.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallLocalBundles.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallLocalNamespacedBundles.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallPackage.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallPackaged.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_UninstallPackagedIncremental.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_activate_flow.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_base_tasks.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_composite.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_create_permission_sets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_custom_settings.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_custom_settings_wait.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_enable_prediction.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_insert_record.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_network_member_group.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_org_settings.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_profiles.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_sourcetracking.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/test_trigger_handlers.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/tests/util.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/trigger_handlers.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/uninstall_packaged_incremental.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/update_profile.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/permsets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/photos.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/tests/photo.mock.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/tests/test_permsets.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/salesforce/users/tests/test_photos.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/sfdx.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/conftest.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_command.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_connectedapp.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_datadictionary.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_dx_convert_from.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_metaxml.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_promote_package_version.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_pushfails.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_salesforce.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_sfdx.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/tests/test_util.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tasks/util.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/pytest_plugins/pytest_sf_orgconnect.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/pytest_plugins/pytest_sf_vcr.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/pytest_plugins/pytest_typeguard.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_entry_points.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_integration_infrastructure.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_main.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_schema.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/tests/test_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/classutils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/fileutils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/git.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/http/multi_request.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/http/requests_utils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/http/tests/test_multi_request.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/iterators.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/logging.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_fileutils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_git.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_logging.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_org_schema.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_org_schema_models.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/tests/test_waiting.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/waiting.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/__init__.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/metadata_tree.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/robot_xml.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/salesforce_encoding.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/test/test_metadata_tree.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/xml/test/test_salesforce_encoding.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/cumulusci_yml.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/model_parser.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/safer_loader.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/tests/bad_cci.yml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/tests/test_cumulusci_yml.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/tests/test_model_parser.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/yaml/tests/test_safer_loader.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci/utils/ziputils.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/dependency_links.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/entry_points.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/not-zip-safe +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/cumulusci.egg-info/top_level.txt +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/2gp_testing.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/Makefile +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/about.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/cheat_sheet.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/cli.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/commands.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/concepts.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/conf.py +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/config.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/connected_orgs.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/continuous_integration.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/contributing.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/cookbook.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/cumulusci_flow.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/data.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/dev.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image1.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image12.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image15.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image17.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/diagram/img/image3.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/env_var_reference.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/get_started.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/github_actions.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/headless.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/history.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/cci_service_list.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/cumulus_ci_workflow.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/env-var.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/env-var2.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github-commit_status_error.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github-commit_status_pass.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github-creating_a_uat_release.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github_checks.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github_personal_access_token_scopes.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github_secrets.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/github_workflow.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/locate_elements_screenshot.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/pipx.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/robot_log_screenshot.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/robot_toggled_results_screenshot.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/salesforce-org-process.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/service-list.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/skipping_task.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/windows_python.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/images/windows_python_success.png +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/index.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/install.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/internals.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/intro.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/make.bat +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/managed_2gp.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/managed_package.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/metadata_etl.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/npsp_eda_2gp.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/packaging.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/push_upgrades.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/reference.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/release_notes.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/robot_advanced.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/robot_debugger.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/robot_tutorial.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/scratch_orgs.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/tutorial.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/unlocked_package.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/docs/unpackaged.rst +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/pyproject.toml +0 -0
- {cumulusci-3.53.0.dev1 → cumulusci-3.54.0.dev0}/setup.cfg +0 -0
- {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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
52
|
-
|
|
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(
|
|
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: {
|
|
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
|
|
77
|
-
|
|
78
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
11
|
+
from cumulusci.core.runtime import BaseCumulusCI
|
|
12
12
|
|
|
13
13
|
from .. import error
|
|
14
|
-
from .utils import
|
|
14
|
+
from .utils import run_cli_command
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class TestErrorCommands:
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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)
|