Spaces:
Sleeping
Sleeping
File size: 4,915 Bytes
f0b765c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | #!/usr/bin/env python3
"""
Analysis Report Viewer
This script provides utilities to view and filter the codebase analysis results.
"""
import json
import sys
from typing import Dict, List, Optional
def load_analysis_report(file_path: str = "analysis_report.json") -> Dict:
"""Load the analysis report from JSON file"""
try:
with open(file_path, 'r') as f:
return json.load(f)
except FileNotFoundError:
print(f"Analysis report not found: {file_path}")
print("Run 'python3 scripts/utilities/backup_and_analyze.py' first to generate the report.")
sys.exit(1)
def filter_files_by_type(report: Dict, file_type: str) -> List[Dict]:
"""Filter files by type"""
return [f for f in report['files'] if f['file_type'] == file_type]
def filter_files_by_action(report: Dict, action: str) -> List[Dict]:
"""Filter files by suggested action"""
return [f for f in report['files'] if f['suggested_action'] == action]
def show_summary(report: Dict):
"""Show analysis summary"""
print("=== Codebase Analysis Summary ===")
print(f"Analysis timestamp: {report['timestamp']}")
print(f"Total files: {report['total_files']}")
print(f"Files with dependencies: {report['dependency_stats']['total_files_with_dependencies']}")
print(f"Average dependencies per file: {report['dependency_stats']['average_dependencies_per_file']:.2f}")
print()
print("=== File Type Breakdown ===")
for file_type, count in sorted(report['file_type_counts'].items()):
print(f"{file_type:20}: {count:6}")
print()
print("=== Suggested Actions ===")
for action, count in sorted(report['suggested_action_counts'].items()):
print(f"{action:20}: {count:6}")
print()
def show_files_by_type(report: Dict, file_type: str):
"""Show files of a specific type"""
files = filter_files_by_type(report, file_type)
print(f"=== Files of type: {file_type} ({len(files)} files) ===")
for file_info in sorted(files, key=lambda x: x['path']):
print(f"{file_info['path']:50} | {file_info['size']:8} bytes | {file_info['suggested_action']}")
print()
def show_files_by_action(report: Dict, action: str):
"""Show files with a specific suggested action"""
files = filter_files_by_action(report, action)
print(f"=== Files with action: {action} ({len(files)} files) ===")
for file_info in sorted(files, key=lambda x: x['path']):
print(f"{file_info['path']:50} | {file_info['file_type']:15} | {file_info['size']:8} bytes")
print()
def show_dependencies(report: Dict, file_path: Optional[str] = None):
"""Show dependency information"""
if file_path:
# Show dependencies for specific file
if file_path in report['dependency_graph']:
deps = report['dependency_graph'][file_path]
print(f"=== Dependencies for {file_path} ===")
for dep in sorted(deps):
print(f" -> {dep}")
else:
print(f"No dependencies found for {file_path}")
else:
# Show files with most dependencies
dep_counts = [(f, len(deps)) for f, deps in report['dependency_graph'].items()]
dep_counts.sort(key=lambda x: x[1], reverse=True)
print("=== Files with Most Dependencies (top 20) ===")
for file_path, count in dep_counts[:20]:
print(f"{file_path:50} | {count:3} dependencies")
print()
def main():
"""Main function with command-line interface"""
if len(sys.argv) < 2:
print("Usage: python3 scripts/utilities/view_analysis.py <command> [options]")
print()
print("Commands:")
print(" summary - Show analysis summary")
print(" type <file_type> - Show files of specific type")
print(" action <action> - Show files with specific action")
print(" deps [file_path] - Show dependency information")
print()
print("Available file types:")
print(" python_source, python_test, python_cache, documentation,")
print(" configuration, migration, backup, deployment, data, unknown")
print()
print("Available actions:")
print(" keep, move, archive, delete, consolidate, rename")
sys.exit(1)
command = sys.argv[1]
report = load_analysis_report()
if command == "summary":
show_summary(report)
elif command == "type" and len(sys.argv) > 2:
show_files_by_type(report, sys.argv[2])
elif command == "action" and len(sys.argv) > 2:
show_files_by_action(report, sys.argv[2])
elif command == "deps":
file_path = sys.argv[2] if len(sys.argv) > 2 else None
show_dependencies(report, file_path)
else:
print(f"Unknown command: {command}")
sys.exit(1)
if __name__ == "__main__":
main() |