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)))
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)
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)))
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)
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)})
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) })
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)
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))
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 )
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))
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"]))
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()
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)
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)
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 )
def get_object(self, id): return Articles.get_article(id)
def archives(): articles = Articles.get_released_articles() return render_template("archives.html", articles=articles)
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)))
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)))
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)))
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)))