informatica-python 1.10.0__py3-none-any.whl → 1.10.1__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.
@@ -963,10 +963,11 @@ def _gen_joiner_transform(lines, tx, tx_safe, input_df, input_sources, source_df
963
963
  to_field = conn.to_field
964
964
  port_to_col[to_field] = conn.from_field
965
965
  port_to_col[to_field.lower()] = conn.from_field
966
+ src_key = f"{conn.from_instance}:{conn.from_instance_group}" if conn.from_instance_group else conn.from_instance
966
967
  if to_field in master_fields or to_field.lower() in master_fields_lower:
967
- master_src = conn.from_instance
968
+ master_src = src_key
968
969
  elif to_field in detail_fields or to_field.lower() in detail_fields_lower:
969
- detail_src = conn.from_instance
970
+ detail_src = src_key
970
971
 
971
972
  if left_keys and right_keys and port_to_col:
972
973
  left_keys = [port_to_col.get(k, port_to_col.get(k.lower(), k)) for k in left_keys]
@@ -984,9 +985,17 @@ def _gen_joiner_transform(lines, tx, tx_safe, input_df, input_sources, source_df
984
985
  detail_src = s
985
986
  break
986
987
 
988
+ def _resolve_src(key):
989
+ if key in source_dfs:
990
+ return source_dfs[key]
991
+ base = key.split(":")[0] if ":" in key else key
992
+ if base in source_dfs:
993
+ return source_dfs[base]
994
+ return f"df_{_safe_name(base)}"
995
+
987
996
  if master_src and detail_src:
988
- df_master = source_dfs.get(master_src, f"df_{_safe_name(master_src)}")
989
- df_detail = source_dfs.get(detail_src, f"df_{_safe_name(detail_src)}")
997
+ df_master = _resolve_src(master_src)
998
+ df_detail = _resolve_src(detail_src)
990
999
 
991
1000
  lines.append(f" # Join ({join_type}): {join_condition or 'auto'}")
992
1001
  if left_keys and right_keys:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: informatica-python
3
- Version: 1.10.0
3
+ Version: 1.10.1
4
4
  Summary: Convert Informatica PowerCenter workflow XML to Python/PySpark code
5
5
  Author: Nick
6
6
  License: MIT
@@ -414,9 +414,10 @@ The generated `helper_functions.py` provides a complete runtime library:
414
414
 
415
415
  ## Changelog
416
416
 
417
- ### v1.10.0 (Current)
417
+ ### v1.10.1 (Current)
418
418
  - **Router multi-group output support**: Router transformations now properly handle `<GROUP>` elements with `EXPRESSION` attributes — generates separate filtered DataFrames for each named output group (e.g., `df_rtr_rest_type_per`, `df_rtr_rest_value_per`), not just the DEFAULT group
419
419
  - **Connector group routing**: `FROMINSTANCEGROUP` / `TOINSTANCEGROUP` attributes on `CONNECTOR` elements are now parsed and used to wire downstream transforms/targets to the correct Router output group
420
+ - **Joiner group-aware routing**: Joiner transformations now correctly identify master/detail sources through Router group connectors — two different Router output groups feeding a Joiner are properly resolved to their distinct DataFrames
420
421
  - **GroupDef expression field**: `GroupDef` model now stores the `EXPRESSION` attribute from `<GROUP>` XML elements
421
422
  - **Backward-compatible Router fallback**: Existing `TABLEATTRIBUTE`-based Router group conditions (older XML format) continue to work — the code checks `<GROUP>` elements first, then falls back to `TABLEATTRIBUTE` entries
422
423
  - **223 tests** passing
@@ -7,7 +7,7 @@ informatica_python/generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
7
7
  informatica_python/generators/config_gen.py,sha256=4tqcNKTB06kyGZIiM4yl0q97q_i3zeCHXTjuE1dNFKY,5726
8
8
  informatica_python/generators/error_log_gen.py,sha256=2cc0rEcblydHkb9VAMXlrH7WdSQ-CNqAXcwVk3FYZeM,21319
9
9
  informatica_python/generators/helper_gen.py,sha256=lC30hyZn6RIkbo4e_6sbqdrCfmZHWaXdr-p0tmtfILc,82376
10
- informatica_python/generators/mapping_gen.py,sha256=eBYJEGWKUPeRrdnWpJRFl6VL9N7qj5ybmKCgG7rFBDI,74554
10
+ informatica_python/generators/mapping_gen.py,sha256=BA703-7byzqvRy_23w-1mpWNs7v8dEaXh2c1NUwtRIk,74841
11
11
  informatica_python/generators/sql_gen.py,sha256=O8Y-aJz9EyFJ0DXeuISRt5yKwC3wlp2K3B0BHrmxrXw,4872
12
12
  informatica_python/generators/workflow_gen.py,sha256=_uSlBg31ZRMhMlCYk4hWDRBPaBROrepD8_v3QGEWJxE,18089
13
13
  informatica_python/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -15,9 +15,9 @@ informatica_python/utils/datatype_map.py,sha256=iLOYg-iBKT4rMecGbrFkTpJj4yqs5S9H
15
15
  informatica_python/utils/expression_converter.py,sha256=ynprsvZGvavML3Y8C485GyjaoqQ-k67OESXHShafeTo,48244
16
16
  informatica_python/utils/lib_adapters.py,sha256=1ZtuMbgDg9Ukf-OF_EG1L_BeeR-6JQk8Kx3WwMfvNRU,6516
17
17
  informatica_python/utils/sql_dialect.py,sha256=_IHJbfu8a3mT_OvHpybgSfZKqz6mwVy5ItTKDRChqnU,5461
18
- informatica_python-1.10.0.dist-info/licenses/LICENSE,sha256=77RaRDdXgey1D90YZAjXqEQdBxWfvUQqLQX3pC1qjUE,1061
19
- informatica_python-1.10.0.dist-info/METADATA,sha256=eL7mk2t5wXyw9J1g6MjSXuUzByXzyX0BxPtXXX_wTAs,30427
20
- informatica_python-1.10.0.dist-info/WHEEL,sha256=PovZm1ExVWmrRefZoXCfejlbKLnQI5SVIf1SWRV4QQI,97
21
- informatica_python-1.10.0.dist-info/entry_points.txt,sha256=030jjTrx-1oRRQ16HZz52rdcKS8R8_llnymsTUtn_Xc,67
22
- informatica_python-1.10.0.dist-info/top_level.txt,sha256=Dngg-WNteYi22XAJU2XKAQS8aZ52yM2LYC0tzxrlbVQ,19
23
- informatica_python-1.10.0.dist-info/RECORD,,
18
+ informatica_python-1.10.1.dist-info/licenses/LICENSE,sha256=77RaRDdXgey1D90YZAjXqEQdBxWfvUQqLQX3pC1qjUE,1061
19
+ informatica_python-1.10.1.dist-info/METADATA,sha256=FfUt2F7VzYojRHWjCMtYD-rVqJZnQR1RS3uyWC6nWXc,30668
20
+ informatica_python-1.10.1.dist-info/WHEEL,sha256=PovZm1ExVWmrRefZoXCfejlbKLnQI5SVIf1SWRV4QQI,97
21
+ informatica_python-1.10.1.dist-info/entry_points.txt,sha256=030jjTrx-1oRRQ16HZz52rdcKS8R8_llnymsTUtn_Xc,67
22
+ informatica_python-1.10.1.dist-info/top_level.txt,sha256=Dngg-WNteYi22XAJU2XKAQS8aZ52yM2LYC0tzxrlbVQ,19
23
+ informatica_python-1.10.1.dist-info/RECORD,,