"""This file and its contents are licensed under the Apache License 2.0. Please see the included NOTICE for copyright information and LICENSE for a copy of the license.
|
"""
|
import logging
|
|
from django.db import migrations
|
from django.db.models import F, Window
|
from django.db.models.functions import RowNumber
|
from django.db.utils import NotSupportedError
|
from core.bulk_update_utils import bulk_update
|
from core.feature_flags import flag_set
|
from django.contrib.auth.models import AnonymousUser
|
|
logger = logging.getLogger(__name__)
|
|
|
def remove(apps, schema_editor):
|
# if not flag_set('ff_back_2070_inner_id_12052022_short', user=AnonymousUser()):
|
return # we don't want to apply this migration to all projects
|
|
""" Project = apps.get_model('projects', 'Project')
|
projects = Project.objects.all()
|
for project in projects:
|
logger.info(f'Evaluate inner id for {project}')
|
project_tasks = project.tasks.all()
|
if project_tasks.exists():
|
obj = []
|
try:
|
results = project_tasks.annotate(row_number=Window(
|
expression=RowNumber(),
|
partition_by=['project'],
|
order_by=F('id').asc()))
|
for task in results:
|
task.inner_id = task.row_number
|
obj.append(task)
|
bulk_update(obj, batch_size=1000)
|
|
# not window is not supported
|
except NotSupportedError:
|
first_id = project_tasks.order_by('id').first().id
|
project_tasks.update(inner_id=F('id') - first_id)"""
|
|
|
def backwards(apps, schema_editor):
|
pass
|
|
|
class Migration(migrations.Migration):
|
dependencies = [
|
('tasks', '0014_task_inner_id'),
|
]
|
|
operations = [
|
migrations.RunPython(remove, backwards),
|
]
|