55 lines
2.2 KiB
Python
55 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
|
|
from app.db.bootstrap import create_all_tables
|
|
from app.db.models import Campaign
|
|
from app.db.session import SessionLocal
|
|
from app.mailer.sending.jobs import queue_campaign_jobs
|
|
from app.security.api_keys import authenticate_api_key
|
|
from app.settings import settings
|
|
|
|
|
|
def main() -> None:
|
|
parser = argparse.ArgumentParser(description="Queue built campaign jobs for sending.")
|
|
parser.add_argument("--campaign-id", required=True, help="Database campaign UUID, not external campaign id")
|
|
parser.add_argument("--version-id", default=None, help="Optional campaign version UUID; defaults to current version")
|
|
parser.add_argument("--api-key", default=settings.dev_bootstrap_api_key)
|
|
parser.add_argument("--no-celery", action="store_true", help="Only mark jobs as queued; do not enqueue Celery tasks")
|
|
parser.add_argument("--exclude-warnings", action="store_true", help="Queue only validation_status=ready, not warnings")
|
|
parser.add_argument("--dry-run", action="store_true")
|
|
parser.add_argument("--json", action="store_true")
|
|
args = parser.parse_args()
|
|
|
|
create_all_tables()
|
|
with SessionLocal() as session:
|
|
api_key = authenticate_api_key(session, args.api_key)
|
|
if not api_key:
|
|
raise SystemExit("Invalid API key")
|
|
result = queue_campaign_jobs(
|
|
session,
|
|
tenant_id=api_key.tenant_id,
|
|
campaign_id=args.campaign_id,
|
|
version_id=args.version_id,
|
|
enqueue_celery=not args.no_celery,
|
|
include_warnings=not args.exclude_warnings,
|
|
dry_run=args.dry_run,
|
|
)
|
|
if args.json:
|
|
print(json.dumps(result.as_dict(), indent=2))
|
|
return
|
|
campaign = session.get(Campaign, args.campaign_id)
|
|
print(f"Campaign: {campaign.name if campaign else args.campaign_id}")
|
|
print(f"Version: {result.version_id}")
|
|
print(f"Queued: {result.queued_count}")
|
|
print(f"Skipped: {result.skipped_count}")
|
|
print(f"Blocked: {result.blocked_count}")
|
|
print(f"Enqueued Celery tasks: {result.enqueued_count}")
|
|
if result.dry_run:
|
|
print("Dry run: no database changes were committed")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|