""" Extension methods for RegressionTestingApp Adds HF Vision and Storage management methods """ from storage_manager import get_storage_manager def get_hf_analysis_info(app_instance) -> str: """Get HF Vision analysis results.""" if not app_instance.current_state or not hasattr(app_instance.current_state, 'hf_analysis_results'): return "No HF analysis results available yet. Run a test to see results." hf_results = app_instance.current_state.hf_analysis_results if not hf_results: return "HF Vision analysis not performed (model not available or disabled)." lines = [] lines.append("# HF Vision Model Analysis Results\n") for viewport, result in hf_results.items(): lines.append(f"## {viewport.upper()} Viewport\n") if "error" in result: lines.append(f"Error: {result['error']}\n") continue comp_type = result.get("comparison_type", "unknown") if comp_type == "captioning": lines.append(f"**Analysis Type**: Image Captioning\n") lines.append(f"**Design Caption**: {result.get('figma_caption', 'N/A')}") lines.append(f"**Website Caption**: {result.get('website_caption', 'N/A')}") lines.append(f"**Similarity Score**: {result.get('similarity_score', 0):.1f}%\n") if result.get("missing_elements"): lines.append(f"**Missing Elements**: {', '.join(result['missing_elements'])}") if result.get("extra_elements"): lines.append(f"**Extra Elements**: {', '.join(result['extra_elements'])}\n") elif comp_type == "detection": lines.append(f"**Analysis Type**: Object Detection\n") lines.append(f"**Design Objects**: {result.get('figma_object_count', 0)}") lines.append(f"**Website Objects**: {result.get('website_object_count', 0)}\n") if result.get("missing_objects"): lines.append(f"**Missing Objects**: {', '.join(result['missing_objects'])}") if result.get("extra_objects"): lines.append(f"**Extra Objects**: {', '.join(result['extra_objects'])}\n") return "\n".join(lines) if lines else "No HF analysis results available." def get_storage_info(app_instance) -> str: """Get storage information.""" try: storage = get_storage_manager() stats = storage.get_storage_stats() executions = storage.list_executions() lines = [] lines.append("# Screenshot Storage Information\n") # Overall stats lines.append("## Storage Statistics\n") lines.append(f"- **Total Files**: {stats.get('total_files', 0)}") lines.append(f"- **Total Size**: {stats.get('total_size_mb', 0):.2f}MB") lines.append(f"- **Storage Location**: {stats.get('base_dir', 'N/A')}\n") # Recent executions if executions: lines.append("## Recent Executions\n") for exec_info in executions[:10]: # Show last 10 lines.append(f"### {exec_info['execution_id']}") lines.append(f"- **Timestamp**: {exec_info['timestamp']}") lines.append(f"- **Screenshots**: {exec_info['screenshot_count']}") lines.append(f"- **Size**: {exec_info['size_mb']:.2f}MB\n") else: lines.append("No executions stored yet.\n") # Storage recommendations lines.append("## Storage Management\n") lines.append("- Screenshots are automatically saved for each test run") lines.append("- Old screenshots (7+ days) can be cleaned up using the cleanup button") lines.append(f"- Current storage: {stats.get('total_size_mb', 0):.2f}MB") return "\n".join(lines) except Exception as e: return f"Error getting storage info: {str(e)}" def cleanup_storage(app_instance) -> str: """Cleanup old screenshots.""" try: storage = get_storage_manager() deleted_count, freed_space = storage.cleanup_old_screenshots(days=7) lines = [] lines.append("# Storage Cleanup Results\n") lines.append(f"Cleanup completed successfully!\n") lines.append(f"- **Files Deleted**: {deleted_count}") lines.append(f"- **Space Freed**: {freed_space:.2f}MB\n") # Show updated stats stats = storage.get_storage_stats() lines.append("## Updated Storage Statistics\n") lines.append(f"- **Total Files**: {stats.get('total_files', 0)}") lines.append(f"- **Total Size**: {stats.get('total_size_mb', 0):.2f}MB") return "\n".join(lines) except Exception as e: return f"Error during cleanup: {str(e)}"