diff --git a/kallithea/controllers/admin/auth_settings.py b/kallithea/controllers/admin/auth_settings.py --- a/kallithea/controllers/admin/auth_settings.py +++ b/kallithea/controllers/admin/auth_settings.py @@ -131,7 +131,6 @@ class AuthSettingsController(BaseControl v = ','.join(v) log.debug("%s = %s", k, str(v)) setting = Setting.create_or_update(k, v) - Session().add(setting) Session().commit() h.flash(_('Auth settings updated successfully'), category='success') diff --git a/kallithea/controllers/admin/defaults.py b/kallithea/controllers/admin/defaults.py --- a/kallithea/controllers/admin/defaults.py +++ b/kallithea/controllers/admin/defaults.py @@ -71,7 +71,6 @@ class DefaultsController(BaseController) form_result = _form.to_python(dict(request.POST)) for k, v in form_result.iteritems(): setting = Setting.create_or_update(k, v) - Session().add(setting) Session().commit() h.flash(_('Default settings updated successfully'), category='success') diff --git a/kallithea/controllers/admin/settings.py b/kallithea/controllers/admin/settings.py --- a/kallithea/controllers/admin/settings.py +++ b/kallithea/controllers/admin/settings.py @@ -208,25 +208,14 @@ class SettingsController(BaseController) force_defaults=False) try: - sett1 = Setting.create_or_update('title', - form_result['title']) - Session().add(sett1) - - sett2 = Setting.create_or_update('realm', - form_result['realm']) - Session().add(sett2) - - sett3 = Setting.create_or_update('ga_code', - form_result['ga_code']) - Session().add(sett3) - - sett4 = Setting.create_or_update('captcha_public_key', - form_result['captcha_public_key']) - Session().add(sett4) - - sett5 = Setting.create_or_update('captcha_private_key', - form_result['captcha_private_key']) - Session().add(sett5) + for setting in ( + 'title', + 'realm', + 'ga_code', + 'captcha_public_key', + 'captcha_private_key', + ): + Setting.create_or_update(setting, form_result[setting]) Session().commit() set_app_settings(config) @@ -279,9 +268,7 @@ class SettingsController(BaseController) ('clone_uri_tmpl', 'clone_uri_tmpl', 'unicode'), ] for setting, form_key, type_ in settings: - sett = Setting.create_or_update(setting, - form_result[form_key], type_) - Session().add(sett) + Setting.create_or_update(setting, form_result[form_key], type_) Session().commit() set_app_settings(config) diff --git a/kallithea/model/db.py b/kallithea/model/db.py --- a/kallithea/model/db.py +++ b/kallithea/model/db.py @@ -271,6 +271,7 @@ class Setting(Base, BaseModel): val = Optional.extract(val) type = Optional.extract(type) res = cls(key, val, type) + Session().add(res) else: res.app_settings_name = key if not isinstance(val, Optional): diff --git a/kallithea/tests/conftest.py b/kallithea/tests/conftest.py --- a/kallithea/tests/conftest.py +++ b/kallithea/tests/conftest.py @@ -60,8 +60,7 @@ def _set_settings(*kvtseq): k = kvt[0] v = kvt[1] t = kvt[2] if len(kvt) == 3 else 'unicode' - setting = Setting.create_or_update(k, v, t) - session.add(setting) + Setting.create_or_update(k, v, t) session.commit() @@ -82,8 +81,7 @@ def set_test_settings(): for k, v, t in settings_snapshot: if t == 'list' and hasattr(v, '__iter__'): v = ','.join(v) # Quirk: must format list value manually. - s = Setting.create_or_update(k, v, t) - session.add(s) + Setting.create_or_update(k, v, t) session.commit() @pytest.yield_fixture diff --git a/kallithea/tests/models/test_settings.py b/kallithea/tests/models/test_settings.py --- a/kallithea/tests/models/test_settings.py +++ b/kallithea/tests/models/test_settings.py @@ -7,7 +7,6 @@ name = 'spam-setting-name' def test_passing_list_setting_value_results_in_string_valued_setting(): assert Setting.get_by_name(name) is None setting = Setting.create_or_update(name, ['spam', 'eggs']) - Session().add(setting) Session().flush() try: assert Setting.get_by_name(name) is not None @@ -23,7 +22,6 @@ def test_list_valued_setting_creation_re assert Setting.get_by_name(name) is None # Quirk: need manual formatting of list setting value. setting = Setting.create_or_update(name, 'spam,eggs', type='list') - Session().add(setting) Session().flush() try: assert setting.app_settings_value == ['spam', 'eggs']