164 lines
5.2 KiB
Python
164 lines
5.2 KiB
Python
"""
|
|
Database Package for ALwrity
|
|
============================
|
|
|
|
This package provides database models and services for managing data
|
|
in the ALwrity application, including Twitter-specific functionality.
|
|
|
|
Main Components:
|
|
- models.py: Core application database models
|
|
- twitter_models.py: Twitter-specific database models
|
|
- twitter_service.py: High-level Twitter database service
|
|
- twitter_init.py: Database initialization and management utilities
|
|
|
|
Usage:
|
|
# Initialize Twitter database
|
|
from lib.database import initialize_twitter_database
|
|
initialize_twitter_database()
|
|
|
|
# Use Twitter database service
|
|
from lib.database import twitter_db
|
|
user = twitter_db.create_or_update_user(user_data)
|
|
|
|
# Use Twitter models directly
|
|
from lib.database.twitter_models import TwitterUser, Tweet
|
|
"""
|
|
|
|
# Import core models
|
|
from .models import (
|
|
SEOData, ContentType, Platform, ScheduleStatus,
|
|
ContentItem, Schedule, create_engine, init_db, get_session
|
|
)
|
|
|
|
# Import Twitter-specific components
|
|
try:
|
|
from .twitter_models import (
|
|
# Models
|
|
TwitterUser, Tweet, ScheduledTweet, TwitterAnalytics,
|
|
TweetAnalytics, EngagementData, AudienceInsight,
|
|
HashtagPerformance, ContentTemplate, TwitterSettings,
|
|
|
|
# Enums and Data Classes
|
|
TwitterAccountType, TweetType, TweetStatus, EngagementType,
|
|
AnalyticsTimeframe, ContentCategory, TwitterCredentials, TweetMetrics,
|
|
|
|
# Database functions
|
|
get_twitter_engine, init_twitter_db, get_twitter_session,
|
|
create_twitter_user, update_user_metrics, create_tweet_record,
|
|
update_tweet_metrics, calculate_virality_score, get_user_analytics_summary
|
|
)
|
|
|
|
from .twitter_service import TwitterDatabaseService, twitter_db
|
|
|
|
from .twitter_init import (
|
|
TwitterDatabaseInitializer, initialize_twitter_database,
|
|
check_twitter_database_health
|
|
)
|
|
|
|
TWITTER_AVAILABLE = True
|
|
|
|
except ImportError as e:
|
|
# Twitter components not available (missing dependencies)
|
|
TWITTER_AVAILABLE = False
|
|
print(f"Warning: Twitter database components not available: {e}")
|
|
|
|
# Package metadata
|
|
__version__ = "1.0.0"
|
|
__author__ = "ALwrity Team"
|
|
|
|
# Export main components
|
|
__all__ = [
|
|
# Core models
|
|
'SEOData', 'ContentType', 'Platform', 'ScheduleStatus',
|
|
'ContentItem', 'Schedule', 'create_engine', 'init_db', 'get_session',
|
|
|
|
# Twitter availability flag
|
|
'TWITTER_AVAILABLE',
|
|
]
|
|
|
|
# Add Twitter exports if available
|
|
if TWITTER_AVAILABLE:
|
|
__all__.extend([
|
|
# Twitter Models
|
|
'TwitterUser', 'Tweet', 'ScheduledTweet', 'TwitterAnalytics',
|
|
'TweetAnalytics', 'EngagementData', 'AudienceInsight',
|
|
'HashtagPerformance', 'ContentTemplate', 'TwitterSettings',
|
|
|
|
# Twitter Enums and Data Classes
|
|
'TwitterAccountType', 'TweetType', 'TweetStatus', 'EngagementType',
|
|
'AnalyticsTimeframe', 'ContentCategory', 'TwitterCredentials', 'TweetMetrics',
|
|
|
|
# Twitter Database Functions
|
|
'get_twitter_engine', 'init_twitter_db', 'get_twitter_session',
|
|
'create_twitter_user', 'update_user_metrics', 'create_tweet_record',
|
|
'update_tweet_metrics', 'calculate_virality_score', 'get_user_analytics_summary',
|
|
|
|
# Twitter Service
|
|
'TwitterDatabaseService', 'twitter_db',
|
|
|
|
# Twitter Initialization
|
|
'TwitterDatabaseInitializer', 'initialize_twitter_database',
|
|
'check_twitter_database_health'
|
|
])
|
|
|
|
def setup_database(db_url: str = "sqlite:///alwrity.db", twitter_db_url: str = "sqlite:///twitter_data.db"):
|
|
"""
|
|
Setup both core and Twitter databases.
|
|
|
|
Args:
|
|
db_url: URL for the core database
|
|
twitter_db_url: URL for the Twitter database
|
|
|
|
Returns:
|
|
dict: Setup results
|
|
"""
|
|
results = {
|
|
'core_db': False,
|
|
'twitter_db': False,
|
|
'errors': []
|
|
}
|
|
|
|
try:
|
|
# Initialize core database
|
|
engine = create_engine(db_url)
|
|
init_db(engine)
|
|
results['core_db'] = True
|
|
except Exception as e:
|
|
results['errors'].append(f"Core database setup failed: {e}")
|
|
|
|
if TWITTER_AVAILABLE:
|
|
try:
|
|
# Initialize Twitter database
|
|
success = initialize_twitter_database(twitter_db_url)
|
|
results['twitter_db'] = success
|
|
if not success:
|
|
results['errors'].append("Twitter database initialization failed")
|
|
except Exception as e:
|
|
results['errors'].append(f"Twitter database setup failed: {e}")
|
|
else:
|
|
results['errors'].append("Twitter database components not available")
|
|
|
|
return results
|
|
|
|
def get_database_info():
|
|
"""
|
|
Get information about available database components.
|
|
|
|
Returns:
|
|
dict: Database component information
|
|
"""
|
|
info = {
|
|
'core_models_available': True,
|
|
'twitter_models_available': TWITTER_AVAILABLE,
|
|
'version': __version__
|
|
}
|
|
|
|
if TWITTER_AVAILABLE:
|
|
try:
|
|
# Get Twitter database stats if service is available
|
|
stats = twitter_db.get_database_stats()
|
|
info['twitter_stats'] = stats
|
|
except Exception as e:
|
|
info['twitter_stats_error'] = str(e)
|
|
|
|
return info |