backend/code_review_backend/issues/migrations/0002_compare_issues.py (29 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# Generated by Django 2.2.6 on 2019-10-31 15:57
from django.db import migrations, models
from code_review_backend.issues.compare import detect_new_for_revision
def set_existing_as_new(apps, schema_editor):
"""
Update default value for existing issues
"""
Issue = apps.get_model("issues", "Issue")
issues = Issue.objects.filter(diff__isnull=False).prefetch_related("diff")
nb = issues.count()
if not nb:
return
last_percent = 0
for i, issue in enumerate(issues):
issue.new_for_revision = detect_new_for_revision(
issue.diff, issue.path, issue.hash
)
issue.save()
# Display progress
percent = int(100.0 * i / nb)
if percent > last_percent:
nb_new = Issue.objects.filter(new_for_revision=True).count()
print(f"{percent}% : {i}/{nb} issues with {nb_new} new issues")
last_percent = percent
class Migration(migrations.Migration):
dependencies = [("issues", "0001_initial")]
operations = [
migrations.AddField(
model_name="issue",
name="new_for_revision",
field=models.BooleanField(null=True),
),
migrations.RunPython(set_existing_as_new, reverse_code=lambda x, y: None),
]