@@ -9,20 +9,26 @@ class BaseSpecialS3Storage(S3Boto3Storage):
99 Uses the bucket defined by a Django setting key.
1010 """
1111
12- setting_name = None # subclasses must define this
12+ storage_key = None # e.g. "import_export" or "COURSE_IMPORT_EXPORT_BUCKET"
1313
1414 def __init__ (self , ** kwargs ):
15- # Explicitly resolve bucket name from Django settings or fallback
16- if self .setting_name and hasattr (settings , self .setting_name ):
17- bucket_name = getattr (settings , self .setting_name )
18- else :
19- bucket_name = getattr (settings , "AWS_STORAGE_BUCKET_NAME" , None )
20- # Merge default options with user-supplied ones
21- options = {
22- "bucket_name" : bucket_name ,
23- "custom_domain" : None ,
24- "querystring_auth" : True ,
25- ** kwargs , # allow overrides
26- }
15+ # Start with sane defaults
16+ options = {"querystring_auth" : True }
17+
18+ # Load from STORAGES if configured
19+ if hasattr (settings , "STORAGES" ) and self .storage_key :
20+ storage_conf = settings .STORAGES .get (self .storage_key , {})
21+ options .update (storage_conf .get ("OPTIONS" , {}))
22+
23+ # Fallback: if bucket not set, look for setting variable
24+ if "bucket_name" not in options :
25+ # Allow storage_key to be either "import_export"
26+ bucket_name = getattr (settings , self .storage_key , None )
27+ if not bucket_name :
28+ bucket_name = getattr (settings , "AWS_STORAGE_BUCKET_NAME" , None )
29+ options ["bucket_name" ] = bucket_name
30+
31+ # Finally, user kwargs override everything
32+ options .update (kwargs )
2733
2834 super ().__init__ (** options )
0 commit comments