Add management command to import a range of Chzzk campaigns

This commit is contained in:
Joakim Hellsén 2026-04-01 20:44:44 +02:00
commit e709009b99
Signed by: Joakim Hellsén
SSH key fingerprint: SHA256:/9h/CsExpFp+PRhsfA0xznFx2CGfTT5R/kpuFfUgEQk

View file

@ -0,0 +1,59 @@
from typing import TYPE_CHECKING
from django.core.management import BaseCommand
from django.core.management import CommandError
from django.core.management import call_command
if TYPE_CHECKING:
import argparse
class Command(BaseCommand):
"""Django management command to import a range of Chzzk campaigns by calling import_chzzk_campaign repeatedly."""
help = (
"Import a range of Chzzk campaigns by calling import_chzzk_campaign repeatedly."
)
def add_arguments(self, parser: argparse.ArgumentParser) -> None:
"""Add command-line arguments for the management command."""
parser.add_argument("start", type=int, help="Starting campaign number")
parser.add_argument("end", type=int, help="Ending campaign number (inclusive)")
parser.add_argument(
"--step",
type=int,
default=None,
help="Step to move between numbers (default -1 for descending, 1 for ascending)",
)
def handle(self, **options) -> None:
"""Main handler for the management command. Calls import_chzzk_campaign for each campaign number in the specified range.
Raises:
ValueError: If step is 0.
"""
start: int = options["start"]
end: int = options["end"]
step: int | None = options["step"]
if step is None:
step = -1 if start > end else 1
if step == 0:
msg = "Step cannot be 0"
raise ValueError(msg)
range_end: int = end + 1 if step > 0 else end - 1
msg: str = f"Importing campaigns from {start} to {end} with step {step}"
self.stdout.write(self.style.SUCCESS(msg))
for campaign_no in range(start, range_end, step):
self.stdout.write(f"Importing campaign {campaign_no}...")
try:
call_command("import_chzzk_campaign", str(campaign_no))
except CommandError as exc:
msg = f"Failed campaign {campaign_no}: {exc}"
self.stdout.write(self.style.ERROR(msg))
self.stdout.write(self.style.SUCCESS("Batch import complete."))