alwrity chatbot assistant, content scheduler, and content repurposing
This commit is contained in:
284
lib/integrations/platform_adapters/manager.py
Normal file
284
lib/integrations/platform_adapters/manager.py
Normal file
@@ -0,0 +1,284 @@
|
||||
"""
|
||||
Platform manager for handling multiple platform adapters.
|
||||
"""
|
||||
|
||||
import logging
|
||||
from typing import Dict, Any, List, Optional, Type
|
||||
from datetime import datetime
|
||||
|
||||
from .base import PlatformAdapter
|
||||
from .twitter import TwitterAdapter
|
||||
from .wix import WixAdapter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class PlatformManager:
|
||||
"""Manages multiple platform adapters."""
|
||||
|
||||
def __init__(self, config: Dict[str, Any]):
|
||||
"""Initialize platform manager with configuration."""
|
||||
self.config = config
|
||||
self.adapters: Dict[str, PlatformAdapter] = {}
|
||||
self._initialize_adapters()
|
||||
|
||||
def _initialize_adapters(self) -> None:
|
||||
"""Initialize platform adapters based on configuration."""
|
||||
platform_configs = self.config.get('platforms', {})
|
||||
|
||||
for platform, config in platform_configs.items():
|
||||
try:
|
||||
adapter = self._create_adapter(platform, config)
|
||||
if adapter:
|
||||
self.adapters[platform] = adapter
|
||||
logger.info(f"Initialized {platform} adapter")
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to initialize {platform} adapter: {str(e)}")
|
||||
|
||||
def _create_adapter(
|
||||
self,
|
||||
platform: str,
|
||||
config: Dict[str, Any]
|
||||
) -> Optional[PlatformAdapter]:
|
||||
"""Create platform adapter instance."""
|
||||
adapter_map: Dict[str, Type[PlatformAdapter]] = {
|
||||
'TWITTER': TwitterAdapter,
|
||||
'WIX': WixAdapter,
|
||||
# Add other platform adapters here
|
||||
}
|
||||
|
||||
adapter_class = adapter_map.get(platform.upper())
|
||||
if not adapter_class:
|
||||
logger.warning(f"Unsupported platform: {platform}")
|
||||
return None
|
||||
|
||||
try:
|
||||
return adapter_class(config)
|
||||
except Exception as e:
|
||||
raise Exception(
|
||||
f"Failed to create {platform} adapter: {str(e)}"
|
||||
)
|
||||
|
||||
async def publish_content(
|
||||
self,
|
||||
content: Dict[str, Any],
|
||||
platforms: List[str],
|
||||
schedule_time: Optional[datetime] = None
|
||||
) -> Dict[str, Dict[str, Any]]:
|
||||
"""Publish content to multiple platforms."""
|
||||
results = {}
|
||||
|
||||
for platform in platforms:
|
||||
if platform not in self.adapters:
|
||||
results[platform] = {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
continue
|
||||
|
||||
try:
|
||||
result = await self.adapters[platform].publish_content(
|
||||
content,
|
||||
schedule_time
|
||||
)
|
||||
results[platform] = result
|
||||
except Exception as e:
|
||||
results[platform] = {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
return results
|
||||
|
||||
async def get_content_status(
|
||||
self,
|
||||
content_id: str,
|
||||
platform: str
|
||||
) -> Dict[str, Any]:
|
||||
"""Get content status from a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
return {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
|
||||
try:
|
||||
return await self.adapters[platform].get_content_status(content_id)
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
async def delete_content(
|
||||
self,
|
||||
content_id: str,
|
||||
platform: str
|
||||
) -> Dict[str, Any]:
|
||||
"""Delete content from a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
return {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
|
||||
try:
|
||||
return await self.adapters[platform].delete_content(content_id)
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
async def update_content(
|
||||
self,
|
||||
content_id: str,
|
||||
updates: Dict[str, Any],
|
||||
platform: str
|
||||
) -> Dict[str, Any]:
|
||||
"""Update content on a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
return {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
|
||||
try:
|
||||
return await self.adapters[platform].update_content(
|
||||
content_id,
|
||||
updates
|
||||
)
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
async def get_analytics(
|
||||
self,
|
||||
content_id: str,
|
||||
platform: str,
|
||||
start_date: Optional[datetime] = None,
|
||||
end_date: Optional[datetime] = None
|
||||
) -> Dict[str, Any]:
|
||||
"""Get analytics from a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
return {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
|
||||
try:
|
||||
return await self.adapters[platform].get_analytics(
|
||||
content_id,
|
||||
start_date,
|
||||
end_date
|
||||
)
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
async def validate_content(
|
||||
self,
|
||||
content: Dict[str, Any],
|
||||
platform: str
|
||||
) -> Dict[str, Any]:
|
||||
"""Validate content for a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
return {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
|
||||
try:
|
||||
return await self.adapters[platform].validate_content(content)
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
async def get_optimal_publish_time(
|
||||
self,
|
||||
content_type: str,
|
||||
platform: str,
|
||||
target_audience: Optional[Dict[str, Any]] = None
|
||||
) -> datetime:
|
||||
"""Get optimal publish time for a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
raise Exception(f"Platform adapter not found: {platform}")
|
||||
|
||||
return await self.adapters[platform].get_optimal_publish_time(
|
||||
content_type,
|
||||
target_audience
|
||||
)
|
||||
|
||||
async def get_platform_limits(
|
||||
self,
|
||||
platform: str
|
||||
) -> Dict[str, Any]:
|
||||
"""Get platform limits for a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
return {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
|
||||
try:
|
||||
return await self.adapters[platform].get_platform_limits()
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
async def get_supported_content_types(
|
||||
self,
|
||||
platform: str
|
||||
) -> List[str]:
|
||||
"""Get supported content types for a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
raise Exception(f"Platform adapter not found: {platform}")
|
||||
|
||||
return await self.adapters[platform].get_supported_content_types()
|
||||
|
||||
async def get_platform_metrics(
|
||||
self,
|
||||
platform: str
|
||||
) -> Dict[str, Any]:
|
||||
"""Get platform metrics for a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
return {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
|
||||
try:
|
||||
return await self.adapters[platform].get_platform_metrics()
|
||||
except Exception as e:
|
||||
return {
|
||||
'success': False,
|
||||
'error': str(e)
|
||||
}
|
||||
|
||||
def get_available_platforms(self) -> List[str]:
|
||||
"""Get list of available platform adapters."""
|
||||
return list(self.adapters.keys())
|
||||
|
||||
def get_platform_info(self, platform: str) -> Dict[str, Any]:
|
||||
"""Get information about a specific platform."""
|
||||
if platform not in self.adapters:
|
||||
return {
|
||||
'success': False,
|
||||
'error': f"Platform adapter not found: {platform}"
|
||||
}
|
||||
|
||||
adapter = self.adapters[platform]
|
||||
return {
|
||||
'success': True,
|
||||
'name': adapter.get_platform_name(),
|
||||
'description': adapter.get_platform_description(),
|
||||
'version': adapter.get_platform_version(),
|
||||
'required_config': adapter.get_required_config_fields()
|
||||
}
|
||||
Reference in New Issue
Block a user