From 442bf5dc4b05a00d7110d56524686559e4745ed9 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 28 Dec 2018 00:22:49 -0400 Subject: [PATCH] Wrap storages Wrap storages directly connected to file model fields to avoid Django triggering a migration change when an attribute of the storage is changed, like the location. Signed-off-by: Roberto Rosario --- .../migrations/0011_auto_20181228_0422.py | 22 +++++++++++++++++++ mayan/apps/common/models.py | 4 ++-- mayan/apps/common/storages.py | 4 ++++ .../migrations/0009_auto_20181228_0422.py | 22 +++++++++++++++++++ mayan/apps/document_signatures/models.py | 6 ++--- mayan/apps/document_signatures/storages.py | 4 ++++ .../migrations/0051_auto_20181228_0422.py | 22 +++++++++++++++++++ .../models/document_version_models.py | 8 +++---- mayan/apps/documents/storages.py | 4 ++++ 9 files changed, 87 insertions(+), 9 deletions(-) create mode 100644 mayan/apps/common/migrations/0011_auto_20181228_0422.py create mode 100644 mayan/apps/document_signatures/migrations/0009_auto_20181228_0422.py create mode 100644 mayan/apps/documents/migrations/0051_auto_20181228_0422.py diff --git a/mayan/apps/common/migrations/0011_auto_20181228_0422.py b/mayan/apps/common/migrations/0011_auto_20181228_0422.py new file mode 100644 index 0000000000..e7a25b3018 --- /dev/null +++ b/mayan/apps/common/migrations/0011_auto_20181228_0422.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.16 on 2018-12-28 04:22 +from __future__ import unicode_literals + +from django.db import migrations, models +import mayan.apps.common.models +import mayan.apps.common.storages + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0010_auto_20180403_0702_squashed_0011_auto_20180429_0758'), + ] + + operations = [ + migrations.AlterField( + model_name='shareduploadedfile', + name='file', + field=models.FileField(storage=mayan.apps.common.storages.storage_sharedupload_wrapper, upload_to=mayan.apps.common.models.upload_to, verbose_name='File'), + ), + ] diff --git a/mayan/apps/common/models.py b/mayan/apps/common/models.py index 7d8fc62a18..054c1be317 100644 --- a/mayan/apps/common/models.py +++ b/mayan/apps/common/models.py @@ -13,7 +13,7 @@ from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ from .managers import ErrorLogEntryManager, UserLocaleProfileManager -from .storages import storage_sharedupload +from .storages import storage_sharedupload_wrapper logger = logging.getLogger(__name__) @@ -58,7 +58,7 @@ class SharedUploadedFile(models.Model): that runs out of process. """ file = models.FileField( - storage=storage_sharedupload, upload_to=upload_to, + storage=storage_sharedupload_wrapper, upload_to=upload_to, verbose_name=_('File') ) filename = models.CharField(max_length=255, verbose_name=_('Filename')) diff --git a/mayan/apps/common/storages.py b/mayan/apps/common/storages.py index b6304a6b98..a29e958b2f 100644 --- a/mayan/apps/common/storages.py +++ b/mayan/apps/common/storages.py @@ -7,3 +7,7 @@ from .settings import setting_shared_storage, setting_shared_storage_arguments storage_sharedupload = import_string( dotted_path=setting_shared_storage.value )(**setting_shared_storage_arguments.value) + + +def storage_sharedupload_wrapper(): + return storage_sharedupload diff --git a/mayan/apps/document_signatures/migrations/0009_auto_20181228_0422.py b/mayan/apps/document_signatures/migrations/0009_auto_20181228_0422.py new file mode 100644 index 0000000000..264453701b --- /dev/null +++ b/mayan/apps/document_signatures/migrations/0009_auto_20181228_0422.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.16 on 2018-12-28 04:22 +from __future__ import unicode_literals + +from django.db import migrations, models +import mayan.apps.document_signatures.models +import mayan.apps.document_signatures.storages + + +class Migration(migrations.Migration): + + dependencies = [ + ('document_signatures', '0008_auto_20180429_0759'), + ] + + operations = [ + migrations.AlterField( + model_name='detachedsignature', + name='signature_file', + field=models.FileField(blank=True, null=True, storage=mayan.apps.document_signatures.storages.storage_detachedsignature_wrapper, upload_to=mayan.apps.document_signatures.models.upload_to, verbose_name='Signature file'), + ), + ] diff --git a/mayan/apps/document_signatures/models.py b/mayan/apps/document_signatures/models.py index 47e226f5ed..49073925d3 100644 --- a/mayan/apps/document_signatures/models.py +++ b/mayan/apps/document_signatures/models.py @@ -15,7 +15,7 @@ from mayan.apps.django_gpg.models import Key from mayan.apps.documents.models import DocumentVersion from .managers import EmbeddedSignatureManager -from .storages import storage_detachedsignature +from .storages import storage_detachedsignature_wrapper logger = logging.getLogger(__name__) @@ -127,7 +127,7 @@ class EmbeddedSignature(SignatureBaseModel): @python_2_unicode_compatible class DetachedSignature(SignatureBaseModel): signature_file = models.FileField( - blank=True, null=True, storage=storage_detachedsignature, + blank=True, null=True, storage=storage_detachedsignature_wrapper, upload_to=upload_to, verbose_name=_('Signature file') ) @@ -143,7 +143,7 @@ class DetachedSignature(SignatureBaseModel): def delete(self, *args, **kwargs): if self.signature_file.name: - self.signature_file.storage.delete(name=self.signature_file.name) + self.signature_file.storage().delete(name=self.signature_file.name) super(DetachedSignature, self).delete(*args, **kwargs) def save(self, *args, **kwargs): diff --git a/mayan/apps/document_signatures/storages.py b/mayan/apps/document_signatures/storages.py index 2a06b3c913..ca86dd488a 100644 --- a/mayan/apps/document_signatures/storages.py +++ b/mayan/apps/document_signatures/storages.py @@ -9,3 +9,7 @@ from .settings import ( storage_detachedsignature = import_string( dotted_path=setting_storage_backend.value )(**setting_storage_backend_arguments.value) + + +def storage_detachedsignature_wrapper(): + return diff --git a/mayan/apps/documents/migrations/0051_auto_20181228_0422.py b/mayan/apps/documents/migrations/0051_auto_20181228_0422.py new file mode 100644 index 0000000000..93288fc88d --- /dev/null +++ b/mayan/apps/documents/migrations/0051_auto_20181228_0422.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.16 on 2018-12-28 04:22 +from __future__ import unicode_literals + +from django.db import migrations, models +import mayan.apps.documents.storages +import mayan.apps.documents.utils + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '0050_duplicateddocumentproxy'), + ] + + operations = [ + migrations.AlterField( + model_name='documentversion', + name='file', + field=models.FileField(storage=mayan.apps.documents.storages.storage_documentversion_wrapper, upload_to=mayan.apps.documents.utils.document_uuid_function, verbose_name='File'), + ), + ] diff --git a/mayan/apps/documents/models/document_version_models.py b/mayan/apps/documents/models/document_version_models.py index 81dd48d740..95460c9552 100644 --- a/mayan/apps/documents/models/document_version_models.py +++ b/mayan/apps/documents/models/document_version_models.py @@ -21,7 +21,7 @@ from ..literals import DOCUMENT_IMAGES_CACHE_NAME from ..managers import DocumentVersionManager from ..settings import setting_fix_orientation from ..signals import post_document_created, post_version_upload -from ..storages import storage_documentversion +from ..storages import storage_documentversion_wrapper from ..utils import document_hash_function, document_uuid_function from .document_models import Document @@ -67,7 +67,7 @@ class DocumentVersion(models.Model): # File related fields file = models.FileField( - storage=storage_documentversion, upload_to=document_uuid_function, + storage=storage_documentversion_wrapper, upload_to=document_uuid_function, verbose_name=_('File') ) mimetype = models.CharField( @@ -137,7 +137,7 @@ class DocumentVersion(models.Model): be in the document storage. This is a diagnostic flag to help users detect if the storage has desynchronized (ie: Amazon's S3). """ - return self.file.storage.exists(self.file.name) + return self.file.storage().exists(self.file.name) def fix_orientation(self): for page in self.pages.all(): @@ -329,7 +329,7 @@ class DocumentVersion(models.Model): @property def size(self): if self.exists(): - return self.file.storage.size(self.file.name) + return self.file.storage().size(self.file.name) else: return None diff --git a/mayan/apps/documents/storages.py b/mayan/apps/documents/storages.py index de4399f623..8bccef70c8 100644 --- a/mayan/apps/documents/storages.py +++ b/mayan/apps/documents/storages.py @@ -15,3 +15,7 @@ storage_documentversion = import_string( storage_documentimagecache = import_string( dotted_path=setting_documentimagecache_storage.value )(**setting_documentimagecache_storage_arguments.value) + + +def storage_documentversion_wrapper(): + return storage_documentversion