147 lines
5.0 KiB
Python
147 lines
5.0 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Clean Structure Verification Script
|
|
Verifies that all services can import their key components correctly after cleanup
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
import importlib.util
|
|
from pathlib import Path
|
|
|
|
def test_import(module_path, module_name):
|
|
"""Test if a module can be imported without errors"""
|
|
try:
|
|
spec = importlib.util.spec_from_file_location(module_name, module_path)
|
|
if spec is None:
|
|
return False, f"Could not create module spec for {module_path}"
|
|
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
return True, "Import successful"
|
|
except Exception as e:
|
|
return False, str(e)
|
|
|
|
def verify_service_structure(service_name, base_path):
|
|
"""Verify the structure of a specific service"""
|
|
print(f"\n=== Verifying {service_name.upper()} Service Structure ===")
|
|
|
|
service_path = base_path / f"services/{service_name}"
|
|
|
|
# Key files to check
|
|
key_files = [
|
|
"app/main.py",
|
|
"app/core/config.py",
|
|
"app/core/database.py"
|
|
]
|
|
|
|
# API files (if they exist)
|
|
api_files = []
|
|
api_path = service_path / "app/api"
|
|
if api_path.exists():
|
|
for api_file in api_path.glob("*.py"):
|
|
if api_file.name != "__init__.py":
|
|
api_files.append(f"app/api/{api_file.name}")
|
|
|
|
# Service files (if they exist)
|
|
service_files = []
|
|
services_path = service_path / "app/services"
|
|
if services_path.exists():
|
|
for service_file in services_path.glob("*.py"):
|
|
if service_file.name != "__init__.py":
|
|
service_files.append(f"app/services/{service_file.name}")
|
|
|
|
all_files = key_files + api_files + service_files
|
|
|
|
results = {"success": 0, "failed": 0, "details": []}
|
|
|
|
for file_path in all_files:
|
|
full_path = service_path / file_path
|
|
if not full_path.exists():
|
|
results["details"].append(f"❌ {file_path} - File does not exist")
|
|
results["failed"] += 1
|
|
continue
|
|
|
|
# Basic syntax check by attempting to compile
|
|
try:
|
|
with open(full_path, 'r') as f:
|
|
content = f.read()
|
|
compile(content, str(full_path), 'exec')
|
|
results["details"].append(f"✅ {file_path} - Syntax OK")
|
|
results["success"] += 1
|
|
except SyntaxError as e:
|
|
results["details"].append(f"❌ {file_path} - Syntax Error: {e}")
|
|
results["failed"] += 1
|
|
except Exception as e:
|
|
results["details"].append(f"⚠️ {file_path} - Warning: {e}")
|
|
results["success"] += 1 # Still count as success for non-syntax issues
|
|
|
|
# Print results
|
|
for detail in results["details"]:
|
|
print(f" {detail}")
|
|
|
|
success_rate = results["success"] / (results["success"] + results["failed"]) * 100 if (results["success"] + results["failed"]) > 0 else 0
|
|
print(f"\n{service_name.upper()} Results: {results['success']} ✅ | {results['failed']} ❌ | {success_rate:.1f}% success")
|
|
|
|
return results["failed"] == 0
|
|
|
|
def main():
|
|
"""Main verification function"""
|
|
print("🔍 DATABASE ARCHITECTURE REFACTORING - CLEAN STRUCTURE VERIFICATION")
|
|
print("=" * 70)
|
|
|
|
base_path = Path(__file__).parent
|
|
|
|
# Services to verify
|
|
services = ["data", "auth", "training", "forecasting", "tenant", "notification"]
|
|
|
|
all_services_ok = True
|
|
|
|
for service in services:
|
|
service_ok = verify_service_structure(service, base_path)
|
|
if not service_ok:
|
|
all_services_ok = False
|
|
|
|
# Verify shared components
|
|
print(f"\n=== Verifying SHARED Components ===")
|
|
shared_files = [
|
|
"shared/database/base.py",
|
|
"shared/database/repository.py",
|
|
"shared/database/unit_of_work.py",
|
|
"shared/database/transactions.py",
|
|
"shared/database/exceptions.py",
|
|
"shared/clients/base_service_client.py"
|
|
]
|
|
|
|
shared_ok = True
|
|
for file_path in shared_files:
|
|
full_path = base_path / file_path
|
|
if not full_path.exists():
|
|
print(f" ❌ {file_path} - File does not exist")
|
|
shared_ok = False
|
|
continue
|
|
|
|
try:
|
|
with open(full_path, 'r') as f:
|
|
content = f.read()
|
|
compile(content, str(full_path), 'exec')
|
|
print(f" ✅ {file_path} - Syntax OK")
|
|
except Exception as e:
|
|
print(f" ❌ {file_path} - Error: {e}")
|
|
shared_ok = False
|
|
|
|
# Final summary
|
|
print(f"\n" + "=" * 70)
|
|
if all_services_ok and shared_ok:
|
|
print("🎉 VERIFICATION SUCCESSFUL - All services have clean structure!")
|
|
print("✅ All enhanced_*.py files removed")
|
|
print("✅ All imports updated to use new structure")
|
|
print("✅ All syntax checks passed")
|
|
return 0
|
|
else:
|
|
print("❌ VERIFICATION FAILED - Issues found in service structure")
|
|
return 1
|
|
|
|
if __name__ == "__main__":
|
|
exit_code = main()
|
|
sys.exit(exit_code) |