# Generated by Django 1.11.28 on 2020-09-02 21:33

import logging

from django.db import migrations

from sentry.utils.query import RangeQuerySetWrapperWithProgressBar


def fix_project_platform(apps, schema_editor):
    """
    Find projects whose platform is either 'python-tracing' or 'node-tracing',
    and change them to be either 'python' or 'node' respectively.
    """
    Project = apps.get_model("sentry", "Project")

    for project in RangeQuerySetWrapperWithProgressBar(Project.objects.all()):
        try:
            if project.platform == "node-tracing":
                project.platform = "node"
                project.save()
                continue

            if project.platform == "python-tracing":
                project.platform = "python"
                project.save()
                continue
        except Exception:
            logging.exception(f"Error changing platform for project {project.id}")


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", "0098_add-performance-onboarding")]

    operations = [
        migrations.RunPython(code=fix_project_platform, reverse_code=migrations.RunPython.noop)
    ]
