示例#1
0
    def index(self, request):
        tags = []
        if request.args.get('tags'):
            tags = ifilter(bool, (Tag.query.public().filter_by(name=t).one() \
                          for t in request.args.get('tags').split()))

        form = AddEventForm(request.form)
        if form.validate_on_submit():
            #: Create the event object
            e = Event(title=form.title.data,
                      text=form.text.data,
                      author=request.user,
                      start_date=form.start.data,
                      end_date=form.end.data,
                      tags=form.tags.data,
                      discussion_question_id=None,
                      info_question_id=None)
            db.session.commit()

            #: Check for creating a question-object for an event discussion
            if form.discussion_question.data:
                q_discussion = Question(
                    title=u'[Event discussion] %s' % form.title.data,
                    author=request.user,
                    text=u'This is the discussion for the event [%s "%s"]' %
                    (href(e, _external=True), form.title.data),
                    tags=form.tags.data)
            else:
                q_discussion = None

            #: Check for creating a question-object an event information
            if form.info_question.data:
                q_info = Question(
                    title=u'[Event information] %s' % form.title.data,
                    author=request.user,
                    text=
                    u'This is the information topic for the event [%s "%s"]' %
                    (href(e, _external=True), form.title.data),
                    tags=form.tags.data)
            else:
                q_info = None

            db.session.commit()

            if q_discussion:
                e.discussion_question_id = q_discussion.id

            if q_info:
                e.info_question_id = q_info.id

            db.session.commit()

            return redirect_to(e)

        return {
            'form': form,
        }
示例#2
0
    def index(self, request):
        tags = []
        if request.args.get('tags'):
            tags = ifilter(bool, (Tag.query.public().filter_by(name=t).one() \
                          for t in request.args.get('tags').split()))

        form = AddEventForm(request.form)
        if form.validate_on_submit():
            #: Create the event object
            e = Event(title=form.title.data,
                      text=form.text.data,
                      author=request.user,
                      start_date=form.start.data,
                      end_date=form.end.data,
                      tags=form.tags.data,
                      discussion_question_id = None,
                      info_question_id = None)
            db.session.commit()

            #: Check for creating a question-object for an event discussion
            if form.discussion_question.data:
                q_discussion = Question(title=u'[Event discussion] %s' % form.title.data,
                                        author=request.user,
                                        text=u'This is the discussion for the event [%s "%s"]' %
                                            (href(e, _external=True), form.title.data),
                                        tags=form.tags.data)
            else:
                q_discussion = None

            #: Check for creating a question-object an event information
            if form.info_question.data:
                q_info = Question(title=u'[Event information] %s' % form.title.data,
                                  author=request.user,
                                  text=u'This is the information topic for the event [%s "%s"]' %
                                        (href(e, _external=True), form.title.data),
                                  tags=form.tags.data)
            else:
                q_info = None

            db.session.commit()

            if q_discussion:
                e.discussion_question_id = q_discussion.id

            if q_info:
                e.info_question_id = q_info.id

            db.session.commit()

            return redirect_to(e)

        return {
            'form': form,
        }
示例#3
0
    def question(self, request, slug, sort='votes', page=1):
        question = Question.query.filter_by(slug=slug).one()
        answer_query = Answer.query.filter_by(question=question)

        # Order by "votes", "latest" or "oldest"
        answer_query = getattr(answer_query, sort)

        pagination = URLPagination(answer_query, page)

        form = AnswerQuestionForm(request.form)
        if form.validate_on_submit():
            answer = Answer(author=request.user,
                            question=question,
                            text=form.text.data)
            db.session.commit()
            return redirect(href(question))

        # increase counters
        question.touch()

        # precalculate user votes
        answers = pagination.query
        user_votes = Vote.query.get_user_votes_on(request.user.id,
                                                  [a.id for a in answers])

        return {
            'sort': sort,
            'question': question,
            'answers': pagination.query,
            'form': form,
            'pagination': pagination,
            'user_votes': user_votes
        }
示例#4
0
    def question(self, request, slug, sort='votes', page=1):
        question = Question.query.filter_by(slug=slug).one()
        answer_query = Answer.query.filter_by(question=question)

        # Order by "votes", "latest" or "oldest"
        answer_query = getattr(answer_query, sort)

        pagination = URLPagination(answer_query, page)

        form = AnswerQuestionForm(request.form)
        if form.validate_on_submit():
            answer = Answer(author=request.user,
                            question=question,
                            text=form.text.data)
            db.session.commit()
            return redirect(href(question))

        # increase counters
        question.touch()

        # precalculate user votes
        answers = pagination.query
        user_votes = Vote.query.get_user_votes_on(request.user.id,
                                                  [a.id for a in answers])

        return {
            'sort': sort,
            'question': question,
            'answers': pagination.query,
            'form': form,
            'pagination': pagination,
            'user_votes': user_votes
        }
