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 @@ -125,23 +125,10 @@ class SettingsController(BaseController) sett.ui_active = form_result['hooks_outgoing_pull_logger'] ## EXTENSIONS - sett = Ui.get_by_key('largefiles') - if not sett: - #make one if it's not there ! - sett = Ui() - sett.ui_key = 'largefiles' - sett.ui_section = 'extensions' - Session().add(sett) + sett = Ui.get_or_create('extensions', 'largefiles') sett.ui_active = form_result['extensions_largefiles'] - sett = Ui.get_by_key('hgsubversion') - if not sett: - #make one if it's not there ! - sett = Ui() - sett.ui_key = 'hgsubversion' - sett.ui_section = 'extensions' - Session().add(sett) - + sett = Ui.get_or_create('extensions', 'hgsubversion') sett.ui_active = form_result['extensions_hgsubversion'] if sett.ui_active: try: @@ -149,14 +136,7 @@ class SettingsController(BaseController) except ImportError: raise HgsubversionImportError -# sett = Ui.get_by_key('hggit') -# if not sett: -# #make one if it's not there ! -# sett = Ui() -# sett.ui_key = 'hggit' -# sett.ui_section = 'extensions' -# Session().add(sett) -# +# sett = Ui.get_or_create('extensions', 'hggit') # sett.ui_active = form_result['extensions_hggit'] Session().commit() diff --git a/kallithea/model/db.py b/kallithea/model/db.py --- a/kallithea/model/db.py +++ b/kallithea/model/db.py @@ -352,9 +352,19 @@ class Ui(Base, BaseModel): @classmethod def get_by_key(cls, key): + """ Return specified Ui object, or None if not found. """ return cls.query().filter(cls.ui_key == key).scalar() @classmethod + def get_or_create(cls, section, key): + """ Return specified Ui object, creating it if necessary. """ + setting = cls.get_by_key(key) + if setting is None: + setting = cls(ui_section=section, ui_key=key) + Session().add(setting) + return setting + + @classmethod def get_builtin_hooks(cls): q = cls.query() q = q.filter(cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE, @@ -377,14 +387,10 @@ class Ui(Base, BaseModel): @classmethod def create_or_update_hook(cls, key, val): - new_ui = cls.get_by_key(key) or cls() - new_ui.ui_section = 'hooks' + new_ui = cls.get_or_create('hooks', key) new_ui.ui_active = True - new_ui.ui_key = key new_ui.ui_value = val - Session().add(new_ui) - def __repr__(self): return '<%s[%s]%s=>%s]>' % (self.__class__.__name__, self.ui_section, self.ui_key, self.ui_value)