Initial commit from ZIP
This commit is contained in:
commit
378d4692a9
454 files changed
+40367
No files matched your search
Executable
+239
@@ -0,0 +1,239 @@
|
||||
import os
|
||||
|
||||
from configurations import Configuration, values
|
||||
|
||||
|
||||
class Base(Configuration):
|
||||
@classmethod
|
||||
def pre_setup(cls):
|
||||
super().pre_setup()
|
||||
from patches import patches
|
||||
|
||||
patches.on()
|
||||
|
||||
APP_VERSION = "1.0.0"
|
||||
|
||||
DATA_UPLOAD_MAX_MEMORY_SIZE = 26214400000
|
||||
|
||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
SECRET_KEY = values.SecretValue()
|
||||
DEBUG = values.BooleanValue(True)
|
||||
ALLOWED_HOSTS = values.ListValue([])
|
||||
|
||||
INSTALLED_APPS = [
|
||||
# internal
|
||||
"django.contrib.admin",
|
||||
"django.contrib.auth",
|
||||
"django.contrib.contenttypes",
|
||||
"django.contrib.sessions",
|
||||
"django.contrib.messages",
|
||||
"django.contrib.staticfiles",
|
||||
# 3rd party
|
||||
"django_filters",
|
||||
"nested_admin",
|
||||
"polymorphic",
|
||||
"corsheaders",
|
||||
"rules",
|
||||
"django_extensions",
|
||||
"rest_framework",
|
||||
"rest_framework.authtoken",
|
||||
# core apps
|
||||
"outbo.apps.core",
|
||||
"outbo.apps.organizations",
|
||||
"outbo.apps.authentication",
|
||||
"outbo.apps.projects",
|
||||
"outbo.apps.products",
|
||||
"outbo.apps.photobriefing",
|
||||
"outbo.apps.final_photobriefing",
|
||||
"outbo.apps.activity_log",
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
"django.middleware.security.SecurityMiddleware",
|
||||
"django.contrib.sessions.middleware.SessionMiddleware",
|
||||
"corsheaders.middleware.CorsMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
"django.middleware.csrf.CsrfViewMiddleware",
|
||||
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
||||
]
|
||||
|
||||
AUTHENTICATION_BACKENDS = [
|
||||
"django.contrib.auth.backends.ModelBackend",
|
||||
"rules.permissions.ObjectPermissionBackend",
|
||||
]
|
||||
|
||||
ROOT_URLCONF = "outbo.urls"
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
||||
"DIRS": ["outbo/templates"],
|
||||
"APP_DIRS": True,
|
||||
"OPTIONS": {
|
||||
"context_processors": [
|
||||
"django.template.context_processors.debug",
|
||||
"django.template.context_processors.request",
|
||||
"django.contrib.auth.context_processors.auth",
|
||||
"django.contrib.messages.context_processors.messages",
|
||||
]
|
||||
},
|
||||
}
|
||||
]
|
||||
|
||||
WSGI_APPLICATION = "outbo.wsgi.application"
|
||||
|
||||
DATABASES = values.DatabaseURLValue()
|
||||
|
||||
AUTH_PASSWORD_VALIDATORS = [
|
||||
{
|
||||
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"
|
||||
},
|
||||
{"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
|
||||
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
|
||||
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
|
||||
]
|
||||
|
||||
LANGUAGE_CODE = "pl-PL"
|
||||
TIME_ZONE = "Europe/Warsaw"
|
||||
USE_I18N = True
|
||||
USE_L10N = True
|
||||
USE_TZ = True
|
||||
STATIC_URL = "/static/"
|
||||
MEDIA_URL = "/uploads/"
|
||||
|
||||
AUTH_USER_MODEL = "authentication.User"
|
||||
|
||||
# DRF
|
||||
REST_FRAMEWORK = {
|
||||
"DEFAULT_AUTHENTICATION_CLASSES": [
|
||||
"outbo.apps.authentication.TokenAuthentication",
|
||||
"rest_framework.authentication.SessionAuthentication",
|
||||
"rest_framework.authentication.BasicAuthentication",
|
||||
],
|
||||
"DEFAULT_RENDERER_CLASSES": (
|
||||
"djangorestframework_camel_case.render.CamelCaseJSONRenderer",
|
||||
"djangorestframework_camel_case.render.CamelCaseBrowsableAPIRenderer",
|
||||
),
|
||||
"DEFAULT_PARSER_CLASSES": (
|
||||
"outbo.apps.core.parsers.CamelCaseNestedMultiPartParser",
|
||||
"djangorestframework_camel_case.parser.CamelCaseJSONParser",
|
||||
"djangorestframework_camel_case.parser.CamelCaseFormParser",
|
||||
),
|
||||
"DEFAULT_FILTER_BACKENDS": [
|
||||
"django_filters.rest_framework.DjangoFilterBackend"
|
||||
],
|
||||
"DEFAULT_PERMISSION_CLASSES": ["rest_framework.permissions.IsAuthenticated"],
|
||||
"UPLOADED_FILES_USE_URL": False,
|
||||
}
|
||||
|
||||
CORS_ORIGIN_WHITELIST = values.ListValue([])
|
||||
USE_X_FORWARDED_HOST = values.BooleanValue(False)
|
||||
STATIC_ROOT = values.Value()
|
||||
MEDIA_ROOT = values.Value()
|
||||
LOCALE_PATHS = [os.path.join(BASE_DIR, "outbo", "locale")]
|
||||
|
||||
|
||||
class Test(Base):
|
||||
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
||||
LANGUAGE_CODE = "en-us"
|
||||
TIME_ZONE = "UTC"
|
||||
REST_FRAMEWORK = {
|
||||
"DEFAULT_AUTHENTICATION_CLASSES": [
|
||||
"outbo.apps.authentication.TokenAuthentication",
|
||||
"rest_framework.authentication.SessionAuthentication",
|
||||
"rest_framework.authentication.BasicAuthentication",
|
||||
],
|
||||
"DEFAULT_FILTER_BACKENDS": [
|
||||
"django_filters.rest_framework.DjangoFilterBackend"
|
||||
],
|
||||
"DEFAULT_PARSER_CLASSES": [
|
||||
"outbo.apps.core.parsers.NestedMultiPartParser",
|
||||
"rest_framework.parsers.JSONParser",
|
||||
"rest_framework.parsers.FormParser",
|
||||
],
|
||||
"DEFAULT_PERMISSION_CLASSES": ["rest_framework.permissions.IsAuthenticated"],
|
||||
"UPLOADED_FILES_USE_URL": False,
|
||||
}
|
||||
|
||||
|
||||
class Dev(Base):
|
||||
DOTENV = "dev.env"
|
||||
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
||||
MIDDLEWARE = ["silk.middleware.SilkyMiddleware"] + Base.MIDDLEWARE
|
||||
INSTALLED_APPS = ["silk"] + Base.INSTALLED_APPS
|
||||
|
||||
|
||||
class Staging(Base):
|
||||
DEBUG = False
|
||||
STATIC_ROOT = "/host/static/"
|
||||
MEDIA_ROOT = "/host/uploads/"
|
||||
SENTRY_DSN = values.URLValue(environ_required=True)
|
||||
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
||||
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
||||
|
||||
@classmethod
|
||||
def post_setup(cls):
|
||||
super().post_setup()
|
||||
import sentry_sdk
|
||||
from sentry_sdk.integrations.django import DjangoIntegration
|
||||
|
||||
sentry_sdk.init(
|
||||
dsn=str(cls.SENTRY_DSN),
|
||||
integrations=[DjangoIntegration()],
|
||||
environment="Staging",
|
||||
)
|
||||
|
||||
|
||||
class Prod(Base):
|
||||
DEBUG = False
|
||||
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
||||
DEFAULT_FILE_STORAGE = "outbo.apps.core.storages.S3MediaStorage"
|
||||
STATICFILES_STORAGE = "outbo.apps.core.storages.S3StaticStorage"
|
||||
|
||||
INSTALLED_APPS = ["anymail"] + Base.INSTALLED_APPS
|
||||
|
||||
AWS_ACCESS_KEY_ID = values.Value(environ_required=True)
|
||||
AWS_SECRET_ACCESS_KEY = values.Value(environ_required=True)
|
||||
AWS_S3_REGION_NAME = values.Value(environ_required=True)
|
||||
AWS_S3_ENDPOINT_URL = values.Value(environ_required=True)
|
||||
|
||||
AWS_STORAGE_BUCKET_STATIC_NAME = values.Value(environ_required=True)
|
||||
AWS_STORAGE_BUCKET_MEDIA_NAME = values.Value(environ_required=True)
|
||||
|
||||
AWS_S3_FILE_OVERWRITE = values.BooleanValue(False)
|
||||
|
||||
EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend"
|
||||
DEFAULT_FROM_EMAIL = values.Value(environ_required=True)
|
||||
|
||||
MAILGUN_API_KEY = values.Value(environ_required=True)
|
||||
MAILGUN_SENDER_DOMAIN = values.Value(environ_required=True)
|
||||
|
||||
@property
|
||||
def MEDIA_URL(self): # noqa
|
||||
return (
|
||||
f"https://{Prod.AWS_S3_ENDPOINT_URL}/{Prod.AWS_STORAGE_BUCKET_MEDIA_NAME}/"
|
||||
)
|
||||
|
||||
@property
|
||||
def ANYMAIL(self): # noqa
|
||||
return {
|
||||
"MAILGUN_API_URL": "https://api.eu.mailgun.net/v3",
|
||||
"MAILGUN_API_KEY": Prod.MAILGUN_API_KEY,
|
||||
"MAILGUN_SENDER_DOMAIN": Prod.MAILGUN_SENDER_DOMAIN,
|
||||
}
|
||||
|
||||
SENTRY_DSN = values.URLValue(environ_required=True)
|
||||
|
||||
@classmethod
|
||||
def post_setup(cls):
|
||||
super().post_setup()
|
||||
import sentry_sdk
|
||||
from sentry_sdk.integrations.django import DjangoIntegration
|
||||
|
||||
sentry_sdk.init(
|
||||
dsn=str(cls.SENTRY_DSN),
|
||||
integrations=[DjangoIntegration()],
|
||||
environment="Production",
|
||||
)
|
||||
Reference in new issue
Block a user