示例#5
0
 def _prepare(self, answer):
     return {
         'id': answer.id,
         'text': answer.text,
         'date': answer.date_created.date(),
         'title': answer.question.title,
         'author': answer.author.username,
         'link': href(answer),
     }
示例#6
0
 def _prepare(self, article):
     return {
         'id': article.id,
         'title': article.title,
         'text': article.intro + article.text,
         'date': article.pub_date.date(),
         'author': article.author.username,
         'link': href(article),
         'tag': article.tags,
     }
示例#7
0
 def _prepare(self, question):
     return {
         'id': question.id,
         'text': question.text,
         'date': question.date_created.date(),
         'author': question.author.username,
         'title': question.title,
         'link': href(question),
         'tag': question.tags,
     }
示例#8
0
    def article_feed(self, request, slug=None):
        """
        Shows all news entries that match the given criteria in an atom feed.
        """
        query = Article.query
        title = u"News"

        if slug:
            # filter the articles matching a defined tag
            tag = Tag.query.public().filter_by(slug=slug).one()
            query = tag.articles
            title = _(u"News for %s" % slug)

        query = query.options(db.eagerload("author")).order_by(Article.updated.desc()).limit(20)

        feed = AtomFeed(
            _(u"%s – %s" % (title, ctx.cfg["website_title"])),
            feed_url=request.url,
            url=request.url_root,
            icon=href("static", file="img/favicon.ico"),
        )

        for article in query.all():
            value = u"%s\n%s" % (
                article.get_rendered_text(article.intro, request, "html"),
                article.get_rendered_text(article.text, request, "html"),
            )
            feed.add(
                article.title,
                value,
                content_type="html",
                url=href(article, _external=True),
                author={"name": article.author.display_name, "uri": href(article.author.profile)},
                id=article.guid,
                updated=article.updated,
                published=article.pub_date,
            )

        return feed
示例#9
0
def confirm_action(request, message, endpoint, **kwargs):
    """Flash a csrf protected "Are you sure?" form."""
    from inyoka.core.api import render_template, href
    from inyoka.core.forms import Form
    form = Form(request.form)
    if form.validate_on_submit():
        return 'confirm' in request.form
    request.flash(render_template('utils/confirm.html', {
        'message': message,
        'form': form,
        'destination': href(endpoint, **kwargs)
    }), html=True)
    return False
示例#10
0
    def article_feed(self, request, slug=None):
        """
        Shows all news entries that match the given criteria in an atom feed.
        """
        query = Article.query
        title = u'News'

        if slug:
            # filter the articles matching a defined tag
            tag = Tag.query.public().filter_by(slug=slug).one()
            query = tag.articles
            title = _(u'News for %s' % slug)

        query = query.options(db.eagerload('author')) \
                     .order_by(Article.updated.desc()).limit(20)

        feed = AtomFeed(_(u'%s – %s' % (title, ctx.cfg['website_title'])),
                        feed_url=request.url,
                        url=request.url_root,
                        icon=href('static', file='img/favicon.ico'))

        for article in query.all():
            value = u'%s\n%s' % (
                article.get_rendered_text(article.intro, request, 'html'),
                article.get_rendered_text(article.text, request, 'html'))
            feed.add(article.title,
                     value,
                     content_type='html',
                     url=href(article, _external=True),
                     author={
                         'name': article.author.display_name,
                         'uri': href(article.author.profile)
                     },
                     id=article.guid,
                     updated=article.updated,
                     published=article.pub_date)

        return feed
示例#11
0
def create_stub_tags():
    global _link_file
    from inyoka.core.models import Tag
    num = {'small': 10, 'medium': 25, 'large': 50}[SIZE]
    used = set()
    for x in xrange(randrange(num - 5, num + 5)):
        while 1:
            tag = choice(TAGLIST)
            if tag not in used:
                used.add(tag)
                obj = Tag(name=tag)
                break
    db.session.commit()

    links = [href(tag, _external=True) for tag in Tag.query.all()]
    _link_file.write(u'\n'.join(links))
