]> git.parisson.com Git - teleforma.git/commitdiff
add s3 media management, reorder settings
authorGuillaume Pellerin <guillaume.pellerin@parisson.com>
Wed, 29 Apr 2026 09:09:24 +0000 (11:09 +0200)
committerGuillaume Pellerin <guillaume.pellerin@parisson.com>
Wed, 29 Apr 2026 09:09:24 +0000 (11:09 +0200)
app/settings.py
teleforma/models/core.py

index be381fc850eca5d5bc3d9b25b7dc0aef218f82d4..91c25454940445e0ad020b2da5a57f5cb6f2150d 100644 (file)
@@ -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
 ########################
index ee8316d70f651f58752153354d278260d880c3ab..44f35e3605c51b849c43e1b21b75f8fbbe0698ed 100644 (file)
@@ -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',]