inital commit
This commit is contained in:
54
server/app/mailer/commands/queue_campaign.py
Normal file
54
server/app/mailer/commands/queue_campaign.py
Normal file
@@ -0,0 +1,54 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user