def save(self, user, forum): topic = Topic(title=self.title.data) post = Post(content=self.content.data) if self.track_topic.data: user.track_topic(topic) return topic.save(user=user, forum=forum, post=post)
def test_topic_save(forum, user): """Test the save topic method with creating and editing a topic.""" post = Post(content="Test Content") topic = Topic(title="Test Title") assert forum.last_post_id is None assert forum.post_count == 0 assert forum.topic_count == 0 topic.save(forum=forum, post=post, user=user) assert topic.title == "Test Title" topic.title = "Test Edit Title" topic.save() assert topic.title == "Test Edit Title" # The first post in the topic is also the last post assert topic.first_post_id == post.id assert topic.last_post_id == post.id assert forum.last_post_id == post.id assert forum.post_count == 1 assert forum.topic_count == 1
def insert_mass_data(topics=100, posts=100): """Creates 100 topics in the first forum and each topic has 100 posts. Returns ``True`` if the topics and posts were successfully created. :param topics: The amount of topics in the forum. :param posts: The number of posts in each topic. """ user1 = User.query.filter_by(id=1).first() user2 = User.query.filter_by(id=2).first() forum = Forum.query.filter_by(id=1).first() if not user1 or user2 or forum: raise "Please make sure that there are at least 2 users and 1 forum." # create 1000 topics for i in range(1, topics + 1): # create a topic topic = Topic() post = Post() topic.title = "Test Title %s" % i post.content = "Test Content" topic.save(post=post, user=user1, forum=forum) # create 100 posts in each topic for j in range(1, posts): post = Post() post.content = "Test Post" post.save(user=user2, topic=topic)
def save(self, user, forum): topic = Topic(title=self.title.data) post = Post(content=self.content.data) if self.track_topic.data: user.track_topic(topic) current_app.pluggy.hook.flaskbb_form_new_topic_save(form=self) return topic.save(user=user, forum=forum, post=post)
def save_thread(user, forum): thread_name, thread_id = generate_thread_name(forum) text_model = get_thread_model(forum, thread_id) post_content = text_model.make_sentence() post = Post(content=post_content) topic = Topic(title=thread_name) topic.save(user=user, forum=forum, post=post, thread_id=thread_id)
def save(self, user, forum): topic = Topic(title=self.title.data, content=self.content.data) if self.track_topic.data: user.track_topic(topic) else: user.untrack_topic(topic) current_app.pluggy.hook.flaskbb_form_topic_save(form=self, topic=topic) return topic.save(user=user, forum=forum)
def test_topic_merge_other_forum(topic): """You cannot merge a topic with a topic from another forum.""" forum_other = Forum(title="Test Forum 2", category_id=1) forum_other.save() topic_other = Topic(title="Test Topic 2") post_other = Post(content="Test Content 2") topic_other.save(user=topic.user, forum=forum_other, post=post_other) assert not topic.merge(topic_other)
def save_thread(user, forum, subreddit): thread_name = generate_title(subreddit) text_model = utils.load_model(model_fname(subreddit, 'post')) post_content = utils.generate_body(text_model) post = Post(content=post_content) thread = Topic(title=thread_name) thread.save(user=user, forum=forum, post=post)
def insert_bulk_data(topic_count=10, post_count=100): """Creates a specified number of topics in the first forum with each topic containing a specified amount of posts. Returns the number of created topics and posts. :param topics: The amount of topics in the forum. :param posts: The number of posts in each topic. """ user1 = User.query.filter_by(id=1).first() user2 = User.query.filter_by(id=2).first() forum = Forum.query.filter_by(id=1).first() last_post = Post.query.order_by(Post.id.desc()).first() last_post_id = 1 if last_post is None else last_post.id created_posts = 0 created_topics = 0 posts = [] if not (user1 or user2 or forum): return False with db.session.no_autoflush: for i in range(1, topic_count + 1): last_post_id += 1 # create a topic topic = Topic(title="Test Title %s" % i) post = Post(content="First Post") topic.save(post=post, user=user1, forum=forum) created_topics += 1 # create some posts in the topic for _ in range(1, post_count + 1): last_post_id += 1 post = Post(content="Some other Post", user=user2, topic=topic.id) topic.last_updated = post.date_created topic.post_count += 1 created_posts += 1 posts.append(post) db.session.bulk_save_objects(posts) # and finally, lets update some stats forum.recalculate(last_post=True) user1.recalculate() user2.recalculate() return created_topics, created_posts
def create_test_data(): """Creates 5 users, 2 categories and 2 forums in each category. It also creates a new topic topic in each forum with a post. """ create_default_groups() create_default_settings() # create 5 users for u in range(1, 6): username = "******" % u email = "*****@*****.**" % u user = User(username=username, password="******", 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)
def test_topic_merge(topic): """Tests the topic merge method.""" topic_other = Topic(title="Test Topic Merge") post = Post(content="Test Content Merge") topic_other.save(post=post, user=topic.user, forum=topic.forum) # Save the last_post_id in another variable because topic_other will be # overwritten later last_post_other = topic_other.last_post_id assert topic_other.merge(topic) # I just want to be sure that the topic is deleted topic_other = Topic.query.filter_by(id=topic_other.id).first() assert topic_other is None assert topic.post_count == 2 assert topic.last_post_id == last_post_other
def create_welcome_forum(): """This will create the `welcome forum` with a welcome topic.""" 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 save(self, user, forum): image_name = secure_filename(self.img_name.data.filename) image_name = "{}_{}".format(get_md5(self.content.data), image_name) topic = Topic(title=self.title.data, content=self.content.data, img_name=image_name) # topic = Topic(title=self.title.data, content=self.content.data) self.img_name.data.save( os.path.join(current_app.config["UPLOAD_COVERAGE_SAVE_DIR"], image_name)) if self.track_topic.data: user.track_topic(topic) else: user.untrack_topic(topic) current_app.pluggy.hook.flaskbb_form_topic_save(form=self, topic=topic) return topic.save(user=user, forum=forum)
def create_welcome_forum(): """This will create the `welcome forum` with a welcome topic. Returns True if it's created successfully. """ if User.query.count() < 1: return False 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) return True
def insert_mass_data(topics=100, posts=100): """Creates a few topics in the first forum and each topic has a few posts. WARNING: This might take very long! Returns the count of created topics and posts. :param topics: The amount of topics in the forum. :param posts: The number of posts in each topic. """ user1 = User.query.filter_by(id=1).first() user2 = User.query.filter_by(id=2).first() forum = Forum.query.filter_by(id=1).first() created_posts = 0 created_topics = 0 if not (user1 or user2 or forum): return False # create 1000 topics for i in range(1, topics + 1): # create a topic topic = Topic() post = Post() topic.title = "Test Title %s" % i post.content = "Test Content" topic.save(post=post, user=user1, forum=forum) created_topics += 1 # create 100 posts in each topic for j in range(1, posts + 1): post = Post() post.content = "Test Post" post.save(user=user2, topic=topic) created_posts += 1 return created_topics, created_posts
def seed_topics(): f = open("{}/{}/meme_threads.txt".format(PROJECT_DIR, DATA_DIR), 'r') memes = f.read().split('\n') forum = Forum.query.filter(Forum.id == MEME_FORUM_ID).all()[0] text_model = utils.load_model(model_fname()) users = User.query.all() for meme in memes[48:]: user = random.choice(users) if len(meme) > 1: title = meme url = google_scraper.run(100, title + " meme") post_content = "![]({})".format(url) post_content += "\n" post_content += "\n" post_content += text_model.make_sentence() rand_val = random.random() if rand_val > 0.6: title += " meme" post = Post(content=post_content) topic = Topic(title=title) topic.save(user=user, forum=forum, post=post)
def insert_mass_data(): """ Creates 100 topics in the first forum and each topic has 100 posts. """ user1 = User.query.filter_by(id=1).first() user2 = User.query.filter_by(id=2).first() forum = Forum.query.filter_by(id=1).first() # create 1000 topics for i in range(1, 101): # create a topic topic = Topic() post = Post() topic.title = "Test Title %s" % i post.content = "Test Content" topic.save(post=post, user=user1, forum=forum) # create 100 posts in each topic for j in range(1, 100): post = Post() post.content = "Test Post" post.save(user=user2, topic=topic)
def insert_bulk_data(topic_count=10, post_count=100): """Creates a specified number of topics in the first forum with each topic containing a specified amount of posts. Returns the number of created topics and posts. :param topics: The amount of topics in the forum. :param posts: The number of posts in each topic. """ user1 = User.query.filter_by(id=1).first() user2 = User.query.filter_by(id=2).first() forum = Forum.query.filter_by(id=1).first() last_post = Post.query.order_by(Post.id.desc()).first() last_post_id = 1 if last_post is None else last_post.id created_posts = 0 created_topics = 0 posts = [] if not (user1 or user2 or forum): return False db.session.begin(subtransactions=True) for i in range(1, topic_count + 1): last_post_id += 1 # create a topic topic = Topic(title="Test Title %s" % i) post = Post(content="First Post") topic.save(post=post, user=user1, forum=forum) created_topics += 1 # create some posts in the topic for j in range(1, post_count + 1): last_post_id += 1 post = Post(content="Some other Post", user=user2, topic=topic.id) topic.last_updated = post.date_created topic.post_count += 1 # FIXME: Is there a way to ignore IntegrityErrors? # At the moment, the first_post_id is also the last_post_id. # This does no harm, except that in the forums view, you see # the information for the first post instead of the last one. # I run a little benchmark: # 5.3643078804 seconds to create 100 topics and 10000 posts # Using another method (where data integrity is ok) I benchmarked # these stats: # 49.7832770348 seconds to create 100 topics and 10000 posts # Uncomment the line underneath and the other line to reduce # performance but fixes the above mentioned problem. #topic.last_post_id = last_post_id created_posts += 1 posts.append(post) # uncomment this and delete the one below, also uncomment the # topic.last_post_id line above. This will greatly reduce the # performance. #db.session.bulk_save_objects(posts) db.session.bulk_save_objects(posts) # and finally, lets update some stats forum.recalculate(last_post=True) user1.recalculate() user2.recalculate() return created_topics, created_posts
def create_test_data(users=5, categories=2, forums=2, topics=1, posts=1): """Creates 5 users, 2 categories and 2 forums in each category. It also creates a new topic topic in each forum with a post. Returns the amount of created users, categories, forums, topics and posts as a dict. :param users: The number of users. :param categories: The number of categories. :param forums: The number of forums which are created in each category. :param topics: The number of topics which are created in each forum. :param posts: The number of posts which are created in each topic. """ create_default_groups() create_default_settings() data_created = {'users': 0, 'categories': 0, 'forums': 0, 'topics': 0, 'posts': 0} # create 5 users for u in range(1, users + 1): username = "******" % u email = "*****@*****.**" % u user = User(username=username, password="******", email=email) user.primary_group_id = u user.activated = True user.save() data_created['users'] += 1 user1 = User.query.filter_by(id=1).first() user2 = User.query.filter_by(id=2).first() # lets send them a few private messages for i in range(1, 3): # TODO pass # create 2 categories for i in range(1, categories + 1): category_title = "Test Category %s" % i category = Category(title=category_title, description="Test Description") category.save() data_created['categories'] += 1 # create 2 forums in each category for j in range(1, forums + 1): 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() data_created['forums'] += 1 for t in range(1, topics + 1): # create a topic topic = Topic(title="Test Title %s" % j) post = Post(content="Test Content") topic.save(post=post, user=user1, forum=forum) data_created['topics'] += 1 for p in range(1, posts + 1): # create a second post in the forum post = Post(content="Test Post") post.save(user=user2, topic=topic) data_created['posts'] += 1 return data_created
def topic(forum, user): """A topic by a normal user without any extra permissions.""" topic = Topic(title="Test Topic Normal") post = Post(content="Test Content Normal") return topic.save(forum=forum, user=user, post=post)
def topic_moderator(forum, moderator_user): """A topic by a user with moderator permissions.""" topic = Topic(title="Test Topic Moderator") post = Post(content="Test Content Moderator") return topic.save(forum=forum, user=moderator_user, post=post)
def topic_locked(forum, user): """A locked topic by a user with normal permissions.""" topic = Topic(title="Test Topic Locked") topic.locked = True post = Post(content="Test Content Locked") return topic.save(forum=forum, user=user, post=post)
def topic_in_locked_forum(forum_locked, user): """A locked topic by a user with normal permissions.""" topic = Topic(title="Test Topic Forum Locked") post = Post(content="Test Content Forum Locked") return topic.save(forum=forum_locked, user=user, post=post)