示例#12
0
def create_stub_tags():
    global _link_file
    from inyoka.core.models import Tag
    num = {'small': 10, 'medium': 25, 'large': 50}[SIZE]
    used = set()
    for x in xrange(randrange(num - 5, num + 5)):
        while 1:
            tag = choice(TAGLIST)
            if tag not in used:
                used.add(tag)
                obj = Tag(name=tag)
                break
    db.session.commit()

    links = [href(tag, _external=True) for tag in Tag.query.all()]
    _link_file.write(u'\n'.join(links))
示例#13
0
    def deactivate(self, request):
        form = DeactivateProfileForm(request.form)

        if form.validate_on_submit():
            if not request.user.check_password(form.password.data):
                form.password.errors = [_(u'The password was not correct.')]
            else:
                user = request.user
                get_auth_system().logout(request)
                user.deactivate()
                db.session.commit()
                request.flash(_(u'Your profile was deactivated successfully'),
                     success=True)
                return redirect(href('portal/index'))

        return {
            'form': form
        }
示例#14
0
    def password(self, request):
        form = get_change_password_form(request)(request.form)

        if form.validate_on_submit():
            if not request.user.check_password(form.old_password.data):
                form.old_password.errors = [_(u'The password you entered '
                    u'doesn\'t match your old one.')]
            else:
                request.user.set_password(form.new_password.data)
                db.session.commit()
                request.flash(_(u'Your password was changed successfully'),
                      success=True)
                return redirect(href('usercp/index'))

        return {
            'random_pw': form.new_password.data,
            'form': form,
        }
示例#15
0
def test_href():
    # set base domain name for correct testing
    domain = ctx.cfg['base_domain_name']
    eq_(href('portal/index'), '/')
    eq_(href('portal/index', _external=True), 'http://%s/' % domain)
    eq_(href('portal/index', _anchor='News'), '/#News')
    eq_(href('portal/index', _external=True, _anchor='News'), 'http://%s/#News' % domain)

    class HrefTester():
        def get_url_values(self, kw):
            if kw == 'foo':
                return 'portal/index', {'kw':'foo', '_anchor':'heydiho'}
            elif kw == 'bar':
                return 'portal/index', {'foo':'bar'}
    ht = HrefTester()
    eq_(href(ht, kw='foo'), '/?kw=foo#heydiho')
    eq_(href(ht, kw='foo', _anchor='bar'), '/?kw=foo#heydiho')
    eq_(href(ht, kw='bar'), '/?foo=bar')
示例#16
0
def test_href():
    # set base domain name for correct testing
    domain = ctx.cfg['base_domain_name']
    eq_(href('portal/index'), '/')
    eq_(href('portal/index', _external=True), 'http://%s/' % domain)
    eq_(href('portal/index', _anchor='News'), '/#News')
    eq_(href('portal/index', _external=True, _anchor='News'),
        'http://%s/#News' % domain)

    class HrefTester():
        def get_url_values(self, kw):
            if kw == 'foo':
                return 'portal/index', {'kw': 'foo', '_anchor': 'heydiho'}
            elif kw == 'bar':
                return 'portal/index', {'foo': 'bar'}

    ht = HrefTester()
    eq_(href(ht, kw='foo'), '/?kw=foo#heydiho')
    eq_(href(ht, kw='foo', _anchor='bar'), '/?kw=foo#heydiho')
    eq_(href(ht, kw='bar'), '/?foo=bar')
示例#17
0
def create_news_test_data():
    global _link_file
    from inyoka.core.auth.models import User
    from inyoka.news.models import Tag, Comment, Article
    users = User.query.all()
    tags = Tag.query.public().all()
    num = {'small': 10, 'medium': 50, 'large': 100}[SIZE]
    used = set()
    for x in xrange(randrange(num - 5, num + 5)):
        while 1:
            title = generate_lorem_ipsum(1, False, 3, 9)
            if title not in used:
                shuffle(tags)
                these_tags = tags[:randrange(2, 6)]
                user = choice(users)
                article = Article(title=title,
                                  intro=chomsky(randint(0, 5) or 10),
                                  text=chomsky(randint(0, 100) or 200),
                                  public=choice([True, False]),
                                  tags=these_tags,
                                  author=user)
                used.add(title)
                break
    db.session.commit()

    _link_file.write(u'\n'.join(
        [href(a, _external=True) for a in Article.query.all()]))

    # comments
    replies = {'small': 4, 'medium': 8, 'large': 12}[SIZE]
    articles = Article.query.all()
    for article in articles:
        for x in xrange(randrange(replies * 4)):
            article = choice(articles)
            user = choice(users)
            comment = Comment(text=chomsky(randint(0, 5) or 10),
                              author=user,
                              article=article)
    db.session.commit()
