""" Django settings for rad project. Generated by 'django-admin startproject' using Django 1.11.14. For more information on this file, see https://docs.djangoproject.com/en/1.11/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.11/ref/settings/ """ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! try: with open("/etc/secret_key") as f: SECRET_KEY = f.read().strip() except: SECRET_KEY = os.environ.get("SECRET_KEY") # SECURITY WARNING: don't run with debug turned on in production! DEBUG = int(os.environ.get("DEBUG", default=0)) ALLOWED_HOSTS = [ "localhost", "localhost:8000", "localhost:8080", "127.0.0.1", "161.35.163.87", "46.101.13.46", "penracourses.org.uk", "www.penracourses.org.uk", ] # Application definition INSTALLED_APPS = [ "daphne", "generic", "anatomy", "physics", "rapids", "shorts", "longs", "sbas", "wally", "atlas", "research", "rcr", "rota", "oef", "reversion", "debug_toolbar", "django_tables2", "django_filters", "easy_thumbnails", "filer", #"mptt", "sortedm2m", "dal", "dal_select2", "dal_queryset_sequence", "cookie_consent", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "channels", "django.contrib.postgres", "dbbackup", "tinymce", "django_unused_media", "django_htmx", "crispy_forms", "crispy_bootstrap5", "autocomplete", 'markdownify.apps.MarkdownifyConfig', 'django_jsonforms', 'django_svelte_jsoneditor', 'django_psutil_dash', 'django_tasks', 'django_tasks_db', ] MIDDLEWARE = [ "debug_toolbar.middleware.DebugToolbarMiddleware", "corsheaders.middleware.CorsMiddleware", "django.middleware.security.SecurityMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "reversion.middleware.RevisionMiddleware", "django_htmx.middleware.HtmxMiddleware", ] if not DEBUG: MIDDLEWARE.append( 'rad.middleware.coep.COEPMiddleware' ) ROOT_URLCONF = "rad.urls" #default_loaders = [ # "django.template.loaders.filesystem.Loader", # "django.template.loaders.app_directories.Loader", #] # #cached_loaders = [("django.template.loaders.cached.Loader", default_loaders)] if DEBUG: # Development: do not use cached loader so templates reload on each request TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [os.path.join(BASE_DIR, "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", "django.template.context_processors.static", ], }, }, ] else: # Production: enable cached loader for performance TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [os.path.join(BASE_DIR, "templates")], "APP_DIRS": False, "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", "django.template.context_processors.static", ], "loaders": [ ( "django.template.loaders.cached.Loader", [ "django.template.loaders.filesystem.Loader", "django.template.loaders.app_directories.Loader", ], ) ], }, }, ] WSGI_APPLICATION = "rad.wsgi.application" # Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql_psycopg2", "NAME": os.environ.get("DB_NAME", "django"), "USER": os.environ.get("DB_USER", "django"), "PASSWORD": os.environ.get("DB_PASSWORD", "AVNS_NG_s4i7SMMobWLO"), #"HOST": os.environ.get("DB_HOST", "db-postgresql-lon1-05515-do-user-8165014-0.b.db.ondigitalocean.com"), "HOST": os.environ.get("DB_HOST", "db-postgresql-lon1-05515-jan-22-backup-do-user-8165014-0.c.db.ondigitalocean.com"), "PORT": os.environ.get("DB_PORT", "25060"), #"NAME": os.environ.get("DB_NAME", "django"), #"USER": os.environ.get("DB_USER", "django"), #"PASSWORD": os.environ.get("DB_PASSWORD", "f7bf31dc9bda1256ea827953480d1917"), #"HOST": os.environ.get("DB_HOST", "161.35.163.87"), #"PORT": os.environ.get("DB_PORT", "5432"), } } # Password validation # https://docs.djangoproject.com/en/1.11/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/1.11/topics/i18n/ LANGUAGE_CODE = "en-us" TIME_ZONE = "Europe/London" USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ SECURE_SSL_REDIRECT = True SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") STATIC_URL = "/static/" STATIC_ROOT = "static/" REMOTE_URL = "https://www.penracourses.org.uk" # # if DEBUG: # STATIC_URL = REMOTE_URL + STATIC_URL MEDIA_URL = "/media/" MEDIA_ROOT = "media/" # if DEBUG: # MEDIA_URL = REMOTE_URL + MEDIA_URL # Redirect to home URL after login (Default redirects to /accounts/profile/) LOGIN_REDIRECT_URL = "/" LOGOUT_REDIRECT_URL = "/" INTERNAL_IPS = ["localhost", "127.0.0.1", "localhost:8000", "localhost:8080"] #LOGGING = { # "version": 1, # "disable_existing_loggers": False, # "incremental": True, # "root": { # "level": "DEBUG", # }, #} CORS_ORIGIN_ALLOW_ALL = True # Development: trust local origins (including ports) so the dev nginx reverse # proxy and the Django runserver can POST/PUT without CSRF Origin errors. if DEBUG: CSRF_TRUSTED_ORIGINS = [ "http://localhost", "http://127.0.0.1", "http://localhost:8000", "http://127.0.0.1:8000", "http://localhost:8080", "http://127.0.0.1:8080", ] CACHES = { "default": { "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache", "LOCATION": f'{os.environ.get("MEMCACHE_HOST", "127.0.0.1")}:11211', #'OPTIONS': { # 'server_max_value_length': 1024 * 1024 * 10 # } }, "filesystem": { "BACKEND": "django.core.cache.backends.filebased.FileBasedCache", "LOCATION": "/var/tmp/django_cache", }, } THUMBNAIL_ALIASES = { "": { "exam-list": {"size": (50, 50), "crop": True}, }, } DATA_UPLOAD_MAX_NUMBER_FIELDS = 50000 THUMBNAIL_SOURCE_GENERATORS = ( "easy_thumbnails.source_generators.pil_image", "helpers.images.pil_dicom_image", ) DBBACKUP_STORAGE = "django.core.files.storage.FileSystemStorage" DBBACKUP_STORAGE_OPTIONS = {"location": os.path.join(BASE_DIR, "../backups")} DEFAULT_FILE_STORAGE = ( "django_hashedfilenamestorage.storage.HashedFilenameFileSystemStorage" ) TINYMCE_DEFAULT_CONFIG = { "theme": "silver", "height": 500, "menubar": False, "plugins": "advlist,autolink,lists,link,image,charmap,print,preview,anchor," "searchreplace,visualblocks,code,fullscreen,insertdatetime,media,table,paste," "code,help,wordcount", "toolbar": "undo redo | formatselect | code" "bold italic backcolor | alignleft aligncenter " "alignright alignjustify | bullist numlist outdent indent | " "removeformat | code | help", "skin": "oxide-dark", "menubar": "tools", "content_css": "dark", # Disable the "Powered by Tiny" branding badge in the editor UI # (TinyMCE option: https://www.tiny.cloud/docs/configure/editor-appearance/#branding) "branding": False, "promotion": False, } DEFAULT_AUTO_FIELD = "django.db.models.AutoField" EMAIL_BACKEND = os.environ.get("EMAIL_BACKEND", "django.core.mail.backends.smtp.EmailBackend") # Path used by Django's file-based email backend. In dev this should be # mounted into the container at `/var/log/rad/emails` (see `docker-compose.dev.yml`). EMAIL_FILE_PATH = os.environ.get("EMAIL_FILE_PATH", os.path.join(BASE_DIR, "../logs/emails")) # SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY') SENDGRID_API_KEY = ( "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" ) # SENDGRID #EMAIL_HOST = "smtp.sendgrid.net" #EMAIL_HOST_USER = "apikey" # this is exactly the value 'apikey' #EMAIL_HOST_PASSWORD = SENDGRID_API_KEY #EMAIL_PORT = 587 #EMAIL_USE_TLS = True # EMAIL_HOST = "smtp.office365.com " # EMAIL_HOST_USER = "Penra.courses@nhs.net" # EMAIL_HOST_PASSWORD = '"got3<}%o"~\J",\Di3<' # EMAIL_PORT = 587 # EMAIL_USE_TLS = True # EMAIL_USE_SSl = False DEFAULT_FROM_EMAIL = "no-reply@penracourses.org.uk" EMAIL_HOST = "webhosting2027.is.cc" EMAIL_HOST_USER = "no-reply@penracourses.org.uk" EMAIL_HOST_PASSWORD = "I(5E)&1w+Bh)" EMAIL_PORT = 465 #EMAIL_USE_TLS = True EMAIL_USE_SSL = True ADMINS = [("Ross","ross@xkjq.uk")] CRISPY_ALLOWED_TEMPLATE_PACKS = ('bootstrap5',) CRISPY_TEMPLATE_PACK = 'bootstrap5' CRISPY_CLASS_CONVERTERS = { "textinput": "clearable_input", # Use clearable_input.html for TextInput "textarea": "clearable_input", # Use clearable_input.html for Textarea } DEBUG_CONTAINER = False CONTACT_EMAIL = "plh-tr.radiology-academy@nhs.net" STATICFILES_DIRS = ( os.path.join(BASE_DIR, "rad", "static"), # That's it!! ) CIMAR_USERNAME = "" CIMAR_PASSWORD = "" # Celery settings CELERY_BROKER_URL = "redis://redis:6379" CELERY_RESULT_BACKEND = "redis://redis:6379" # Django 6 task framework settings. # Use DJANGO_TASK_BACKEND to select your backend implementation. TASKS = { "default": { "BACKEND": os.environ.get( "DJANGO_TASK_BACKEND", "django_tasks_db.DatabaseBackend", ), "QUEUES": ["default"], } } # ASGI & Django Channels settings ASGI_APPLICATION = "rad.asgi.application" CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [("redis", 6379)], }, }, } try: from .settings_local import * except ImportError as e: print(e) print("UNABLE TO IMPORT LOCAL SETTINGS") pass