cumulusci-plus 5.0.21__py3-none-any.whl → 5.0.35__py3-none-any.whl

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 (121) hide show
  1. cumulusci/__about__.py +1 -1
  2. cumulusci/cli/logger.py +2 -2
  3. cumulusci/cli/service.py +20 -0
  4. cumulusci/cli/task.py +17 -0
  5. cumulusci/cli/tests/test_error.py +3 -1
  6. cumulusci/cli/tests/test_flow.py +279 -2
  7. cumulusci/cli/tests/test_service.py +15 -12
  8. cumulusci/cli/tests/test_task.py +88 -2
  9. cumulusci/cli/tests/utils.py +1 -4
  10. cumulusci/core/config/base_task_flow_config.py +26 -1
  11. cumulusci/core/config/project_config.py +2 -20
  12. cumulusci/core/config/tests/test_config_expensive.py +9 -3
  13. cumulusci/core/config/universal_config.py +3 -4
  14. cumulusci/core/dependencies/base.py +1 -1
  15. cumulusci/core/dependencies/dependencies.py +1 -1
  16. cumulusci/core/dependencies/github.py +1 -2
  17. cumulusci/core/dependencies/resolvers.py +1 -1
  18. cumulusci/core/dependencies/tests/test_dependencies.py +1 -1
  19. cumulusci/core/dependencies/tests/test_resolvers.py +1 -1
  20. cumulusci/core/flowrunner.py +90 -6
  21. cumulusci/core/github.py +1 -1
  22. cumulusci/core/sfdx.py +3 -1
  23. cumulusci/core/source_transforms/tests/test_transforms.py +1 -1
  24. cumulusci/core/source_transforms/transforms.py +1 -1
  25. cumulusci/core/tasks.py +13 -2
  26. cumulusci/core/tests/test_flowrunner.py +100 -0
  27. cumulusci/core/tests/test_tasks.py +65 -0
  28. cumulusci/core/utils.py +3 -1
  29. cumulusci/core/versions.py +1 -1
  30. cumulusci/cumulusci.yml +55 -0
  31. cumulusci/oauth/client.py +1 -1
  32. cumulusci/plugins/plugin_base.py +5 -3
  33. cumulusci/robotframework/pageobjects/ObjectManagerPageObject.py +1 -1
  34. cumulusci/salesforce_api/rest_deploy.py +1 -1
  35. cumulusci/schema/cumulusci.jsonschema.json +64 -0
  36. cumulusci/tasks/apex/anon.py +1 -1
  37. cumulusci/tasks/apex/testrunner.py +416 -142
  38. cumulusci/tasks/apex/tests/test_apex_tasks.py +917 -1
  39. cumulusci/tasks/bulkdata/extract.py +0 -1
  40. cumulusci/tasks/bulkdata/extract_dataset_utils/extract_yml.py +1 -1
  41. cumulusci/tasks/bulkdata/extract_dataset_utils/synthesize_extract_declarations.py +1 -1
  42. cumulusci/tasks/bulkdata/extract_dataset_utils/tests/test_extract_yml.py +1 -1
  43. cumulusci/tasks/bulkdata/generate_and_load_data.py +136 -12
  44. cumulusci/tasks/bulkdata/mapping_parser.py +139 -44
  45. cumulusci/tasks/bulkdata/select_utils.py +1 -1
  46. cumulusci/tasks/bulkdata/snowfakery.py +100 -25
  47. cumulusci/tasks/bulkdata/tests/test_generate_and_load.py +159 -0
  48. cumulusci/tasks/bulkdata/tests/test_load.py +0 -2
  49. cumulusci/tasks/bulkdata/tests/test_mapping_parser.py +763 -1
  50. cumulusci/tasks/bulkdata/tests/test_select_utils.py +26 -0
  51. cumulusci/tasks/bulkdata/tests/test_snowfakery.py +133 -0
  52. cumulusci/tasks/create_package_version.py +190 -16
  53. cumulusci/tasks/datadictionary.py +1 -1
  54. cumulusci/tasks/metadata_etl/base.py +7 -3
  55. cumulusci/tasks/metadata_etl/layouts.py +1 -1
  56. cumulusci/tasks/metadata_etl/permissions.py +1 -1
  57. cumulusci/tasks/metadata_etl/remote_site_settings.py +2 -2
  58. cumulusci/tasks/push/README.md +15 -17
  59. cumulusci/tasks/release_notes/README.md +13 -13
  60. cumulusci/tasks/release_notes/generator.py +13 -8
  61. cumulusci/tasks/robotframework/tests/test_robotframework.py +6 -1
  62. cumulusci/tasks/salesforce/Deploy.py +53 -2
  63. cumulusci/tasks/salesforce/SfPackageCommands.py +363 -0
  64. cumulusci/tasks/salesforce/__init__.py +1 -0
  65. cumulusci/tasks/salesforce/assign_ps_psg.py +448 -0
  66. cumulusci/tasks/salesforce/composite.py +1 -1
  67. cumulusci/tasks/salesforce/custom_settings_wait.py +1 -1
  68. cumulusci/tasks/salesforce/enable_prediction.py +5 -1
  69. cumulusci/tasks/salesforce/getPackageVersion.py +89 -0
  70. cumulusci/tasks/salesforce/sourcetracking.py +1 -1
  71. cumulusci/tasks/salesforce/tests/test_Deploy.py +316 -1
  72. cumulusci/tasks/salesforce/tests/test_SfPackageCommands.py +554 -0
  73. cumulusci/tasks/salesforce/tests/test_assign_ps_psg.py +1055 -0
  74. cumulusci/tasks/salesforce/tests/test_getPackageVersion.py +651 -0
  75. cumulusci/tasks/salesforce/tests/test_update_dependencies.py +1 -1
  76. cumulusci/tasks/salesforce/tests/test_update_external_credential.py +912 -0
  77. cumulusci/tasks/salesforce/tests/test_update_named_credential.py +1042 -0
  78. cumulusci/tasks/salesforce/update_dependencies.py +2 -2
  79. cumulusci/tasks/salesforce/update_external_credential.py +562 -0
  80. cumulusci/tasks/salesforce/update_named_credential.py +441 -0
  81. cumulusci/tasks/salesforce/update_profile.py +17 -13
  82. cumulusci/tasks/salesforce/users/permsets.py +62 -5
  83. cumulusci/tasks/salesforce/users/tests/test_permsets.py +237 -11
  84. cumulusci/tasks/sfdmu/__init__.py +0 -0
  85. cumulusci/tasks/sfdmu/sfdmu.py +363 -0
  86. cumulusci/tasks/sfdmu/tests/__init__.py +1 -0
  87. cumulusci/tasks/sfdmu/tests/test_runner.py +212 -0
  88. cumulusci/tasks/sfdmu/tests/test_sfdmu.py +1012 -0
  89. cumulusci/tasks/tests/test_create_package_version.py +716 -1
  90. cumulusci/tasks/tests/test_util.py +42 -0
  91. cumulusci/tasks/util.py +37 -1
  92. cumulusci/tasks/utility/copyContents.py +402 -0
  93. cumulusci/tasks/utility/credentialManager.py +256 -0
  94. cumulusci/tasks/utility/directoryRecreator.py +30 -0
  95. cumulusci/tasks/utility/env_management.py +1 -1
  96. cumulusci/tasks/utility/secretsToEnv.py +135 -0
  97. cumulusci/tasks/utility/tests/test_copyContents.py +1719 -0
  98. cumulusci/tasks/utility/tests/test_credentialManager.py +564 -0
  99. cumulusci/tasks/utility/tests/test_directoryRecreator.py +439 -0
  100. cumulusci/tasks/utility/tests/test_secretsToEnv.py +1091 -0
  101. cumulusci/tests/test_integration_infrastructure.py +3 -1
  102. cumulusci/tests/test_utils.py +70 -6
  103. cumulusci/utils/__init__.py +54 -9
  104. cumulusci/utils/classutils.py +5 -2
  105. cumulusci/utils/http/tests/cassettes/ManualEditTestCompositeParallelSalesforce.test_http_headers.yaml +31 -30
  106. cumulusci/utils/options.py +23 -1
  107. cumulusci/utils/parallel/task_worker_queues/parallel_worker.py +1 -1
  108. cumulusci/utils/yaml/cumulusci_yml.py +7 -3
  109. cumulusci/utils/yaml/model_parser.py +2 -2
  110. cumulusci/utils/yaml/tests/test_cumulusci_yml.py +1 -1
  111. cumulusci/utils/yaml/tests/test_model_parser.py +3 -3
  112. cumulusci/vcs/base.py +23 -15
  113. cumulusci/vcs/bootstrap.py +5 -4
  114. cumulusci/vcs/utils/list_modified_files.py +189 -0
  115. cumulusci/vcs/utils/tests/test_list_modified_files.py +588 -0
  116. {cumulusci_plus-5.0.21.dist-info → cumulusci_plus-5.0.35.dist-info}/METADATA +12 -10
  117. {cumulusci_plus-5.0.21.dist-info → cumulusci_plus-5.0.35.dist-info}/RECORD +121 -96
  118. {cumulusci_plus-5.0.21.dist-info → cumulusci_plus-5.0.35.dist-info}/WHEEL +0 -0
  119. {cumulusci_plus-5.0.21.dist-info → cumulusci_plus-5.0.35.dist-info}/entry_points.txt +0 -0
  120. {cumulusci_plus-5.0.21.dist-info → cumulusci_plus-5.0.35.dist-info}/licenses/AUTHORS.rst +0 -0
  121. {cumulusci_plus-5.0.21.dist-info → cumulusci_plus-5.0.35.dist-info}/licenses/LICENSE +0 -0
