コード例 #1
0
    def test_creating_article(self):

        with test_database(db, (Users, Articles)):
            user1 = Users.create_user(username="******", password="******")
            article = Articles.create_article(title = "test",\
                                    body = "test",\
                                    draft = True,\
                                    author = user1)

            self.assertEquals("test", article.title)
            self.assertEquals("konrad", article.author.username)

            Articles.create_article(title = "test2",\
                                   body = "test",\
                                   draft = False, \
                                   author = user1)

            self.assertRaises(IntegrityError,\
                              lambda: Articles.create_article(title = "test",\
                                                              body = "test",\
                                                              author = user1))

            articles = Articles.get_user_articles("konrad")

            self.assertEquals(2, len(tuple(articles)))

            user2 = Users.create_user(username="******", password="******")
            Articles.create_article(title = "test3", \
                                   body = "test",\
                                   author = user2)

            articles = Articles.get_user_articles("konrad")
            self.assertEquals(2, len(tuple(articles)))
            articles2 = Articles.get_user_articles("malgosia")
            self.assertEquals(1, len(tuple(articles2)))
コード例 #2
0
    def test_saving_and_deleting_categories(self):

        with test_database(db,
                           (Users, Articles, Categories, ArticleCategories)):
            Users.create_user(username="******", password="******")
            user1 = Users.select().get()

            art = Articles.create_article(title="test article1",
                                          body="test",
                                          draft=True,
                                          author=user1)
            art2 = Articles.create_article(title="test article2",
                                           body="test",
                                           draft=True,
                                           author=user1)

            art.save_article_categories([u"cat1", u"cat2", u"cat3"])

            self.assertIn("cat1", str(tuple(art.get_article_categories())))
            self.assertIn("cat2", str(tuple(art.get_article_categories())))
            self.assertIn("cat3", str(tuple(art.get_article_categories())))

            art.save_article_categories(["cat1", "cat2", "cat3"])

            cat = Categories.select().count()

            self.assertEquals(3, cat)

            cat4 = Categories.create(name="cat4")
            cat5 = Categories.create(name="cat5")
            cat6 = Categories.create(name="cat6")

            art.save_article_categories(["cat4"])
            self.assertIn("cat4", str(tuple(art.get_article_categories())))
            self.assertEquals(4, art.get_article_categories().count())

            art2.save_article_categories(("cat1", "cat4", "cat7"))

            cats = Categories.select().group_by(Categories.name)

            self.assertIn("cat7", str(tuple(cats)))
            self.assertEquals(7, cats.count())

            art.delete_instance(recursive=True)

            self.assertEquals(7, cats.count())

            self.assertEquals(
                ArticleCategories.select().group_by(
                    ArticleCategories.id).count(), 4)
            cat4.delete_instance(recursive=True)

            self.assertEquals(
                ArticleCategories.select().group_by(
                    ArticleCategories.id).count(), 3)
コード例 #3
0
ファイル: test_articles.py プロジェクト: agatka21/subrosa
    def test_creating_article(self):

        with test_database(db, (Users, Articles)):
            user1 = Users.create_user(username = "******", password = "******")
            article = Articles.create_article(title = "test",\
                                    body = "test",\
                                    draft = True,\
                                    author = user1)

            self.assertEquals("test", article.title)
            self.assertEquals("konrad",article.author.username)

            Articles.create_article(title = "test2",\
                                   body = "test",\
                                   draft = False, \
                                   author = user1)

            self.assertRaises(IntegrityError,\
                              lambda: Articles.create_article(title = "test",\
                                                              body = "test",\
                                                              author = user1))

            articles = Articles.get_user_articles("konrad")

            self.assertEquals(2,len(tuple(articles)))

            user2 = Users.create_user(username = "******", password = "******")
            Articles.create_article(title = "test3", \
                                   body = "test",\
                                   author = user2)

            articles = Articles.get_user_articles("konrad")
            self.assertEquals(2,len(tuple(articles)))
            articles2 = Articles.get_user_articles("malgosia")
            self.assertEquals(1,len(tuple(articles2)))
