Added new features to the project
This commit is contained in:
164
lib/database/__init__.py
Normal file
164
lib/database/__init__.py
Normal file
@@ -0,0 +1,164 @@
|
||||
"""
|
||||
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
|
||||
Reference in New Issue
Block a user