cumulusci/cumulusci.yml CHANGED
@@ -197,6 +197,10 @@ tasks:
197
197
  user_permissions:
198
198
  - PermissionsBulkApiHardDelete
199
199
  - PermissionsCreateAuditFields
200
+ assign_permission_set_to_psg:
201
+ group: Metadata Transformations
202
+ description: "Assigns specified Permission Sets to the specified Permission Set Groups using the Composite API."
203
+ class_path: cumulusci.tasks.salesforce.assign_ps_psg.AssignPermissionSetToPermissionSetGroup
200
204
  create_unmanaged_ee_src:
201
205
  description: Modifies the src directory for unmanaged deployment to an EE org
202
206
  class_path: cumulusci.tasks.metadata.ee_src.CreateUnmanagedEESrc
@@ -228,6 +232,10 @@ tasks:
228
232
  options:
229
233
  path: src
230
234
  group: Salesforce Metadata
235
+ deploy_unpackaged_metadata:
236
+ description: Deploys the unpackaged metadata from the project config to the target org. This is application of 2nd generation package metadata.
237
+ class_path: cumulusci.tasks.salesforce.DeployUnpackagedMetadata
238
+ group: Salesforce Metadata
231
239
  deploy_marketing_cloud_package:
232
240
  class_path: cumulusci.tasks.marketing_cloud.deploy.MarketingCloudDeployTask
