| from datetime import datetime, timedelta |
| from celery import chain |
| import logging |
| from backend.celery_config import celery_app |
| from backend.celery_tasks.content_tasks import generate_content_task, publish_post_task |
|
|
| |
| logging.basicConfig(level=logging.INFO) |
| logger = logging.getLogger(__name__) |
|
|
| def init_celery_scheduler(supabase_client): |
| """ |
| Initialize the Celery-based task scheduler. |
| |
| Args: |
| supabase_client: Supabase client instance |
| """ |
| logger.info("Initializing Celery scheduler") |
| |
| |
| |
| def schedule_content_generation(schedule: dict, supabase_client_config: dict): |
| """ |
| Schedule content generation task using Celery. |
| |
| Args: |
| schedule (dict): Schedule data |
| supabase_client_config (dict): Supabase client configuration |
| |
| Returns: |
| dict: Celery task result |
| """ |
| schedule_id = schedule.get('id') |
| user_id = schedule.get('Social_network', {}).get('id_utilisateur') |
| |
| if not user_id: |
| logger.warning(f"No user ID found for schedule {schedule_id}") |
| return None |
| |
| logger.info(f"Scheduling content generation for schedule {schedule_id}") |
| |
| |
| task = generate_content_task.delay(user_id, schedule_id, supabase_client_config) |
| return { |
| 'task_id': task.id, |
| 'status': 'scheduled', |
| 'message': f'Content generation scheduled for schedule {schedule_id}' |
| } |
|
|
| def schedule_post_publishing(schedule: dict, supabase_client_config: dict): |
| """ |
| Schedule post publishing task using Celery. |
| |
| Args: |
| schedule (dict): Schedule data |
| supabase_client_config (dict): Supabase client configuration |
| |
| Returns: |
| dict: Celery task result |
| """ |
| schedule_id = schedule.get('id') |
| logger.info(f"Scheduling post publishing for schedule {schedule_id}") |
| |
| |
| task = publish_post_task.delay(schedule_id, supabase_client_config) |
| return { |
| 'task_id': task.id, |
| 'status': 'scheduled', |
| 'message': f'Post publishing scheduled for schedule {schedule_id}' |
| } |
|
|
| def schedule_content_and_publish(schedule: dict, supabase_client_config: dict): |
| """ |
| Schedule both content generation and post publishing as a chain. |
| |
| Args: |
| schedule (dict): Schedule data |
| supabase_client_config (dict): Supabase client configuration |
| |
| Returns: |
| dict: Celery task result |
| """ |
| schedule_id = schedule.get('id') |
| user_id = schedule.get('Social_network', {}).get('id_utilisateur') |
| |
| if not user_id: |
| logger.warning(f"No user ID found for schedule {schedule_id}") |
| return None |
| |
| logger.info(f"Scheduling content generation and publishing chain for schedule {schedule_id}") |
| |
| |
| task_chain = chain( |
| generate_content_task.s(user_id, schedule_id, supabase_client_config), |
| publish_post_task.s(supabase_client_config) |
| ) |
| |
| |
| result = task_chain.apply_async() |
| |
| return { |
| 'task_id': result.id, |
| 'status': 'scheduled', |
| 'message': f'Content generation and publishing chain scheduled for schedule {schedule_id}' |
| } |