import os
|
|
from django.db import migrations
|
|
|
def _normalize_storage_path(raw_path):
|
"""Normalize storage path to canonical form (duplicated from models to avoid import)."""
|
if raw_path is None:
|
return None
|
trimmed = raw_path.strip()
|
if trimmed == '':
|
return ''
|
collapsed = trimmed.replace('\\', os.sep)
|
return os.path.normpath(collapsed)
|
|
|
def normalize_paths(apps, schema_editor):
|
for model_name in ('LocalFilesImportStorage', 'LocalFilesExportStorage'):
|
storage_model = apps.get_model('io_storages', model_name)
|
total = storage_model.objects.count()
|
updated = 0
|
|
for storage in storage_model.objects.all().iterator():
|
normalized = _normalize_storage_path(storage.path)
|
if normalized != storage.path:
|
storage_model.objects.filter(pk=storage.pk).update(path=normalized)
|
updated += 1
|
|
print(f'Normalized {updated}/{total} {model_name} paths')
|
|
|
class Migration(migrations.Migration):
|
dependencies = [
|
('io_storages', '0021_azureblobimportstorage_recursive_scan_and_more'),
|
]
|
|
operations = [
|
migrations.RunPython(normalize_paths, migrations.RunPython.noop),
|
]
|