233
241
  description: Deploys a package zip file to a Marketing Cloud Tenant via the Marketing Cloud Package Manager API.
@@ -749,10 +757,30 @@ tasks:
749
757
  options:
750
758
  level: info
751
759
  group: Utilities
760
+ copy_file:
761
+ description: "Copy a file for src to dest with environment variable support, Ex: &TMPDIR&/src resolves to /tmp/src on linux or %TMPDIR%/src on windows."
762
+ class_path: cumulusci.tasks.util.CopyFile
763
+ group: Utilities
764
+ load_dot_env:
765
+ description: "Log the contents of the .env file"
766
+ class_path: cumulusci.tasks.util.LoadDotEnv
767
+ group: Utilities
752
768
  configure_env:
753
769
  description: Get or set environment variables.
754
770
  class_path: cumulusci.tasks.utility.env_management.EnvManagement
755
771
  group: Utilities
772
+ secrets_to_dotenv:
773
+ description: Get all environment variables from a target JSON file and generates a .env file that can be used to set up the environment variables for the deployment
774
+ class_path: cumulusci.tasks.utility.secretsToEnv.SecretsToEnv
775
+ group: Utilities
776
+ directory_recreator:
777
+ description: Remove and recreate a directory
778
+ class_path: cumulusci.tasks.utility.directoryRecreator.DirectoryRecreator
779
+ group: Utilities
780
+ consolidate_unpackaged_metadata:
781
+ description: Consolidate unpackaged metadata from multiple sources into a single directory
782
+ class_path: cumulusci.tasks.utility.copyContents.ConsolidateUnpackagedMetadata
783
+ group: Utilities
756
784
  download_extract:
