medicine-mts/appa/settings.py

237 lines
6.7 KiB
Python

import os
import environ
import datetime
import django as django_module
from celery.schedules import crontab
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
DJANGO_DIR = os.path.dirname(django_module.__file__)
SECRET_KEY = 'django-insecure-13n6^zl86r@=9@!z8gsfv(q6wpggo+$box)^tklnoe9auck-)c'
root = environ.Path(__file__) - 2
env = environ.Env(
LANGUAGE_CODE=(str, 'ru-RU'),
TIME_ZONE=(str, 'Asia/Vladivostok'),
USE_TZ=(bool, False),
USE_I18N=(bool, True),
)
DEBUG = env.bool('DEBUG', False)
REDIS_HOST = env.str('REDIS_HOST', 'medicine-stack-redis')
REDIS_PORT = env.str('REDIS_PORT', '6379')
REDIS_DB = env.str('REDIS_DB', 1)
POSTGRES_HOST = env.str('POSTGRES_HOST', 'medicine-stack-postgres')
POSTGRES_PORT = env.str('POSTGRES_PORT', '5432')
POSTGRES_DB = env.str('POSTGRES_DB', 'medicine_call')
POSTGRES_USER = env.str('POSTGRES_USER', 'postgres')
POSTGRES_PASSWORD = env.str('POSTGRES_PASSWORD', 'password')
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'constance',
'ace_editor',
'rangefilter',
'appa',
'appa.medicine',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
ROOT_URLCONF = 'appa.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'appa/templates'),
DJANGO_DIR
],
'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 = 'appa.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': POSTGRES_HOST,
'PORT': POSTGRES_PORT,
'NAME': POSTGRES_DB,
'USER': POSTGRES_USER,
'PASSWORD': POSTGRES_PASSWORD,
},
'medicine': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': env.str('POSTGRES_MEDICINE_DB', 'medicine'),
'USER': POSTGRES_USER,
'PASSWORD': POSTGRES_PASSWORD,
'HOST': POSTGRES_HOST,
'PORT': POSTGRES_PORT
},
}
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 = env.str('LANGUAGE_CODE')
TIME_ZONE = env.str('TIME_ZONE')
USE_I18N = env.bool('USE_I18N')
USE_TZ = env.bool('USE_TZ')
STATIC_URL = '/medicine-call/django_static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'django_static')
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
SESSION_COOKIE_NAME = env.str('SESSION_COOKIE_NAME', 'medicine-call')
CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'
CONSTANCE_ADDITIONAL_FIELDS = {
'char': ['django.forms.fields.CharField', {
'widget': 'django.forms.TextInput',
'widget_kwargs': dict(attrs={'size': 60}),
'required': False
}],
'url': ['django.forms.fields.URLField', {
'widget': 'django.forms.TextInput',
'widget_kwargs': dict(attrs={'size': 60}),
'required': False
}]
}
CONSTANCE_CONFIG = {
'ENTRYPOINT_ADD_RECORDS': ('https://amniss-ai.ru/api/v.2/records/{scenarioId}', 'Адрес для добавления записей', 'char'),
'ENTRYPOINT_AUTH': ('https://amniss-ai.ru/api/auth', 'Адрес для авторизации', 'char'),
'ENTRYPOINT_DELETE': ('https://amniss-ai.ru/api/v.1/records/delete/%s', 'Адрес для удаления', 'char'),
'ENTRYPOINT_RECORD': ('https://amniss-ai.ru/api/v.1/records/%s', 'Адрес записи', 'char'),
'SCENARIO_ID': ('', 'ID сценария', 'char'),
'USERNAME': ('', 'Имя пользователя', 'char'),
'PASSWORD': ('', 'Пароль', 'char'),
'IS_ENABLED': (False, 'Активен', bool),
'ACCESS_TOKEN': ('', 'Access token', 'char'),
'REFRESH_TOKEN': ('', 'Refresh token', 'char'),
'ACCESS_TOKEN_EXPIRED': (
datetime.datetime(2025, 1, 1, 0, 0),
'Access token expired',
datetime.datetime
),
'CALL_TIME_START': (
datetime.time(9, 30),
'Время старта обзвона',
datetime.time
),
'CALL_TIME_END': (
datetime.time(18, 30),
'Время окончания обзвона',
datetime.time
),
'MEDICINE_TOKEN': ('', 'Токен', 'char'),
'MEDICINE_HOST': ('http://medicine-app/', 'Хост', 'char'),
}
CONSTANCE_CONFIG_FIELDSETS = (
('API', (
'IS_ENABLED',
'CALL_TIME_START',
'CALL_TIME_END',
'SCENARIO_ID',
'USERNAME',
'PASSWORD',
'ENTRYPOINT_AUTH',
'ENTRYPOINT_ADD_RECORDS',
'ENTRYPOINT_DELETE',
'ENTRYPOINT_RECORD',
'ACCESS_TOKEN',
'REFRESH_TOKEN',
'ACCESS_TOKEN_EXPIRED',
)),
('МИС', (
'MEDICINE_HOST',
'MEDICINE_TOKEN',
)),
)
REQUEST_TIMEOUT = 5
REDIS_CELERY_DB = env.str('REDIS_CELERY_DB', '7')
BROKER_URL = f'redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_CELERY_DB}'
CELERY_DEFAULT_QUEUE = 'default'
CELERY_ENABLE_UTC = True
CELERY_IGNORE_RESULT = True
CELERYBEAT_SCHEDULE = {
'update_call_requests_task': {
'task': 'appa.tasks.update_call_requests_task',
'schedule': crontab(hour='8', minute='0'),
'options': {'queue': CELERY_DEFAULT_QUEUE}
},
'check_call_requests_task': {
'task': 'appa.tasks.check_call_requests_task',
'schedule': crontab(minute='*/5'),
'options': {'queue': CELERY_DEFAULT_QUEUE}
}
}
DATE_FORMAT = 'd.m.Y'
DATETIME_FORMAT = 'd.m.Y H:i'
CALL_REQUEST_TIME_START = datetime.time(9, 0)
CALL_REQUEST_TIME_END = datetime.time(21, 0)
DATABASE_ROUTERS = [
'appa.medicine.router.MedicineRouter',
]
if DEBUG:
AUTH_PASSWORD_VALIDATORS = []
SESSION_COOKIE_NAME = 'dev-medicine-call'