Skip to content

Commit 63f7b58

Browse files
authored
Merge pull request #37808 from apache/cp-37717
Cherrypick #37717
2 parents 9245812 + 9a30717 commit 63f7b58

2 files changed

Lines changed: 14 additions & 4 deletions

File tree

sdks/python/apache_beam/transforms/external_transform_provider_it_test.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,9 +392,17 @@ def test_check_standard_external_transforms_config_in_sync(self):
392392
'r') as f:
393393
standard_config = yaml.safe_load(f)
394394

395+
def _normalize(cfg):
396+
# Sort each transform's fields deterministically
397+
for t in cfg:
398+
if "fields" in t and isinstance(t["fields"], list):
399+
t["fields"] = sorted(t["fields"], key=lambda f: f.get("name", ""))
400+
# Sort transforms deterministically
401+
return sorted(cfg, key=lambda t: t.get("identifier", ""))
402+
395403
self.assertEqual(
396-
test_config,
397-
standard_config,
404+
_normalize(test_config),
405+
_normalize(standard_config),
398406
"The standard xlang transforms config file "
399407
"\"standard_external_transforms.yaml\" is out of sync! Please update "
400408
"by running './gradlew generateExternalTransformsConfig' "

sdks/python/gen_xlang_wrappers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@ class name. This can be overriden by manually providing a name.
137137
# use dynamic provider to discover and populate wrapper details
138138
provider = ExternalTransformProvider(BeamJarExpansionService(target))
139139
discovered: Dict[str, ExternalTransform] = provider.get_all()
140-
for identifier, wrapper in discovered.items():
140+
for identifier in sorted(discovered.keys()):
141+
wrapper = discovered[identifier]
141142
if identifier in transforms_to_skip:
142143
continue
143144

@@ -153,7 +154,8 @@ class name. This can be overriden by manually providing a name.
153154
name = modified_transform.get('name', wrapper.__name__)
154155

155156
fields = []
156-
for param in wrapper.configuration_schema.values():
157+
for param_name in sorted(wrapper.configuration_schema.keys()):
158+
param = wrapper.configuration_schema[param_name]
157159
(tp, nullable) = pretty_type(param.type)
158160
field_info = {
159161
'name': param.original_name,

0 commit comments

Comments
 (0)