757
785
  description: Downloads files and folders from a VCS repository.
758
786
  class_path: cumulusci.tasks.vcs.download_extract.DownloadExtract
@@ -787,6 +815,10 @@ tasks:
787
815
  description: Load Custom Settings specified in a YAML file to the target org
788
816
  class_path: cumulusci.tasks.salesforce.LoadCustomSettings
789
817
  group: "Data Operations"
818
+ sfdmu:
819
+ description: Execute SFDmu data migration with namespace injection support
820
+ class_path: cumulusci.tasks.sfdmu.sfdmu.SfdmuTask
821
+ group: "Data Operations"
790
822
  remove_metadata_xml_elements:
791
823
  description: Remove specified XML elements from one or more metadata files
792
824
  class_path: cumulusci.tasks.metadata.modify.RemoveElementsXPath
@@ -823,6 +855,26 @@ tasks:
823
855
  class_path: cumulusci.tasks.salesforce.SfDataCommands.DataCreateRecordTask
824
856
  description: "Executes the `sf data create` command against an org"
825
857
  group: SalesforceDX Data Commands
858
+ update_package_version:
859
+ class_path: cumulusci.tasks.salesforce.SfPackageCommands.PackageVersionUpdateTask
860
+ description: "Executes the `sf package version update` command against an org"
861
+ group: Salesforce Packages
862
+ get_package_version:
863
+ description: Get package version id from package name and version
864
+ class_path: cumulusci.tasks.salesforce.getPackageVersion.GetPackageVersion
865
+ group: Salesforce Packages
866
+ options:
867
+ package_name: $project_config.project__package__name
868
+ fail_on_error: False
869
+ update_named_credential:
870
+ class_path: cumulusci.tasks.salesforce.update_named_credential.UpdateNamedCredential
871
+ description: Update named credential parameters
872
+ group: Metadata Transformations
873
+ update_external_credential:
874
+ class_path: cumulusci.tasks.salesforce.update_external_credential.UpdateExternalCredential
875
+ description: Update external credential parameters
876
+ group: Metadata Transformations
877
+
826
878
  flows:
827
879
  ci_beta:
828
880
  group: Continuous Integration
@@ -1562,6 +1614,9 @@ project:
1562
1614
  namespace:
1563
1615
  install_class:
1564
1616
  uninstall_class:
1617
+ apex_test_access:
1618
+ package_metadata_access:
1619
+ unpackaged_metadata_path:
1565
1620
  api_version: "63.0"
1566
1621
  git:
1567
1622
  default_branch: master
cumulusci/oauth/client.py CHANGED
@@ -19,7 +19,7 @@ from cryptography import x509
19
19
  from cryptography.hazmat.primitives import hashes, serialization
20
20
  from cryptography.hazmat.primitives.asymmetric import rsa
21
21
  from cryptography.x509.oid import NameOID
22
- from pydantic import BaseModel
22
+ from pydantic.v1 import BaseModel
23
23
 
24
24
  from cumulusci.core.exceptions import CumulusCIUsageError
25
25
  from cumulusci.oauth.exceptions import OAuth2Error
@@ -11,7 +11,7 @@ from cumulusci.utils.yaml.cumulusci_yml import Plugin, cci_safe_load
11
11
  class PluginBase(ABC):
12
12
  plugin: Plugin
13
13
  plugin_config_file: str = "cumulusci_plugin.yml"
14
- path: str = None
14
+ path: str
15
15
  plugin_project_config: Optional[dict] = None
16
16
 
17
17
  def __init__(self, **kwargs) -> None:
