class ArticleDetail: def __init__(self): self.article_service = ArticleService() self.pdf_generator = PDFGenerator() self.style_article_pdf = StyleArticlePDF() def article_detail(self, request, slug, template="article/article_detail.html"): articles = self.article_service.get_published_articles_with_related_articles(request) article = process_tag_or_categories_or_article(slug, articles) page = get_page(request) article_map = get_article_map(True) if article_is_a_perspective(article): request.path_info = '/policy-edits/' page = get_page(request) return render(request, template, {"article": article, "page": page, 'form': MapFormForSideBar(initial={'map': article_map}), "latest_commented_articles": self.article_service.get_latest_unique_commented_on_articles()}) def build_response(self, article_title): response = HttpResponse(content_type=PDF_CONTENT_TYPE) response['Content-Disposition'] = urllib.quote(self.pdf_generator.generate_pdf_filename(article_title)) return response def build_pdf_content(self, article): return self.style_article_pdf.sytle_pdf_content(article) def article_download(self, request, slug): article = process_tag_or_categories_or_article(slug, self.article_service.get_published_articles_with_related_articles( request)) response = self.pdf_generator.generate_pdf_from_html(html=self.build_pdf_content(article), file=self.build_response(article_title=article.slug)) return response
class PDFGeneratorTest(TestCase): def setUp(self): self.pdf_generator = PDFGenerator() def test_unicode_pdf_filename(self): filename = self.pdf_generator.generate_pdf_filename( u"सध्याच्या विकासाच्या पर्यायांचा पाठपुरावा करण्याचा निर्धार करून ‘महाराष्ट्र विकल्प संगम’ची सांगता (IN MARATHI)") self.assertEqual( u"attachment; filename=सध्याच्या विकासाच्या पर्यायांचा पाठपुरावा करण्याचा निर्धार करून ‘महाराष्ट्र विकल्प संगम’ची सांगता (IN MARATHI).pdf", filename)