Skip to content

Commit 00cd0cf

Browse files
committed
Assign option keys only if available in tasks.
1 parent 9b85ae6 commit 00cd0cf

3 files changed

Lines changed: 29 additions & 24 deletions

File tree

cumulusci/tasks/salesforce/assign_ps_psg.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,13 @@ class Options(CCIOptions):
118118
"Permission Set API names. Supports JSON, YAML, or command line format."
119119
),
120120
)
121-
namespace: str = Field(
121+
namespace_inject: str = Field(
122122
None,
123123
description="Namespace to use for Permission Set names. If not provided, the namespace from the project config will be used.",
124124
)
125125
managed: bool = Field(
126126
None,
127-
description="Whether the org is managed. If not provided, the managed mode will be determined based on the org config.",
127+
description="Whether the deployment is managed. If not provided, the managed mode will be determined based on the org config.",
128128
)
129129
fail_on_error: bool = Field(
130130
False,
@@ -136,19 +136,22 @@ class Options(CCIOptions):
136136
def _init_options(self, kwargs):
137137
super()._init_options(kwargs)
138138

139-
if self.parsed_options.namespace is None:
140-
self.parsed_options.namespace = (
139+
if self.parsed_options.namespace_inject is None:
140+
self.parsed_options.namespace_inject = (
141141
self.project_config.project__package__namespace
142142
)
143+
143144
if self.parsed_options.managed is None:
144145
self.parsed_options.managed = determine_managed_mode(
145146
self.parsed_options, self.project_config, self.org_config
146147
)
148+
147149
self.namespaced_org = bool(
148-
self.parsed_options.namespace
149-
) and self.parsed_options.namespace == getattr(
150+
self.parsed_options.namespace_inject
151+
) and self.parsed_options.namespace_inject == getattr(
150152
self.org_config, "namespace", None
151153
)
154+
152155
self.psg_names_sanitized = {}
153156
self.ps_names_sanitized = {}
154157

@@ -263,9 +266,10 @@ def _process_namespaces(self, names: List[str]):
263266
_, name_processed = inject_namespace(
264267
"",
265268
name,
266-
namespace=self.parsed_options.namespace,
269+
namespace=self.parsed_options.namespace_inject,
267270
managed=self.parsed_options.managed,
268271
namespaced_org=self.namespaced_org,
272+
logger=self.logger,
269273
)
270274
names_processed[name] = name_processed
271275
return names_processed
@@ -277,7 +281,7 @@ def _build_name_conditions(self, names: List[str], field_name: str = "Name"):
277281
) # Maps (original_name, namespace_prefix) tuple back to original name
278282
for name in names:
279283
# Check if name contains namespace prefix (format: namespace__Name)
280-
if "__" in name and self.parsed_options.namespace:
284+
if "__" in name and self.parsed_options.namespace_inject:
281285
parts = name.split("__", 1)
282286
if len(parts) == 2:
283287
ns_prefix, ps_name = parts

cumulusci/tasks/salesforce/tests/test_assign_ps_psg.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,10 @@ def test_init_options_with_namespace(self):
9696
AssignPermissionSetToPermissionSetGroup,
9797
{
9898
"assignments": {"PSG1": ["PS1"]},
99-
"namespace": "test_namespace",
99+
"namespace_inject": "test_namespace",
100100
},
101101
)
102-
assert task.parsed_options.namespace == "test_namespace"
102+
assert task.parsed_options.namespace_inject == "test_namespace"
103103

104104
def test_init_options_without_namespace(self):
105105
"""Test _init_options without namespace (uses project config)"""
@@ -109,7 +109,7 @@ def test_init_options_without_namespace(self):
109109
)
110110
task.project_config.project__package__namespace = "project_namespace"
111111
task._init_options({})
112-
assert task.parsed_options.namespace == "project_namespace"
112+
assert task.parsed_options.namespace_inject == "project_namespace"
113113

114114
def test_init_options_with_managed(self):
115115
"""Test _init_options with managed flag"""
@@ -141,7 +141,7 @@ def test_init_options_namespaced_org(self):
141141
AssignPermissionSetToPermissionSetGroup,
142142
{
143143
"assignments": {"PSG1": ["PS1"]},
144-
"namespace": "test_namespace",
144+
"namespace_inject": "test_namespace",
145145
},
146146
)
147147
task.org_config.namespace = "test_namespace"
@@ -154,7 +154,7 @@ def test_init_options_non_namespaced_org(self):
154154
AssignPermissionSetToPermissionSetGroup,
155155
{
156156
"assignments": {"PSG1": ["PS1"]},
157-
"namespace": "test_namespace",
157+
"namespace_inject": "test_namespace",
158158
},
159159
)
160160
task.org_config.namespace = "different_namespace"
@@ -430,7 +430,7 @@ def test_get_permission_set_group_ids_with_namespace(self):
430430
"""Test _get_permission_set_group_ids with namespace"""
431431
task = create_task(
432432
AssignPermissionSetToPermissionSetGroup,
433-
{"assignments": {"NS__PSG1": ["PS1"]}, "namespace": "NS"},
433+
{"assignments": {"NS__PSG1": ["PS1"]}, "namespace_inject": "NS"},
434434
)
435435
task._init_options({})
436436
task._init_task()
@@ -547,7 +547,7 @@ def test_get_permission_set_ids_with_namespace(self):
547547
"""Test _get_permission_set_ids with namespace"""
548548
task = create_task(
549549
AssignPermissionSetToPermissionSetGroup,
550-
{"assignments": {"PSG1": ["NS__PS1"]}, "namespace": "NS"},
550+
{"assignments": {"PSG1": ["NS__PS1"]}, "namespace_inject": "NS"},
551551
)
552552
task._init_options({})
553553
task._init_task()
@@ -596,7 +596,7 @@ def test_process_namespaces(self):
596596
):
597597
task = create_task(
598598
AssignPermissionSetToPermissionSetGroup,
599-
{"assignments": {"PSG1": ["PS1"]}, "namespace": "NS"},
599+
{"assignments": {"PSG1": ["PS1"]}, "namespace_inject": "NS"},
600600
)
601601
task._init_options({})
602602
result = task._process_namespaces(["PS1"])
@@ -618,7 +618,7 @@ def test_build_name_conditions_with_namespace(self):
618618
"""Test _build_name_conditions with namespace"""
619619
task = create_task(
620620
AssignPermissionSetToPermissionSetGroup,
621-
{"assignments": {"PSG1": ["NS__PS1"]}, "namespace": "NS"},
621+
{"assignments": {"PSG1": ["NS__PS1"]}, "namespace_inject": "NS"},
622622
)
623623
task._init_options({})
624624
conditions, mapping = task._build_name_conditions(["NS__PS1"])

cumulusci/utils/__init__.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -781,11 +781,12 @@ def get_tasks_with_options(project_config, frozen_options: frozenset):
781781
coordinator_opts = {}
782782
options = dict(frozen_options)
783783
for task_config in project_config.list_tasks():
784-
if any(
785-
key in options.keys()
786-
for key in project_config.get_task(task_config["name"])
787-
.get_class()
788-
.task_options.keys()
789-
):
790-
coordinator_opts[task_config["name"]] = options
784+
task_keys = (
785+
project_config.get_task(task_config["name"]).get_class().task_options.keys()
786+
)
787+
if any(key in options.keys() for key in task_keys):
788+
# only assign options that are actually used by the task. This is to avoid passing options that are not used by the task.
789+
coordinator_opts[task_config["name"]] = {
790+
key: options[key] for key in options.keys() if key in task_keys
791+
}
791792
return coordinator_opts

0 commit comments

Comments
 (0)