コード例 #4
0
ファイル: test_articles.py プロジェクト: agatka21/subrosa
    def test_saving_and_deleting_categories(self):

        with test_database(db, (Users, Articles, Categories, ArticleCategories)):
            Users.create_user(username = "******", password = "******")
            user1 = Users.select().get()

            art = Articles.create_article(title = "test article1", body = "test", draft = True, author = user1)
            art2 = Articles.create_article(title = "test article2", body = "test", draft = True, author = user1)


            art.save_article_categories([u"cat1", u"cat2", u"cat3"])


            self.assertIn("cat1", str(tuple(art.get_article_categories())))
            self.assertIn("cat2", str(tuple(art.get_article_categories())))
            self.assertIn("cat3", str(tuple(art.get_article_categories())))

            art.save_article_categories(["cat1", "cat2", "cat3"])

            cat = Categories.select().count()

            self.assertEquals(3, cat)

            cat4 = Categories.create(name = "cat4")
            cat5 = Categories.create(name = "cat5")
            cat6 = Categories.create(name = "cat6")

            art.save_article_categories(["cat4"])
            self.assertIn("cat4", str(tuple(art.get_article_categories())))
            self.assertEquals(4, art.get_article_categories().count())

            art2.save_article_categories(("cat1", "cat4", "cat7"))

            cats = Categories.select().group_by(Categories.name)

            self.assertIn("cat7", str(tuple(cats)))
            self.assertEquals(7, cats.count())

            art.delete_instance(recursive = True)

            self.assertEquals(7, cats.count())


            self.assertEquals(ArticleCategories.select().group_by(ArticleCategories.id).count(), 4)
            cat4.delete_instance(recursive = True)

            self.assertEquals(ArticleCategories.select().group_by(ArticleCategories.id).count(), 3)
コード例 #5
0
ファイル: main_views.py プロジェクト: agatka21/subrosa
def download_article(id):
    article = Articles.get_article(id)
    if not article:
        abort(404)
    lines = article.body.splitlines()
    body = "\n".join([textwrap.fill(line, width=90) for line in lines])
    return Response(body,
                    mimetype="text/plain",
                    headers={"Content-Disposition":
                             "attachment; filename={0}.md".format(article.slug)})
コード例 #6
0
ファイル: main_views.py プロジェクト: sh4nks/subrosa
def download_article(id):
    article = Articles.get_article(id)
    if not article:
        abort(404)
    lines = article.body.splitlines()
    body = "\n".join([textwrap.fill(line, width=90) for line in lines])
    return Response(body,
                    mimetype="text/plain",
                    headers={
                        "Content-Disposition":
                        "attachment; filename={0}.md".format(article.slug)
                    })
コード例 #7
0
ファイル: main_views.py プロジェクト: sh4nks/subrosa
def account(username):
    """ Main account view """
    if username is None:
        return redirect("/admin")
    user = Users.get_user_by_username(username)
    if not user:
        abort(404)
    articles = Articles.get_user_articles(user.username)
    projects = UserProjects.get_all_projects()
    return render_template("dashboard.html",
                           user=user,
                           articles=articles,
                           projects=projects)
コード例 #8
0
ファイル: test_articles.py プロジェクト: agatka21/subrosa
    def test_misc_article_methods(self):

        with test_database(db, (Users, Articles)):
            user1 = Users.create_user(username = "******", password = "******")
            article = Articles.create_article(title = "test article", body = "test", draft = True, author = user1)

            Articles.update_article(article, title = "changed", body = "changed")
            self.assertEquals("changed", article.title)
            self.assertEquals("changed", article.body)

            Articles.publish_article(article)
            self.assertFalse(article.draft)

            Articles.delete_article(article)
            self.assertEquals(0, Articles.get_count(True))
コード例 #9
0
ファイル: main_views.py プロジェクト: agatka21/subrosa
def account(username):
    """ Main account view """
    if username is None:
        return redirect("/admin")
    user = Users.get_user_by_username(username)
    if not user:
        abort(404)
    articles = Articles.get_user_articles(user.username)
    projects = UserProjects.get_all_projects()
    return render_template("dashboard.html",
                           user=user,
                           articles=articles,
                           projects=projects
                           )
