def vote(self, request, entry_id, action): entry = ForumEntry.query.get(entry_id) if entry.author == request.user: raise Forbidden v = Vote.query.filter_by(entry=entry, user=request.user).first() args = { 'up': { 'score': +1 }, 'down': { 'score': -1 }, 'revoke': { 'score': 0 }, 'favorite': { 'favorite': True }, 'nofavorite': { 'favorite': False } }[action] if not v: args.update({ 'score': args.get('score', 0), 'user': request.user, }) v = Vote(**args) v.entry = entry else: for key, a in args.iteritems(): setattr(v, key, a) db.session.commit() return redirect_to(entry)
def vote(self, request, entry_id, action): entry = ForumEntry.query.get(entry_id) if entry.author == request.user: raise Forbidden v = Vote.query.filter_by(entry=entry, user=request.user).first() args = { 'up': {'score': +1}, 'down': {'score': -1}, 'revoke': {'score': 0}, 'favorite': {'favorite': True}, 'nofavorite': {'favorite': False} }[action] if not v: args.update({ 'score': args.get('score', 0), 'user': request.user, }) v = Vote(**args) v.entry = entry else: for key, a in args.iteritems(): setattr(v, key, a) db.session.commit() return redirect_to(entry)
def create_forum_test_data(): global _link_file from inyoka.forum.models import Tag, Forum, Question, Answer, Vote, ForumEntry from inyoka.core.auth.models import User links = [] u1 = User.query.filter_by(username=u'dummuser').first() u2 = User.query.filter_by(username=u'quaki').first() # tags gnome = Tag(name=u'GNOME') gtk = Tag(name=u'GTK') kde = Tag(name=u'KDE') qt = Tag(name=u'QT') window_manager = Tag(name=u'Window-Manager') hardware = Tag(name=u'Hardware') inyoka = Tag(name=u'Inyoka') audio = Tag(name=u'Audio') db.session.commit() main_tags = [gnome, gtk, kde, qt, window_manager, hardware, inyoka, audio] # forums inyoka_forum = Forum( name=u'Inyoka Project', description=u'Please tell us your opinion about the new Inyoka!', tags=[inyoka]) gnome_forum = Forum( name=u'The GNOME Desktop (Ubuntu)', description=u'Here you can find all GNOME and GTK related questions.', tags=[gnome, gtk]) kde_forum = Forum( name=u'KDE Plasma (Kubuntu)', description=u'Everything about KDE, the desktop environment of Kubuntu.', tags=[kde, qt]) window_manager_forum = Forum( name=u'Desktop Environments and Window Managers', description=u'Aks everything about GNOME, KDE or any other exotic window manager here', subforums=[gnome_forum, kde_forum], tags=[window_manager]) hardware_forum = Forum( name=u'Hardware Problems', description=u'Describe your hardware problems here', tags=[hardware]) db.session.commit() tags = Tag.query.public().all() users = tuple(User.query.options(db.eagerload('groups')).all()) last_date = None questions = [] num, var = {'small': (50, 10), 'medium': (250, 50), 'large': (1000, 200)}[SIZE] for x in xrange(randrange(num - var, num + var)): if random() >= 0.8: # we use them a bit more than others, to get a more realistic # tag usage. these_tags = main_tags else: these_tags = list(tags) shuffle(these_tags) question = Question(title=generate_lorem_ipsum(1, False, 3, 9), text=chomsky(randint(0, 10) or 40), author=choice(users), date_created=get_date(last_date), tags=these_tags[:randrange(1, 6)]) last_date = question.date_created questions.append(question) db.session.commit() links.extend([href(q, _external=True) for q in questions]) # answers replies = {'small': 4, 'medium': 8, 'large': 12}[SIZE] answers = [] last_date = questions[-1].date_created shuffle(questions) for question in questions[:randrange(len(questions))]: for x in xrange(randrange(2, replies)): answer = Answer(question=question, author=choice(users), text=chomsky(randint(0, 10) or 40), date_created=get_date(last_date)) answers.append(answer) last_date = answer.date_created db.session.commit() voted_map = [] objects = answers + questions for obj in objects[:randrange(len(objects))]: for x in xrange(randrange(2, replies * 4)): entry = choice(objects) user = choice(users) if (user.id, entry.entry_id) not in voted_map: if random() >= 0.2: v = Vote(score=+1, user=user) elif random() >= 0.5: v = Vote(score=-1, user=user) else: break v.entry_id = entry.entry_id v.favorite = random() > 0.9 entry.votes.append(v) voted_map.append((user.id, entry.entry_id)) db.session.commit() _link_file.write(u'\n'.join(links))
def create_forum_test_data(): global _link_file from inyoka.forum.models import Tag, Forum, Question, Answer, Vote, ForumEntry from inyoka.core.auth.models import User links = [] u1 = User.query.filter_by(username=u'dummuser').first() u2 = User.query.filter_by(username=u'quaki').first() # tags gnome = Tag(name=u'GNOME') gtk = Tag(name=u'GTK') kde = Tag(name=u'KDE') qt = Tag(name=u'QT') window_manager = Tag(name=u'Window-Manager') hardware = Tag(name=u'Hardware') inyoka = Tag(name=u'Inyoka') audio = Tag(name=u'Audio') db.session.commit() main_tags = [gnome, gtk, kde, qt, window_manager, hardware, inyoka, audio] # forums inyoka_forum = Forum( name=u'Inyoka Project', description=u'Please tell us your opinion about the new Inyoka!', tags=[inyoka]) gnome_forum = Forum( name=u'The GNOME Desktop (Ubuntu)', description=u'Here you can find all GNOME and GTK related questions.', tags=[gnome, gtk]) kde_forum = Forum( name=u'KDE Plasma (Kubuntu)', description= u'Everything about KDE, the desktop environment of Kubuntu.', tags=[kde, qt]) window_manager_forum = Forum( name=u'Desktop Environments and Window Managers', description= u'Aks everything about GNOME, KDE or any other exotic window manager here', subforums=[gnome_forum, kde_forum], tags=[window_manager]) hardware_forum = Forum(name=u'Hardware Problems', description=u'Describe your hardware problems here', tags=[hardware]) db.session.commit() tags = Tag.query.public().all() users = tuple(User.query.options(db.eagerload('groups')).all()) last_date = None questions = [] num, var = { 'small': (50, 10), 'medium': (250, 50), 'large': (1000, 200) }[SIZE] for x in xrange(randrange(num - var, num + var)): if random() >= 0.8: # we use them a bit more than others, to get a more realistic # tag usage. these_tags = main_tags else: these_tags = list(tags) shuffle(these_tags) question = Question(title=generate_lorem_ipsum(1, False, 3, 9), text=chomsky(randint(0, 10) or 40), author=choice(users), date_created=get_date(last_date), tags=these_tags[:randrange(1, 6)]) last_date = question.date_created questions.append(question) db.session.commit() links.extend([href(q, _external=True) for q in questions]) # answers replies = {'small': 4, 'medium': 8, 'large': 12}[SIZE] answers = [] last_date = questions[-1].date_created shuffle(questions) for question in questions[:randrange(len(questions))]: for x in xrange(randrange(2, replies)): answer = Answer(question=question, author=choice(users), text=chomsky(randint(0, 10) or 40), date_created=get_date(last_date)) answers.append(answer) last_date = answer.date_created db.session.commit() voted_map = [] objects = answers + questions for obj in objects[:randrange(len(objects))]: for x in xrange(randrange(2, replies * 4)): entry = choice(objects) user = choice(users) if (user.id, entry.entry_id) not in voted_map: if random() >= 0.2: v = Vote(score=+1, user=user) elif random() >= 0.5: v = Vote(score=-1, user=user) else: break v.entry_id = entry.entry_id v.favorite = random() > 0.9 entry.votes.append(v) voted_map.append((user.id, entry.entry_id)) db.session.commit() _link_file.write(u'\n'.join(links))