@@ -32,12 +32,14 @@ class PluginBase(ABC):
32
32
  @property
33
33
  def name(self) -> str:
34
34
  """Returns the name of the plugin."""
35
- return self.plugin.name if self.plugin else "Unnamed Plugin"
35
+ return (
36
+ self.plugin.name if self.plugin and self.plugin.name else "Unnamed Plugin"
37
+ )
36
38
 
37
39
  @property
38
40
  def version(self) -> str:
39
41
  """Returns the version of the plugin."""
40
- return self.plugin.version if self.plugin else "0.0.0"
42
+ return self.plugin.version if self.plugin and self.plugin.version else "0.0.0"
41
43
 
42
44
  def initialize(self) -> None:
43
45
  """Initialize the plugin. This method is called when the plugin is loaded."""
@@ -203,7 +203,7 @@ class ObjectManagerPage(BasePage):
203
203
 
204
204
  except Exception as e:
205
205
  self.builtin.log(
206
- f"on try #{tries+1} we caught this error: {e}", "DEBUG"
206
+ f"on try #{tries + 1} we caught this error: {e}", "DEBUG"
207
207
  )
208
208
  self.builtin.sleep("1 second")
209
209
  last_error = e
@@ -138,7 +138,7 @@ class RestDeploy:
138
138
 
139
139
  # Construct an error message from deployment failure details
140
140
  def _construct_error_message(self, failure):
141
- error_message = f"{str.upper(failure['problemType'])} in file {failure['fileName'][len(PARENT_DIR_NAME)+len('/'):]}: {failure['problem']}"
141
+ error_message = f"{str.upper(failure['problemType'])} in file {failure['fileName'][len(PARENT_DIR_NAME) + len('/'):]}: {failure['problem']}"
142
142
 
143
143
  if failure["lineNumber"] and failure["columnNumber"]:
144
144
  error_message += (
@@ -246,6 +246,70 @@
246
246
  "metadata_package_id": {
247
247
  "title": "Metadata Package Id",
248
248
  "type": "string"
249
+ },
250
+ "apex_test_access": {
251
+ "title": "Apex Test Access",
252
+ "type": "object",
253
+ "additionalProperties": {
254
+ "anyOf": [
255
+ {
256
+ "type": "string"
257
+ },
258
+ {
259
+ "type": "array",
260
+ "items": {
261
+ "type": "string"
262
+ }
263
+ }
264
+ ]
265
+ }
266
+ },
267
+ "package_metadata_access": {
268
+ "title": "Package Metadata Access",
269
+ "type": "object",
270
+ "additionalProperties": {
271
+ "anyOf": [
272
+ {
273
+ "type": "string"
274
+ },
275
+ {
276
+ "type": "array",
277
+ "items": {
278
+ "type": "string"
279
+ }
280
+ }
281
+ ]
282
+ }
283
+ },
284
+ "unpackaged_metadata_path": {
285
+ "title": "Unpackaged Metadata Path",
286
+ "anyOf": [
287
+ {
288
+ "type": "string"
289
+ },
290
+ {
291
+ "type": "array",
292
+ "items": {
293
+ "type": "string"
294
+ }
295
+ },
296
+ {
297
+ "type": "object",
298
+ "additionalProperties": {
299
+ "anyOf": [
300
+ {
301
+ "type": "string"
302
+ },
303
+ {
304
+ "type": "array",
305
+ "items": {
306
+ "type": "string"
307
+ }
308
+ }
309
+ ]
310
+ }
311
+ }
312
+ ]
249
313
  }
250
314
  },
251
315
  "additionalProperties": false
@@ -4,7 +4,7 @@ from cumulusci.core.exceptions import (
4
4
  SalesforceException,
5
5
  TaskOptionsError,
6
6
  )
7
- from cumulusci.core.utils import process_bool_arg, determine_managed_mode
7
+ from cumulusci.core.utils import determine_managed_mode, process_bool_arg
8
8
  from cumulusci.tasks.salesforce import BaseSalesforceApiTask
9
9
  from cumulusci.utils import in_directory, inject_namespace
10
10
  from cumulusci.utils.http.requests_utils import safe_json_from_response