def handle_safe()

in bedrock/security/management/commands/update_security_advisories.py [0:0]


    def handle_safe(self, quiet, no_git, clear_db, **options):
        force = no_git or clear_db
        repo = GitRepo(
            ADVISORIES_PATH,
            ADVISORIES_REPO,
            branch_name=ADVISORIES_BRANCH,
            name="Security Advisories",
        )

        def printout(msg, ending=None):
            if not quiet:
                self.stdout.write(msg, ending=ending)

        if clear_db:
            printout("Clearing all security advisories.")
            SecurityAdvisory.objects.all().delete()
            Product.objects.all().delete()
            MitreCVE.objects.all().delete()

        if not no_git:
            printout("Updating repository.")
            repo.update()

        if not (force or repo.has_changes()):
            printout("Nothing to update.")
            return

        errors = []
        updates = 0
        all_files = get_all_file_names()
        for mf in all_files:
            try:
                update_db_from_file(mf)
            except Exception as e:
                errors.append(f"ERROR parsing {mf}: {e}")
                if not quiet:
                    sys.stdout.write("E")
                    sys.stdout.flush()
                continue
            if not quiet:
                sys.stdout.write(".")
                sys.stdout.flush()
            updates += 1
        printout(f"\nUpdated {updates} files.")

        if not clear_db:
            deleted_files = get_files_to_delete_from_db(all_files)
            delete_files(deleted_files)
            printout(f"Deleted {len(deleted_files)} files.")
            num_products = delete_orphaned_products()
            if num_products:
                printout(f"Deleted {num_products} orphaned products.")

        if errors:
            raise CommandError(f"Encountered {len(errors)} errors:\n\n" + "\n==========\n".join(errors))

        repo.set_db_latest()