import sys import os import urllib.parse from pathlib import Path """Settings for a troggle installation which may vary among different installations: for development or deployment, in a docker image or python virtual environment (venv), on ubuntu, debian or in Windows System for Linux (WSL), on the main server or in the potato hut, using SQLite or mariaDB. It sets the directory locations for the major parts of the system so that e.g. expofiles can be on a different filesystem, or /javascript/ can be in a system-wide location rather than just a local directory. This file is included at the end of the main troggle/settings.py file so that it overwrites defaults in that file. Read https://realpython.com/python-pathlib/ Read https://adamj.eu/tech/2020/03/16/use-pathlib-in-your-django-project/ """ print(" * importing troggle/localsettings.py") #----------------------------------------------------------------- # THINK before you push this to a repo # - have you checked that credentials.py is in .gitignore ? # - we don't want to have to change the expo system password ! #----------------------------------------------------------------- # default values, real secrets imported from credentials.py SECRET_KEY = "real-SECRET_KEY--imported-from-localsettings.py" EXPOUSERPASS = "nnn:gggggg - real-expo-password---imported-from-localsettings.py" EXPOADMINUSERPASS = "gggggg:nnn - real-expo-password---imported-from-localsettings.py" EMAIL_HOST_PASSWORD = "real-email-password---imported-from-localsettings.py" EXPOFILESREMOTE = False # if True, then re-routes urls in expofiles to remote sever. Tests are then less accurate. #SECURE_SSL_REDIRECT = True # breaks 7 tests in test suite 301 not 200 (or 302) and runserver fails completely SERVERPORT = '8000' # not needed PV = "python" + str(sys.version_info.major) + "." + str(sys.version_info.minor) # Troggle does a lot of file-handling. This is very error-prone when using primitive methods, # so we use pathlib which has been standard since python 3.4 # If oathlib is new to you, you will need to read https://realpython.com/python-pathlib/ # --------------------- MEDIA redirections BEGIN --------------------- REPOS_ROOT_PATH = Path(__file__).parent.parent LIBDIR = REPOS_ROOT_PATH / 'lib' / PV #LIBDIR = REPOS_ROOT_PATH / 'lib' / 'python3.7' # should be finding this automatically: python --version etc. TROGGLE_PATH = Path(__file__).parent TEMPLATE_PATH = TROGGLE_PATH / 'templates' MEDIA_ROOT = TROGGLE_PATH / 'media' JSLIB_ROOT = TROGGLE_PATH / 'media' / 'jslib' # used for CaveViewer JS utility FILES = Path('/mnt/f/expofiles/') EXPOFILES = Path('/mnt/f/expofiles/') SURVEY_SCANS = EXPOFILES / 'surveyscans' PHOTOS_ROOT = EXPOFILES / 'photos' # URL that handles the media served from MEDIA_ROOT. Make sure to use a # trailing slash if there is a path component (optional in other cases). MEDIA_URL = '/site-media/' DIR_ROOT = ''#this should end in / if a value is given URL_ROOT = '/' # URL_ROOT = 'http://localhost:'+ SERVERPORT +'/' MEDIA_URL = urllib.parse.urljoin(URL_ROOT , '/site_media/') SURVEYS_URL = urllib.parse.urljoin(URL_ROOT , '/survey_scans/') PHOTOS_URL = urllib.parse.urljoin(URL_ROOT , '/photos/') SVX_URL = urllib.parse.urljoin(URL_ROOT , '/survex/') STATIC_URL = urllib.parse.urljoin(URL_ROOT , '/static/') # used by Django admin pages. Do not delete. JSLIB_URL = urllib.parse.urljoin(URL_ROOT , '/javascript/') # used for CaveViewer JS utility #STATIC_ROOT removed after merging content into MEDIA_ROOT. See urls.py & core/views/surveys.py # --------------------- MEDIA redirections END --------------------- PUBLIC_SITE = True DEBUG = True # Always keep this True, even when on public server. Otherwise NO USEFUL ERROR MESSAGES ! CACHEDPAGES = True # experimental page cache for a handful of page types # executables: CAVERN = 'cavern' # for parsing .svx files and producing .3d files SURVEXPORT = 'survexport' # for parsing .3d files and producing .pos files DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME' : 'troggle.sqlite', # 'NAME' : ':memory:', 'USER' : 'expo', # Not used with sqlite3. 'PASSWORD' : 'sekrit', # Not used with sqlite3. 'HOST' : '', # Set to empty string for localhost. Not used with sqlite3. 'PORT' : '', # Set to empty string for default. Not used with sqlite3. } } # add in 358 when they don't make it crash horribly NOTABLECAVESHREFS = [ "290", "291", "359", "264", "258", "204", "76", "107"] PYTHON_PATH = REPOS_ROOT_PATH / 'troggle' sys.path.append(os.fspath(REPOS_ROOT_PATH)) sys.path.append(os.fspath(PYTHON_PATH)) LOGFILE = PYTHON_PATH / 'troggle.log' PYTHON_PATH = os.fspath(PYTHON_PATH) TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ TEMPLATE_PATH ], 'OPTIONS': { 'debug': 'DEBUG', 'context_processors': [ # django.template.context_processors.csrf, # is always enabled and cannot be removed, sets csrf_token 'django.contrib.auth.context_processors.auth', # knowledge of logged-on user & permissions 'core.context.troggle_context', # in core/troggle.py - only used in expedition.html 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', # includes a variable MEDIA_URL 'django.template.context_processors.static', # includes a variable STATIC_URL used by admin pages 'django.template.context_processors.tz', 'django.template.context_processors.request', # must be enabled in DjangoTemplates (TEMPLATES) in order to use the admin navigation sidebar. 'django.contrib.messages.context_processors.messages', ], 'loaders': [ 'django.template.loaders.filesystem.Loader', # default lcation is troggle/templates/ 'django.template.loaders.app_directories.Loader', # needed for admin 'app' ] }, }, ] # Passwords are loaded from credentials.py by settings.py EXPOUSERPASS = "nnn:gggggg - real-expo-password---imported-from-localsettings.py" EMAIL_HOST_PASSWORD = "real-email-password---imported-from-localsettings.py" EXPOUSER = 'expo' EXPOUSER_EMAIL = 'philip.sargent@gmail.com' EXPOADMINUSER = 'expoadmin' EXPOADMINUSER_EMAIL = 'philip.sargent@gmail.com' EMAIL_HOST = "smtp-auth.mythic-beasts.com" EMAIL_HOST_USER = "django-test@klebos.net" # Philip Sargent really EMAIL_PORT=587 EMAIL_USE_TLS = True DEFAULT_FROM_EMAIL = 'django-test@klebos.net' SURVEX_DATA = REPOS_ROOT_PATH / "loser" DRAWINGS_DATA = REPOS_ROOT_PATH / "drawings" THREEDCACHEDIR = REPOS_ROOT_PATH / 'expowebcache' / '3d' EXPOWEB = REPOS_ROOT_PATH / "expoweb" SURVEYS = REPOS_ROOT_PATH CAVEDESCRIPTIONS = EXPOWEB / "cave_data" ENTRANCEDESCRIPTIONS = EXPOWEB / "entrance_data" EXPOWEB_URL = '' SURVEYS_URL = '/survey_scans/' # Sanitise these to be strings as all other code is expecting strings # and we have not made the change to pathlib Path type in the other localsettings-* variants yet. CAVEDESCRIPTIONS = os.fspath(CAVEDESCRIPTIONS) ENTRANCEDESCRIPTIONS = os.fspath(ENTRANCEDESCRIPTIONS) LOGFILE = os.fspath(LOGFILE) SURVEYS = os.fspath(SURVEYS) EXPOWEB = os.fspath(EXPOWEB) THREEDCACHEDIR = os.fspath(THREEDCACHEDIR) DRAWINGS_DATA = os.fspath(DRAWINGS_DATA) SURVEX_DATA = os.fspath(SURVEX_DATA) REPOS_ROOT_PATH = os.fspath(REPOS_ROOT_PATH) TEMPLATE_PATH = os.fspath(TROGGLE_PATH) MEDIA_ROOT = os.fspath(MEDIA_ROOT) JSLIB_ROOT = os.fspath(JSLIB_ROOT) SURVEY_SCANS = os.fspath(SURVEY_SCANS)