コード例 #10
0
    def test_misc_article_methods(self):

        with test_database(db, (Users, Articles)):
            user1 = Users.create_user(username="******", password="******")
            article = Articles.create_article(title="test article",
                                              body="test",
                                              draft=True,
                                              author=user1)

            Articles.update_article(article, title="changed", body="changed")
            self.assertEquals("changed", article.title)
            self.assertEquals("changed", article.body)

            Articles.publish_article(article)
            self.assertFalse(article.draft)

            Articles.delete_article(article)
            self.assertEquals(0, Articles.get_count(True))
コード例 #11
0
ファイル: main_views.py プロジェクト: agatka21/subrosa
def publish_article(id):
    article = Articles.get_article(id)
    if not article:
        abort(404)
    if article.author.username != session["user"]:
        flash("You can\'t publish other\'s peoples posts")
        return redirect(url_for("index"))
    else:
        try:
            article.publish_article()
            with app.app_context():
                cache.clear()
            flash("Article has been published")
        except:
            flash("Error when publishing article")
        finally:
            return redirect(url_for("account", username=session["user"]))
コード例 #12
0
ファイル: main_views.py プロジェクト: sh4nks/subrosa
def publish_article(id):
    article = Articles.get_article(id)
    if not article:
        abort(404)
    if article.author.username != session["user"]:
        flash("You can\'t publish other\'s peoples posts")
        return redirect(url_for("index"))
    else:
        try:
            article.publish_article()
            with app.app_context():
                cache.clear()
            flash("Article has been published")
        except:
            flash("Error when publishing article")
        finally:
            return redirect(url_for("account", username=session["user"]))
コード例 #13
0
ファイル: main_views.py プロジェクト: sh4nks/subrosa
def recent_feeds():
    """
    Generates Atom feeds
    Snippet created by Armin Ronacher
    """

    feed = AtomFeed("Recent Posts", feed_url=request.url, url=request.url_root)

    articles = Articles.select().limit(15)

    for article in articles:
        feed.add(article.title,
                 article.body[:320],
                 content_type="html",
                 author=article.author,
                 updated=article.date_updated,
                 url=make_external(article.slug),
                 published=article.date_created)
    return feed.get_response()
コード例 #14
0
ファイル: main_views.py プロジェクト: sh4nks/subrosa
def article_view(slug):
    article = Articles.get_article_by_slug(slug)
    if not article:
        abort(404)
    if not session.get("user", None) and article.draft is True:
        abort(404)
    author = article.author
    next_article = article.get_next_article()
    previous_article = article.get_previous_article()
    user_picture = settings.get("portrait", False)
    related_articles = article.get_similar_articles()
    show_related_articles = related_articles.wrapped_count(False) > 0
    article_series = article.get_article_series()
    return render_template("article_view.html",
                           article=article,
                           author=author,
                           user_picture=user_picture,
                           show_related_articles=show_related_articles,
                           related_articles=related_articles,
                           next_article=next_article,
                           article_series=article_series,
                           previous_article=previous_article)
コード例 #15
0
ファイル: main_views.py プロジェクト: agatka21/subrosa
def recent_feeds():

    """
    Generates Atom feeds
    Snippet created by Armin Ronacher
    """

    feed = AtomFeed("Recent Posts",
                    feed_url=request.url,
                    url=request.url_root)

    articles = Articles.select().limit(15)

    for article in articles:
        feed.add(article.title,
                 article.body[:320],
                 content_type="html",
                 author=article.author,
                 updated=article.date_updated,
                 url=make_external(article.slug),
                 published=article.date_created)
    return feed.get_response()
コード例 #16
0
ファイル: main_views.py プロジェクト: agatka21/subrosa
def article_view(slug):
    article = Articles.get_article_by_slug(slug)
    if not article:
        abort(404)
    if not session.get("user", None) and article.draft is True:
        abort(404)
    author = article.author
    next_article = article.get_next_article()
    previous_article = article.get_previous_article()
    user_picture = settings.get("portrait", False)
    related_articles = article.get_similar_articles()
    show_related_articles = related_articles.wrapped_count(False) > 0
    article_series = article.get_article_series()
    return render_template("article_view.html",
                           article=article,
                           author=author,
                           user_picture=user_picture,
                           show_related_articles=show_related_articles,
                           related_articles=related_articles,
                           next_article=next_article,
                           article_series=article_series,
                           previous_article=previous_article)
