in privaterelay/management/commands/cleanup_data.py [0:0]
def handle(self, clean: bool, verbosity: int, *args: Any, **kwargs: Any) -> str:
"""Run the cleanup_data command."""
# Determine if we're running some tasks or the full set
run_some: list[str] = []
for name, val in kwargs.items():
slug = name.replace("_", "-")
if slug in self.tasks and val:
run_some.append(slug)
if run_some:
tasks = {slug: self.tasks[slug] for slug in sorted(run_some)}
else:
tasks = self.tasks
# Find data issues and clean them if requested
issue_count = 0
clean_count = 0
issue_timers: dict[str, float] = {}
clean_timers: dict[str, float] = {}
for slug, task in tasks.items():
with transaction.atomic():
task_issues, task_time = self.find_issues_in_task(task)
issue_count += task_issues
issue_timers[slug] = task_time
if clean:
task_cleaned, clean_time = self.clean_issues_in_task(task)
if task_cleaned is not None and clean_time is not None:
clean_count += task_cleaned
clean_timers[slug] = clean_time
# Log results and create a report, based on requested verbosity
if clean:
log_message = (
f"cleanup_data complete, cleaned {clean_count} of"
f" {issue_count} issue{'' if issue_count==1 else 's'}."
)
else:
log_message = (
f"cleanup_data complete, found {issue_count}"
f" issue{'' if issue_count==1 else 's'} (dry run)."
)
full_data, log_data = self.prepare_data(
clean, verbosity, tasks, issue_timers, clean_timers=clean_timers
)
logger.info(log_message, extra=log_data)
report = self.get_report(log_message, full_data)
return report