This is an automated email from the ASF dual-hosted git repository.

damccorm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 2403014afce Stabilize 
test_check_standard_external_transforms_config_in_sync (#37717)
2403014afce is described below

commit 2403014afce04ccba5cac1a899c8bea6111c03a5
Author: Vitaly Terentyev <[email protected]>
AuthorDate: Thu Feb 26 18:46:25 2026 +0400

    Stabilize test_check_standard_external_transforms_config_in_sync (#37717)
---
 .../transforms/external_transform_provider_it_test.py        | 12 ++++++++++--
 sdks/python/gen_xlang_wrappers.py                            |  6 ++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git 
a/sdks/python/apache_beam/transforms/external_transform_provider_it_test.py 
b/sdks/python/apache_beam/transforms/external_transform_provider_it_test.py
index 2f23c5df598..e86beab563b 100644
--- a/sdks/python/apache_beam/transforms/external_transform_provider_it_test.py
+++ b/sdks/python/apache_beam/transforms/external_transform_provider_it_test.py
@@ -392,9 +392,17 @@ class AutoGenerationScriptIT(unittest.TestCase):
               'r') as f:
       standard_config = yaml.safe_load(f)
 
+    def _normalize(cfg):
+      # Sort each transform's fields deterministically
+      for t in cfg:
+        if "fields" in t and isinstance(t["fields"], list):
+          t["fields"] = sorted(t["fields"], key=lambda f: f.get("name", ""))
+      # Sort transforms deterministically
+      return sorted(cfg, key=lambda t: t.get("identifier", ""))
+
     self.assertEqual(
-        test_config,
-        standard_config,
+        _normalize(test_config),
+        _normalize(standard_config),
         "The standard xlang transforms config file "
         "\"standard_external_transforms.yaml\" is out of sync! Please update "
         "by running './gradlew generateExternalTransformsConfig' "
diff --git a/sdks/python/gen_xlang_wrappers.py 
b/sdks/python/gen_xlang_wrappers.py
index 335fc2ee395..3176b74e836 100644
--- a/sdks/python/gen_xlang_wrappers.py
+++ b/sdks/python/gen_xlang_wrappers.py
@@ -137,7 +137,8 @@ def generate_transforms_config(input_services, output_file):
     # use dynamic provider to discover and populate wrapper details
     provider = ExternalTransformProvider(BeamJarExpansionService(target))
     discovered: Dict[str, ExternalTransform] = provider.get_all()
-    for identifier, wrapper in discovered.items():
+    for identifier in sorted(discovered.keys()):
+      wrapper = discovered[identifier]
       if identifier in transforms_to_skip:
         continue
 
@@ -153,7 +154,8 @@ def generate_transforms_config(input_services, output_file):
       name = modified_transform.get('name', wrapper.__name__)
 
       fields = []
-      for param in wrapper.configuration_schema.values():
+      for param_name in sorted(wrapper.configuration_schema.keys()):
+        param = wrapper.configuration_schema[param_name]
         (tp, nullable) = pretty_type(param.type)
         field_info = {
             'name': param.original_name,

Reply via email to