Add migration command for old file name structure
This commit is contained in:
parent
ac0f363a1e
commit
1e20cb458f
@ -0,0 +1,59 @@
|
|||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from parts.models import Component, Package, Distributor, Manufacturer
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Migrate all media files to the current folder structure'
|
||||||
|
|
||||||
|
def move_files_of_model(self, queryset):
|
||||||
|
for comp in queryset:
|
||||||
|
img_path = comp.image.name
|
||||||
|
img_path = os.path.normpath(img_path)
|
||||||
|
path_components = img_path.split(os.sep)
|
||||||
|
|
||||||
|
if len(path_components) <= 2:
|
||||||
|
self.stdout.write(f'Legacy path found: {img_path}. Will be moved')
|
||||||
|
full_path_components = os.path.normpath(comp.image.path).split(os.sep)
|
||||||
|
fname = full_path_components[-1]
|
||||||
|
path_elem_count = len(full_path_components)
|
||||||
|
full_path_components.insert(path_elem_count-1, str(fname[1]))
|
||||||
|
full_path_components.insert(path_elem_count-1, str(fname[0]))
|
||||||
|
dest_path = os.sep.join(full_path_components)
|
||||||
|
|
||||||
|
# Move file
|
||||||
|
os.makedirs(os.path.dirname(dest_path), exist_ok=True)
|
||||||
|
shutil.move(comp.image.path, dest_path)
|
||||||
|
|
||||||
|
# Update model
|
||||||
|
new_rel_path_comps = path_components
|
||||||
|
l = len(new_rel_path_comps)
|
||||||
|
new_rel_path_comps.insert(l-1, str(fname[1]))
|
||||||
|
new_rel_path_comps.insert(l-1, str(fname[0]))
|
||||||
|
new_name = os.sep.join(new_rel_path_comps)
|
||||||
|
self.stdout.write(f'New location: {dest_path}, new name: {new_name}')
|
||||||
|
comp.image.name = new_name
|
||||||
|
comp.save()
|
||||||
|
|
||||||
|
def handle(self, *args, **kwargs):
|
||||||
|
|
||||||
|
self.stdout.write('Querying components...')
|
||||||
|
components = Component.objects.exclude(image='')
|
||||||
|
self.stdout.write(f'Count of components with images: {components.count()}');
|
||||||
|
self.move_files_of_model(components)
|
||||||
|
|
||||||
|
self.stdout.write('Querying packages...')
|
||||||
|
pkgs = Package.objects.exclude(image='')
|
||||||
|
self.stdout.write(f'Count of components with images: {pkgs.count()}');
|
||||||
|
self.move_files_of_model(pkgs)
|
||||||
|
|
||||||
|
self.stdout.write('Querying manufacturers...')
|
||||||
|
manufacturers = Manufacturer.objects.exclude(image='')
|
||||||
|
self.stdout.write(f'Count of components with images: {manufacturers.count()}');
|
||||||
|
self.move_files_of_model(manufacturers)
|
||||||
|
|
||||||
|
self.stdout.write('Querying distributors...')
|
||||||
|
distris = Distributor.objects.exclude(image='')
|
||||||
|
self.stdout.write(f'Count of components with images: {distris.count()}');
|
||||||
|
self.move_files_of_model(distris)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user