From: Guillaume Pellerin Date: Wed, 29 Apr 2026 09:09:24 +0000 (+0200) Subject: add s3 media management, reorder settings X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=b14d2d876fc098a4be79270d4b57d4fe1efc11d6;p=teleforma.git add s3 media management, reorder settings --- diff --git a/app/settings.py b/app/settings.py index be381fc8..91c25454 100644 --- a/app/settings.py +++ b/app/settings.py @@ -150,8 +150,6 @@ MEDIA_URL = '/media/' DEFAULT_FILE_STORAGE='django.core.files.storage.FileSystemStorage' -MEDIA_S3_BUCKET = '/media/bucket/' - FILE_UPLOAD_TEMP_DIR = '/tmp' # Absolute path to the directory static files should be collected to. @@ -582,6 +580,19 @@ POSTMAN_AUTO_MODERATE_AS = True POSTMAN_DISALLOW_ANONYMOUS = True +######################## +# AWS S3 +######################## + +AWS_ACCESS_KEY_ID="" +AWS_SECRET_ACCESS_KEY="" +AWS_S3_REGION_NAME="" +AWS_S3_ENDPOINT_URL="" +AWS_S3_ENCRYPTION=True +AWS_S3_FILE_OVERWRITE=False +AWS_STORAGE_BUCKET_NAME="" +MEDIA_S3_BUCKET = '/media/bucket/' + ######################## # TELEFORMA ######################## @@ -589,21 +600,31 @@ POSTMAN_DISALLOW_ANONYMOUS = True TELEFORMA_ORGANIZATION = 'Pré-Barreau - CRFPA' TELEFORMA_SUBJECTS = ('Barreau', 'CRFPA', 'e-learning') TELEFORMA_DESCRIPTION = "E-learning Pré-Barreau - CRFPA" +TELEFORMA_ADMIN = "Admin-CRFPA" TELEFORMA_E_LEARNING_TYPE = 'CRFPA' + TELEFORMA_GLOBAL_TWEETER = False TELEFORMA_PERIOD_TWEETER = True -TELEFORMA_EXAM_TOPIC_DEFAULT_DOC_TYPE_ID = 4 -TELEFORMA_EXAM_SCRIPT_UPLOAD = True -TELEFORMA_ADMIN = "Admin-CRFPA" + TELEFORMA_REGISTER_DEFAULT_DOC_ID = 5506 TELEFORMA_PERIOD_DEFAULT_ID = 34 + +TELEFORMA_EXAM_TOPIC_DEFAULT_DOC_TYPE_ID = 4 +TELEFORMA_EXAM_SCRIPT_UPLOAD = True TELEFORMA_EXAM_MAX_SESSIONS = 200 TELEFORMA_EXAM_SCRIPT_MAX_SIZE = 31457280 TELEFORMA_EXAM_SCRIPT_SERVICE_URL = '/webviewer/teleforma.html' TELEFORMA_EXAM_USE_S3 = True -TELEFORMA_PRIVATE_DOCUMENTS_MODE = True -TELEFORMA_PRIVATE_MEDIA_USE_S3 = True + +TELEFORMA_DOCUMENTS_USE_S3 = False + +TELEFORMA_PRIVATE_DOCUMENTS_MODE = True #wether the downloaded docs should be signed +TELEFORMA_PRIVATE_DOCUMENTS_USE_S3 = True +AWS_STORAGE_BUCKET_NAME_PRIVATE_DOCUMENT="crfpa-private" + +TELEFORMA_MEDIA_USE_S3 = False TELEFORMA_MEDIA_DOWNLOAD = False +AWS_STORAGE_BUCKET_NAME_MEDIA="crfpa-media" ORAL_OPTION_PRICE = 250 FASICLE_OPTION_PRICE = 110 @@ -617,7 +638,6 @@ DATA_UPLOAD_MAX_NUMBER_FIELDS = 10240 #THUMBNAIL_FORCE_OVERWRITE = True - ######################## # EMAIL ######################## @@ -653,18 +673,6 @@ RECAPTCHA_PRIVATE_KEY = '' RECAPTCHA_REQUIRED_SCORE = 0.85 -######################## -# AWS S3 -######################## - -AWS_ACCESS_KEY_ID="" -AWS_SECRET_ACCESS_KEY="" -AWS_STORAGE_BUCKET_NAME="" -AWS_S3_REGION_NAME="" -AWS_S3_ENDPOINT_URL="" -AWS_S3_ENCRYPTION=True -AWS_S3_FILE_OVERWRITE=False - ######################## # BBB ######################## diff --git a/teleforma/models/core.py b/teleforma/models/core.py index ee8316d7..44f35e36 100644 --- a/teleforma/models/core.py +++ b/teleforma/models/core.py @@ -115,10 +115,19 @@ STATUS_CHOICES = ( WEIGHT_CHOICES = get_nint_choices(5) -if settings.TELEFORMA_PRIVATE_MEDIA_USE_S3: - private_storage = S3Boto3Storage +if settings.TELEFORMA_MEDIA_USE_S3: + media_s3_storage = S3Boto3Storage( + bucket=settings.AWS_STORAGE_BUCKET_NAME_MEDIA) + media_local_storage = FileSystemStorage else: - private_storage = FileSystemStorage + media_s3_storage = FileSystemStorage + media_local_storage = FileSystemStorage + +if settings.TELEFORMA_PRIVATE_DOCUMENTS_USE_S3: + private_document_storage = S3Boto3Storage( + bucket=settings.AWS_STORAGE_BUCKET_NAME_PRIVATE_DOCUMENT) +else: + private_document_storage = FileSystemStorage def get_random_hash(): @@ -916,7 +925,7 @@ class DocumentPrivate(MediaBase): user = models.ForeignKey(User, related_name="private_documents", verbose_name=_('user'), null=True, blank=True, on_delete=models.CASCADE) file = models.FileField(_('file'), upload_to='private/documents/%Y/%m/%d', db_column="filename", - max_length=1024, blank=True, storage=private_storage) + max_length=1024, blank=True, storage=private_document_storage) class Meta(MetaCore): db_table = app_label + '_' + 'document_private' @@ -1036,7 +1045,21 @@ class Media(MediaBase): readers = models.ManyToManyField(User, related_name="media", verbose_name=_('readers'), blank=True) file = models.FileField( - _('file'), upload_to='items/%Y/%m/%d', max_length=1024, null=True, blank=False) + _('file'), + upload_to='items/%Y/%m/%d', + max_length=1024, + null=True, + blank=True, + storage=media_local_storage + ) + file_s3 = models.FileField( + _('S3 file'), + upload_to='items/%Y/%m/%d', + max_length=1024, + null=True, + blank=True, + storage=media_s3_storage + ) poster_file = models.FileField( _('poster file'), upload_to='items/%Y/%m/%d', max_length=255, null=True, blank=False) @@ -1070,6 +1093,12 @@ class Media(MediaBase): self.poster_file, geometry).url return url + def get_file(self): + if self.file_s3: + return self.file_s3 + else: + return self.file + class Meta(MetaCore): db_table = app_label + '_' + 'media' ordering = ['-date_modified', '-conference__session',]