from datetime import timedelta from app.conf.environ import env AUTH_USER_MODEL = 'users.User' AUTHENTICATION_BACKENDS = [ 'axes.backends.AxesBackend', 'django.contrib.auth.backends.ModelBackend', 'django.contrib.auth.backends.RemoteUserBackend', ] JWT_AUTH = { 'JWT_EXPIRATION_DELTA': timedelta(days=14), 'JWT_REFRESH_EXPIRATION_DELTA': timedelta(days=21), 'JWT_ALLOW_REFRESH': True, } DANGEROUSLY_MAKE_ONE_TIME_PASSWORDLESS_TOKEN_MULTI_PASS = env( 'DANGEROUSLY_MAKE_ONE_TIME_PASSWORDLESS_TOKEN_MULTI_PASS', cast=bool, default=False)
from celery import Celery from celery.schedules import crontab from django.conf import settings from app.conf.environ import env __all__ = [ 'celery', ] os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings') celery = Celery('app') celery.conf.update( broker_url=env('REDISCLOUD_URL'), task_always_eager=env('CELERY_ALWAYS_EAGER', cast=bool, default=settings.DEBUG), # by default in debug mode we run all celery tasks in foregroud. task_eager_propagates=True, task_ignore_result=True, timezone=env('TIME_ZONE', cast=str, default='Europe/Moscow'), enable_utc=False, beat_schedule={ 'run_started_purchase_trigger': { 'task': 'triggers.tasks.check_for_started_purchase_triggers', 'schedule': crontab(hour='*', minute=15), }, 'run_record_feedback_trigger': { 'task': 'triggers.tasks.check_for_record_feedback_triggers', 'schedule': crontab(hour='*', minute=15), }, 'ship_unshipped_orders': {
from app.conf.environ import env ZOOMUS_API_KEY = env('ZOOMUS_API_KEY', default=None, cast=str) ZOOMUS_API_SECRET = env('ZOOMUS_API_SECRET', default=None, cast=str)
from app.conf.environ import env ABSOLUTE_HOST = env('ABSOLUTE_HOST', cast=str, default='https://edu-app.borshev.com') ALLOWED_HOSTS = [ 'education-backend.herokuapp.com', 'edu-app.borshev.com', 'localhost', 'localhost:8000', 'education.borshev.com', ABSOLUTE_HOST.replace('https://', ''), ] CSRF_TRUSTED_ORIGINS = [ 'education.borshev.com', 'borshev.com', ] CORS_ALLOWED_ORIGINS = [ 'https://education.borshev.com', ] CORS_ORIGIN_REGEX_WHITELIST = [ r'.*education-frontend.netlify.app.*', ] FRONTEND_URL = env('FRONTEND_URL', cast=str, default='https://education.borshev.com/lms/') DIPLOMA_FRONTEND_URL = env('DIPLOMA_FRONTEND_URL', cast=str, default='https://certificates.borshev.com/')
from app.conf.environ import env ALLOWED_HOSTS = ['*'] # host validation is not necessary in 2020 CSRF_TRUSTED_ORIGINS = [ 'your.app.origin', ] if env('DEBUG'): ABSOLUTE_HOST = 'http://localhost:3000' else: ABSOLUTE_HOST = 'https://your.app.com'
from app.conf.environ import env # Django REST Framework # https://www.django-rest-framework.org/api-guide/settings/ DISABLE_THROTTLING = env('DISABLE_THROTTLING', cast=bool, default=False) MAX_PAGE_SIZE = env('MAX_PAGE_SIZE', cast=int, default=1000) REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend', ), 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication', 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', ), 'DEFAULT_RENDERER_CLASSES': [ 'app.renderers.AppJSONRenderer', ], 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning', 'DEFAULT_PAGINATION_CLASS': 'app.pagination.AppPagination', 'PAGE_SIZE': env('PAGE_SIZE', cast=int, default=20), }
# This file was generated using http://github.com/f213/django starter template. # # Settings are split into multiple files using http://github.com/sobolevn/django-split-settings from split_settings.tools import include from app.conf.environ import env # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = env('SECRET_KEY') # SECURITY WARNING: don't run with debug turned on in production! DEBUG = env('DEBUG', cast=bool, default=False) CI = env('CI', cast=bool, default=False) include( 'conf/api.py', 'conf/auth.py', 'conf/boilerplate.py', 'conf/db.py', 'conf/healthchecks.py', 'conf/http.py', 'conf/i18n.py', 'conf/installed_apps.py', 'conf/media.py', 'conf/middleware.py', 'conf/storage.py', 'conf/sentry.py', 'conf/static.py', 'conf/templates.py', 'conf/timezone.py',
from app.conf.environ import env MEDIA_URL = '/media/' MEDIA_ROOT = env('MEDIA_ROOT', cast=str, default='media')
from app.conf.environ import env BOT_TOKEN = env('BOT_TOKEN', cast=str, default=None) HAPPINESS_MESSAGES_CHAT_ID = env('HAPPINESS_MESSAGES_CHAT_ID', cast=str, default=None)
from app.conf.environ import env DEFAULT_FILE_STORAGE = env( 'DEFAULT_FILE_STORAGE', cast=str, default='django.core.files.storage.FileSystemStorage') AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID', default=None) AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY', default=None) AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME', default=None) AWS_S3_REGION_NAME = env('AWS_S3_REGION_NAME', default=None) AWS_S3_ENDPOINT_URL = env('AWS_S3_ENDPOINT_URL', default=None) AWS_DEFAULT_ACL = env('AWS_DEFAULT_ACL', default='public-read') AWS_S3_FILE_OVERWRITE = False AWS_QUERYSTRING_AUTH = False
from app.conf.environ import env MEDIA_URL = env('MEDIA_URL', default='/media/')
from app.conf.environ import env DEFAULT_FILE_STORAGE = env( 'DEFAULT_FILE_STORAGE', cast=str, default='django.core.files.storage.FileSystemStorage')
from app.conf.environ import env USE_TZ = False TIME_ZONE = env('TIME_ZONE', cast=str, default='Europe/Moscow')
import os.path from app.conf.boilerplate import BASE_DIR from app.conf.environ import env STATIC_URL = env('STATIC_URL', default='/static/') STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
from app.conf.environ import env # Sentry # https://sentry.io/for/django/ SENTRY_DSN = env('SENTRY_DSN', cast=str, default='') if not env('DEBUG') and len(SENTRY_DSN): import sentry_sdk from sentry_sdk.integrations.django import DjangoIntegration sentry_sdk.init( dsn=SENTRY_DSN, integrations=[DjangoIntegration()], )
from app.conf.environ import env CLICKMEETING_API_KEY = env('CLICKMEETING_API_KEY', default=None, cast=str)
from split_settings.tools import include from app.conf.environ import env # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = env('SECRET_KEY', cast=str, default='s3cr3t') # SECURITY WARNING: don't run with debug turned on in production! DEBUG = env('DEBUG', cast=bool, default=False) CI = env('CI', cast=bool, default=False) ANONYMIZE_ENABLED = DEBUG # Application definition include( 'conf/api.py', 'conf/auth.py', 'conf/boilerplate.py', 'conf/cache.py', 'conf/celery.py', 'conf/db.py', 'conf/email.py', 'conf/features.py', 'conf/healthchecks.py', 'conf/http.py', 'conf/i18n.py', 'conf/installed_apps.py', 'conf/markdown.py',
from app.conf.environ import env if not env('NO_CACHE', cast=bool, default=False): CACHES = { 'default': env.cache('REDISCLOUD_URL'), } CACHALOT_UNCACHABLE_TABLES = [ 'django_migrations', 'django_content_type', 'orders_order', # https://github.com/noripyt/django-cachalot/issues/126 ]
from app.conf.environ import env # Database # https://docs.djangoproject.com/en/2.2/ref/settings/#databases DATABASES = { 'default': env.db(), # Raises ImproperlyConfigured exception if DATABASE_URL not in os.environ } if not env('DEBUG', cast=bool): DATABASES['default']['CONN_MAX_AGE'] = 600
from app.conf.environ import env DEBUG = env('DEBUG', cast=bool, default=False) DISABLE_HOMEWORK_PERMISSIONS_CHECKING = env('DISABLE_HOMEWORK_PERMISSIONS_CHECKING', cast=bool, default=DEBUG) DISABLE_NEW_ANSWER_NOTIFICATIONS = env('DISABLE_NEW_ANSWER_NOTIFICATIONS', cast=bool, default=False)
from app.conf.environ import env 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.auth.middleware.RemoteUserMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'app.middleware.real_ip.real_ip_middleware', 'axes.middleware.AxesMiddleware', ] if not env('DEBUG') and not env('CI', cast=bool, default=False): MIDDLEWARE.insert(1, 'whitenoise.middleware.WhiteNoiseMiddleware')
from app.conf.environ import env DEBUG = env('DEBUG', cast=bool, default=False) DISABLE_HOMEWORK_PERMISSIONS_CHECKING = env( 'DISABLE_HOMEWORK_PERMISSIONS_CHECKING', cast=bool, default=DEBUG)
from app.conf.environ import env MEDIA_URL = env('MEDIA_URL', default='/media/') MEDIA_ROOT = env('MEDIA_ROOT', cast=str, default='media')
from app.conf.environ import env EMAIL_ENABLED = env('EMAIL_ENABLED', cast=bool, default=False) EMAIL_BACKEND = env('EMAIL_BACKEND', default='django.core.mail.backends.console.EmailBackend') MAILCHIMP_API_KEY = env('MAILCHIMP_API_KEY', default='') MAILCHIMP_CONTACT_LIST_ID = env('MAILCHIMP_CONTACT_LIST_ID', cast=str, default=None) DEFAULT_FROM_EMAIL = env('EMAIL_FROM', cast=str, default='') ANYMAIL = { 'POSTMARK_SERVER_TOKEN': env('POSTMARK_SERVER_TOKEN', cast=str, default=''), 'DEBUG_API_REQUESTS': env('DEBUG'), }
from app.conf.environ import env DISABLE_THROTTLING = env('DISABLE_THROTTLING', cast=bool, default=env('DEBUG')) REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': [ 'django_filters.rest_framework.DjangoFilterBackend', ], 'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated', ), 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', ], 'DEFAULT_RENDERER_CLASSES': [ 'app.renderers.AppJSONRenderer', ], 'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning', 'DEFAULT_PAGINATION_CLASS': 'app.pagination.AppPagination', 'EXCEPTION_HANDLER': 'app.sentry_exception_handler.sentry_exception_handler', 'PAGE_SIZE': 20, 'DEFAULT_THROTTLE_RATES': { 'anon-auth': '10/min', }, } DRF_RECAPTCHA_SECRET_KEY = env('RECAPTCHA_SECRET_KEY', cast=str, default='') DRF_RECAPTCHA_TESTING = DRF_RECAPTCHA_TESTING_PASS = not env(
from app.conf.environ import env TINKOFF_TERMINAL_KEY = env('TINKOFF_TERMINAL_KEY', default=None) TINKOFF_TERMINAL_PASSWORD = env('TINKOFF_TERMINAL_PASSWORD', default=None) TINKOFF_CREDIT_SHOP_ID = env('TINKOFF_CREDIT_SHOP_ID', default=None) TINKOFF_CREDIT_SHOWCASE_ID = env('TINKOFF_CREDIT_SHOWCASE_ID', default=None) TINKOFF_CREDIT_DEMO_MODE = env('TINKOFF_CREDIT_DEMO_MODE', default=env('DEBUG'))
from celery.schedules import crontab from app.conf.environ import env BROKER_URL = env('REDIS_URL') CELERY_ALWAYS_EAGER = env('CELERY_ALWAYS_EAGER', cast=bool, default=env('DEBUG')) # by default in debug mode we run all celery tasks in foregroud. CELERY_TIMEZONE = env('TIME_ZONE', cast=str, default='Europe/Moscow') CELERY_ENABLE_UTC = False CELERYBEAT_SCHEDULE = { 'run_started_purchase_trigger': { 'task': 'triggers.tasks.check_for_started_purchase_triggers', 'schedule': crontab(hour='*', minute=15), }, 'run_record_feedback_trigger': { 'task': 'triggers.tasks.check_for_record_feedback_triggers', 'schedule': crontab(hour='*', minute=15), }, 'ship_unshipped_orders': { 'task': 'orders.tasks.ship_unshipped_orders', 'schedule': crontab(hour='*', minute='*/2'), }, }
from app.conf.environ import env ABSOLUTE_HOST = env('ABSOLUTE_HOST', cast=str, default='https://edu-app.borshev.com') ALLOWED_HOSTS = [ 'education-backend.herokuapp.com', 'edu-app.borshev.com', 'localhost', 'localhost:8000', 'education.borshev.com', ABSOLUTE_HOST.replace('https://', ''), ] CSRF_TRUSTED_ORIGINS = [ 'education.borshev.com', 'borshev.com', ] CORS_ALLOWED_ORIGINS = [ 'https://education.borshev.com', ] CORS_ORIGIN_REGEX_WHITELIST = [ r'.*education-frontend.netlify.app.*', ] FRONTEND_URL = env('FRONTEND_URL', cast=str, default='https://education.borshev.com/lms/')