""" Django settings for imagebot project. Generated by 'django-admin startproject' using Django 5.1.2. For more information on this file, see https://docs.djangoproject.com/en/5.1/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/5.1/ref/settings/ """ import configparser import os from pathlib import Path # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent """CONFIG PARSER """ config = configparser.RawConfigParser() if 'NF_CONFIG_FILE' in os.environ: config.read_file(open(os.environ.get('NF_CONFIG_FILE'), encoding='utf-8')) if 'DOCKER_BUILD' in os.environ and os.environ.get('DOCKER_BUILD'): config.read("docker/build.cfg", encoding='utf-8') else: config.read(['/etc/imagebot/imagebot.cfg', os.path.expanduser('~/.imagebot.cfg'), 'imagebot.cfg'], encoding='utf-8') CONFIG_FILE = config DJANGO_LOG_LEVEL = config.get('logging', 'django_log_level', fallback="WARNING") APP_LOG_LEVEL = config.get('logging', 'app_log_level', fallback="WARNING") """LOGGING""" LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '{levelname} {asctime} {module} {message}', 'style': '{', }, }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'formatter': 'verbose', }, }, 'loggers': { 'django': { 'handlers': ['console'], 'level': DJANGO_LOG_LEVEL, }, 'fellchensammlung': { 'handlers': ['console'], 'level': APP_LOG_LEVEL, }, 'imagebot': { 'handlers': ['console'], 'level': APP_LOG_LEVEL, }, }, } """ DJANGO """ try: SECRET_KEY = config.get('django', 'secret') except configparser.NoSectionError: raise BaseException("No config found or no Django Secret is configured!") DEBUG = config.getboolean('django', 'debug', fallback=False) host = config.get("imagebot", "host", fallback='*') # see https://docs.djangoproject.com/en/3.2/ref/settings/#std-setting-ALLOWED_HOSTS ALLOWED_HOSTS = [host] CSRF_TRUSTED_ORIGINS = [f"https://{host}"] MEDIA_URL = '/media/' MEDIA_ROOT = Path(config.get('locations', 'media_root')) MEDIA_CONSUME_DIR_RELATIVE = Path("consume") # Relative to MEDIA_ROOT MEDIA_CONSUME_DIR = MEDIA_ROOT / MEDIA_CONSUME_DIR_RELATIVE MEDIA_PROCESSED_DIR_RELATIVE = Path("processed") # Relative to MEDIA_ROOT CRISPY_TEMPLATE_PACK = 'bootstrap4' FEDIVERSE_SERVER = config.get('fediverse', 'server') FEDIVERSE_TOKEN = config.get('fediverse', 'token') # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'idescriptor', 'fontawesomefree', 'crispy_forms', "crispy_bootstrap4", ] 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', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'imagebot.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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 = 'imagebot.wsgi.application' # Database # https://docs.djangoproject.com/en/5.1/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } # Password validation # https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators 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', }, ] # Internationalization # https://docs.djangoproject.com/en/5.1/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.1/howto/static-files/ STATIC_URL = 'static/' # Default primary key field type # https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'