manage.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. """
  2. flaskbb.manage
  3. ~~~~~~~~~~~~~~~~~~~~
  4. This script provides some easy to use commands for
  5. creating the database with or without some sample content.
  6. You can also run the development server with it.
  7. Just type `python manage.py` to see the full list of commands.
  8. :copyright: (c) 2013 by the FlaskBB Team.
  9. :license: BSD, see LICENSE for more details.
  10. """
  11. import os
  12. from collections import OrderedDict
  13. from flask import current_app
  14. from flask.ext.script import Manager, Shell, Server
  15. from flaskbb import create_app
  16. from flaskbb.configs.development import DevelopmentConfig, BaseConfig
  17. from flaskbb.extensions import db
  18. from flaskbb.user.models import User, Group
  19. from flaskbb.forum.models import Post, Topic, Forum, Category
  20. app = create_app(DevelopmentConfig)
  21. manager = Manager(app)
  22. # Run local server
  23. manager.add_command("runserver", Server("localhost", port=8080))
  24. # Add interactive project shell
  25. def make_shell_context():
  26. return dict(app=current_app, db=db)
  27. manager.add_command("shell", Shell(make_context=make_shell_context))
  28. @manager.command
  29. def initdb():
  30. """
  31. Creates the database.
  32. """
  33. db.create_all()
  34. @manager.command
  35. def createall():
  36. """
  37. Creates the database with some example content.
  38. """
  39. # Just for testing purposes
  40. dbfile = os.path.join(BaseConfig._basedir, "flaskbb.sqlite")
  41. if os.path.exists(dbfile):
  42. print "Removing old database file..."
  43. os.remove(dbfile)
  44. db.create_all()
  45. groups = OrderedDict((
  46. ('Administrator', {
  47. 'description': 'The Administrator Group',
  48. 'admin': True,
  49. 'super_mod': False,
  50. 'mod': False,
  51. 'banned': False,
  52. 'guest': False,
  53. 'editpost': True,
  54. 'deletepost': True,
  55. 'deletetopic': True,
  56. 'posttopic': True,
  57. 'postreply': True,
  58. 'viewtopic': True,
  59. 'viewprofile': True
  60. }),
  61. ('Super Moderator', {
  62. 'description': 'The Super Moderator Group',
  63. 'admin': False,
  64. 'super_mod': True,
  65. 'mod': False,
  66. 'banned': False,
  67. 'guest': False,
  68. 'editpost': True,
  69. 'deletepost': True,
  70. 'deletetopic': True,
  71. 'posttopic': True,
  72. 'postreply': True,
  73. 'viewtopic': True,
  74. 'viewprofiles': True
  75. }),
  76. ('Moderator', {
  77. 'description': 'The Moderator Group',
  78. 'admin': False,
  79. 'super_mod': False,
  80. 'mod': True,
  81. 'banned': False,
  82. 'guest': False,
  83. 'editpost': True,
  84. 'deletepost': True,
  85. 'deletetopic': True,
  86. 'posttopic': True,
  87. 'postreply': True,
  88. 'viewtopic': True,
  89. 'viewprofile': True
  90. }),
  91. ('Member', {
  92. 'description': 'The Member Group',
  93. 'admin': False,
  94. 'super_mod': False,
  95. 'mod': False,
  96. 'banned': False,
  97. 'guest': False,
  98. 'editpost': True,
  99. 'deletepost': False,
  100. 'deletetopic': False,
  101. 'posttopic': True,
  102. 'postreply': True,
  103. 'viewtopic': True,
  104. 'viewprofile': True
  105. }),
  106. ('Banned', {
  107. 'description': 'The Banned Group',
  108. 'admin': False,
  109. 'super_mod': False,
  110. 'mod': False,
  111. 'banned': True,
  112. 'guest': False,
  113. 'editpost': False,
  114. 'deletepost': False,
  115. 'deletetopic': False,
  116. 'posttopic': False,
  117. 'postreply': False,
  118. 'viewtopic': False,
  119. 'viewprofile': False
  120. }),
  121. ('Guest', {
  122. 'description': 'The Guest Group',
  123. 'admin': False,
  124. 'super_mod': False,
  125. 'mod': False,
  126. 'banned': False,
  127. 'guest': True,
  128. 'editpost': False,
  129. 'deletepost': False,
  130. 'deletetopic': False,
  131. 'posttopic': False,
  132. 'postreply': False,
  133. 'viewtopic': False,
  134. 'viewprofile': False
  135. })
  136. ))
  137. # create 5 groups
  138. for key, value in groups.items():
  139. group = Group(name=key)
  140. for k, v in value.items():
  141. setattr(group, k, v)
  142. db.session.add(group)
  143. db.session.commit()
  144. # create 5 users
  145. groups = Group.query.all()
  146. for u in range(1, 6):
  147. username = "test%s" % u
  148. email = "test%s@example.org" % u
  149. user = User(username=username, password="test", email=email)
  150. user.groups.append(groups[u-1])
  151. user.primary_group_id = u
  152. db.session.add(user)
  153. # create 2 categories
  154. for i in range(1, 3):
  155. category_title = "Test Category %s" % i
  156. category = Category(title=category_title, description="Test Description")
  157. db.session.add(category)
  158. # create 2 forums in each category
  159. for j in range(1, 3):
  160. if i == 2:
  161. j += 2
  162. forum_title = "Test Forum %s %s" % (j, i)
  163. forum = Forum(title=forum_title, description="Test Description",
  164. category_id=i)
  165. db.session.add(forum)
  166. # create 1 topic in each forum
  167. for k in range(1, 5):
  168. topic = Topic()
  169. topic.first_post = Post()
  170. topic.title = "Test Title %s" % k
  171. topic.user_id = 1
  172. topic.forum_id = k
  173. topic.first_post.content = "Test Content"
  174. topic.first_post.user_id = 1
  175. topic.first_post.topic_id = k
  176. db.session.add(topic)
  177. db.session.commit()
  178. # Update the post and topic count
  179. topic.forum.topic_count += 1
  180. topic.forum.post_count += 1
  181. topic.post_count += 1
  182. topic.first_post.user.post_count += 1
  183. # create 2 additional posts for each topic
  184. for m in range(1, 3):
  185. post = Post(content="Test Post", user_id=2, topic_id=k)
  186. db.session.add(post)
  187. db.session.commit()
  188. # Update the post count
  189. post.user.post_count += 1
  190. topic.post_count += 1
  191. topic.forum.post_count += 1
  192. topic.last_post_id = post.id
  193. topic.forum.last_post_id = post.id
  194. db.session.commit()
  195. db.session.commit()
  196. if __name__ == "__main__":
  197. manager.run()