summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorry Haines2022-11-28 09:22:39 -0800
committerGitHub2022-11-28 10:22:39 -0700
commitab1247fd2d1de5265f4bb956dafdbe06cea6efa2 (patch)
treee162dbfe72dab23e53c8b1618cf2603301b0b609
parent9e99a6bba16f0378247c0fd93ea58457787d9e14 (diff)
downloadtakahe-ab1247fd2d1de5265f4bb956dafdbe06cea6efa2.tar.gz
takahe-ab1247fd2d1de5265f4bb956dafdbe06cea6efa2.tar.bz2
takahe-ab1247fd2d1de5265f4bb956dafdbe06cea6efa2.zip
Relax S3 URI parsing
-rw-r--r--takahe/settings.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/takahe/settings.py b/takahe/settings.py
index cf74122..3e2ffcd 100644
--- a/takahe/settings.py
+++ b/takahe/settings.py
@@ -13,6 +13,11 @@ from sentry_sdk.integrations.django import DjangoIntegration
BASE_DIR = Path(__file__).resolve().parent.parent
+class MediaBackendUrl(AnyUrl):
+ host_required = False
+ allowed_schemes = {"s3", "gcs", "local"}
+
+
def as_bool(v: Optional[Union[str, List[str]]]):
if v is None:
return False
@@ -84,7 +89,7 @@ class Settings(BaseSettings):
MEDIA_URL: str = "/media/"
MEDIA_ROOT: str = str(BASE_DIR / "media")
- MEDIA_BACKEND: Optional[AnyUrl] = None
+ MEDIA_BACKEND: Optional[MediaBackendUrl] = None
PGHOST: Optional[str] = None
PGPORT: Optional[int] = 5432
@@ -299,10 +304,12 @@ if SETUP.MEDIA_BACKEND:
elif parsed.scheme == "s3":
DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
AWS_STORAGE_BUCKET_NAME = parsed.path.lstrip("/")
- AWS_ACCESS_KEY_ID = parsed.username
- AWS_SECRET_ACCESS_KEY = parsed.password
- port = parsed.port or 443
- AWS_S3_ENDPOINT_URL = f"https://{parsed.hostname}:{port}"
+ if parsed.username is not None:
+ AWS_ACCESS_KEY_ID = parsed.username
+ AWS_SECRET_ACCESS_KEY = parsed.password
+ if parsed.hostname is not None:
+ port = parsed.port or 443
+ AWS_S3_ENDPOINT_URL = f"https://{parsed.hostname}:{port}"
else:
raise ValueError(f"Unsupported media backend {parsed.scheme}")