mirror of
https://github.com/ansible/awx.git
synced 2026-03-07 11:41:08 -03:30
* Make the JT name uniqueness enforced at the database level * Forgot demo project fixture * New approach, done by adding a new field * Update for linters and failures * Fix logical error in migration test * Revert some test changes based on review comment * Do not rename first template, add test * Avoid name-too-long rename errors * Insert migration into place * Move existing files with git * Bump migrations of existing * Update migration test * Awkward bump * Fix migration file link * update test reference again
26 lines
1.1 KiB
Python
26 lines
1.1 KiB
Python
import logging
|
|
|
|
from django.db.models import Count
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def _rename_duplicates(cls):
|
|
field = cls._meta.get_field('name')
|
|
max_len = field.max_length
|
|
for organization_id in cls.objects.order_by().values_list('organization_id', flat=True).distinct():
|
|
duplicate_data = cls.objects.values('name').filter(organization_id=organization_id).annotate(count=Count('name')).order_by().filter(count__gt=1)
|
|
for data in duplicate_data:
|
|
name = data['name']
|
|
for idx, ujt in enumerate(cls.objects.filter(name=name, organization_id=organization_id).order_by('created')):
|
|
if idx > 0:
|
|
suffix = f'_dup{idx}'
|
|
max_chars = max_len - len(suffix)
|
|
if len(ujt.name) >= max_chars:
|
|
ujt.name = ujt.name[:max_chars] + suffix
|
|
else:
|
|
ujt.name = ujt.name + suffix
|
|
logger.info(f'Renaming duplicate {cls._meta.model_name} to `{ujt.name}` because of duplicate name entry')
|
|
ujt.save(update_fields=['name'])
|