|
| 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 |
|
|
86 | 90 | }, |
87 | 91 | ] |
88 | 92 |
|
89 | | -WSGI_APPLICATION = env("WSGI_APPLICATION", default="config.wsgi.application") |
90 | | -DB_SSL_REQUIRED = env.bool("DB_SSL_REQUIRED", default=not DEBUG) |
| 93 | +WSGI_APPLICATION = env("WSGI_APPLICATION", default="config.wsgi.application", help_text="WSGI application to use") |
91 | 94 |
|
92 | 95 | # Database |
93 | 96 | # See https://github.com/jacobian/dj-database-url for more examples |
94 | 97 | DATABASES = { |
95 | 98 | "default": env.dj_db_url( |
96 | | - "DATABASE_URL", default=f'sqlite:///{BASE_DIR.joinpath("db.sqlite")}', ssl_require=DB_SSL_REQUIRED |
| 99 | + "DATABASE_URL", |
| 100 | + default="postgres://postgres:@db:5432/postgres", |
| 101 | + help_text="Database URL for connecting to database", |
97 | 102 | ) |
98 | 103 | } |
99 | 104 |
|
|
143 | 148 |
|
144 | 149 | STORAGES = { |
145 | 150 | "default": { |
146 | | - "BACKEND": env("DEFAULT_FILE_STORAGE", default="django.core.files.storage.FileSystemStorage"), |
| 151 | + "BACKEND": env( |
| 152 | + "DEFAULT_FILE_STORAGE", |
| 153 | + default="django.core.files.storage.FileSystemStorage", |
| 154 | + help_text="Default storage backend for media files", |
| 155 | + ), |
147 | 156 | }, |
148 | 157 | "staticfiles": { |
149 | 158 | "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage", |
|
153 | 162 |
|
154 | 163 | if STORAGES["default"]["BACKEND"].endswith("MediaS3Storage") is True: |
155 | 164 | STORAGES["staticfiles"]["BACKEND"] = env("STATICFILES_STORAGE") |
156 | | - AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID") |
157 | | - AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY") |
158 | | - AWS_STORAGE_BUCKET_NAME = env("AWS_STORAGE_BUCKET_NAME") |
| 165 | + AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID", help_text="AWS Access Key ID if using S3 storage backend") |
| 166 | + AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY", help_text="AWS Secret Access Key if using S3 storage backend") |
| 167 | + AWS_STORAGE_BUCKET_NAME = env( |
| 168 | + "AWS_STORAGE_BUCKET_NAME", help_text="AWS Storage Bucket Name if using S3 storage backend" |
| 169 | + ) |
159 | 170 | AWS_DEFAULT_ACL = "public-read" |
160 | | - AWS_S3_REGION = env("AWS_S3_REGION", default="us-east-2") |
| 171 | + AWS_S3_REGION = env("AWS_S3_REGION", default="us-east-2", help_text="AWS S3 Region if using S3 storage backend") |
161 | 172 | AWS_S3_CUSTOM_DOMAIN = f"s3.{AWS_S3_REGION}.amazonaws.com/{AWS_STORAGE_BUCKET_NAME}" |
162 | 173 | AWS_S3_OBJECT_PARAMETERS = {"CacheControl": "max-age=86400"} |
163 | 174 | STATIC_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/static/" |
|
179 | 190 | DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" |
180 | 191 |
|
181 | 192 | # CACHE SETTINGS |
182 | | -CACHE_URL = env("REDIS_URL", default="redis://redis:6379/0") |
| 193 | +REDIS_URL = env("REDIS_URL", default="redis://redis:6379/0", help_text="Redis URL for connecting to redis") |
183 | 194 | CACHES = { |
184 | 195 | "default": { |
185 | 196 | "BACKEND": "django.core.cache.backends.redis.RedisCache", |
186 | | - "LOCATION": CACHE_URL, |
| 197 | + "LOCATION": REDIS_URL, |
187 | 198 | } |
188 | 199 | } |
189 | 200 |
|
|
192 | 203 | CRISPY_TEMPLATE_PACK = "bootstrap5" |
193 | 204 |
|
194 | 205 | # CELERY SETTINGS |
195 | | -CELERY_BROKER_URL = env("CACHE_URL", CACHE_URL) |
| 206 | +CELERY_BROKER_URL = REDIS_URL |
196 | 207 |
|
197 | 208 | SESSION_ENGINE = "django.contrib.sessions.backends.cache" |
198 | 209 |
|
|
227 | 238 | email = env.dj_email_url( |
228 | 239 | "EMAIL_URL", |
229 | 240 | default="smtp://[email protected]:[email protected]:587/?ssl=True&_default_from_email=President%20Skroob%20%[email protected]%3E", |
| 241 | + help_text="URL used for setting Django's email settings", |
230 | 242 | ) |
231 | 243 | DEFAULT_FROM_EMAIL = email["DEFAULT_FROM_EMAIL"] |
232 | 244 | EMAIL_HOST = email["EMAIL_HOST"] |
|
0 commit comments