| 
 | 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