pubslihign and scheduling plan updated
This commit is contained in:
@@ -232,14 +232,15 @@ def process_scheduled_publications() -> Dict[str, Any]:
|
||||
- site_status = 'scheduled'
|
||||
- scheduled_publish_at <= now
|
||||
|
||||
For each, triggers the WordPress publishing task.
|
||||
For each, triggers publishing via PublisherService (current system).
|
||||
|
||||
UPDATED: Uses Site.wp_api_key directly (no SiteIntegration needed).
|
||||
|
||||
Returns:
|
||||
Dict with processing results
|
||||
"""
|
||||
from igny8_core.business.content.models import Content
|
||||
from igny8_core.business.integration.models import SiteIntegration
|
||||
from igny8_core.tasks.wordpress_publishing import publish_content_to_wordpress
|
||||
from igny8_core.business.publishing.services.publisher_service import PublisherService
|
||||
|
||||
results = {
|
||||
'processed': 0,
|
||||
@@ -249,33 +250,25 @@ def process_scheduled_publications() -> Dict[str, Any]:
|
||||
}
|
||||
|
||||
now = timezone.now()
|
||||
publisher_service = PublisherService()
|
||||
|
||||
try:
|
||||
# Get all scheduled content that's due
|
||||
due_content = Content.objects.filter(
|
||||
site_status='scheduled',
|
||||
scheduled_publish_at__lte=now
|
||||
).select_related('site', 'sector', 'cluster')
|
||||
).select_related('site', 'sector', 'cluster', 'account')
|
||||
|
||||
logger.info(f"[process_scheduled_publications] Found {due_content.count()} content items due for publishing")
|
||||
|
||||
for content in due_content:
|
||||
results['processed'] += 1
|
||||
|
||||
try:
|
||||
# Update status to publishing
|
||||
content.site_status = 'publishing'
|
||||
content.site_status_updated_at = timezone.now()
|
||||
content.save(update_fields=['site_status', 'site_status_updated_at'])
|
||||
|
||||
# Get site integration
|
||||
site_integration = SiteIntegration.objects.filter(
|
||||
site=content.site,
|
||||
platform='wordpress',
|
||||
is_active=True
|
||||
).first()
|
||||
|
||||
if not site_integration:
|
||||
error_msg = f"No active WordPress integration for site {content.site_id}"
|
||||
logger.error(error_msg)
|
||||
# Validate prerequisites
|
||||
if not content.site:
|
||||
error_msg = f"Content {content.id} has no site assigned"
|
||||
logger.error(f"[process_scheduled_publications] {error_msg}")
|
||||
content.site_status = 'failed'
|
||||
content.site_status_updated_at = timezone.now()
|
||||
content.save(update_fields=['site_status', 'site_status_updated_at'])
|
||||
@@ -283,30 +276,67 @@ def process_scheduled_publications() -> Dict[str, Any]:
|
||||
results['errors'].append(error_msg)
|
||||
continue
|
||||
|
||||
# Queue the WordPress publishing task
|
||||
publish_content_to_wordpress.delay(
|
||||
# Check WordPress configuration on Site
|
||||
if not content.site.wp_api_key:
|
||||
error_msg = f"Site '{content.site.name}' (ID: {content.site.id}) has no WordPress API key configured"
|
||||
logger.error(f"[process_scheduled_publications] {error_msg}")
|
||||
content.site_status = 'failed'
|
||||
content.site_status_updated_at = timezone.now()
|
||||
content.save(update_fields=['site_status', 'site_status_updated_at'])
|
||||
results['failed'] += 1
|
||||
results['errors'].append(error_msg)
|
||||
continue
|
||||
|
||||
if not content.site.domain:
|
||||
error_msg = f"Site '{content.site.name}' (ID: {content.site.id}) has no domain configured"
|
||||
logger.error(f"[process_scheduled_publications] {error_msg}")
|
||||
content.site_status = 'failed'
|
||||
content.site_status_updated_at = timezone.now()
|
||||
content.save(update_fields=['site_status', 'site_status_updated_at'])
|
||||
results['failed'] += 1
|
||||
results['errors'].append(error_msg)
|
||||
continue
|
||||
|
||||
# Update status to publishing
|
||||
content.site_status = 'publishing'
|
||||
content.site_status_updated_at = timezone.now()
|
||||
content.save(update_fields=['site_status', 'site_status_updated_at'])
|
||||
|
||||
# Publish via PublisherService (current system)
|
||||
logger.info(f"[process_scheduled_publications] Publishing content {content.id} '{content.title}' to {content.site.domain}")
|
||||
publish_result = publisher_service.publish_content(
|
||||
content_id=content.id,
|
||||
site_integration_id=site_integration.id
|
||||
destinations=['wordpress'],
|
||||
account=content.account
|
||||
)
|
||||
|
||||
logger.info(f"Queued content {content.id} for WordPress publishing")
|
||||
results['published'] += 1
|
||||
if publish_result.get('success'):
|
||||
logger.info(f"[process_scheduled_publications] ✅ Successfully published content {content.id}")
|
||||
results['published'] += 1
|
||||
else:
|
||||
error_msg = f"Publishing failed for content {content.id}: {publish_result.get('error', 'Unknown error')}"
|
||||
logger.error(f"[process_scheduled_publications] ❌ {error_msg}")
|
||||
content.site_status = 'failed'
|
||||
content.site_status_updated_at = timezone.now()
|
||||
content.save(update_fields=['site_status', 'site_status_updated_at'])
|
||||
results['failed'] += 1
|
||||
results['errors'].append(error_msg)
|
||||
|
||||
except Exception as e:
|
||||
error_msg = f"Error processing content {content.id}: {str(e)}"
|
||||
logger.error(error_msg)
|
||||
logger.error(f"[process_scheduled_publications] ❌ {error_msg}", exc_info=True)
|
||||
content.site_status = 'failed'
|
||||
content.site_status_updated_at = timezone.now()
|
||||
content.save(update_fields=['site_status', 'site_status_updated_at'])
|
||||
results['failed'] += 1
|
||||
results['errors'].append(error_msg)
|
||||
|
||||
logger.info(f"Processing completed: {results['published']}/{results['processed']} published successfully")
|
||||
logger.info(f"[process_scheduled_publications] ✅ Completed: {results['published']}/{results['processed']} published successfully, {results['failed']} failed")
|
||||
return results
|
||||
|
||||
except Exception as e:
|
||||
error_msg = f"Fatal error in process_scheduled_publications: {str(e)}"
|
||||
logger.error(error_msg)
|
||||
logger.error(f"[process_scheduled_publications] ❌ {error_msg}", exc_info=True)
|
||||
results['errors'].append(error_msg)
|
||||
return results
|
||||
|
||||
|
||||
Reference in New Issue
Block a user