informatica-python 1.10.0__tar.gz → 1.10.2__tar.gz

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 (31) hide show
  1. {informatica_python-1.10.0 → informatica_python-1.10.2}/PKG-INFO +3 -2
  2. {informatica_python-1.10.0 → informatica_python-1.10.2}/README.md +2 -1
  3. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/generators/mapping_gen.py +14 -5
  4. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python.egg-info/PKG-INFO +3 -2
  5. {informatica_python-1.10.0 → informatica_python-1.10.2}/pyproject.toml +1 -1
  6. {informatica_python-1.10.0 → informatica_python-1.10.2}/tests/test_integration.py +1 -1
  7. {informatica_python-1.10.0 → informatica_python-1.10.2}/LICENSE +0 -0
  8. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/__init__.py +0 -0
  9. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/cli.py +0 -0
  10. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/converter.py +0 -0
  11. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/generators/__init__.py +0 -0
  12. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/generators/config_gen.py +0 -0
  13. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/generators/error_log_gen.py +0 -0
  14. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/generators/helper_gen.py +0 -0
  15. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/generators/sql_gen.py +0 -0
  16. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/generators/workflow_gen.py +0 -0
  17. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/models.py +0 -0
  18. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/parser.py +0 -0
  19. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/utils/__init__.py +0 -0
  20. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/utils/datatype_map.py +0 -0
  21. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/utils/expression_converter.py +0 -0
  22. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/utils/lib_adapters.py +0 -0
  23. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python/utils/sql_dialect.py +0 -0
  24. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python.egg-info/SOURCES.txt +0 -0
  25. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python.egg-info/dependency_links.txt +0 -0
  26. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python.egg-info/entry_points.txt +0 -0
  27. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python.egg-info/requires.txt +0 -0
  28. {informatica_python-1.10.0 → informatica_python-1.10.2}/informatica_python.egg-info/top_level.txt +0 -0
  29. {informatica_python-1.10.0 → informatica_python-1.10.2}/setup.cfg +0 -0
  30. {informatica_python-1.10.0 → informatica_python-1.10.2}/tests/test_converter.py +0 -0
  31. {informatica_python-1.10.0 → informatica_python-1.10.2}/tests/test_expressions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: informatica-python
3
- Version: 1.10.0
3
+ Version: 1.10.2
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
@@ -387,9 +387,10 @@ The generated `helper_functions.py` provides a complete runtime library:
387
387
 
388
388
  ## Changelog
389
389
 
390
- ### v1.10.0 (Current)
390
+ ### v1.10.1 (Current)
391
391
  - **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
392
392
  - **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
393
+ - **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
393
394
  - **GroupDef expression field**: `GroupDef` model now stores the `EXPRESSION` attribute from `<GROUP>` XML elements
394
395
  - **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
395
396
  - **223 tests** passing
@@ -830,7 +830,7 @@ def _gen_expression_transform(lines, tx, tx_safe, input_df, source_dfs, data_lib
830
830
  lines.append(f" df_{tx_safe} = {copy_expr}")
831
831
  for fld in active_fields:
832
832
  expr_vec = convert_expression_vectorized(fld.expression, f"df_{tx_safe}")
833
- lines.append(f" # {fld.name} = {fld.expression}")
833
+ lines.append(f' """{fld.name} = {fld.expression}"""')
834
834
  lines.append(f" df_{tx_safe}['{fld.name}'] = {expr_vec}")
835
835
  else:
836
836
  lines.append(f" df_{tx_safe} = {input_df}")
@@ -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.2
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "informatica-python"
7
- version = "1.10.0"
7
+ version = "1.10.2"
8
8
  description = "Convert Informatica PowerCenter workflow XML to Python/PySpark code"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -2038,7 +2038,7 @@ class TestCodeFormattingAndComments(unittest.TestCase):
2038
2038
 
2039
2039
  def test_expression_has_inline_comment(self):
2040
2040
  code = self._generate_full_mapping()
2041
- assert "# OUT_VAL = UPPER(VAL)" in code
2041
+ assert '"""OUT_VAL = UPPER(VAL)"""' in code
2042
2042
 
2043
2043
  def test_transformation_has_section_header(self):
2044
2044
  code = self._generate_full_mapping()