Compare commits

..

2 Commits

Author SHA1 Message Date
Edgar P. Burkhart 748f9e5fb6
Fix migration; fix invoice saving 2022-12-31 18:44:03 +01:00
Edgar P. Burkhart 2550c52a61
Add file migration 2022-12-31 18:17:40 +01:00
3 changed files with 35 additions and 27 deletions

View File

@ -11,34 +11,41 @@ import main.models
def move_files(apps, schema_editor): def move_files(apps, schema_editor):
Invoice = apps.get_model("main", "Invoice") Invoice = apps.get_model("main", "Invoice")
Snapshot = apps.get_model("main", "Snapshot") Snapshot = apps.get_model("main", "Snapshot")
db_alias = schema_editor.connection.alias
for invoice in Invoice.objects.using(db_alias).all(): for invoice in Invoice.objects.all():
initial_path = pathlib.Path(invoice.file.path) print(f"Invoice {invoice.pk}")
if not initial_path.exists(): if invoice.file is None:
invoice.file = None invoice.delete()
invoice.save() continue
return try:
_name = main.models.get_path(invoice, None) initial_path = pathlib.Path(invoice.file.path)
print(settings.MEDIA_ROOT) except ValueError:
new_path = pathlib.Path(settings.MEDIA_ROOT, _name) invoice.delete()
new_path.parent.mkdir(mode=0o750, parents=True, exist_ok=True) continue
initial_path.rename(new_path) if invoice.file is None or not initial_path.exists():
invoice.file.name = str(_name) print(f"!!! Path {initial_path} does not exist")
invoice.save() invoice.delete()
continue
prev_file = invoice.file.path
invoice.file.save(main.models.get_path(invoice, None), invoice.file)
pathlib.Path(prev_file).unlink()
for snapshot in Snapshot.objects.using(db_alias).filter(file__isnull=False): for snapshot in Snapshot.objects.filter(file__isnull=False):
initial_path = pathlib.Path(snapshot.file.path) print(f"Snapshot {snapshot.pk}")
try:
initial_path = pathlib.Path(snapshot.file.path)
except ValueError:
snapshot.file = None
snapshot.save()
continue
if not initial_path.exists(): if not initial_path.exists():
invoice.file = None print(f"!!! Path {initial_path} does not exist")
invoice.save() snapshot.file = None
return snapshot.save()
_name = main.models.get_path(snapshot, None) continue
new_path = pathlib.Path(settings.MEDIA_ROOT, _name) prev_file = snapshot.file.path
new_path.parent.mkdir(mode=0o750, parents=True, exist_ok=True) snapshot.file.save(main.models.get_path(snapshot, None), snapshot.file)
initial_path.rename(new_path) pathlib.Path(prev_file).unlink()
snapshot.file.name = str(_name)
snapshot.save()
class Migration(migrations.Migration): class Migration(migrations.Migration):

View File

@ -279,11 +279,12 @@ class Invoice(CustomModel):
Transaction, on_delete=models.CASCADE, editable=False Transaction, on_delete=models.CASCADE, editable=False
) )
def save(self): def save(self, *args, **kwargs):
if Invoice.objects.filter(id=self.id).exists(): if Invoice.objects.filter(id=self.id).exists():
_prever = Invoice.objects.get(id=self.id) _prever = Invoice.objects.get(id=self.id)
if _prever.file and _prever.file != self.file: if _prever.file and _prever.file != self.file:
pathlib.Path(_prever.file.path).unlink(missing_ok=True) pathlib.Path(_prever.file.path).unlink(missing_ok=True)
super().save(*args, **kwargs)
def __str__(self): def __str__(self):
if hasattr(self, "transaction"): if hasattr(self, "transaction"):

View File

@ -340,7 +340,7 @@ class SearchView(TransactionListView):
return super().get_context_data(**kwargs) | {"search": self.kwargs["search"]} return super().get_context_data(**kwargs) | {"search": self.kwargs["search"]}
class MediaView(View): class MediaView(LoginRequiredMixin, View):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
_username = kwargs.get("username") _username = kwargs.get("username")
_path = kwargs.get("path") _path = kwargs.get("path")