omnata-plugin-runtime 0.10.11a262__tar.gz → 0.10.12__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: omnata-plugin-runtime
3
- Version: 0.10.11a262
3
+ Version: 0.10.12
4
4
  Summary: Classes and common runtime components for building and running Omnata Plugins
5
5
  Author: James Weakley
6
6
  Author-email: james.weakley@omnata.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "omnata-plugin-runtime"
3
- version = "0.10.11-a262"
3
+ version = "0.10.12"
4
4
  description = "Classes and common runtime components for building and running Omnata Plugins"
5
5
  authors = ["James Weakley <james.weakley@omnata.com>"]
6
6
  readme = "README.md"
@@ -572,35 +572,40 @@ class SnowflakeViewParts(BaseModel):
572
572
 
573
573
  return cls(main_part=main_stream_view_part, joined_parts=joined_parts)
574
574
 
575
- def prune(view_part:SnowflakeViewPart,joined_parts:List[SnowflakeViewPart]) -> bool:
575
+ def prune(view_part: SnowflakeViewPart, joined_parts: List[SnowflakeViewPart]) -> bool:
576
576
  """
577
- Prunes columns from the main view part that reference fields that are not available in the joined parts.
578
- Returns True if columns were removed, False otherwise.
577
+ Iteratively prunes columns from the main view part that reference fields
578
+ that are not available in the joined parts.
579
579
  """
580
- for column in view_part.columns:
581
- if column.referenced_columns:
582
- for referenced_stream_name, referenced_fields in column.referenced_columns.items():
583
-
584
- if referenced_stream_name == view_part.stream_name:
585
- part = view_part
586
- else:
587
- part = next((part for part in joined_parts if part.stream_name==referenced_stream_name),None)
588
- if part is None:
589
- logger.warning(f"Column {column.name} in stream {view_part.stream_name} references stream {referenced_stream_name}, but it was not provided")
590
- view_part.columns.remove(column)
591
- return True
592
-
593
- columns_missing_from_join = part.columns_missing(referenced_fields)
594
- if len(columns_missing_from_join) > 0:
595
- logger.warning(f"Column {column.name} in stream {view_part.stream_name} references fields {columns_missing_from_join} in stream {referenced_stream_name}, but they were not provided")
596
- view_part.columns.remove(column)
597
- return True
598
- else:
599
- # no columns were removed, but we need to check if the columns that are referenced are not themselves referencing other missing columns
600
- if part != view_part:
601
- return prune(part,joined_parts)
602
-
603
- return False
580
+ stack = [(view_part, joined_parts)]
581
+ columns_removed = False
582
+
583
+ while stack:
584
+ current_part, current_joined_parts = stack.pop()
585
+ for column in current_part.columns[:]: # Iterate over a copy to allow safe removal
586
+ if column.referenced_columns:
587
+ for referenced_stream_name, referenced_fields in column.referenced_columns.items():
588
+ if referenced_stream_name == current_part.stream_name:
589
+ part = current_part
590
+ else:
591
+ part = next((p for p in current_joined_parts if p.stream_name == referenced_stream_name), None)
592
+ if part is None:
593
+ logger.warning(f"Column {column.name} in stream {current_part.stream_name} references stream {referenced_stream_name}, but it was not provided")
594
+ current_part.columns.remove(column)
595
+ columns_removed = True
596
+ break
597
+
598
+ columns_missing_from_join = part.columns_missing(referenced_fields)
599
+ if columns_missing_from_join:
600
+ logger.warning(f"Column {column.name} in stream {current_part.stream_name} references fields {columns_missing_from_join} in stream {referenced_stream_name}, but they were not provided")
601
+ current_part.columns.remove(column)
602
+ columns_removed = True
603
+ break
604
+ else:
605
+ if part != current_part:
606
+ stack.append((part, current_joined_parts))
607
+
608
+ return columns_removed
604
609
 
605
610
  class JsonSchemaTopLevel(BaseModel):
606
611
  """