changeset 5674:f88ca6d06e6c

db: refactor/simplify Ui access code - use get_or_create
author Søren Løvborg <sorenl@unity3d.com>
date Tue, 05 Jan 2016 18:53:09 +0100
parents 7e160a65caa4
children c25191aadf92
files kallithea/controllers/admin/settings.py kallithea/model/db.py
diffstat 2 files changed, 14 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/controllers/admin/settings.py	Tue Jan 05 15:56:34 2016 +0100
+++ b/kallithea/controllers/admin/settings.py	Tue Jan 05 18:53:09 2016 +0100
@@ -125,23 +125,10 @@
                 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 @@
                     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()
--- a/kallithea/model/db.py	Tue Jan 05 15:56:34 2016 +0100
+++ b/kallithea/model/db.py	Tue Jan 05 18:53:09 2016 +0100
@@ -352,9 +352,19 @@
 
     @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 @@
 
     @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)