示例#18
0
def create_news_test_data():
    global _link_file
    from inyoka.core.auth.models import User
    from inyoka.news.models import Tag, Comment, Article
    users = User.query.all()
    tags = Tag.query.public().all()
    num = {'small': 10, 'medium': 50, 'large': 100}[SIZE]
    used = set()
    for x in xrange(randrange(num - 5, num + 5)):
        while 1:
            title = generate_lorem_ipsum(1, False, 3, 9)
            if title not in used:
                shuffle(tags)
                these_tags = tags[:randrange(2,6)]
                user = choice(users)
                article = Article(title=title,
                    intro=chomsky(randint(0, 5) or 10),
                    text=chomsky(randint(0, 100) or 200),
                    public=choice([True, False]), tags=these_tags,
                    author=user)
                used.add(title)
                break
    db.session.commit()

    _link_file.write(u'\n'.join([href(a, _external=True) for a in Article.query.all()]))

    # comments
    replies = {'small': 4, 'medium': 8, 'large': 12}[SIZE]
    articles = Article.query.all()
    for article in articles:
        for x in xrange(randrange(replies * 4)):
            article = choice(articles)
            user = choice(users)
            comment = Comment(text=chomsky(randint(0, 5) or 10),
                author=user, article=article)
    db.session.commit()
示例#19
0
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))
示例#20
0
def create_test_users():
    global _link_file
    from inyoka.core.auth.models import User, UserProfile, Group

    # admin user
    admin = User(username=u'admin', email=u'root@localhost', password=u'default')
    admin.status = u'normal'
    admin_profile = UserProfile(user=admin)

    # some crazy users
    user_instances = []
    users = {
        u'apollonier':      (u'*****@*****.**', u'rocket!',
            {'real_name': u'Apollo der Große', 'location': u'Österreich'}),
        u'tux der große':   (u'*****@*****.**', u'pinguin',
            {'real_name': u'Tuxorius', 'location': u'Österreich'}),
        u'quaki':           (u'*****@*****.**', u'fluss',
            {'real_name': u'Quaki der ganz ganz Große', 'location': u'Germany'}),
        u'maxarian':        (u'*****@*****.**', u'damn!',
            {'real_name': u'Marian Florianus', 'location': u'Berlin/Germany'}),
        u'dummuser':        (u'*****@*****.**', u'dumm?',
            {'real_name': u'Dummorius', 'location': u'/dev/zero'}),
        u'FedoraFlo':       (u'*****@*****.**', u'default',
            {'real_name': u'Florius Maximus', 'location': u'Frankfurt/Germany'}),
        u'lidnele':         (u'*****@*****.**', u'default',
            {'real_name': u'Andreas Lilende', 'location': u'ubuntuusers.de'}),
        u'Kami':            (u'*****@*****.**', u'default',
            {'real_name': u'Aldaran Utama Putiran', 'location': u'Turkey'}),
        u'carost':          (u'*****@*****.**', u'default',
            {'real_name': u'Tschaka Bam', 'location': u'Germany'}),
        u'The-Decompiler':  (u'*****@*****.**', u'default',
            {'real_name': u'©æſð殀“”@', 'location': u'/dev/cdrom'}),
        u'guj':             (u'[email protected]', u'default',
            {'real_name': u'Yea Man', 'location': u'Germany'}),
        u'RoterRitter':     (u'*****@*****.**', u'default',
            {'real_name': u'Der Rote Ritter mit der langen Lanze', 'location': u'Burg Rotenstein'}),
        u'Kebap':           (u'dö@n.er', u'default',
            {'real_name': u'DönerDönerDönerDöner', 'location': u'Berlin'}),
    }
    for user in users:
        email, pw = users[user][:-1]
        u = User(username=user, email=email, password=pw)
        u.status = u'normal'
        p = UserProfile(user=u, **users[user][-1])
        user_instances.append(u)

    db.session.commit()

    team = Group(name=u'Team')
    webteam = Group(name=u'Webteam', parents=set([team]), users=user_instances[:4])
    supporter = Group(name=u'Supporter', parents=set([team]), users=user_instances[4:-2])
    multimedia = Group(name=u'Supporter Multimedia', parents=set([supporter]),
        users=user_instances[-2:])
    ikhayateam = Group(name=u'Ikhayateam', parents=set([team]))
    db.session.commit()

    # create some stub and dummy users...
    num = {'small': 15, 'medium': 30, 'large': 50}[SIZE]
    used = set()
    groups = [team, webteam, supporter, multimedia, ikhayateam]
    for x in xrange(num):
        while 1:
            username = choice(USERNAMES)
            if username not in used:
                used.add(username)
                break
        u = User(username=username, email=u'*****@*****.**' % username,
                 password=u'default')
        UserProfile(user=u)
        if random() > 0.6:
            u.groups = [choice(groups)]
    db.session.commit()

    # store links for benchmark tests
    links = [href(u.profile, _external=True) for u in User.query.all()]
    links.extend([href(g, _external=True) for g in groups])
    _link_file.write(u'\n'.join(links))
