Browse Source

Started from scratch. Again.

sh4nks 11 years ago
parent
commit
b15f363b13
4 changed files with 36 additions and 79 deletions
  1. 32 38
      flaskbb/admin/models.py
  2. 1 38
      flaskbb/admin/views.py
  3. 2 2
      flaskbb/utils/populate.py
  4. 1 1
      manage.py

+ 32 - 38
flaskbb/admin/models.py

@@ -1,5 +1,7 @@
+import sys
+
 from flask import current_app
-from flaskbb.extensions import db
+from flaskbb.extensions import db, cache
 
 
 def convert_to(value, value_type="text"):
@@ -49,53 +51,45 @@ def convert_to(value, value_type="text"):
                              .format(value_type))
 
 
-class Settings(db.Model):
-    __tablename__ = "settings"
+class SettingsGroup(db.Model):
+    __tablename__ = "settingsgroup"
 
-    id = db.Column(db.Integer, primary_key=True)
-    key = db.Column(db.String, unique=True)
+    key = db.Column(db.String, primary_key=True)
     value = db.Column(db.String)
+    description = db.Column(db.String)
 
-    # Available types: string, int, boolean
-    value_type = db.Column(db.String)
 
-    def save(self):
-        db.session.add(self)
-        db.session.commit()
+class Setting(db.Model):
+    __tablename__ = "settings"
 
-    @classmethod
-    def update(cls, configs):
-        """Updates the current_app's config and stores the changes in the
-        database.
+    key = db.Column(db.String, primary_key=True)
+    value = db.Column(db.String)
+    group = db.Column(db.String, db.ForeignKey('settingsgroup', use_alter=True,
+                                               name="fk_settingsgroup"))
+
+    # The name (displayed in the form)
+    name = db.Column(db.String)
 
-        :param config: A dictionary with configuration items.
-        """
-        result = []
-        updated_configs = {}
-        for key, value in configs.iteritems():
-            config = cls.query.filter(Settings.key == key.lower()).first()
+    # The description (displayed in the form)
+    description = db.Column(db.String)
 
-            value = convert_to(value, config.value_type)
-            config.value = value
+    # Available types: string, int, boolean
+    value_type = db.Column(db.String)
 
-            updated_configs[config.key.upper()] = config.value
-            result.append(config)
+    # Available types: text, choice, yesno
+    input_type = db.Column(db.String)
 
-            print "{}: {}".format(config.key, config.value)
-            db.session.add(config)
-            db.session.commit()
+    # Extra attributes like, validation things (min, max length...)
+    extra = db.Column(db.String)
 
-        print updated_configs
-        current_app.config.update(updated_configs)
+    def save(self):
+        db.session.add(self)
+        db.session.commit()
 
     @classmethod
+    @cache.memoize(timeout=sys.maxint)
     def get_all(cls):
-        """Returns all settings as a dictionary
-        The key is the same as in the config files.
-        """
-        settings = {}
-        all_settings = cls.query.all()
-        for setting in all_settings:
-            settings[setting.key.upper()] = setting.value
-
-        return settings
+        pass
+
+    def invalidate_cache(self):
+        cache.delete_memoized(self.get_all, self)

+ 1 - 38
flaskbb/admin/views.py

@@ -15,11 +15,8 @@ from flask import (Blueprint, current_app, request, redirect, url_for, flash,
                    __version__ as flask_version)
 from flask.ext.login import current_user
 from flask.ext.plugins import get_plugins_list, get_plugin
-from flask.ext.themes2 import get_themes_list
 
 from flaskbb import __version__ as flaskbb_version
-from flaskbb.admin.models import Settings
-from flaskbb.configs.default import DefaultConfig
 from flaskbb.forum.forms import UserSearchForm
 from flaskbb.utils.helpers import render_template
 from flaskbb.utils.decorators import admin_required
@@ -53,41 +50,7 @@ def overview():
 @admin.route("/settings", methods=["GET", "POST"])
 @admin_required
 def settings():
-    default_config = {}
-
-    config_obj = DefaultConfig()
-    for key in dir(config_obj):
-        if key.isupper():
-            default_config[key] = getattr(config_obj, key)
-
-    config = Settings.get_all()
-
-    # I also need the name (not only the identifier) for
-    # the current default theme
-    current_theme = None
-    themes = []
-    for theme in get_themes_list():
-        if theme.identifier == config["DEFAULT_THEME"]:
-            current_theme = theme
-        else:
-            themes.append(theme)
-
-    config["DEFAULT_THEME"] = current_theme
-
-    if request.method == "POST":
-        form_items = request.form.to_dict()
-        print form_items
-
-        for key, value in form_items.iteritems():
-            config[key.upper()] = value
-
-        print config
-        Settings.update(config)
-        return redirect(url_for("admin.settings"))
-
-    return render_template("admin/settings.html", config=config,
-                           default_config=default_config,
-                           themes=themes)
+    return render_template("admin/settings.html", themes=[])
 
 
 @admin.route("/users", methods=['GET', 'POST'])

+ 2 - 2
flaskbb/utils/populate.py

@@ -11,7 +11,7 @@
 from datetime import datetime
 from collections import OrderedDict
 
-from flaskbb.admin.models import Settings
+from flaskbb.admin.models import Setting
 from flaskbb.user.models import User, Group
 from flaskbb.forum.models import Post, Topic, Forum, Category
 
@@ -130,7 +130,7 @@ DEFAULT_SETTINGS = {
 
 def create_default_settings():
     for key, value in DEFAULT_SETTINGS.items():
-            setting = Settings(key=key, value=value[0], value_type=value[1])
+            setting = Setting(key=key, value=value[0], value_type=value[1])
             setting.save()
 
 

+ 1 - 1
manage.py

@@ -77,7 +77,7 @@ def createall(dropdb=False, createdb=False):
 
     app.logger.info("Creating test data...")
     create_test_data()
-    create_default_settings()
+    #create_default_settings()
 
 
 @manager.option('-u', '--username', dest='username')