From 8f456d68399697a28f387ec9236b56e64a8b44b6 Mon Sep 17 00:00:00 2001 From: Diego Calvo Date: Wed, 17 Sep 2025 09:08:09 +0000 Subject: [PATCH] unify settings.py --- .../{settings/base.py => settings.py} | 100 +++++++++++++++- back_latienda/settings/__init__.py | 1 - back_latienda/settings/development.py | 71 ----------- back_latienda/settings/production.py | 112 ------------------ example.env | 1 + 5 files changed, 100 insertions(+), 185 deletions(-) rename back_latienda/{settings/base.py => settings.py} (64%) delete mode 100644 back_latienda/settings/__init__.py delete mode 100644 back_latienda/settings/development.py delete mode 100644 back_latienda/settings/production.py diff --git a/back_latienda/settings/base.py b/back_latienda/settings.py similarity index 64% rename from back_latienda/settings/base.py rename to back_latienda/settings.py index 290c4a5..a3d8ea1 100644 --- a/back_latienda/settings/base.py +++ b/back_latienda/settings.py @@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/2.2/ref/settings/ """ import os +from datetime import timedelta # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -20,10 +21,18 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) import dotenv dotenv.read_dotenv( - dotenv=os.path.join(BASE_DIR, '../.env'), + dotenv=os.path.join(BASE_DIR, '.env'), override=True ) +def str_to_bool(value: str) -> bool: + return value.lower() in ("true", "1", "yes") + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = str_to_bool(os.getenv('DEBUG', 'False')) + + + # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ @@ -193,3 +202,92 @@ MAP_WIDGETS = { # ACTIVATION_REDIRECT URL ACTIVATION_REDIRECT = os.getenv('ACTIVATION_REDIRECT') + + +# development.py + +GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH') +GEOS_LIBRARY_PATH = os.getenv('GEOS_LIBRARY_PATH') + + +ALLOWED_HOSTS = ['*'] + +# Database +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases + +# Databases configuration +DATABASES = { + 'default': { + 'ENGINE': 'django.contrib.gis.db.backends.postgis', + 'NAME': os.getenv('DB_NAME'), + 'USER': os.getenv('DB_USER'), + 'PASSWORD': os.getenv('DB_PASSWORD'), + 'HOST': os.getenv('DB_HOST'), + 'PORT': os.getenv('DB_PORT'), + }, +} + +# JWT SETTINGS +SIMPLE_JWT = { + 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), + 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), + 'ROTATE_REFRESH_TOKENS': False, + 'BLACKLIST_AFTER_ROTATION': True, + 'UPDATE_LAST_LOGIN': False, + + 'ALGORITHM': 'HS256', + 'SIGNING_KEY': SECRET_KEY, + 'VERIFYING_KEY': None, + 'AUDIENCE': None, + 'ISSUER': None, + + 'AUTH_HEADER_TYPES': ('Bearer',), + 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', + 'USER_ID_FIELD': 'id', + 'USER_ID_CLAIM': 'user_id', + + 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), + 'TOKEN_TYPE_CLAIM': 'token_type', + + 'JTI_CLAIM': 'jti', + + 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp', + 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5), + 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), +} + +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' + +# For testing emails +# https://medium.com/@_christopher/how-to-send-emails-with-python-django-through-google-smtp-server-for-free-22ea6ea0fb8e +# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +# EMAIL_HOST = 'smtp.gmail.com' +# EMAIL_USE_TLS = True +# EMAIL_PORT = 587 +# EMAIL_HOST_USER = '' # your email account +# EMAIL_HOST_PASSWORD = '' #your password + +# production.py + +# Django private storage - Amazon S3 +AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID_S3') +AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY_S3') +AWS_STORAGE_BUCKET_NAME = os.getenv('S3_BUCKET') +AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME +AWS_S3_OBJECT_PARAMETERS = { + 'CacheControl': 'max-age=86400', +} +AWS_S3_REGION_NAME = 'eu-west-1' +AWS_DEFAULT_ACL = None + +# DEFAULT_FROM_EMAIL = "no-reply@latienda.com" +DEFAULT_FROM_EMAIL = "info@latienda.coop" + +SERVER_EMAIL = "mail-server@latienda.com" + + +# disable web interface for REST backend +if not DEBUG: + REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'] = ('rest_framework.renderers.JSONRenderer',) + + diff --git a/back_latienda/settings/__init__.py b/back_latienda/settings/__init__.py deleted file mode 100644 index a75e3e6..0000000 --- a/back_latienda/settings/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from back_latienda.settings.development import * diff --git a/back_latienda/settings/development.py b/back_latienda/settings/development.py deleted file mode 100644 index 8fd3ac7..0000000 --- a/back_latienda/settings/development.py +++ /dev/null @@ -1,71 +0,0 @@ -from back_latienda.settings.base import * -from datetime import timedelta -import os - -GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH') -GEOS_LIBRARY_PATH = os.getenv('GEOS_LIBRARY_PATH') - - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - -# Database -# https://docs.djangoproject.com/en/2.2/ref/settings/#databases - -# Databases configuration -DATABASES = { - 'default': { - 'ENGINE': 'django.contrib.gis.db.backends.postgis', - 'NAME': os.getenv('DB_NAME'), - 'USER': os.getenv('DB_USER'), - 'PASSWORD': os.getenv('DB_PASSWORD'), - 'HOST': os.getenv('DB_HOST'), - 'PORT': os.getenv('DB_PORT'), - }, -} - -# JWT SETTINGS -SIMPLE_JWT = { - 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), - 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), - 'ROTATE_REFRESH_TOKENS': False, - 'BLACKLIST_AFTER_ROTATION': True, - 'UPDATE_LAST_LOGIN': False, - - 'ALGORITHM': 'HS256', - 'SIGNING_KEY': SECRET_KEY, - 'VERIFYING_KEY': None, - 'AUDIENCE': None, - 'ISSUER': None, - - 'AUTH_HEADER_TYPES': ('Bearer',), - 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', - 'USER_ID_FIELD': 'id', - 'USER_ID_CLAIM': 'user_id', - - 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), - 'TOKEN_TYPE_CLAIM': 'token_type', - - 'JTI_CLAIM': 'jti', - - 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp', - 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5), - 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), -} - -EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' - -# For testing emails -# https://medium.com/@_christopher/how-to-send-emails-with-python-django-through-google-smtp-server-for-free-22ea6ea0fb8e -# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' -# EMAIL_HOST = 'smtp.gmail.com' -# EMAIL_USE_TLS = True -# EMAIL_PORT = 587 -# EMAIL_HOST_USER = '' # your email account -# EMAIL_HOST_PASSWORD = '' #your password - -# disable web interface for REST backend - -# REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'] = ('rest_framework.renderers.JSONRenderer',) diff --git a/back_latienda/settings/production.py b/back_latienda/settings/production.py deleted file mode 100644 index aea3b61..0000000 --- a/back_latienda/settings/production.py +++ /dev/null @@ -1,112 +0,0 @@ -from back_latienda.settings.base import * -import sentry_sdk -from sentry_sdk.integrations.django import DjangoIntegration - -from datetime import timedelta - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = False - -ALLOWED_HOSTS = ['*'] - -# Sentry -sentry_sdk.init( - dsn=os.getenv('SENTRY_DSN'), - integrations=[DjangoIntegration()], - - # Set traces_sample_rate to 1.0 to capture 100% - # of transactions for performance monitoring. - # We recommend adjusting this value in production, - traces_sample_rate=1.0, - - # If you wish to associate users to errors (assuming you are using - # django.contrib.auth) you may enable sending PII data. - send_default_pii=True, - - # By default the SDK will try to use the SENTRY_RELEASE - # environment variable, or infer a git commit - # SHA as release, however you may want to set - # something more human-readable. - # release="myapp@1.0.0", -) - -# Database -# https://docs.djangoproject.com/en/2.2/ref/settings/#databases - -# Databases configuration -DATABASES = { - 'default': { - 'ENGINE': 'django.contrib.gis.db.backends.postgis', - 'NAME': os.getenv('DB_NAME'), - 'USER': os.getenv('DB_USER'), - 'PASSWORD': os.getenv('DB_PASSWORD'), - 'HOST': os.getenv('DB_HOST'), - 'PORT': os.getenv('DB_PORT'), - }, -} - -STATIC_ROOT = '/webapps/latienda/static/' -MEDIA_ROOT = '/webapps/latienda/media/' - - -# Django private storage - Amazon S3 -AWS_ACCESS_KEY_ID = os.getenv('AWS_ACCESS_KEY_ID_S3') -AWS_SECRET_ACCESS_KEY = os.getenv('AWS_SECRET_ACCESS_KEY_S3') -AWS_STORAGE_BUCKET_NAME = os.getenv('S3_BUCKET') -AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME -AWS_S3_OBJECT_PARAMETERS = { - 'CacheControl': 'max-age=86400', -} -AWS_S3_REGION_NAME = 'eu-west-1' -AWS_DEFAULT_ACL = None - -DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' - -EMAIL_BACKEND = "anymail.backends.amazon_ses.EmailBackend" -# DEFAULT_FROM_EMAIL = "no-reply@latienda.com" -DEFAULT_FROM_EMAIL = "info@latienda.coop" - -SERVER_EMAIL = "mail-server@latienda.com" - -ANYMAIL = { - "AMAZON_SES_CLIENT_PARAMS": { - "aws_access_key_id": os.getenv("AWS_ACCESS_KEY_ID_SES"), - "aws_secret_access_key": os.getenv("AWS_SECRET_ACCESS_KEY_SES"), - "region_name": "eu-west-1", - }, -} - -# JWT SETTINGS -SIMPLE_JWT = { - 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60), - 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), - 'ROTATE_REFRESH_TOKENS': False, - 'BLACKLIST_AFTER_ROTATION': True, - 'UPDATE_LAST_LOGIN': False, - - 'ALGORITHM': 'HS256', - 'SIGNING_KEY': SECRET_KEY, - 'VERIFYING_KEY': None, - 'AUDIENCE': None, - 'ISSUER': None, - - 'AUTH_HEADER_TYPES': ('Bearer',), - 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', - 'USER_ID_FIELD': 'id', - 'USER_ID_CLAIM': 'user_id', - - 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), - 'TOKEN_TYPE_CLAIM': 'token_type', - - 'JTI_CLAIM': 'jti', - - 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp', - 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5), - 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1), -} - -# disable web interface for REST backend - -REST_FRAMEWORK['DEFAULT_RENDERER_CLASSES'] = ('rest_framework.renderers.JSONRenderer',) - - diff --git a/example.env b/example.env index 183392b..b44a9bd 100644 --- a/example.env +++ b/example.env @@ -1,4 +1,5 @@ # rename file to .env and populate fields accordingly +DEBUG=True DB_HOST = '' DB_PORT = '' DB_NAME = ''