populate.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. # -*- coding: utf-8 -*-
  2. """
  3. flaskbb.utils.populate
  4. ~~~~~~~~~~~~~~~~~~~~
  5. A module that makes creating data more easily
  6. :copyright: (c) 2014 by the FlaskBB Team.
  7. :license: BSD, see LICENSE for more details.
  8. """
  9. from datetime import datetime
  10. from flaskbb.management.models import Setting, SettingsGroup
  11. from flaskbb.user.models import User, Group
  12. from flaskbb.forum.models import Post, Topic, Forum, Category
  13. def delete_settings_from_fixture(fixture):
  14. for settingsgroup in fixture:
  15. group = SettingsGroup.query.filter_by(key=settingsgroup[0]).first()
  16. for settings in settingsgroup[1]['settings']:
  17. setting = Setting.query.filter_by(key=settings[0]).first()
  18. setting.delete()
  19. group.delete()
  20. def create_settings_from_fixture(fixture):
  21. for settingsgroup in fixture:
  22. group = SettingsGroup(
  23. key=settingsgroup[0],
  24. name=settingsgroup[1]['name'],
  25. description=settingsgroup[1]['description']
  26. )
  27. group.save()
  28. for settings in settingsgroup[1]['settings']:
  29. setting = Setting(
  30. key=settings[0],
  31. value=settings[1]['value'],
  32. value_type=settings[1]['value_type'],
  33. name=settings[1]['name'],
  34. description=settings[1]['description'],
  35. extra=settings[1].get('extra', ""), # Optional field
  36. settingsgroup=group.key
  37. )
  38. setting.save()
  39. def create_default_settings():
  40. from flaskbb.fixtures.settings import fixture
  41. create_settings_from_fixture(fixture)
  42. def create_default_groups():
  43. """
  44. This will create the 5 default groups
  45. """
  46. from flaskbb.fixtures.groups import fixture
  47. result = []
  48. for key, value in fixture.items():
  49. group = Group(name=key)
  50. for k, v in value.items():
  51. setattr(group, k, v)
  52. group.save()
  53. result.append(group)
  54. return result
  55. def create_admin_user(username, password, email):
  56. """
  57. Creates the administrator user
  58. """
  59. admin_group = Group.query.filter_by(admin=True).first()
  60. user = User()
  61. user.username = username
  62. user.password = password
  63. user.email = email
  64. user.primary_group_id = admin_group.id
  65. user.save()
  66. def create_welcome_forum():
  67. """
  68. This will create the `welcome forum` that nearly every
  69. forum software has after the installation process is finished
  70. """
  71. if User.query.count() < 1:
  72. raise "You need to create the admin user first!"
  73. user = User.query.filter_by(id=1).first()
  74. category = Category(title="My Category", position=1)
  75. category.save()
  76. forum = Forum(title="Welcome", description="Your first forum",
  77. category_id=category.id)
  78. forum.save()
  79. topic = Topic(title="Welcome!")
  80. post = Post(content="Have fun with your new FlaskBB Forum!")
  81. topic.save(user=user, forum=forum, post=post)
  82. def create_test_data():
  83. create_default_groups()
  84. create_default_settings()
  85. # create 5 users
  86. for u in range(1, 6):
  87. username = "test%s" % u
  88. email = "test%s@example.org" % u
  89. user = User(username=username, password="test", email=email)
  90. user.primary_group_id = u
  91. user.save()
  92. user1 = User.query.filter_by(id=1).first()
  93. user2 = User.query.filter_by(id=2).first()
  94. # create 2 categories
  95. for i in range(1, 3):
  96. category_title = "Test Category %s" % i
  97. category = Category(title=category_title,
  98. description="Test Description")
  99. category.save()
  100. # create 2 forums in each category
  101. for j in range(1, 3):
  102. if i == 2:
  103. j += 2
  104. forum_title = "Test Forum %s %s" % (j, i)
  105. forum = Forum(title=forum_title, description="Test Description",
  106. category_id=i)
  107. forum.save()
  108. # create a topic
  109. topic = Topic()
  110. post = Post()
  111. topic.title = "Test Title %s" % j
  112. post.content = "Test Content"
  113. topic.save(post=post, user=user1, forum=forum)
  114. # create a second post in the forum
  115. post = Post()
  116. post.content = "Test Post"
  117. post.save(user=user2, topic=topic)