Просмотр исходного кода

Added populate function for the setting fixtures

Also moved the group fixtures to the fixture package.
sh4nks 11 лет назад
Родитель
Сommit
f8e11d6222
4 измененных файлов с 131 добавлено и 244 удалено
  1. 18 13
      flaskbb/admin/models.py
  2. 112 0
      flaskbb/fixtures/groups.py
  3. 1 1
      flaskbb/fixtures/settings.py
  4. 0 230
      flaskbb/utils/populate.py

+ 18 - 13
flaskbb/admin/models.py

@@ -48,36 +48,41 @@ class SettingsGroup(db.Model):
     __tablename__ = "settingsgroup"
 
     key = db.Column(db.String, primary_key=True)
-    name = db.Column(db.String)
-    description = db.Column(db.String)
+    name = db.Column(db.String, nullable=False)
+    description = db.Column(db.String, nullable=False)
+    settings = db.relationship("Setting", lazy="dynamic", backref="group")
+
+    def save(self):
+        db.session.add(self)
+        db.session.commit()
 
 
 class Setting(db.Model):
     __tablename__ = "settings"
 
     key = db.Column(db.String, primary_key=True)
-    _value = db.Column("value", db.String)
-    group = db.Column(db.String, db.ForeignKey('settingsgroup', use_alter=True,
-                                               name="fk_settingsgroup"))
+    _value = db.Column("value", db.String, nullable=False)
+    settingsgroup = db.Column(db.String,
+                              db.ForeignKey('settingsgroup.key',
+                                            use_alter=True,
+                                            name="fk_settingsgroup"),
+                              nullable=False)
 
     # The name (displayed in the form)
-    name = db.Column(db.String)
+    name = db.Column(db.String, nullable=False)
 
     # The description (displayed in the form)
-    description = db.Column(db.String)
+    description = db.Column(db.String, nullable=False)
 
     # Available types: string, integer, boolean, array, float
-    value_type = db.Column(db.String)
+    value_type = db.Column(db.String, nullable=False)
 
-    # Available types: text, choice, yesno
-    input_type = db.Column(db.String)
+    # Available types: text, choice, yesno (used for the form creation process)
+    input_type = db.Column(db.String, nullable=False)
 
     # Extra attributes like, validation things (min, max length...)
     _extra = db.Column("extra", db.String)
 
-    settings_group = db.relationship("SettingsGroup", lazy="dynamic",
-                                     backref="setting")
-
     @property
     def value(self):
         return normalize_to(self._value, self.value_type)

+ 112 - 0
flaskbb/fixtures/groups.py