示例#21
0
def create_test_users():
    global _link_file
    from inyoka.core.auth.models import User, UserProfile, Group

    # admin user
    admin = User(username=u'admin',
                 email=u'root@localhost',
                 password=u'default')
    admin.status = u'normal'
    admin_profile = UserProfile(user=admin)

    # some crazy users
    user_instances = []
    users = {
        u'apollonier': (u'*****@*****.**', u'rocket!', {
            'real_name': u'Apollo der Große',
            'location': u'Österreich'
        }),
        u'tux der große': (u'*****@*****.**', u'pinguin', {
            'real_name': u'Tuxorius',
            'location': u'Österreich'
        }),
        u'quaki': (u'*****@*****.**', u'fluss', {
            'real_name': u'Quaki der ganz ganz Große',
            'location': u'Germany'
        }),
        u'maxarian': (u'*****@*****.**', u'damn!', {
            'real_name': u'Marian Florianus',
            'location': u'Berlin/Germany'
        }),
        u'dummuser': (u'*****@*****.**', u'dumm?', {
            'real_name': u'Dummorius',
            'location': u'/dev/zero'
        }),
        u'FedoraFlo': (u'*****@*****.**', u'default', {
            'real_name': u'Florius Maximus',
            'location': u'Frankfurt/Germany'
        }),
        u'lidnele': (u'*****@*****.**', u'default', {
            'real_name': u'Andreas Lilende',
            'location': u'ubuntuusers.de'
        }),
        u'Kami': (u'*****@*****.**', u'default', {
            'real_name': u'Aldaran Utama Putiran',
            'location': u'Turkey'
        }),
        u'carost': (u'*****@*****.**', u'default', {
            'real_name': u'Tschaka Bam',
            'location': u'Germany'
        }),
        u'The-Decompiler': (u'*****@*****.**', u'default', {
            'real_name': u'©æſð殀“”@',
            'location': u'/dev/cdrom'
        }),
        u'guj': (u'[email protected]', u'default', {
            'real_name': u'Yea Man',
            'location': u'Germany'
        }),
        u'RoterRitter': (u'*****@*****.**', u'default', {
            'real_name': u'Der Rote Ritter mit der langen Lanze',
            'location': u'Burg Rotenstein'
        }),
        u'Kebap': (u'dö@n.er', u'default', {
            'real_name': u'DönerDönerDönerDöner',
            'location': u'Berlin'
        }),
    }
    for user in users:
        email, pw = users[user][:-1]
        u = User(username=user, email=email, password=pw)
        u.status = u'normal'
        p = UserProfile(user=u, **users[user][-1])
        user_instances.append(u)

    db.session.commit()

    team = Group(name=u'Team')
    webteam = Group(name=u'Webteam',
                    parents=set([team]),
                    users=user_instances[:4])
    supporter = Group(name=u'Supporter',
                      parents=set([team]),
                      users=user_instances[4:-2])
    multimedia = Group(name=u'Supporter Multimedia',
                       parents=set([supporter]),
                       users=user_instances[-2:])
    ikhayateam = Group(name=u'Ikhayateam', parents=set([team]))
    db.session.commit()

    # create some stub and dummy users...
    num = {'small': 15, 'medium': 30, 'large': 50}[SIZE]
    used = set()
    groups = [team, webteam, supporter, multimedia, ikhayateam]
    for x in xrange(num):
        while 1:
            username = choice(USERNAMES)
            if username not in used:
                used.add(username)
                break
        u = User(username=username,
                 email=u'*****@*****.**' % username,
                 password=u'default')
        UserProfile(user=u)
        if random() > 0.6:
            u.groups = [choice(groups)]
    db.session.commit()

    # store links for benchmark tests
    links = [href(u.profile, _external=True) for u in User.query.all()]
    links.extend([href(g, _external=True) for g in groups])
    _link_file.write(u'\n'.join(links))
示例#22
0
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))