diff --git a/CHANGES.rst b/CHANGES.rst index 4ffe95ea..07feaf68 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,21 @@ +Next Release +============ + + +Introduce configuration value for status email recipient. + +- The previously existing configuation option c3smembership.mailaddr is + renamed to c3smembership.notification_sender. The notification sender email + address is used for sending emails like the email address confirmation + link, the membership certificate and dues invoices. + +- The status receiver email address option c3smembership.status_receiver is + used as a recipient for status emails send by the membership application + like the new application email which informs the staff that a new + application was submitted. + + + 1.24.1 ====== diff --git a/c3smembership/business/membership_application.py b/c3smembership/business/membership_application.py index 39755d80..ffdb3e90 100644 --- a/c3smembership/business/membership_application.py +++ b/c3smembership/business/membership_application.py @@ -142,7 +142,8 @@ def mail_signature_confirmation(self, member_id, request): email_subject, email_body = _make_signature_confirmation_email(member) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body ) diff --git a/c3smembership/business/tests/test_membership_application.py b/c3smembership/business/tests/test_membership_application.py index cd2a0fb2..2e8feca9 100644 --- a/c3smembership/business/tests/test_membership_application.py +++ b/c3smembership/business/tests/test_membership_application.py @@ -158,7 +158,7 @@ def test_mail_signature_confirmation(self): pyramid_request_mock = mock.Mock() pyramid_request_mock.registry.settings = { - 'c3smembership.mailaddr': 'test@example.com'} + 'c3smembership.notification_sender': 'test@example.com'} membership_application.mail_signature_confirmation( 'member id', diff --git a/c3smembership/presentation/views/dues_2015.py b/c3smembership/presentation/views/dues_2015.py index bdee13fa..5e6e2070 100644 --- a/c3smembership/presentation/views/dues_2015.py +++ b/c3smembership/presentation/views/dues_2015.py @@ -257,7 +257,8 @@ def send_dues15_invoice_email(request, m_id=None): start_quarter) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -270,7 +271,8 @@ def send_dues15_invoice_email(request, m_id=None): make_dues_invoice_investing_email(member) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -734,7 +736,8 @@ def dues15_reduction(request): message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) diff --git a/c3smembership/presentation/views/dues_2016.py b/c3smembership/presentation/views/dues_2016.py index bc7e1152..d3f2f58b 100644 --- a/c3smembership/presentation/views/dues_2016.py +++ b/c3smembership/presentation/views/dues_2016.py @@ -260,7 +260,8 @@ def send_dues16_invoice_email(request, m_id=None): start_quarter) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -273,7 +274,8 @@ def send_dues16_invoice_email(request, m_id=None): make_dues_invoice_investing_email(member) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -791,7 +793,8 @@ def dues16_reduction(request): message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) diff --git a/c3smembership/presentation/views/dues_2017.py b/c3smembership/presentation/views/dues_2017.py index f46e3809..c12681f5 100644 --- a/c3smembership/presentation/views/dues_2017.py +++ b/c3smembership/presentation/views/dues_2017.py @@ -267,7 +267,8 @@ def send_dues17_invoice_email(request, m_id=None): start_quarter) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -280,7 +281,8 @@ def send_dues17_invoice_email(request, m_id=None): make_dues_invoice_investing_email(member) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -801,7 +803,8 @@ def dues17_reduction(request): message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) diff --git a/c3smembership/presentation/views/dues_2018.py b/c3smembership/presentation/views/dues_2018.py index 53ad31ca..c5cd7d86 100644 --- a/c3smembership/presentation/views/dues_2018.py +++ b/c3smembership/presentation/views/dues_2018.py @@ -285,7 +285,8 @@ def send_dues18_invoice_email(request, m_id=None): start_quarter) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -298,7 +299,8 @@ def send_dues18_invoice_email(request, m_id=None): make_dues_invoice_investing_email(member) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -795,7 +797,8 @@ def dues18_reduction(request): message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) diff --git a/c3smembership/presentation/views/general_assembly.py b/c3smembership/presentation/views/general_assembly.py index 5565a11e..0e7070da 100644 --- a/c3smembership/presentation/views/general_assembly.py +++ b/c3smembership/presentation/views/general_assembly.py @@ -143,7 +143,7 @@ def invite_member_bcgv(request): email_subject, email_body = make_bcga18_invitation_email(member, url) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings['c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -204,7 +204,8 @@ def batch_invite(request): email_subject, email_body = make_bcga18_invitation_email(member, url) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) diff --git a/c3smembership/presentation/views/join.py b/c3smembership/presentation/views/join.py index 0600589e..01490982 100644 --- a/c3smembership/presentation/views/join.py +++ b/c3smembership/presentation/views/join.py @@ -537,7 +537,7 @@ def make_random_string(): send_mail_confirmation_mail( member, request.registry.settings['c3smembership.url'], - request.registry.settings['c3smembership.mailaddr'], + request.registry.settings['c3smembership.notification_sender'], request.registry.get_mailer(request), request.localizer, request.registry.settings['testing.mail_to_console']) diff --git a/c3smembership/presentation/views/membership_acquisition.py b/c3smembership/presentation/views/membership_acquisition.py index 0eba55bc..f38d962a 100644 --- a/c3smembership/presentation/views/membership_acquisition.py +++ b/c3smembership/presentation/views/membership_acquisition.py @@ -296,7 +296,7 @@ def mail_payment_confirmation(request): email_subject, email_body = make_payment_confirmation_email(member) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings['c3smembership.notification_sender'], recipients=[member.email], body=email_body, ) @@ -339,7 +339,7 @@ def mail_signature_reminder(request): email_subject, email_body = make_signature_reminder_email(member) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings['c3smembership.notification_sender'], recipients=[member.email], body=email_body ) @@ -380,7 +380,7 @@ def mail_payment_reminder(request): email_subject, email_body = make_payment_reminder_email(member) message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings['c3smembership.notification_sender'], recipients=[member.email], body=email_body ) @@ -420,7 +420,7 @@ def mail_mail_conf(request): send_mail_confirmation_mail( member, request.registry.settings['c3smembership.url'], - request.registry.settings['c3smembership.mailaddr'], + request.registry.settings['c3smembership.notification_sender'], request.registry.get_mailer(request), request.localizer, request.registry.settings['testing.mail_to_console']) diff --git a/c3smembership/presentation/views/membership_certificate.py b/c3smembership/presentation/views/membership_certificate.py index d7d850f1..462311d9 100644 --- a/c3smembership/presentation/views/membership_certificate.py +++ b/c3smembership/presentation/views/membership_certificate.py @@ -76,7 +76,7 @@ def send_certificate_email(request): the_message = Message( subject=email_subject, - sender=request.registry.settings['c3smembership.mailaddr'], + sender=request.registry.settings['c3smembership.notification_sender'], recipients=[member.email], body=email_body ) diff --git a/c3smembership/presentation/views/staff.py b/c3smembership/presentation/views/staff.py index 5892c562..51d856be 100644 --- a/c3smembership/presentation/views/staff.py +++ b/c3smembership/presentation/views/staff.py @@ -77,9 +77,10 @@ class Staffer(colander.MappingSchema): authenticated_userid(request))) message = Message( subject='[C3S Yes] staff was deleted.', - sender=request.registry.settings['c3smembership.mailaddr'], - recipients=[ - request.registry.settings['c3smembership.mailaddr']], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], + recipients=[request.registry.settings[ + 'c3smembership.status_receiver']], body=encrypted ) mailer = get_mailer(request) @@ -115,9 +116,10 @@ class Staffer(colander.MappingSchema): authenticated_userid(request))) message = Message( subject='[C3S Yes] staff password changed.', - sender=request.registry.settings['c3smembership.mailaddr'], - recipients=[ - request.registry.settings['c3smembership.mailaddr']], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], + recipients=[request.registry.settings[ + 'c3smembership.status_receiver']], body=encrypted ) @@ -139,9 +141,10 @@ class Staffer(colander.MappingSchema): authenticated_userid(request))) message = Message( subject='[C3S Yes] staff was added.', - sender=request.registry.settings['c3smembership.mailaddr'], - recipients=[ - request.registry.settings['c3smembership.mailaddr']], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], + recipients=[request.registry.settings[ + 'c3smembership.status_receiver']], body=encrypted ) mailer = get_mailer(request) diff --git a/c3smembership/tests/test_general_assembly.py b/c3smembership/tests/test_general_assembly.py index 99b77cc3..649970fd 100644 --- a/c3smembership/tests/test_general_assembly.py +++ b/c3smembership/tests/test_general_assembly.py @@ -154,7 +154,7 @@ def setUp(self): self.config.registry.settings['c3smembership.url'] = 'http://foo.com' self.config.registry.settings['ticketing.url'] = 'http://bar.com' self.config.registry.settings['testing.mail_to_console'] = 'false' - self.config.registry.settings['c3smembership.mailaddr'] = \ + self.config.registry.settings['c3smembership.notification_sender'] = \ 'test@example.com' self.session = init_testing_db() diff --git a/c3smembership/tests/test_join.py b/c3smembership/tests/test_join.py index b52304ad..f1665920 100644 --- a/c3smembership/tests/test_join.py +++ b/c3smembership/tests/test_join.py @@ -70,7 +70,10 @@ def setUp(self): self.config.include('pyramid_mailer.testing') self.config.registry.settings[ 'c3smembership.url'] = 'https://yes.c3s.cc' - self.config.registry.settings['c3smembership.mailaddr'] = 'test@example.com' + self.config.registry.settings['c3smembership.notification_sender'] = \ + 'test@example.com' + self.config.registry.settings['c3smembership.status_receiver'] = \ + 'test@example.com' self.config.registry.settings['testing.mail_to_console'] = 'false' self.config.registry.get_mailer = get_mailer diff --git a/c3smembership/tests/test_mail_mail_confirmation.py b/c3smembership/tests/test_mail_mail_confirmation.py index fa0df851..50ce32da 100644 --- a/c3smembership/tests/test_mail_mail_confirmation.py +++ b/c3smembership/tests/test_mail_mail_confirmation.py @@ -76,7 +76,7 @@ def setUp(self): self.config = testing.setUp() self.config.include('pyramid_mailer.testing') self.config.registry.settings['c3smembership.url'] = 'http://foo.com' - self.config.registry.settings['c3smembership.mailaddr'] = \ + self.config.registry.settings['c3smembership.notification_sender'] = \ 'test@example.com' self.config.registry.settings['testing.mail_to_console'] = 'false' self.config.registry.get_mailer = get_mailer diff --git a/c3smembership/tests/test_membership_acquisition.py b/c3smembership/tests/test_membership_acquisition.py index 46f67016..f94f93df 100644 --- a/c3smembership/tests/test_membership_acquisition.py +++ b/c3smembership/tests/test_membership_acquisition.py @@ -78,7 +78,7 @@ def setUp(self): self.config.include('pyramid_mailer.testing') self.config.include('c3smembership.presentation.pagination') self.config.registry.settings['testing.mail_to_console'] = 'false' - self.config.registry.settings['c3smembership.mailaddr'] = \ + self.config.registry.settings['c3smembership.notification_sender'] = \ 'test@example.com' self.config.add_route('dashboard', '/') def dashboard_content_size_provider(filtering): diff --git a/c3smembership/tests/test_membership_application.py b/c3smembership/tests/test_membership_application.py index 19b2d257..9dab4982 100644 --- a/c3smembership/tests/test_membership_application.py +++ b/c3smembership/tests/test_membership_application.py @@ -60,7 +60,8 @@ def setUp(self): 'sqlalchemy.url': 'sqlite:///:memory:', 'api_auth_token': u"SECRETAUTHTOKEN", 'c3smembership.url': u'localhost', - 'c3smembership.mailaddr': u'test@example.com', + 'c3smembership.notification_sender': u'test@example.com', + 'c3smembership.status_receiver': u'test@example.com', 'testing.mail_to_console': u'false', } self.config = testing.setUp() diff --git a/c3smembership/tests/test_membership_certificate.py b/c3smembership/tests/test_membership_certificate.py index 4e2e2312..44bcdde7 100644 --- a/c3smembership/tests/test_membership_certificate.py +++ b/c3smembership/tests/test_membership_certificate.py @@ -108,7 +108,7 @@ def setUp(self): DBSession.remove() self.session = _initTestingDB() self.config.registry.settings['testing.mail_to_console'] = 'no' - self.config.registry.settings['c3smembership.mailaddr'] = \ + self.config.registry.settings['c3smembership.notification_sender'] = \ 'test@example.com' # set this to true to see mail bodies, but: # tests will fail: no mail in outbox diff --git a/c3smembership/tests/test_membership_dues_2015.py b/c3smembership/tests/test_membership_dues_2015.py index d1b44450..eb47b1b8 100644 --- a/c3smembership/tests/test_membership_dues_2015.py +++ b/c3smembership/tests/test_membership_dues_2015.py @@ -183,7 +183,7 @@ def setUp(self): self.config.include('pyramid_mailer.testing') self.config.registry.settings[ 'c3smembership.url'] = 'https://yes.c3s.cc' - self.config.registry.settings['c3smembership.mailaddr'] = \ + self.config.registry.settings['c3smembership.notification_sender'] = \ 'c@example.com' self.config.registry.settings['testing.mail_to_console'] = 'false' diff --git a/c3smembership/tests/test_membership_dues_2016.py b/c3smembership/tests/test_membership_dues_2016.py index 83180412..21ca5b10 100644 --- a/c3smembership/tests/test_membership_dues_2016.py +++ b/c3smembership/tests/test_membership_dues_2016.py @@ -183,7 +183,8 @@ def setUp(self): self.config.include('pyramid_mailer.testing') self.config.registry.settings[ 'c3smembership.url'] = 'https://yes.c3s.cc' - self.config.registry.settings['c3smembership.mailaddr'] = 'c@example.com' + self.config.registry.settings['c3smembership.notification_sender'] = \ + 'c@example.com' self.config.registry.settings['testing.mail_to_console'] = 'false' DBSession.remove() diff --git a/c3smembership/tests/test_membership_dues_2017.py b/c3smembership/tests/test_membership_dues_2017.py index 7d29bb99..d398ed62 100644 --- a/c3smembership/tests/test_membership_dues_2017.py +++ b/c3smembership/tests/test_membership_dues_2017.py @@ -183,7 +183,8 @@ def setUp(self): self.config.include('pyramid_mailer.testing') self.config.registry.settings[ 'c3smembership.url'] = 'https://yes.c3s.cc' - self.config.registry.settings['c3smembership.mailaddr'] = 'c@example.com' + self.config.registry.settings['c3smembership.notification_sender'] = \ + 'c@example.com' self.config.registry.settings['testing.mail_to_console'] = 'false' DBSession.remove() diff --git a/c3smembership/tests/test_membership_dues_2018.py b/c3smembership/tests/test_membership_dues_2018.py index 7a93cd05..ab7839c0 100644 --- a/c3smembership/tests/test_membership_dues_2018.py +++ b/c3smembership/tests/test_membership_dues_2018.py @@ -183,7 +183,8 @@ def setUp(self): self.config.include('pyramid_mailer.testing') self.config.registry.settings[ 'c3smembership.url'] = 'https://yes.c3s.cc' - self.config.registry.settings['c3smembership.mailaddr'] = 'c@example.com' + self.config.registry.settings['c3smembership.notification_sender'] = \ + 'c@example.com' self.config.registry.settings['testing.mail_to_console'] = 'false' DBSession.remove() diff --git a/c3smembership/tests/test_webtest.py b/c3smembership/tests/test_webtest.py index 0ea51ef5..9b7ed4d8 100644 --- a/c3smembership/tests/test_webtest.py +++ b/c3smembership/tests/test_webtest.py @@ -616,7 +616,7 @@ def setUp(self): # 'sqlalchemy.url': 'sqlite:///test_webtest_functional.db', 'sqlalchemy.url': 'sqlite:///:memory:', 'available_languages': 'da de en es fr', - 'c3smembership.mailaddr': 'c@example.com', + 'c3smembership.notification_sender': 'c@example.com', 'testing.mail_to_console': 'false'} engine = engine_from_config(my_settings) DBSession.configure(bind=engine) diff --git a/c3smembership/utils.py b/c3smembership/utils.py index 8b227561..0eb8b5fa 100644 --- a/c3smembership/utils.py +++ b/c3smembership/utils.py @@ -249,8 +249,8 @@ def send_accountant_mail(request, member): try: the_mail = create_accountant_mail( member, - request.registry.settings['c3smembership.mailaddr'], - [request.registry.settings['c3smembership.mailaddr']]) + request.registry.settings['c3smembership.notification_sender'], + [request.registry.settings['c3smembership.status_receiver']]) if 'true' in request.registry.settings['testing.mail_to_console']: print(the_mail.body) else: @@ -258,8 +258,10 @@ def send_accountant_mail(request, member): except: mail = Message( subject=_("[yes][ALERT] check the logs!"), - sender=request.registry.settings['c3smembership.mailaddr'], - recipients=[request.registry.settings['c3smembership.mailaddr']], + sender=request.registry.settings[ + 'c3smembership.notification_sender'], + recipients=[request.registry.settings[ + 'c3smembership.status_receiver']], body=""" A failure occurred at {}. A notification email could not be sent. Maybe gnupg failed and a key might be expired. diff --git a/development.ini b/development.ini index b8653195..5a861906 100644 --- a/development.ini +++ b/development.ini @@ -9,35 +9,51 @@ pyramid.debug_templates = true pyramid.default_locale_name = de pyramid.includes = pyramid_debugtoolbar pyramid_tm -#pyramid.includes = pyramid_tm - sqlalchemy.url = sqlite:///%(here)s/c3sMembership.db + +############################ # settings for c3sMembership +############################ + c3smembership.runmode = dev -c3smembership.mailaddr = c@c3s.cc -c3smembership.offset = 15 + +# The notification sender email address is used for sending emails like the +# email address confirmation link, the membership certificate and dues +# invoices. +c3smembership.notification_sender = membership@example.com + +# The status receiver email address is used as a recipient for status emails +# send by the membership application like the new application email which +# informs the staff that a new application was submitted. +c3smembership.status_receiver = membership-status@example.com + c3smembership.dashboard_number = 30 c3smembership.adminpass = rut c3smembership.adminlogin = berries c3smembership.url = http://0.0.0.0:6543 +mail.host = localhost +mail.port = 25 +mail.default_sender = membership@example.com + available_languages = de en -# da es fr -startnext_importfile = /the/path/to/c3sMembership/import/test_startnext.csv -founders_importfile = /path/to/c3sMembership/import/test_founders.csv + api_auth_token = 1234567890ABCDEFGHIJKL ticketing.url = http://0.0.0.0:6544 testing.mail_to_console = true + [server:main] use = egg:waitress#main -#Paste#http host = 0.0.0.0 port = 6543 -# Begin logging configuration + +########### +# Logging # +########### [loggers] keys = root, c3smembership, sqlalchemy, accounting @@ -78,5 +94,3 @@ formatter = generic [formatter_generic] format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s - -# End logging configuration diff --git a/production.ini b/production.ini index 76c361c7..f40baa0e 100644 --- a/production.ini +++ b/production.ini @@ -11,29 +11,50 @@ pyramid.includes = pyramid_tm sqlalchemy.url = sqlite:///%(here)s/c3sMembership.db -# settings for c3sMembership + + +############################## +# settings for c3sMembership # +############################## + c3smembership.runmode = prod -c3smembership.mailaddr = yes@c3s.cc + +# The notification sender email address is used for sending emails like the +# email address confirmation link, the membership certificate and dues +# invoices. +c3smembership.notification_sender = membership@example.com + +# The status receiver email address is used as a recipient for status emails +# send by the membership application like the new application email which +# informs the staff that a new application was submitted. +c3smembership.status_receiver = membership-status@example.com + c3smembership.dashboard_number = 20 c3smembership.adminpass = rut c3smembership.adminlogin = berries -c3smembership.url = https://yestest.c3s.cc +c3smembership.url = https://membership.example.com + mail.host = localhost mail.port = 25 -mail.default_sender = noreply@c3s.cc +mail.default_sender = membership@example.com + +available_languages = de en -available_languages = da de en es fr -startnext_importfile = /the/path/to/c3sMembership/import/test_startnext.csv -founders_importfile = /the/path/to/c3sMembership/import/test_founders.csv +api_auth_token = 1234567890ABCDEFGHIJKL +ticketing.url = http://ticketing.example.com testing.mail_to_console = false + [server:main] use = egg:waitress#main host = 0.0.0.0 port = 6544 -# Begin logging configuration + +########### +# Logging # +########### [loggers] keys = root, c3smembership, sqlalchemy, accounting @@ -74,12 +95,9 @@ formatter = generic [handler_filelog] class = FileHandler -#args = ('/var/log/apache2/yes.debug.log','a') args = ('%(here)s/yes.debug.log','a') level = DEBUG formatter = generic [formatter_generic] format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s - -# End logging configuration diff --git a/webdrivertest.ini b/webdrivertest.ini index dce8c3c9..43044813 100644 --- a/webdrivertest.ini +++ b/webdrivertest.ini @@ -5,7 +5,8 @@ sqlalchemy.url = sqlite:///%(here)s/webdrivertest.db # settings for c3sMembership c3smembership.runmode = dev -c3smembership.mailaddr = c@c3s.cc +c3smembership.notification_sender = membership@example.com +c3smembership.status_receiver = membership-status@example.com c3smembership.offset = 15 c3smembership.dashboard_number = 30 c3smembership.adminpass = rut