From 3b50b052efeea0ea0322217c5834ee50ad8d898c Mon Sep 17 00:00:00 2001 From: Federico Di Dio Date: Fri, 19 Dec 2025 13:17:05 +0100 Subject: [PATCH] Setting for original message upload_to Also changed the default from "messages" to separate-by-date directories "mailbox_messages/%Y/%m/%d/" --- .../migrations/0010_alter_message_eml.py | 19 ++++++++++++++++ django_mailbox/models.py | 2 +- django_mailbox/utils.py | 22 +++++++++++++++---- docs/topics/appendix/settings.rst | 9 ++++++++ 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 django_mailbox/migrations/0010_alter_message_eml.py diff --git a/django_mailbox/migrations/0010_alter_message_eml.py b/django_mailbox/migrations/0010_alter_message_eml.py new file mode 100644 index 0000000..bb3afcd --- /dev/null +++ b/django_mailbox/migrations/0010_alter_message_eml.py @@ -0,0 +1,19 @@ +# Generated by Django 5.1.6 on 2025-12-18 12:54 + +import django_mailbox.utils +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_mailbox', '0009_alter_message_eml'), + ] + + operations = [ + migrations.AlterField( + model_name='message', + name='eml', + field=models.FileField(blank=True, help_text='Original full content of message', null=True, upload_to=django_mailbox.utils.get_original_message_save_path, verbose_name='Raw message contents'), + ), + ] diff --git a/django_mailbox/models.py b/django_mailbox/models.py index 33039e0..ed4e322 100644 --- a/django_mailbox/models.py +++ b/django_mailbox/models.py @@ -593,7 +593,7 @@ class Message(models.Model): _('Raw message contents'), null=True, blank=True, - upload_to="messages", + upload_to=utils.get_original_message_save_path, help_text=_('Original full content of message') ) objects = models.Manager() diff --git a/django_mailbox/utils.py b/django_mailbox/utils.py index 5805211..9ec6215 100644 --- a/django_mailbox/utils.py +++ b/django_mailbox/utils.py @@ -62,6 +62,11 @@ def get_settings(): 'DJANGO_MAILBOX_ORIGINAL_MESSAGE_COMPRESSION', 6 ), + 'original_message_upload_to': getattr( + settings, + 'DJANGO_MAILBOX_ORIGINAL_MESSAGE_UPLOAD_TO', + 'mailbox_messages/%Y/%m/%d/' + ), 'default_charset': getattr( settings, 'DJANGO_MAILBOX_DEFAULT_CHARSET', @@ -138,10 +143,7 @@ def get_body_from_message(message, maintype, subtype): return body -def get_attachment_save_path(instance, filename): - settings = get_settings() - - path = settings['attachment_upload_to'] +def _get_save_path(filename, path): if '%' in path: path = datetime.datetime.utcnow().strftime(path) @@ -149,3 +151,15 @@ def get_attachment_save_path(instance, filename): path, filename, ) + +def get_attachment_save_path(instance, filename): + settings = get_settings() + + path = settings['attachment_upload_to'] + return _get_save_path(filename, path) + +def get_original_message_save_path(instance, filename): + settings = get_settings() + + path = settings['original_message_upload_to'] + return _get_save_path(filename, path) diff --git a/docs/topics/appendix/settings.rst b/docs/topics/appendix/settings.rst index c8ce2d5..b87c054 100644 --- a/docs/topics/appendix/settings.rst +++ b/docs/topics/appendix/settings.rst @@ -81,6 +81,15 @@ Settings * Type: ``boolean`` * Controls whether or not we store original messages in ``eml`` field +* ``DJANGO_MAILBOX_ORIGINAL_MESSAGE_UPLOAD_TO`` + + * Default: ``mailbox_messages/%Y/%m/%d/`` + * Type: ``string`` + * If original messages saving is enabled, they will be saved to this location. + Specifies the ``upload_to`` setting for the eml FileField. For more on + FileFields and upload_to, see the + `Django docs `__ + * ``DJANGO_MAILBOX_DEFAULT_CHARSET`` * Default: ``iso8859-1``