203 lines
7.1 KiB
Python
203 lines
7.1 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Demo script to test the logging functionality in the pipeline editor.
|
||
This simulates adding nodes and shows the terminal logging output.
|
||
"""
|
||
|
||
import sys
|
||
import os
|
||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||
|
||
# Set up Qt environment
|
||
os.environ['QT_QPA_PLATFORM'] = 'offscreen'
|
||
|
||
from PyQt5.QtWidgets import QApplication
|
||
from PyQt5.QtCore import QTimer
|
||
|
||
# Create Qt application
|
||
app = QApplication(sys.argv)
|
||
|
||
# Mock the pipeline editor to test logging without full UI
|
||
from core.pipeline import get_pipeline_summary
|
||
from core.nodes.model_node import ModelNode
|
||
from core.nodes.input_node import InputNode
|
||
from core.nodes.output_node import OutputNode
|
||
from core.nodes.preprocess_node import PreprocessNode
|
||
from core.nodes.postprocess_node import PostprocessNode
|
||
|
||
|
||
class MockPipelineEditor:
|
||
"""Mock pipeline editor to test logging functionality."""
|
||
|
||
def __init__(self):
|
||
self.nodes = []
|
||
self.previous_stage_count = 0
|
||
print("🚀 Pipeline Editor initialized")
|
||
self.analyze_pipeline()
|
||
|
||
def add_node(self, node_type):
|
||
"""Add a node and trigger analysis."""
|
||
if node_type == 'input':
|
||
node = InputNode()
|
||
print("🔄 Adding Input Node via toolbar...")
|
||
elif node_type == 'model':
|
||
node = ModelNode()
|
||
print("🔄 Adding Model Node via toolbar...")
|
||
elif node_type == 'output':
|
||
node = OutputNode()
|
||
print("🔄 Adding Output Node via toolbar...")
|
||
elif node_type == 'preprocess':
|
||
node = PreprocessNode()
|
||
print("🔄 Adding Preprocess Node via toolbar...")
|
||
elif node_type == 'postprocess':
|
||
node = PostprocessNode()
|
||
print("🔄 Adding Postprocess Node via toolbar...")
|
||
|
||
self.nodes.append(node)
|
||
print(f"➕ Node added: {node.NODE_NAME}")
|
||
self.analyze_pipeline()
|
||
|
||
def remove_last_node(self):
|
||
"""Remove the last node and trigger analysis."""
|
||
if self.nodes:
|
||
node = self.nodes.pop()
|
||
print(f"➖ Node removed: {node.NODE_NAME}")
|
||
self.analyze_pipeline()
|
||
|
||
def clear_pipeline(self):
|
||
"""Clear all nodes."""
|
||
print("🗑️ Clearing entire pipeline...")
|
||
self.nodes.clear()
|
||
self.analyze_pipeline()
|
||
|
||
def analyze_pipeline(self):
|
||
"""Analyze the pipeline and show logging."""
|
||
# Create a mock node graph
|
||
class MockGraph:
|
||
def __init__(self, nodes):
|
||
self._nodes = nodes
|
||
def all_nodes(self):
|
||
return self._nodes
|
||
|
||
graph = MockGraph(self.nodes)
|
||
|
||
try:
|
||
# Get pipeline summary
|
||
summary = get_pipeline_summary(graph)
|
||
current_stage_count = summary['stage_count']
|
||
|
||
# Print detailed pipeline analysis
|
||
self.print_pipeline_analysis(summary, current_stage_count)
|
||
|
||
# Update previous count for next comparison
|
||
self.previous_stage_count = current_stage_count
|
||
|
||
except Exception as e:
|
||
print(f"❌ Pipeline analysis error: {str(e)}")
|
||
|
||
def print_pipeline_analysis(self, summary, current_stage_count):
|
||
"""Print detailed pipeline analysis to terminal."""
|
||
# Check if stage count changed
|
||
if current_stage_count != self.previous_stage_count:
|
||
if self.previous_stage_count == 0:
|
||
print(f"🎯 Initial stage count: {current_stage_count}")
|
||
else:
|
||
change = current_stage_count - self.previous_stage_count
|
||
if change > 0:
|
||
print(f"📈 Stage count increased: {self.previous_stage_count} → {current_stage_count} (+{change})")
|
||
else:
|
||
print(f"📉 Stage count decreased: {self.previous_stage_count} → {current_stage_count} ({change})")
|
||
|
||
# Print current pipeline status
|
||
print(f"📊 Current Pipeline Status:")
|
||
print(f" • Stages: {current_stage_count}")
|
||
print(f" • Total Nodes: {summary['total_nodes']}")
|
||
print(f" • Model Nodes: {summary['model_nodes']}")
|
||
print(f" • Input Nodes: {summary['input_nodes']}")
|
||
print(f" • Output Nodes: {summary['output_nodes']}")
|
||
print(f" • Preprocess Nodes: {summary['preprocess_nodes']}")
|
||
print(f" • Postprocess Nodes: {summary['postprocess_nodes']}")
|
||
print(f" • Valid: {'✅' if summary['valid'] else '❌'}")
|
||
|
||
if not summary['valid'] and summary.get('error'):
|
||
print(f" • Error: {summary['error']}")
|
||
|
||
# Print stage details if available
|
||
if summary.get('stages'):
|
||
print(f"📋 Stage Details:")
|
||
for i, stage in enumerate(summary['stages'], 1):
|
||
model_name = stage['model_config'].get('node_name', 'Unknown Model')
|
||
preprocess_count = len(stage['preprocess_configs'])
|
||
postprocess_count = len(stage['postprocess_configs'])
|
||
|
||
stage_info = f" Stage {i}: {model_name}"
|
||
if preprocess_count > 0:
|
||
stage_info += f" (with {preprocess_count} preprocess)"
|
||
if postprocess_count > 0:
|
||
stage_info += f" (with {postprocess_count} postprocess)"
|
||
|
||
print(stage_info)
|
||
|
||
print("─" * 50) # Separator line
|
||
|
||
|
||
def demo_logging():
|
||
"""Demonstrate the logging functionality."""
|
||
print("=" * 60)
|
||
print("🔊 PIPELINE LOGGING DEMO")
|
||
print("=" * 60)
|
||
|
||
# Create mock editor
|
||
editor = MockPipelineEditor()
|
||
|
||
# Demo sequence: Build a pipeline step by step
|
||
print("\n1. Adding Input Node:")
|
||
editor.add_node('input')
|
||
|
||
print("\n2. Adding Model Node (creates first stage):")
|
||
editor.add_node('model')
|
||
|
||
print("\n3. Adding Output Node:")
|
||
editor.add_node('output')
|
||
|
||
print("\n4. Adding Preprocess Node:")
|
||
editor.add_node('preprocess')
|
||
|
||
print("\n5. Adding second Model Node (creates second stage):")
|
||
editor.add_node('model')
|
||
|
||
print("\n6. Adding Postprocess Node:")
|
||
editor.add_node('postprocess')
|
||
|
||
print("\n7. Adding third Model Node (creates third stage):")
|
||
editor.add_node('model')
|
||
|
||
print("\n8. Removing a Model Node (decreases stages):")
|
||
editor.remove_last_node()
|
||
|
||
print("\n9. Clearing entire pipeline:")
|
||
editor.clear_pipeline()
|
||
|
||
print("\n" + "=" * 60)
|
||
print("🎉 DEMO COMPLETED")
|
||
print("=" * 60)
|
||
print("\nAs you can see, the terminal logs show:")
|
||
print("• When nodes are added/removed")
|
||
print("• Stage count changes (increases/decreases)")
|
||
print("• Current pipeline status with detailed breakdown")
|
||
print("• Validation status and errors")
|
||
print("• Individual stage details")
|
||
|
||
|
||
def main():
|
||
"""Run the logging demo."""
|
||
try:
|
||
demo_logging()
|
||
except Exception as e:
|
||
print(f"❌ Demo failed: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
|
||
if __name__ == '__main__':
|
||
main() |