# Generated by Django 1.11.29 on 2020-11-02 20:25

from django.db import migrations

BATCH_SIZE = 500


def obliterate_group_inbox(apps, schema_editor):
    import progressbar

    GroupInbox = apps.get_model("sentry.GroupInbox")

    total = GroupInbox.objects.all().count()
    widgets = [
        "GroupInbox: ",
        progressbar.Percentage(),
        " ",
        progressbar.Bar(),
        " ",
        progressbar.ETA(),
    ]
    bar = progressbar.ProgressBar(widgets=widgets, maxval=total)
    bar.start()
    progress = 0
    while True:
        deleted, _ = GroupInbox.objects.filter(
            id__in=GroupInbox.objects.all()[:BATCH_SIZE]
        ).delete()
        progress += deleted
        bar.update(min(progress, total))
        if not deleted:
            bar.finish()
            break


class Migration(migrations.Migration):
    # This flag is used to mark that a migration shouldn't be automatically run in
    # production. We set this to True for operations that we think are risky and want
    # someone from ops to run manually and monitor.
    # General advice is that if in doubt, mark your migration as `is_dangerous`.
    # Some things you should always mark as dangerous:
    # - Large data migrations. Typically we want these to be run manually by ops so that
    #   they can be monitored. Since data migrations will now hold a transaction open
    #   this is even more important.
    # - Adding columns to highly active tables, even ones that are NULL.
    is_dangerous = True

    # This flag is used to decide whether to run this migration in a transaction or not.
    # By default we prefer to run in a transaction, but for migrations where you want
    # to `CREATE INDEX CONCURRENTLY` this needs to be set to False. Typically you'll
    # want to create an index concurrently when adding one to an existing table.
    atomic = False

    dependencies = [
        ("sentry", "0120_commit_author_charfield"),
    ]

    operations = [migrations.RunPython(obliterate_group_inbox, migrations.RunPython.noop)]
