settings: use toml configuration files

We replace the current environment variable based configuration approach by
reading all local configuration from a `settings.toml` configuration file.
The docker test, development and production setups have been updated to use
the new setup.

The configuration folder also allows overriding every template in a
`config/templates` directory. We use this in a follow-up to move
all local specific templates, e.g. the registration form, into this
config directory.
toml-configuration-with-templates
Christian Merten 11 months ago
parent 8a9cdc22d1
commit 6ffa2376b8
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

8
.gitignore vendored

@ -106,9 +106,6 @@ jdav_web/my.cnf
# sass cache
jdav_web/static/jet/css/themes/*/.sass-cache/*
# test config
config
# celerybeat schedule database
jdav_web/celerybeat-schedule.db
@ -125,6 +122,11 @@ docker/development/media
docker/production/media
docker/test/media
# configuration folders
docker/development/config/*
!docker/development/config/settings.toml.example
docker/production/config
*.csv
jdav_web/static/docs

@ -0,0 +1,67 @@
[section]
name = "Town"
street = "Street 12"
town = "12345 Town"
telephone = "123456789"
telefax = "987654321"
contact_mail = "contact@jdav-town.de"
board_mail = "board@jdav-town.de"
crisis_intervention_mail = "crisis@jdav-town.de"
iban = "DE42 4242 4242 4242 4242 42"
account_holder = "DAV Town"
responsible_mail = "responsible@jdav-town.de"
digital_mail = "digital@jdav-town.de"
admins = [['Admin', 'admin@jdav-town.de']]
[LJP]
v32_head_organisation = """
LJP application recipient header
"""
[misc]
allowed_email_domains_for_invite_as_user = ['alpenverein-town.de']
send_from_association_email = true
domain = 'jdav-town.de'
[finance]
allowance_per_day = 22
max_night_cost = 11
[links]
cloud = "https://nextcloud.com"
dav_360 = "https://dav360.de"
wiki = "https://wikipedia.org"
docs = "https://jdav-hd.de/static/docs"
registration_form = "download-me"
[startpage]
redirect_url = ''
root_section = 'root section'
recent_section = 'aktuelles'
reports_section = 'berichte'
[django]
deployed = true
debug = true
secret_key = '6_ew6l1r9_4(8=p8quv(e8b+z+k+*wm7&zxx%mcnnec99a!lpw'
allowed_hosts = ['*']
protocol = 'http'
base_url = 'localhost:8000'
host = ''
static_root = '/var/www/jdav_web/assets'
broker_url = 'redis://redis:6379/0'
memcached_url = 'cache:11211'
[mail]
host = 'jdav-town.de'
user = 'user@jdav-town.de'
password = 'password'
default_sending_address = 'info@jdav-town.de'
default_sending_name = 'JDAV Town'
[database]
host = 'db'
port = 3306
database = 'kompass'
user = 'kompass'
password = 'foobar'

@ -8,6 +8,9 @@ x-kompass:
UID: ${UID}
GID: ${UID}
USER: ${USER}
environment:
- KOMPASS_CONFIG_DIR_PATH=/app/config/
- DJANGO_SETTINGS_MODULE=jdav_web.settings
env_file: docker.env
restart: always
depends_on:
@ -25,6 +28,7 @@ services:
- ./../../jdav_web:/app/jdav_web
- ./../../docs:/app/docs
- ./media:/app/media
- ./config:/app/config:ro
ports:
- "8000:8000"

@ -1,33 +1,4 @@
DJANGO_ALLOWED_HOST='*'
DJANGO_BASE_URL='localhost:8000'
DJANGO_PROTOCOL='http'
EMAIL_HOST='example.com'
EMAIL_HOST_USER='foo@example.com'
EMAIL_HOST_PASSWORD='password'
EMAIL_SENDING_ADDRESS='foo@example.com'
EMAIL_SENDING_NAME='My association'
DOMAIN='example.com'
DJANGO_DEPLOY=1
DJANGO_DEBUG=1
DJANGO_DATABASE_NAME='kompass'
DJANGO_DATABASE_USER='kompass'
DJANGO_DATABASE_PASSWORD='foobar'
DJANGO_DATABASE_HOST='db'
DJANGO_DATABASE_PORT=3306
MYSQL_ROOT_PASSWORD='secret'
MYSQL_PASSWORD='foobar'
MYSQL_USER='kompass'
MYSQL_DATABASE='kompass'
DJANGO_SETTINGS_MODULE='jdav_web.settings'
DJANGO_STATIC_ROOT='/var/www/jdav_web/assets'
MEMCACHED_URL='cache:11211'
BROKER_URL='redis://redis:6379/0'
SEND_FROM_ASSOCIATION_EMAIL=0

@ -2,6 +2,9 @@ x-kompass:
&kompass
image: kompass:production
env_file: docker.env
environment:
- DJANGO_SETTINGS_MODULE=jdav_web.settings
- KOMPASS_CONFIG_DIR_PATH=/app/config/
restart: always
depends_on:
- redis
@ -19,6 +22,7 @@ services:
- web_static:/app/static/
- web_static:/var/www/jdav_web/static/
- ./media:/var/www/jdav_web/media/
- ./config:/app/config:ro
nginx:
build: ./nginx/
@ -43,10 +47,14 @@ services:
celery_worker:
<<: *kompass
entrypoint: /app/docker/production/entrypoint-celery-worker.sh
volumes:
- ./config:/app/config:ro
celery_beat:
<<: *kompass
entrypoint: /app/docker/production/entrypoint-celery-beat.sh
volumes:
- ./config:/app/config:ro
volumes:
uwsgi_data:

@ -0,0 +1,31 @@
[testing]
mail = "test@localhost"
[django]
deployed = true
debug = true
secret_key = '6_ew6l1r9_4(8=p8quv(e8b+z+k+*wm7&zxx%mcnnec99a!lpw'
allowed_hosts = ['*']
protocol = 'http'
base_url = 'localhost:8000'
host = 'localhost'
static_root = '/var/www/jdav_web/assets'
broker_url = 'redis://redis:6379/0'
memcached_url = 'cache:11211'
[mail]
host = 'localhost'
user = 'test'
password = 'password'
default_sending_address = 'test@localhost'
[database]
host = 'db'
port = 3306
database = 'kompass'
user = 'kompass'
password = 'password'
[startpage]
recent_section = 'aktuelles'
reports_section = 'berichte'

@ -8,6 +8,8 @@ services:
dockerfile: docker/test/Dockerfile
env_file: docker.env
environment:
- KOMPASS_CONFIG_DIR_PATH=/app/config/
- DJANGO_SETTINGS_MODULE=jdav_web.settings
- DJANGO_TEST_KEEPDB=$DJANGO_TEST_KEEPDB
depends_on:
- redis
@ -15,6 +17,7 @@ services:
- db
entrypoint: /app/docker/test/entrypoint-master.sh
volumes:
- ./config:/app/config:ro
- type: bind
source: ./htmlcov/
target: /app/jdav_web/htmlcov/

@ -1,28 +1,4 @@
DJANGO_ALLOWED_HOST='*'
DJANGO_BASE_URL='localhost:8000'
DJANGO_PROTOCOL='http'
EMAIL_HOST='localhost'
EMAIL_HOST_USER='test'
EMAIL_HOST_PASSWORD='password'
EMAIL_SENDING_ADDRESS='test@localhost'
DJANGO_DEPLOY=1
DJANGO_DEBUG=1
DJANGO_DATABASE_NAME='kompass'
DJANGO_DATABASE_USER='kompass'
DJANGO_DATABASE_PASSWORD='password'
DJANGO_DATABASE_HOST='db'
DJANGO_DATABASE_PORT=3306
MYSQL_ROOT_PASSWORD='secretpassword'
MYSQL_PASSWORD='password'
MYSQL_USER='kompass'
MYSQL_DATABASE='kompass'
DJANGO_SETTINGS_MODULE='jdav_web.settings'
DJANGO_STATIC_ROOT='/var/www/jdav_web/assets'
MEMCACHED_URL='cache:11211'
BROKER_URL='redis://redis:6379/0'

@ -12,6 +12,42 @@ https://docs.djangoproject.com/en/1.10/ref/settings/
from split_settings.tools import optional, include
import os
import tomli
CONFIG_DIR_PATH = os.environ.get('KOMPASS_CONFIG_DIR_PATH', '')
SETTINGS_FILE = os.environ.get('KOMPASS_SETTINGS_FILE', 'settings.toml')
TEXTS_FILE = os.environ.get('KOMPASS_TEXTS_FILE', 'texts.toml')
with open(os.path.join(CONFIG_DIR_PATH, SETTINGS_FILE), 'rb') as f:
config = tomli.load(f)
if os.path.exists(os.path.join(CONFIG_DIR_PATH, TEXTS_FILE)):
with open(os.path.join(CONFIG_DIR_PATH, TEXTS_FILE), 'rb') as f:
texts = tomli.load(f)
else:
texts = {}
def get_var(*keys, default='', dictionary=config):
"""
Get a variable from given config dictionary. The passed keys are used
for nested retrieval from the dictionary.
"""
cfg = dictionary
for key in keys:
if key not in cfg:
return default
else:
cfg = cfg[key]
return cfg
def get_text(*keys, default=''):
"""
Get a text from the `texts.toml`.
"""
return get_var(*keys, default=default, dictionary=texts)
base_settings = [
'local.py',

@ -1,26 +1,25 @@
deployed = '1' == os.environ.get('DJANGO_DEPLOY', '0')
deployed = get_var('django', 'deployed', default=False)
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY',
'6_ew6l1r9_4(8=p8quv(e8b+z+k+*wm7&zxx%mcnnec99a!lpw')
SECRET_KEY = get_var('django', 'secret_key', default='secret')
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = os.environ.get('DJANGO_DEBUG', '1') == '1'
DEBUG = get_var('django', 'debug', default=True)
ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOST', '').split(",")
ALLOWED_HOSTS = get_var('django', 'allowed_hosts', default=["*"])
# hostname and base url
HOST = os.environ.get('DJANGO_ALLOWED_HOST', 'localhost:8000').split(",")[0]
PROTOCOL = os.environ.get('DJANGO_PROTOCOL', 'https')
BASE_URL = os.environ.get('DJANGO_BASE_URL', HOST)
HOST = get_var('django', 'host', default='localhost:8000')
PROTOCOL = get_var('django', 'protocol', default='https')
BASE_URL = get_var('django', 'base_url', default=HOST)
# Define media paths e.g. for image storage
MEDIA_URL = '/media/'
MEDIA_ROOT = os.environ.get('DJANGO_MEDIA_ROOT',
os.path.join((os.path.join(BASE_DIR, os.pardir)), "media"))
MEDIA_ROOT = get_var('django', 'media_root',
default=os.path.join((os.path.join(BASE_DIR, os.pardir)), "media"))
MEDIA_MEMBERLISTS = os.path.join((os.path.join(BASE_DIR, os.pardir)), "media")
# default primary key auto field type
@ -83,7 +82,8 @@ ROOT_URLCONF = 'jdav_web.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'DIRS': [os.path.join(CONFIG_DIR_PATH, 'templates'),
os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
@ -131,8 +131,7 @@ STATICFILES_DIRS = [
# static root where all the static files are collected to
# use python3 manage.py collectstatic to collect static files in the STATIC_ROOT
# this is needed for deployment
STATIC_ROOT = os.environ.get('DJANGO_STATIC_ROOT',
'/var/www/jdav_web/static')
STATIC_ROOT = get_var('django', 'static_root', default='/var/www/jdav_web/static')
# Locale files (translations)
@ -140,7 +139,7 @@ STATIC_ROOT = os.environ.get('DJANGO_STATIC_ROOT',
LOCALE_PATHS = (os.path.join(BASE_DIR, 'locale'),)
# Celery and Redis setup
BROKER_URL = os.environ.get('BROKER_URL', 'redis://localhost:6379/0')
BROKER_URL = get_var('django', 'broker_url', default='redis://localhost:6379/0')
# password hash algorithms used
@ -194,3 +193,6 @@ MARKDOWNIFY = {
# allowed characters in names appearing in urls on the website
STARTPAGE_URL_NAME_PATTERN = "[\w\-: *]"
# admins to contact on error messages
ADMINS = get_var('section', 'admins', default=[])

@ -1,7 +1,7 @@
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache',
'LOCATION': os.environ.get('MEMCACHED_URL', '127.0.0.1:11211'),
'LOCATION': get_var('django', 'memcached_url', default='127.0.0.1:11211'),
'OPTIONS': {
'no_delay': True,
'ignore_exc': True,

@ -4,11 +4,11 @@
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ.get('DJANGO_DATABASE_NAME', 'jdav_db'),
'USER': os.environ.get('DJANGO_DATABASE_USER', 'jdav_user'),
'PASSWORD': os.environ.get('DJANGO_DATABASE_PASSWORD', 'jdav00jdav'),
'HOST': os.environ.get('DJANGO_DATABASE_HOST', '127.0.0.1'),
'PORT': os.environ.get('DJANGO_DATABASE_PORT', '5432')
'NAME': get_var('database', 'database', default='jdav_db'),
'USER': get_var('database', 'user', default='user'),
'PASSWORD': get_var('database', 'password', default='secret'),
'HOST': get_var('database', 'host', default='127.0.0.1'),
'PORT': get_var('database', 'port', default=5432)
}
}

@ -1,10 +1,10 @@
# Email setup
EMAIL_HOST = os.environ.get('EMAIL_HOST', 'localhost')
EMAIL_PORT = 587 if deployed else 25
EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER', '')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD', '')
EMAIL_USE_TLS = True if deployed else False
EMAIL_HOST = get_var('mail', 'host', default='localhost')
EMAIL_PORT = get_var('mail', 'port', default=587 if deployed else 25)
EMAIL_HOST_USER = get_var('mail', 'user', default='user')
EMAIL_HOST_PASSWORD = get_var('mail', 'password', default='secret')
EMAIL_USE_TLS = get_var('mail', 'tls', default=True if deployed else False)
EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'
# Celery Email Setup
@ -13,5 +13,5 @@ CELERY_EMAIL_TASK_CONFIG = {
'rate_limit' : '10/m' # * CELERY_EMAIL_CHUNK_SIZE (default: 10)
}
DEFAULT_SENDING_MAIL = os.environ.get('EMAIL_SENDING_ADDRESS', 'django@localhost')
DEFAULT_SENDING_NAME = os.environ.get('EMAIL_SENDING_NAME', 'Kompass')
DEFAULT_SENDING_MAIL = get_var('mail', 'default_sending_address', default='kompass@localhost')
DEFAULT_SENDING_NAME = get_var('mail', 'default_sending_name', default='Kompass')

@ -1,6 +1,6 @@
# mail texts
CONFIRM_MAIL_TEXT = """Hallo {name},
CONFIRM_MAIL_TEXT = get_text('confirm_mail', default="""Hallo {name},
du hast bei der JDAV %(SEKTION)s eine E-Mail Adresse hinterlegt. Da bei uns alle Kommunikation
per Email funktioniert, brauchen wir eine Bestätigung {whattoconfirm}. Dazu klicke bitte einfach auf
@ -9,9 +9,9 @@ folgenden Link:
{link}
Viele Grüße
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION }
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION })
NEW_UNCONFIRMED_REGISTRATION = """Hallo {name},
NEW_UNCONFIRMED_REGISTRATION = get_text('new_unconfirmed_registration', default="""Hallo {name},
für deine Gruppe {group} liegt eine neue unbestätigte Reservierung vor. Die Person hat bereits ihre
E-Mailadressen bestätigt und ihr Anmeldeformular hochgeladen. Bitte prüfe die Registrierung eingehend und
@ -20,13 +20,15 @@ bestätige falls möglich. Zu der Registrierung kommst du hier:
{link}
Viele Grüße
Dein KOMPASS"""
Dein KOMPASS""")
GROUP_TIME_AVAILABLE_TEXT = """Die Gruppenstunde findet jeden {weekday} von {start_time} bis {end_time} Uhr statt."""
GROUP_TIME_AVAILABLE_TEXT = get_text('group_time_available',
default="""Die Gruppenstunde findet jeden {weekday} von {start_time} bis {end_time} Uhr statt.""")
GROUP_TIME_UNAVAILABLE_TEXT = """Bitte erfrage die Gruppenzeiten bei der Gruppenleitung ({contact_email})."""
GROUP_TIME_UNAVAILABLE_TEXT = get_text('group_time_unavailable',
default="""Bitte erfrage die Gruppenzeiten bei der Gruppenleitung ({contact_email}).""")
INVITE_TEXT = """Hallo {{name}},
INVITE_TEXT = get_text('invite', default="""Hallo {{name}},
wir haben gute Neuigkeiten für dich. Es ist ein Platz in der Jugendgruppe {group_name} {group_link}freigeworden.
{group_time}
@ -50,10 +52,10 @@ Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s.
Viele Grüße
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL,
'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK }
'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK })
LEAVE_WAITINGLIST_TEXT = """Hallo {name},
LEAVE_WAITINGLIST_TEXT = get_text('leave_waitinglist', default="""Hallo {name},
du hast dich erfolgreich von der Warteliste abgemeldet. Falls du zu einem späteren
Zeitpunkt wieder der Warteliste beitreten möchtest, kannst du das über unsere Webseite machen.
@ -61,10 +63,10 @@ Zeitpunkt wieder der Warteliste beitreten möchtest, kannst du das über unsere
Falls du dich nicht selbst abgemeldet hast, wende dich bitte umgehend an %(RESPONSIBLE_MAIL)s.
Viele Grüße
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL })
WAIT_CONFIRMATION_TEXT = """Hallo {name},
WAIT_CONFIRMATION_TEXT = get_text('wait_confirmation', default="""Hallo {name},
leider können wir dir zur Zeit noch keinen Platz in einer Jugendgruppe anbieten. Da wir
sehr viele Interessenten haben und wir möglichst vielen die Möglichkeit bieten möchten, an
@ -79,15 +81,15 @@ Das ist Erinnerung Nummer {reminder} von {max_reminder_count}. Nach Erinnerung N
du automatisch entfernt.
Viele Grüße
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION }
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION })
UNSUBSCRIBE_CONFIRMATION_TEXT = """Klicke auf den Link, um dich vom Newsletter der JDAV %(SEKTION)s abzumelden
UNSUBSCRIBE_CONFIRMATION_TEXT = get_text('unsubscribe_confirmation', default="""Klicke auf den Link, um dich vom Newsletter der JDAV %(SEKTION)s abzumelden
{link}""" % { 'SEKTION': SEKTION }
{link}""" % { 'SEKTION': SEKTION })
NOTIFY_MOST_ACTIVE_TEXT = """Hallo {name}!
NOTIFY_MOST_ACTIVE_TEXT = get_text('notify_most_active', default="""Hallo {name}!
Herzlichen Glückwunsch, du hast im letzten Jahr zu den {congratulate_max} aktivsten
Mitgliedern der JDAV %(SEKTION)s gehört! Um genau zu sein beträgt dein Aktivitäts Wert
@ -97,10 +99,10 @@ im letzten Jahr das {position}aktivste Mitglied der JDAV %(SEKTION)s.
Auf ein weiteres aktives Jahr in der JDAV %(SEKTION)s.
Dein:e Jugendreferent:in""" % { 'SEKTION': SEKTION }
Dein:e Jugendreferent:in""" % { 'SEKTION': SEKTION })
ECHO_TEXT = """Hallo {name},
ECHO_TEXT = get_text('echo', default="""Hallo {name},
um unsere Daten auf dem aktuellen Stand zu halten und sicherzugehen, dass du
weiterhin ein Teil unserer Jugendarbeit bleiben möchtest, brauchen wir eine
@ -119,10 +121,10 @@ gelöscht und du erhälst in Zukunft keine Mails mehr von uns.
Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s.
Viele Grüße
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL })
PREPEND_INCOMPLETE_REGISTRATION_TEXT = """WICHTIGE MITTEILUNG
PREPEND_INCOMPLETE_REGISTRATION_TEXT = get_text('prepend_incomplete_registration', default="""WICHTIGE MITTEILUNG
Deine Anmeldung ist aktuell nicht vollständig. Bitte fülle umgehend das
Anmeldeformular aus und lasse es Deine*r Jugendleiter*in zukommen! Dieses
@ -132,10 +134,10 @@ kannst Du unter folgendem Link herunterladen:
****************
""" % { 'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK }
""" % { 'REGISTRATION_FORM_DOWNLOAD_LINK': REGISTRATION_FORM_DOWNLOAD_LINK })
MAIL_FOOTER = """
MAIL_FOOTER = get_text('mail_footer', default="""
****************
@ -144,10 +146,10 @@ Diese Email wurde über die Webseite der JDAV %(SEKTION)s
verschickt. Wenn Du in Zukunft keine Emails mehr erhalten möchtest,
kannst Du hier den Newsletter deabonnieren:
{link}""" % { 'SEKTION': SEKTION }
{link}""" % { 'SEKTION': SEKTION })
INVITE_AS_USER_TEXT = """Hallo {name},
INVITE_AS_USER_TEXT = get_text('invite_as_user', default="""Hallo {name},
du bist Jugendleiter*in in der Sektion %(SEKTION)s. Die Verwaltung unserer Jugendgruppen,
Ausfahrten und Finanzen erfolgt in unserer Online Plattform Kompass. Deine Stammdaten sind
@ -159,10 +161,10 @@ und wähle ein Passwort.
Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s.
Viele Grüße
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL })
UPLOAD_REGISTRATION_FORM_TEXT = """Hallo {name},
UPLOAD_REGISTRATION_FORM_TEXT = get_text('upload_registration_form', default="""Hallo {name},
vielen Dank für deine Anmeldung in der JDAV %(SEKTION)s. Bevor es richtig losgehen kann, brauchen
wir noch die Bestätigung deiner Daten und die Zustimmung zu unseren Teilnahmebedingungen.
@ -177,9 +179,9 @@ Bist du noch nicht volljährig? Dann muss eine erziehungsberechtigte Person das
Bei Fragen, wende dich gerne an %(RESPONSIBLE_MAIL)s.
Viele Grüße
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL }
Deine JDAV %(SEKTION)s""" % { 'SEKTION': SEKTION, 'RESPONSIBLE_MAIL': RESPONSIBLE_MAIL })
ADDRESS = """JDAV %(SEKTION)s
ADDRESS = get_text('address', default="""JDAV %(SEKTION)s
%(STREET)s
%(PLACE)s""" % { 'SEKTION': SEKTION, 'STREET': SEKTION_STREET, 'PLACE': SEKTION_TOWN }
%(PLACE)s""" % { 'SEKTION': SEKTION, 'STREET': SEKTION_STREET, 'PLACE': SEKTION_TOWN })

@ -1,75 +1,74 @@
# contact data
SEKTION = "Heidelberg"
SEKTION_STREET = "Harbigweg 20"
SEKTION_TOWN = "69124 Heidelberg"
SEKTION_TELEPHONE = "06221 284076"
SEKTION_TELEFAX = "06221 437338"
SEKTION_CONTACT_MAIL = "geschaeftsstelle@alpenverein-heidelberg.de"
SEKTION_BOARD_MAIL = "vorstand@alpenverein-heidelberg.de"
SEKTION_CRISIS_INTERVENTION_MAIL = "krisenmanagement@alpenverein-heidelberg.de"
SEKTION_IBAN = "DE22 6729 0000 0000 1019 40"
SEKTION_ACCOUNT_HOLDER = "Deutscher Alpenverein Sektion Heidelberg 1869"
RESPONSIBLE_MAIL = "jugendreferat@jdav-hd.de"
DIGITAL_MAIL = "digitales@jdav-hd.de"
SEKTION = get_var('section', 'name', default='Heyo')
SEKTION_STREET = get_var('section', 'street', default='Street')
SEKTION_TOWN = get_var('section', 'town', default='12345 Town')
SEKTION_TELEPHONE = get_var('section', 'telephone', default='0123456789')
SEKTION_TELEFAX = get_var('section', 'telefax', default=SEKTION_TELEPHONE)
SEKTION_CONTACT_MAIL = get_var('section', 'contact_mail', default='info@example.org')
SEKTION_BOARD_MAIL = get_var('section', 'board_mail', default=SEKTION_CONTACT_MAIL)
SEKTION_CRISIS_INTERVENTION_MAIL = get_var('section', 'crisis_intervention_mail',
default=SEKTION_BOARD_MAIL)
SEKTION_IBAN = get_var('section', 'iban', default='Foo 123')
SEKTION_ACCOUNT_HOLDER = get_var('section', 'account_holder',
default='Foo')
RESPONSIBLE_MAIL = get_var('section', 'responsible_mail', default='foo@example.org')
DIGITAL_MAIL = get_var('section', 'digital_mail', default='bar@example.org')
# LJP
V32_HEAD_ORGANISATION = """JDAV Baden-Württemberg
Rotebühlstraße 59A
70178 Stuttgart
info@jdav-bw.de
0711 - 49 09 46 00"""
LJP_CONTRIBUTION_PER_DAY = 25
V32_HEAD_ORGANISATION = get_var('LJP', 'v32_head_organisation', default='not configured')
LJP_CONTRIBUTION_PER_DAY = get_var('LJP', 'contribution_per_day', default=25)
# echo
ECHO_PASSWORD_BIRTHDATE_FORMAT = '%d.%m.%Y'
ECHO_GRACE_PERIOD = 30
# used to generate the personalized echo password
ECHO_PASSWORD_BIRTHDATE_FORMAT = get_var('echo', 'password_birthdate_format', default='%d.%m.%Y')
# grace period in days after which echo keys expire
ECHO_GRACE_PERIOD = get_var('echo', 'grace_period', default=30)
# misc
# Waiting list configuration parameters, all numbers are in days
CONGRATULATE_MEMBERS_MAX = 10
MAX_AGE_GOOD_CONDUCT_CERTIFICATE_MONTHS = 24
ALLOWED_EMAIL_DOMAINS_FOR_INVITE_AS_USER = ('alpenverein-heidelberg.de', )
GRACE_PERIOD_WAITING_CONFIRMATION = get_var('waitinglist', 'grace_period_confirmation', default=30)
WAITING_CONFIRMATION_FREQUENCY = get_var('waitinglist', 'confirmation_frequency', default=90)
CONFIRMATION_REMINDER_FREQUENCY = get_var('waitinglist', 'confirmation_reminder_frequency', default=30)
MAX_REMINDER_COUNT = get_var('waitinglist', 'max_reminder_count', default=3)
# mail mode
# misc
SEND_FROM_ASSOCIATION_EMAIL = os.environ.get('SEND_FROM_ASSOCIATION_EMAIL', '0') == '1'
# the maximal number of members that get sent congratulations for highest activity on aprils fools day
CONGRATULATE_MEMBERS_MAX = get_var('misc', 'congratulate_members_max', default=10)
# expiry duration of a good conduct certificate in months
MAX_AGE_GOOD_CONDUCT_CERTIFICATE_MONTHS = get_var('misc', 'max_age_good_conduct_certificate_months', default=24)
# accepted email domains for inviting users
ALLOWED_EMAIL_DOMAINS_FOR_INVITE_AS_USER = get_var('misc', 'allowed_email_domains_for_invite_as_user',
default=['example.org'])
# send all mails from the assocation's contact mail or from personal association mails
SEND_FROM_ASSOCIATION_EMAIL = get_var('misc', 'send_from_association_email', default=False)
# domain for association email and generated urls
DOMAIN = get_var('misc', 'domain', default='example.org')
# finance
ALLOWANCE_PER_DAY = 22
MAX_NIGHT_COST = 11
ALLOWANCE_PER_DAY = get_var('finance', 'allowance_per_day', default=22)
MAX_NIGHT_COST = get_var('finance', 'max_night_cost', default=11)
CLOUD_LINK = os.environ.get('CLOUD_LINK', 'https://startpage.com')
DAV_360_LINK = os.environ.get('DAV_360_LINK', 'https://dav360.de')
WIKI_LINK = os.environ.get('WIKI_LINK', 'https://wikipedia.org')
DOCS_LINK = os.environ.get('DOCS_LINK', 'https://jdav-hd.de/static/docs/')
# links
# Admin setup
CLOUD_LINK = get_var('links', 'cloud', default='https://startpage.com')
DAV_360_LINK = get_var('links', 'dav_360', default='https://dav360.de')
WIKI_LINK = get_var('links', 'wiki', default='https://wikipedia.org')
DOCS_LINK = get_var('links', 'docs', default='https://github.com/chrisflav/kompass')
REGISTRATION_FORM_DOWNLOAD_LINK = get_var('links', 'registration_form', default='https://startpage.com')
ADMINS = (('admin', 'christian@merten-moser.de'),)
# startpage
# Waiting list configuration parameters, all numbers are in days
GRACE_PERIOD_WAITING_CONFIRMATION = 30
WAITING_CONFIRMATION_FREQUENCY = 90
CONFIRMATION_REMINDER_FREQUENCY = 30
MAX_REMINDER_COUNT = 3
STARTPAGE_REDIRECT_URL = get_var('startpage', 'redirect_url', default='')
ROOT_SECTION = get_var('startpage', 'root_section', default='about')
RECENT_SECTION = get_var('startpage', 'recent_section', default='recent')
REPORTS_SECTION = get_var('startpage', 'reports_section', default='reports')
# testing
TEST_MAIL = "post@flavigny.de"
REGISTRATION_FORM_DOWNLOAD_LINK = os.environ.get('REGISTRATION_FORM_DOWNLOAD_LINK', 'https://startpage.com')
DOMAIN = os.environ.get('DOMAIN', 'example.com')
STARTPAGE_REDIRECT_URL = 'https://jdav-hd.de'
ROOT_SECTION = os.environ.get('ROOT_SECTION', 'wir')
RECENT_SECTION = 'aktuelles'
REPORTS_SECTION = 'berichte'
TEST_MAIL = get_var('testing', 'mail', default='test@localhost')

Loading…
Cancel
Save