inital commit

This commit is contained in:
2026-06-08 15:57:11 +02:00
parent aaf8729663
commit d9ca48addc
114 changed files with 12172 additions and 1 deletions

View 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()