|
| 1 | +import base64 |
| 2 | +import os |
1 | 3 | import socket |
2 | 4 |
|
3 | 5 | import environs |
4 | | - |
5 | | -env = environs.Env() |
| 6 | +from config.env_writer import EnvWriter |
6 | 7 |
|
7 | 8 | """ |
8 | 9 | Django settings for config project. |
|
16 | 17 |
|
17 | 18 | BASE_DIR = environs.Path(__file__).parent.parent.parent # type: ignore |
18 | 19 |
|
19 | | -READ_DOT_ENV_FILE = env.bool("READ_DOT_ENV_FILE", default=True) |
20 | | - |
21 | | -if READ_DOT_ENV_FILE is True: |
22 | | - env.read_env(str(BASE_DIR.joinpath(".env"))) |
| 20 | +env = EnvWriter(base_dir=BASE_DIR, read_dot_env_file=False) |
23 | 21 |
|
24 | 22 | # Quick-start development settings - unsuitable for production |
25 | 23 | # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ |
26 | 24 |
|
27 | 25 | # SECURITY WARNING: keep the secret key used in production secret! |
28 | | -SECRET_KEY = env("SECRET_KEY") |
| 26 | +SECRET_KEY = env( |
| 27 | + "SECRET_KEY", |
| 28 | + initial=lambda: base64.b64encode(os.urandom(60)).decode(), |
| 29 | + help_text="Django's SECRET_KEY used to provide cryptographic signing.", |
| 30 | +) |
29 | 31 |
|
30 | 32 | # SECURITY WARNING: don't run with debug turned on in production! |
31 | | -DEBUG = env.bool("DEBUG", default=False) |
| 33 | +DEBUG = env.bool("DEBUG", default=True, help_text="Set Django Debug mode to on or off") |
32 | 34 |
|
33 | | -ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=[]) |
34 | | -INTERNAL_IPS = env.list("INTERNAL_IPS", default=["127.0.0.1"]) |
| 35 | +ALLOWED_HOSTS = env.list( |
| 36 | + "ALLOWED_HOSTS", default=["127.0.0.1"], help_text="List of allowed hosts that this Django site can serve" |
| 37 | +) |
| 38 | +INTERNAL_IPS = env.list("INTERNAL_IPS", default=["127.0.0.1"], help_text="IPs allowed to run in debug mode") |
35 | 39 |
|
36 | 40 | # Get the IP to use for Django Debug Toolbar when developing with docker |
37 | | -if env.bool("USE_DOCKER", default=False) is True: |
| 41 | +if env.bool("USE_DOCKER", default=True, help_text="Used to set add the IP to INTERNAL_IPS for Docker Compose") is True: |
38 | 42 | ip = socket.gethostbyname(socket.gethostname()) |
39 | 43 | INTERNAL_IPS += [ip[:-1] + "1"] |
40 | 44 |
|
|
87 | 91 | }, |
88 | 92 | ] |
89 | 93 |
|
90 | | -WSGI_APPLICATION = env("WSGI_APPLICATION", default="config.wsgi.application") |
91 | | -DB_SSL_REQUIRED = env.bool("DB_SSL_REQUIRED", default=not DEBUG) |
| 94 | +WSGI_APPLICATION = env("WSGI_APPLICATION", default="config.wsgi.application", help_text="WSGI application to use") |
92 | 95 |
|
93 | 96 | # Database |
94 | 97 | # See https://github.com/jacobian/dj-database-url for more examples |
95 | 98 | DATABASES = { |
96 | 99 | "default": env.dj_db_url( |
97 | | - "DATABASE_URL", default=f'sqlite:///{BASE_DIR.joinpath("db.sqlite")}', ssl_require=DB_SSL_REQUIRED |
| 100 | + "DATABASE_URL", |
| 101 | + default="postgres://postgres:@db:5432/postgres", |
| 102 | + help_text="Database URL for connecting to database", |
98 | 103 | ) |
99 | 104 | } |
100 | 105 |
|
|
144 | 149 |
|
145 | 150 | STORAGES = { |
146 | 151 | "default": { |
147 | | - "BACKEND": env("DEFAULT_FILE_STORAGE", default="django.core.files.storage.FileSystemStorage"), |
| 152 | + "BACKEND": env( |
| 153 | + "DEFAULT_FILE_STORAGE", |
| 154 | + default="django.core.files.storage.FileSystemStorage", |
| 155 | + help_text="Default storage backend for media files", |
| 156 | + ), |
148 | 157 | }, |
149 | 158 | "staticfiles": { |
150 | 159 | "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage", |
|
154 | 163 |
|
155 | 164 | if STORAGES["default"]["BACKEND"].endswith("MediaS3Storage") is True: |
156 | 165 | STORAGES["staticfiles"]["BACKEND"] = env("STATICFILES_STORAGE") |
157 | | - AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID") |
158 | | - AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY") |
159 | | - AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME") |
| 166 | + AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID", help_text="AWS Access Key ID if using S3 storage backend") |
| 167 | + AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY", help_text="AWS Secret Access Key if using S3 storage backend") |
| 168 | + AWS_STORAGE_BUCKET_NAME = env( |
| 169 | + "AWS_STORAGE_BUCKET_NAME", help_text="AWS Storage Bucket Name if using S3 storage backend" |
| 170 | + ) |
160 | 171 | AWS_DEFAULT_ACL = "public-read" |
161 | | - AWS_S3_REGION = env("AWS_S3_REGION", default="us-east-2") |
| 172 | + AWS_S3_REGION = env("AWS_S3_REGION", default="us-east-2", help_text="AWS S3 Region if using S3 storage backend") |
162 | 173 | AWS_S3_CUSTOM_DOMAIN = f"s3.{AWS_S3_REGION}.amazonaws.com/{AWS_STORAGE_BUCKET_NAME}" |
163 | 174 | AWS_S3_OBJECT_PARAMETERS = {"CacheControl": "max-age=86400"} |
164 | 175 | STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/" |
|
180 | 191 | DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" |
181 | 192 |
|
182 | 193 | # CACHE SETTINGS |
183 | | -CACHE_URL = env("REDIS_URL", default="redis://redis:6379/0") |
| 194 | +REDIS_URL = env("REDIS_URL", default="redis://redis:6379/0", help_text="Redis URL for connecting to redis") |
184 | 195 | CACHES = { |
185 | 196 | "default": { |
186 | 197 | "BACKEND": "django.core.cache.backends.redis.RedisCache", |
187 | | - "LOCATION": CACHE_URL, |
| 198 | + "LOCATION": REDIS_URL, |
188 | 199 | } |
189 | 200 | } |
190 | 201 |
|
|
193 | 204 | CRISPY_TEMPLATE_PACK = "bootstrap5" |
194 | 205 |
|
195 | 206 | # CELERY SETTINGS |
196 | | -CELERY_BROKER_URL = env("CACHE_URL", CACHE_URL) |
| 207 | +CELERY_BROKER_URL = REDIS_URL |
197 | 208 |
|
198 | 209 | SESSION_ENGINE = "django.contrib.sessions.backends.cache" |
199 | 210 |
|
|
228 | 239 | email = env.dj_email_url( |
229 | 240 | "EMAIL_URL", |
230 | 241 | default="smtp://[email protected]:[email protected]:587/?ssl=True&_default_from_email=President%20Skroob%20%[email protected]%3E", |
| 242 | + help_text="URL used for setting Django's email settings", |
231 | 243 | ) |
232 | 244 | DEFAULT_FROM_EMAIL = email["DEFAULT_FROM_EMAIL"] |
233 | 245 | EMAIL_HOST = email["EMAIL_HOST"] |
|
0 commit comments