@@ -0,0 +1,112 @@
+# -*- coding: utf-8 -*-
+"""
+    flaskbb.fixtures.groups
+    ~~~~~~~~~~~~~~~~~~~~~~~
+
+    The fixtures module for our groups.
+
+    :copyright: (c) 2014 by the FlaskBB Team.
+    :license: BSD, see LICENSE for more details.
+"""
+
+from collections import OrderedDict
+
+
+fixture = OrderedDict((
+    ('Administrator', {
+        'description': 'The Administrator Group',
+        'admin': True,
+        'super_mod': False,
+        'mod': False,
+        'banned': False,
+        'guest': False,
+        'editpost': True,
+        'deletepost': True,
+        'deletetopic': True,
+        'posttopic': True,
+        'postreply': True,
+        'locktopic': True,
+        'movetopic': True,
+        'mergetopic': True
+    }),
+    ('Super Moderator', {
+        'description': 'The Super Moderator Group',
+        'admin': False,
+        'super_mod': True,
+        'mod': False,
+        'banned': False,
+        'guest': False,
+        'editpost': True,
+        'deletepost': True,
+        'deletetopic': True,
+        'posttopic': True,
+        'postreply': True,
+        'locktopic': True,
+        'movetopic': True,
+        'mergetopic': True
+    }),
+    ('Moderator', {
+        'description': 'The Moderator Group',
+        'admin': False,
+        'super_mod': False,
+        'mod': True,
+        'banned': False,
+        'guest': False,
+        'editpost': True,
+        'deletepost': True,
+        'deletetopic': True,
+        'posttopic': True,
+        'postreply': True,
+        'locktopic': True,
+        'movetopic': True,
+        'mergetopic': True
+    }),
+    ('Member', {
+        'description': 'The Member Group',
+        'admin': False,
+        'super_mod': False,
+        'mod': False,
+        'banned': False,
+        'guest': False,
+        'editpost': True,
+        'deletepost': False,
+        'deletetopic': False,
+        'posttopic': True,
+        'postreply': True,
+        'locktopic': False,
+        'movetopic': False,
+        'mergetopic': False
+    }),
+    ('Banned', {
+        'description': 'The Banned Group',
+        'admin': False,
+        'super_mod': False,
+        'mod': False,
+        'banned': True,
+        'guest': False,
+        'editpost': False,
+        'deletepost': False,
+        'deletetopic': False,
+        'posttopic': False,
+        'postreply': False,
+        'locktopic': False,
+        'movetopic': False,
+        'mergetopic': False
+    }),
+    ('Guest', {
+        'description': 'The Guest Group',
+        'admin': False,
+        'super_mod': False,
+        'mod': False,
+        'banned': False,
+        'guest': True,
+        'editpost': False,
+        'deletepost': False,
+        'deletetopic': False,
+        'posttopic': False,
+        'postreply': False,
+        'locktopic': False,
+        'movetopic': False,
+        'mergetopic': False
+    })
+))

+ 1 - 1
flaskbb/fixtures/settings.py