コード例 #17
0
ファイル: main_views.py プロジェクト: sh4nks/subrosa
def index(page):
    articles_per_page = settings.get("articles_per_page")
    articles = Articles.get_index_articles(page, articles_per_page)
    count = articles.wrapped_count()
    show_pagination = count > articles_per_page
    articles_written = count > 0
    if not articles_written and page != 1:
        abort(404)
    pagination = Pagination(page, articles_per_page, count)
    user = Users.get_user(1)
    images = dict()
    images['logo'] = settings['logo']
    images['portrait'] = settings['portrait']
    images['bg'] = settings['bg']
    if not user:
        return redirect(url_for('create_account'))
    return render_template("index.html",
                           pagination=pagination,
                           articles=articles,
                           images=images,
                           articles_written=articles_written,
                           show_pagination=show_pagination,
                           user=user)
コード例 #18
0
ファイル: main_views.py プロジェクト: agatka21/subrosa
def index(page):
    articles_per_page = settings.get("articles_per_page")
    articles = Articles.get_index_articles(page, articles_per_page)
    count = articles.wrapped_count()
    show_pagination = count > articles_per_page
    articles_written = count > 0
    if not articles_written and page != 1:
        abort(404)
    pagination = Pagination(page, articles_per_page, count)
    user = Users.get_user(1)
    images = dict()
    images['logo'] = settings['logo']
    images['portrait'] = settings['portrait']
    images['bg'] = settings['bg']
    if not user:
        return redirect(url_for('create_account'))
    return render_template("index.html",
                           pagination=pagination,
                           articles=articles,
                           images=images,
                           articles_written=articles_written,
                           show_pagination=show_pagination,
                           user=user
                           )
コード例 #19
0
 def get_object(self, id):
     return Articles.get_article(id)
コード例 #20
0
ファイル: main_views.py プロジェクト: agatka21/subrosa
def archives():

    articles = Articles.get_released_articles()

    return render_template("archives.html", articles=articles)
コード例 #21
0
ファイル: main_views.py プロジェクト: sh4nks/subrosa
def archives():

    articles = Articles.get_released_articles()

    return render_template("archives.html", articles=articles)
コード例 #22
0
    def test_getting_similar_articles(self):

        with test_database(db,
                           (Users, Articles, Categories, ArticleCategories)):
            Users.create_user(username="******", password="******")
            user1 = Users.select().get()

            for x in range(1, 8):
                globals()["article" + str(x)] = Articles.create_article(
                    title="test article" + str(x),
                    body="test",
                    draft=True,
                    author=user1)

            for y in range(1, 5):
                globals()["category" +
                          str(y)] = Categories.create(name="test" + str(y))

            ArticleCategories.create(article=article1, category=category1)
            ArticleCategories.create(article=article1, category=category2)
            ArticleCategories.create(article=article1, category=category3)

            ArticleCategories.create(article=article2, category=category1)
            ArticleCategories.create(article=article2, category=category2)
            ArticleCategories.create(article=article2, category=category3)

            ArticleCategories.create(article=article3, category=category1)
            ArticleCategories.create(article=article3, category=category2)
            ArticleCategories.create(article=article3, category=category3)

            ArticleCategories.create(article=article4, category=category1)
            ArticleCategories.create(article=article4, category=category2)

            ArticleCategories.create(article=article5, category=category1)
            ArticleCategories.create(article=article5, category=category2)
            ArticleCategories.create(article=article5, category=category3)

            ArticleCategories.create(article=article6, category=category2)

            ArticleCategories.create(article=article7, category=category4)

            sel = article1.get_similar_articles()

            self.assertIn("test article2", str(tuple(sel)))
            self.assertIn("test article3", str(tuple(sel)))
            self.assertIn("test article5", str(tuple(sel)))
            self.assertNotIn("test article1", str(tuple(sel)))
            self.assertNotIn("test article4", str(tuple(sel)))

            sel = article1.get_similar_articles(limit=4)

            self.assertIn("test article2", str(tuple(sel)))
            self.assertIn("test article3", str(tuple(sel)))
            self.assertIn("test article5", str(tuple(sel)))
            self.assertIn("test article4", str(tuple(sel)))
            self.assertNotIn("test article6", str(tuple(sel)))
            self.assertNotIn("test article1", str(tuple(sel)))

            sel = article1.get_similar_articles(common_categories=3, limit=5)

            self.assertIn("test article2", str(tuple(sel)))
            self.assertIn("test article3", str(tuple(sel)))
            self.assertIn("test article5", str(tuple(sel)))
            self.assertNotIn("test article1", str(tuple(sel)))
            self.assertNotIn("test article4", str(tuple(sel)))

            sel = article7.get_similar_articles()

            self.assertEquals(sel.wrapped_count(False), 0)

            # Test getting article categories while we're at it

            q = article1.get_article_categories()

            self.assertIn("test1", str(tuple(q)))
            self.assertIn("test2", str(tuple(q)))
            self.assertNotIn("test4", str(tuple(q)))
            q = article4.get_article_categories()
            self.assertIn("test1", str(tuple(q)))
            self.assertNotIn("test3", str(tuple(q)))

            q = article7.get_article_categories()
            self.assertIn("test4", str(tuple(q)))
            self.assertNotIn("test3", str(tuple(q)))
