test_session_factory_fix.pyโข9.68 kB
#!/usr/bin/env python3
"""
Test Session Factory Fix
This script tests if the session factory fix resolved the
"Class is not mapped" issue.
"""
import sys
from datetime import datetime
def test_session_factory():
"""Test if the session factory creates sessions that recognize mapped classes."""
print("=== TESTING SESSION FACTORY FIX ===\n")
try:
# Clear any cached imports
if 'models_unified' in sys.modules:
del sys.modules['models_unified']
print("โ
Cleared cached imports")
# Import the fixed version
from models_unified import UnifiedSessionFactory, UnifiedInteraction, UnifiedSession
print("โ
Models imported successfully")
# Create session factory
session_factory = UnifiedSessionFactory()
print("โ
Session factory created")
# Create a session
session = session_factory()
print(f"โ
Session created: {type(session).__name__}")
# Test if session recognizes mapped classes
try:
# Test querying interactions
interactions_count = session.query(UnifiedInteraction).count()
print(f"โ
Interactions query successful: {interactions_count}")
# Test querying sessions
sessions_count = session.query(UnifiedSession).count()
print(f"โ
Sessions query successful: {sessions_count}")
print("๐ Session factory fix is working!")
return True
except Exception as e:
print(f"โ Query still failed: {e}")
return False
except Exception as e:
print(f"โ Session factory test failed: {e}")
return False
def test_database_operations():
"""Test if database operations work with the fixed session factory."""
print("\n=== TESTING DATABASE OPERATIONS ===\n")
try:
from models_unified import UnifiedSessionFactory, UnifiedInteraction
session_factory = UnifiedSessionFactory()
print("โ
Session factory retrieved")
with session_factory() as session:
print(f"โ
Session active: {type(session).__name__}")
# Test creating a real interaction
try:
test_interaction = UnifiedInteraction(
interaction_type="session_factory_test",
client_request="Test request after session factory fix",
agent_response="Test response after session factory fix",
timestamp=datetime.now(),
status="success",
metadata={"test": True, "session_factory_fixed": True, "verified": True}
)
print("โ
Test interaction created")
# Add to session
session.add(test_interaction)
print("โ
Test interaction added to session")
# Commit to database
session.commit()
print("โ
Test interaction committed to database")
# Verify it was stored
stored_count = session.query(UnifiedInteraction).count()
print(f"โ
Total interactions in database: {stored_count}")
# Look for our test interaction
stored_interaction = session.query(UnifiedInteraction).filter_by(
interaction_type="session_factory_test"
).first()
if stored_interaction:
print(f"โ
Test interaction found in database")
print(f" ID: {stored_interaction.id}")
print(f" Type: {stored_interaction.interaction_type}")
print(f" Timestamp: {stored_interaction.timestamp}")
print("๐ DATABASE OPERATIONS ARE WORKING!")
return True
else:
print("โ Test interaction not found in database")
return False
except Exception as e:
print(f"โ Database operations failed: {e}")
return False
except Exception as e:
print(f"โ Database operations test failed: {e}")
return False
def test_interaction_logging():
"""Test if interaction logging works with the fixed session factory."""
print("\n=== TESTING INTERACTION LOGGING ===\n")
try:
from interaction_logger import InteractionLogger
logger = InteractionLogger()
print("โ
InteractionLogger created")
# Test logging a real interaction
print("๐ Testing interaction logging...")
result = logger.log_interaction(
interaction_type="logger_session_factory_test",
client_request="Test request with fixed session factory",
agent_response="Test response with fixed session factory",
status="success",
metadata={"test": True, "session_factory_fixed": True, "logger_test": True}
)
if result:
print("โ
Interaction logged successfully")
# Verify it's in the database
try:
from models_unified import UnifiedSessionFactory, UnifiedInteraction
session_factory = UnifiedSessionFactory()
with session_factory() as session:
count = session.query(UnifiedInteraction).count()
print(f" Total interactions in database: {count}")
if count > 0:
print("โ
Interactions are now being stored in real database!")
# Show the real interaction
real_interaction = session.query(UnifiedInteraction).filter_by(
interaction_type="logger_session_factory_test"
).first()
if real_interaction:
print(f" Real interaction ID: {real_interaction.id}")
print(f" Real interaction timestamp: {real_interaction.timestamp}")
print("๐ INTERACTION LOGGING WITH FIXED SESSION FACTORY IS WORKING!")
return True
else:
print("โ Real interaction not found in database")
return False
else:
print("โ Still no interactions in real database")
return False
except Exception as e:
print(f" โ Database verification failed: {e}")
return False
else:
print("โ Interaction logging failed")
return False
except Exception as e:
print(f"โ Interaction logging test failed: {e}")
return False
def main():
"""Main test function."""
print("๐งช TESTING SESSION FACTORY FIX\n")
print("This script will test if the session factory fix resolved the mapping issue.\n")
# Test all components
tests = [
("Session Factory", test_session_factory),
("Database Operations", test_database_operations),
("Interaction Logging", test_interaction_logging)
]
success_count = 0
for name, test_func in tests:
try:
print(f"๐งช Running: {name}")
result = test_func()
if result:
success_count += 1
print(f" โ
{name} passed")
else:
print(f" โ {name} failed")
except Exception as e:
print(f" โ {name} failed with error: {e}")
print(f"\n๐ Test Results: {success_count}/{len(tests)} tests passed")
if success_count == len(tests):
print("\n๐ COMPLETE SUCCESS!")
print(" โข Session factory working")
print(" โข Database operations working")
print(" โข Interaction logging working")
print("\n๐ **Your interaction tracking system is now fully functional!**")
print(" โข Interactions will be stored in real database")
print(" โข Context injection will work with real data")
print(" โข Conversation #107 will be properly tracked")
print("\n๐งช **Final Test Commands:**")
print("python diagnose_interaction_tracking.py")
print("python test_conversation_tracking.py")
print("\n๐ก **Expected Results:**")
print("โข Real SQLAlchemy sessions with mapped classes")
print("โข Interactions stored in real SQLite database")
print("โข Context injection working with actual conversation data")
print("โข Conversation #107 properly tracked and stored")
elif success_count > 0:
print("\nโ ๏ธ PARTIAL SUCCESS")
print(" โข Some components working, others need attention")
print(" โข Check the output above for specific failures")
else:
print("\nโ ALL TESTS FAILED")
print(" โข Session factory fix may not have worked")
print(" โข Check for syntax errors or import issues")
print(" โข Consider manual intervention")
if __name__ == "__main__":
main()