@@ -9,7 +9,7 @@
     :license: BSD, see LICENSE for more details.
 """
 
-settings_fixture = (
+fixture = (
     # Settings Group
     ('general', {
         'name': "General Settings",

+ 0 - 230
flaskbb/utils/populate.py

@@ -1,230 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-    flaskbb.utils.populate
-    ~~~~~~~~~~~~~~~~~~~~
-
-    A module that makes creating data more easily
-
-    :copyright: (c) 2014 by the FlaskBB Team.
-    :license: BSD, see LICENSE for more details.
-"""
-from datetime import datetime
-from collections import OrderedDict
-
-from flaskbb.admin.models import Setting
-from flaskbb.user.models import User, Group
-from flaskbb.forum.models import Post, Topic, Forum, Category
-
-GROUPS = OrderedDict((
-    ('Administrator', {
-        'description': 'The Administrator Group',
-        'admin': True,
-        'super_mod': False,
-        'mod': False,
-        'banned': False,
-        'guest': False,
-        'editpost': True,
-        'deletepost': True,
-        'deletetopic': True,
-        'posttopic': True,
-        'postreply': True,
-        'locktopic': True,
-        'movetopic': True,
-        'mergetopic': True
-    }),
-    ('Super Moderator', {
-        'description': 'The Super Moderator Group',
-        'admin': False,
-        'super_mod': True,
-        'mod': False,
-        'banned': False,
-        'guest': False,
-        'editpost': True,
-        'deletepost': True,
-        'deletetopic': True,
-        'posttopic': True,
-        'postreply': True,
-        'locktopic': True,
-        'movetopic': True,
-        'mergetopic': True
-    }),
-    ('Moderator', {
-        'description': 'The Moderator Group',
-        'admin': False,
-        'super_mod': False,
-        'mod': True,
-        'banned': False,
-        'guest': False,
-        'editpost': True,
-        'deletepost': True,
-        'deletetopic': True,
-        'posttopic': True,
-        'postreply': True,
-        'locktopic': True,
-        'movetopic': True,
-        'mergetopic': True
-    }),
-    ('Member', {
-        'description': 'The Member Group',
-        'admin': False,
-        'super_mod': False,
-        'mod': False,
-        'banned': False,
-        'guest': False,
-        'editpost': True,
-        'deletepost': False,
-        'deletetopic': False,
-        'posttopic': True,
-        'postreply': True,
-        'locktopic': False,
-        'movetopic': False,
-        'mergetopic': False
-    }),
-    ('Banned', {
-        'description': 'The Banned Group',
-        'admin': False,
-        'super_mod': False,
-        'mod': False,
-        'banned': True,
-        'guest': False,
-        'editpost': False,
-        'deletepost': False,
-        'deletetopic': False,
-        'posttopic': False,
-        'postreply': False,
-        'locktopic': False,
-        'movetopic': False,
-        'mergetopic': False
-    }),
-    ('Guest', {
-        'description': 'The Guest Group',
-        'admin': False,
-        'super_mod': False,
-        'mod': False,
-        'banned': False,
-        'guest': True,
-        'editpost': False,
-        'deletepost': False,
-        'deletetopic': False,
-        'posttopic': False,
-        'postreply': False,
-        'locktopic': False,
-        'movetopic': False,
-        'mergetopic': False
-    })
-))
-
-
-DEFAULT_SETTINGS = {
-    "project_title": ("FlaskBB", "text"),
-    "project_subtitle": ("A lightweight forum software in flask", "text"),
-    "default_theme": ("bootstrap3", "text"),
-    "tracker_length": (7, "int"),
-    "title_length": (15, "int"),
-    "online_last_minutes": (15, "int"),
-    "users_per_page": (10, "int"),
-    "topics_per_page": (10, "int"),
-    "posts_per_page": (10, "int")
-}
-
-
-def create_default_settings():
-    for key, value in DEFAULT_SETTINGS.items():
-            setting = Setting(key=key, value=value[0], value_type=value[1])
-            setting.save()
-
-
-def create_default_groups():
-    """
-    This will create the 5 default groups
-    """
-    result = []
-    for key, value in GROUPS.items():
-        group = Group(name=key)
-
-        for k, v in value.items():
-            setattr(group, k, v)
-
-        group.save()
-        result.append(group)
-    return result
-
-
-def create_admin_user(username, password, email):
-    """
-    Creates the administrator user
-    """
-    admin_group = Group.query.filter_by(admin=True).first()
-    user = User(username=username, password=password, email=email,
-                date_joined=datetime.utcnow(), primary_group_id=admin_group.id)
-    user.save()
-
-
-def create_welcome_forum():
-    """
-    This will create the `welcome forum` that nearly every
-    forum software has after the installation process is finished
-    """
-
-    if User.query.count() < 1:
-        raise "You need to create the admin user first!"
-
-    user = User.query.filter_by(id=1).first()
-
-    category = Category(title="My Category", position=1)
-    category.save()
-
-    forum = Forum(title="Welcome", description="Your first forum",
-                  category_id=category.id)
-    forum.save()
-
-    topic = Topic(title="Welcome!")
-    post = Post(content="Have fun with your new FlaskBB Forum!")
-
-    topic.save(user=user, forum=forum, post=post)
-
-
-def create_test_data():
-
-    create_default_groups()
-
-    # create 5 users
-    for u in range(1, 6):
-        username = "test%s" % u
-        email = "test%s@example.org" % u
-        user = User(username=username, password="test", email=email)
-        user.primary_group_id = u
-        user.save()
-
-    user1 = User.query.filter_by(id=1).first()
-    user2 = User.query.filter_by(id=2).first()
-
-    # create 2 categories
-    for i in range(1, 3):
-        category_title = "Test Category %s" % i
-        category = Category(title=category_title,
-                            description="Test Description")
-        category.save()
-
-        # create 2 forums in each category
-        for j in range(1, 3):
-            if i == 2:
-                j += 2
-
-            forum_title = "Test Forum %s %s" % (j, i)
-            forum = Forum(title=forum_title, description="Test Description",
-                          category_id=i)
-            forum.save()
-
-            # create a topic
-            topic = Topic()
-            post = Post()
-
-            topic.title = "Test Title %s" % j
-            post.content = "Test Content"
-            topic.save(post=post, user=user1, forum=forum)
-
-            # create a second post in the forum
-            post = Post()
-            post.content = "Test Post"
-            post.save(user=user2, topic=topic)