コード例 #23
0
ファイル: test_articles.py プロジェクト: agatka21/subrosa
    def test_getting_article_info(self):

        with test_database(db, (Users, Articles)):
            user1 = Users.create_user(username = "******", password = "******")
            article = Articles.create_article(title = "test article 1", \
                                    body = "test",
                                    author = user1)

            self.assertEquals("test-article-1", article.slug)
            self.assertEquals(article, Articles.get_article_by_slug("test-article-1"))
            article2 = Articles.create_article(title = "test article 2", body = "test", author = user1)
            self.assertEquals(article2, article.get_next_article(True))
            self.assertEquals(0,article.get_previous_article())
            self.assertEquals(article, article2.get_previous_article(True))
            self.assertEquals(0, article2.get_next_article())

            article3 = Articles.create_article(title = "test article 3",\
                                    body = "test",\
                                    draft = False,\
                                    author = user1)

            self.assertEquals(1, Articles.get_count(drafts = False))
            self.assertEquals(3, Articles.get_count(drafts = True))
            self.assertTrue(Articles.check_exists("test article 1"))
            self.assertFalse(Articles.check_exists("nonexistent"))

            for x in range(4,10):
                title = "test article %d" % x
                Articles.create_article(title = title, body = "test", author = user1, draft = False)

            self.assertEquals(9, Articles.get_count(True))

            paginated = Articles.get_index_articles(3, 3)

            self.assertEquals(7, paginated.wrapped_count())

            self.assertIn("test article 3", str(tuple(paginated)))
            self.assertNotIn("test article 1", str(tuple(paginated)))
            self.assertNotIn("test article 9", str(tuple(paginated)))

            paginated = Articles.get_index_articles(1, 3)

            self.assertIn("test article 9", str(tuple(paginated)))
            self.assertIn("test article 7", str(tuple(paginated)))
