Browse Source

Dunno what just happened..

sh4nks 11 years ago
parent
commit
b1e4f85d1a
1 changed files with 141 additions and 0 deletions
  1. 141 0
      flaskbb/utils/populate.py

+ 141 - 0
flaskbb/utils/populate.py

@@ -0,0 +1,141 @@
+# -*- 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 flaskbb.admin.models import Setting, SettingsGroup
+from flaskbb.user.models import User, Group
+from flaskbb.forum.models import Post, Topic, Forum, Category
+
+
+def create_default_settings():
+    from flaskbb.fixtures.settings import fixture
+
+    for settingsgroup in fixture:
+
+        group = SettingsGroup(
+            key=settingsgroup[0],
+            name=settingsgroup[1]['name'],
+            description=settingsgroup[1]['description']
+        )
+
+        group.save()
+
+        for settings in settingsgroup[1]['settings']:
+            setting = Setting(
+                key=settings[0],
+                value=settings[1]['value'],
+                value_type=settings[1]['value_type'],
+                input_type=settings[1]['input_type'],
+                name=settings[1]['name'],
+                description=settings[1]['description'],
+                extra=settings[1].get('extra', ""),     # Optional field
+
+                settingsgroup=group.key
+            )
+            setting.save()
+
+
+def create_default_groups():
+    """
+    This will create the 5 default groups
+    """
+    from flaskbb.fixtures.groups import fixture
+    result = []
+    for key, value in fixture.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_default_settings()
+
+    # 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)