コード例 #24
0
    def test_getting_article_info(self):

        with test_database(db, (Users, Articles)):
            user1 = Users.create_user(username="******", password="******")
            article = Articles.create_article(title = "test article 1", \
                                    body = "test",
                                    author = user1)

            self.assertEquals("test-article-1", article.slug)
            self.assertEquals(article,
                              Articles.get_article_by_slug("test-article-1"))
            article2 = Articles.create_article(title="test article 2",
                                               body="test",
                                               author=user1)
            self.assertEquals(article2, article.get_next_article(True))
            self.assertEquals(0, article.get_previous_article())
            self.assertEquals(article, article2.get_previous_article(True))
            self.assertEquals(0, article2.get_next_article())

            article3 = Articles.create_article(title = "test article 3",\
                                    body = "test",\
                                    draft = False,\
                                    author = user1)

            self.assertEquals(1, Articles.get_count(drafts=False))
            self.assertEquals(3, Articles.get_count(drafts=True))
            self.assertTrue(Articles.check_exists("test article 1"))
            self.assertFalse(Articles.check_exists("nonexistent"))

            for x in range(4, 10):
                title = "test article %d" % x
                Articles.create_article(title=title,
                                        body="test",
                                        author=user1,
                                        draft=False)

            self.assertEquals(9, Articles.get_count(True))

            paginated = Articles.get_index_articles(3, 3)

            self.assertEquals(7, paginated.wrapped_count())

            self.assertIn("test article 3", str(tuple(paginated)))
            self.assertNotIn("test article 1", str(tuple(paginated)))
            self.assertNotIn("test article 9", str(tuple(paginated)))

            paginated = Articles.get_index_articles(1, 3)

            self.assertIn("test article 9", str(tuple(paginated)))
            self.assertIn("test article 7", str(tuple(paginated)))
コード例 #25
0
ファイル: test_articles.py プロジェクト: agatka21/subrosa
    def test_getting_similar_articles(self):

        with test_database(db, (Users, Articles, Categories, ArticleCategories)):
            Users.create_user(username = "******", password = "******")
            user1 = Users.select().get()


            for x in range(1, 8):
                globals()["article" + str(x)] = Articles.create_article(title = "test article" + str(x), body = "test", draft = True, author = user1)

            for y in range(1, 5):
                globals()["category" + str(y)] = Categories.create(name = "test" + str(y))


            ArticleCategories.create(article = article1, category = category1)
            ArticleCategories.create(article = article1, category = category2)
            ArticleCategories.create(article = article1, category = category3)

            ArticleCategories.create(article = article2, category = category1)
            ArticleCategories.create(article = article2, category = category2)
            ArticleCategories.create(article = article2, category = category3)

            ArticleCategories.create(article = article3, category = category1)
            ArticleCategories.create(article = article3, category = category2)
            ArticleCategories.create(article = article3, category = category3)


            ArticleCategories.create(article = article4, category = category1)
            ArticleCategories.create(article = article4, category = category2)

            ArticleCategories.create(article = article5, category = category1)
            ArticleCategories.create(article = article5, category = category2)
            ArticleCategories.create(article = article5, category = category3)

            ArticleCategories.create(article = article6, category = category2)

            ArticleCategories.create(article = article7, category = category4)


            sel = article1.get_similar_articles()

            self.assertIn("test article2", str(tuple(sel)))
            self.assertIn("test article3", str(tuple(sel)))
            self.assertIn("test article5", str(tuple(sel)))
            self.assertNotIn("test article1", str(tuple(sel)))
            self.assertNotIn("test article4", str(tuple(sel)))


            sel = article1.get_similar_articles(limit = 4)


            self.assertIn("test article2", str(tuple(sel)))
            self.assertIn("test article3", str(tuple(sel)))
            self.assertIn("test article5", str(tuple(sel)))
            self.assertIn("test article4", str(tuple(sel)))
            self.assertNotIn("test article6", str(tuple(sel)))
            self.assertNotIn("test article1", str(tuple(sel)))


            sel = article1.get_similar_articles(common_categories = 3, limit = 5)

            self.assertIn("test article2", str(tuple(sel)))
            self.assertIn("test article3", str(tuple(sel)))
            self.assertIn("test article5", str(tuple(sel)))
            self.assertNotIn("test article1", str(tuple(sel)))
            self.assertNotIn("test article4", str(tuple(sel)))



            sel = article7.get_similar_articles()

            self.assertEquals(sel.wrapped_count(False), 0)

            # Test getting article categories while we're at it

            q = article1.get_article_categories()
            
            self.assertIn("test1",str(tuple(q)) )
            self.assertIn("test2",str(tuple(q)))
            self.assertNotIn("test4", str(tuple(q)))
            q = article4.get_article_categories()
            self.assertIn("test1",str(tuple(q)) )
            self.assertNotIn("test3", str(tuple(q)))

            q = article7.get_article_categories()
            self.assertIn("test4",str(tuple(q)) )
            self.assertNotIn("test3", str(tuple(q)))