Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pdfkit for openSUSE:Factory checked in at 2021-03-30 21:01:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pdfkit (Old) and /work/SRC/openSUSE:Factory/.python-pdfkit.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pdfkit" Tue Mar 30 21:01:40 2021 rev:4 rq:870120 version:0.6.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pdfkit/python-pdfkit.changes 2019-01-08 12:30:26.948143237 +0100 +++ /work/SRC/openSUSE:Factory/.python-pdfkit.new.2401/python-pdfkit.changes 2021-03-30 21:01:40.848802346 +0200 @@ -1,0 +2,5 @@ +Sun Feb 7 15:35:26 UTC 2021 - John Vandenberg <jay...@gmail.com> + +- Add pdfkit-tests.py to activate test suite + +------------------------------------------------------------------- New: ---- pdfkit-tests.py ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pdfkit.spec ++++++ --- /var/tmp/diff_new_pack.dlHvQS/_old 2021-03-30 21:01:41.420802974 +0200 +++ /var/tmp/diff_new_pack.dlHvQS/_new 2021-03-30 21:01:41.420802974 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-pdfkit # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -25,6 +25,7 @@ Group: Development/Languages/Python URL: https://github.com/JazzCore/python-pdfkit Source: https://files.pythonhosted.org/packages/source/p/pdfkit/pdfkit-%{version}.tar.gz +Source1: https://raw.githubusercontent.com/JazzCore/python-pdfkit/master/tests/pdfkit-tests.py BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros @@ -41,6 +42,13 @@ %prep %setup -q -n pdfkit-%{version} +cp %{SOURCE1} . + +# Replicate https://github.com/JazzCore/python-pdfkit/tree/master/tests/fixtures +mkdir fixtures +echo 'body { font-size: 80px; }' > fixtures/example.css +echo 'a { color: blue; }' > fixtures/example2.css +echo '<html><head></head><body><h1>Oh Hai!</h1></body></html>' > fixtures/example.html %build %python_build @@ -49,6 +57,9 @@ %python_install %python_expand %fdupes %{buildroot}%{$python_sitelib} +%check +%pytest pdfkit-tests.py -k 'not (test_pdf_generation_from_file_like or test_pdf_generation)' + %files %{python_files} %license LICENSE %doc README.rst ++++++ pdfkit-tests.py ++++++ # -*- coding: utf-8 -*- import os import io import sys import codecs import unittest if sys.version_info[0] == 2 and sys.version_info[1] == 7: unittest.TestCase.assertRegex = unittest.TestCase.assertRegexpMatches #Prepend ../ to PYTHONPATH so that we can import PDFKIT form there. TESTS_ROOT = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, os.path.realpath(os.path.join(TESTS_ROOT, '..'))) import pdfkit class TestPDFKitInitialization(unittest.TestCase): """Test init""" def test_html_source(self): r = pdfkit.PDFKit('<h1>Oh hai</h1>', 'string') self.assertTrue(r.source.isString()) def test_url_source(self): r = pdfkit.PDFKit('http://ya.ru', 'url') self.assertTrue(r.source.isUrl()) def test_file_source(self): r = pdfkit.PDFKit('fixtures/example.html', 'file') self.assertTrue(r.source.isFile()) def test_file_object_source(self): with open('fixtures/example.html') as fl: r = pdfkit.PDFKit(fl, 'file') self.assertTrue(r.source.isFileObj()) def test_file_source_with_path(self): r = pdfkit.PDFKit('test', 'string') with io.open('fixtures/example.css') as f: self.assertTrue(r.source.isFile(path=f)) with codecs.open('fixtures/example.css', encoding='UTF-8') as f: self.assertTrue(r.source.isFile(path=f)) def test_options_parsing(self): r = pdfkit.PDFKit('html', 'string', options={'page-size': 'Letter'}) test_command = r.command('test') idx = test_command.index('--page-size') # Raise exception in case of not found self.assertTrue(test_command[idx+1] == 'Letter') def test_options_parsing_with_dashes(self): r = pdfkit.PDFKit('html', 'string', options={'--page-size': 'Letter'}) test_command = r.command('test') idx = test_command.index('--page-size') # Raise exception in case of not found self.assertTrue(test_command[idx+1] == 'Letter') def test_options_parsing_with_tuple(self): options = { '--custom-header': [ ('Accept-Encoding','gzip') ] } r = pdfkit.PDFKit('html', 'string', options=options) command = r.command() idx1 = command.index('--custom-header') # Raise exception in case of not found self.assertTrue(command[idx1 + 1] == 'Accept-Encoding') self.assertTrue(command[idx1 + 2] == 'gzip') def test_options_parsing_with_tuple_no_dashes(self): options = { 'custom-header': [ ('Accept-Encoding','gzip') ] } r = pdfkit.PDFKit('html', 'string', options=options) command = r.command() idx1 = command.index('--custom-header') # Raise exception in case of not found self.assertTrue(command[idx1 + 1] == 'Accept-Encoding') self.assertTrue(command[idx1 + 2] == 'gzip') def test_repeatable_options(self): roptions = { '--page-size': 'Letter', 'cookies': [ ('test_cookie1','cookie_value1'), ('test_cookie2','cookie_value2'), ] } r = pdfkit.PDFKit('html', 'string', options=roptions) test_command = r.command('test') idx1 = test_command.index('--page-size') # Raise exception in case of not found self.assertTrue(test_command[idx1 + 1] == 'Letter') self.assertTrue(test_command.count('--cookies') == 2) idx2 = test_command.index('--cookies') self.assertTrue(test_command[idx2 + 1] == 'test_cookie1') self.assertTrue(test_command[idx2 + 2] == 'cookie_value1') idx3 = test_command.index('--cookies', idx2 + 2) self.assertTrue(test_command[idx3 + 1] == 'test_cookie2') self.assertTrue(test_command[idx3 + 2] == 'cookie_value2') def test_custom_configuration(self): conf = pdfkit.configuration() self.assertEqual('pdfkit-', conf.meta_tag_prefix) conf = pdfkit.configuration(meta_tag_prefix='prefix-') self.assertEqual('prefix-', conf.meta_tag_prefix) with self.assertRaises(IOError): conf = pdfkit.configuration(wkhtmltopdf='wrongpath') class TestPDFKitCommandGeneration(unittest.TestCase): """Test command() method""" def test_command_construction(self): r = pdfkit.PDFKit('html', 'string', options={'page-size': 'Letter', 'toc-l1-font-size': 12}) command = r.command() self.assertEqual(command[0], r.wkhtmltopdf) self.assertEqual(command[command.index('--page-size') + 1], 'Letter') self.assertEqual(command[command.index('--toc-l1-font-size') + 1], '12') def test_lists_of_input_args(self): urls = ['http://ya.ru', 'http://google.com'] paths = ['fixtures/example.html', 'fixtures/example.html'] r = pdfkit.PDFKit(urls, 'url') r2 = pdfkit.PDFKit(paths, 'file') cmd = r.command() cmd2 = r2.command() self.assertEqual(cmd[-3:], ['http://ya.ru', 'http://google.com', '-']) self.assertEqual(cmd2[-3:], ['fixtures/example.html', 'fixtures/example.html', '-']) def test_read_source_from_stdin(self): r = pdfkit.PDFKit('html', 'string') self.assertEqual(r.command()[-2:], ['-', '-']) def test_url_in_command(self): r = pdfkit.PDFKit('http://ya.ru', 'url') self.assertEqual(r.command()[-2:], ['http://ya.ru', '-']) def test_file_path_in_command(self): path = 'fixtures/example.html' r = pdfkit.PDFKit(path, 'file') self.assertEqual(r.command()[-2:], [path, '-']) def test_output_path(self): out = '/test/test2/out.pdf' r = pdfkit.PDFKit('html', 'string') self.assertEqual(r.command(out)[-1:], ['/test/test2/out.pdf']) def test_pdfkit_meta_tags(self): body = """ <html> <head> <meta name="pdfkit-page-size" content="Legal"/> <meta name="pdfkit-orientation" content="Landscape"/> </head> """ r = pdfkit.PDFKit(body, 'string') command = r.command() self.assertEqual(command[command.index('--page-size') + 1], 'Legal') self.assertEqual(command[command.index('--orientation') + 1], 'Landscape') def test_pdfkit_meta_tags_in_bad_markup(self): body = """ <html> <head> <meta name="pdfkit-page-size" content="Legal"/> <meta name="pdfkit-orientation" content="Landscape"/> </head> <br> </html> """ r = pdfkit.PDFKit(body, 'string') command = r.command() self.assertEqual(command[command.index('--page-size') + 1], 'Legal') self.assertEqual(command[command.index('--orientation') + 1], 'Landscape') def test_skip_nonpdfkit_tags(self): body = """ <html> <head> <meta name="test-page-size" content="Legal"/> <meta name="pdfkit-orientation" content="Landscape"/> </head> <br> </html> """ r = pdfkit.PDFKit(body, 'string') command = r.command() self.assertEqual(command[command.index('--orientation') + 1], 'Landscape') def test_toc_handling_without_options(self): r = pdfkit.PDFKit('hmtl', 'string', toc={'xsl-style-sheet': 'test.xsl'}) self.assertEqual(r.command()[1], 'toc') self.assertEqual(r.command()[2], '--xsl-style-sheet') def test_toc_with_options(self): options = { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8" } r = pdfkit.PDFKit('html', 'string', options=options, toc={'xsl-style-sheet': 'test.xsl'}) command = r.command() self.assertEqual(command[1 + len(options) * 2], 'toc') self.assertEqual(command[1 + len(options) * 2 + 1], '--xsl-style-sheet') def test_cover_without_options(self): r = pdfkit.PDFKit('html', 'string', cover='test.html') command = r.command() self.assertEqual(command[1], 'cover') self.assertEqual(command[2], 'test.html') def test_cover_with_options(self): options = { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8" } r = pdfkit.PDFKit('html', 'string', options=options, cover='test.html') command = r.command() self.assertEqual(command[1 + len(options) * 2], 'cover') self.assertEqual(command[1 + len(options) * 2 + 1], 'test.html') def test_cover_and_toc(self): options = { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8" } r = pdfkit.PDFKit('html', 'string', options=options, toc={'xsl-style-sheet': 'test.xsl'}, cover='test.html') command = r.command() self.assertEqual(command[-7:], ['toc', '--xsl-style-sheet', 'test.xsl', 'cover', 'test.html', '-', '-']) def test_cover_and_toc_cover_first(self): options = { 'page-size': 'Letter', 'margin-top': '0.75in', 'margin-right': '0.75in', 'margin-bottom': '0.75in', 'margin-left': '0.75in', 'encoding': "UTF-8" } r = pdfkit.PDFKit('html', 'string', options=options, toc={'xsl-style-sheet': 'test.xsl'}, cover='test.html', cover_first=True) command = r.command() self.assertEqual(command[-7:], ['cover', 'test.html', 'toc', '--xsl-style-sheet', 'test.xsl', '-', '-']) def test_outline_options(self): options = { 'outline': None, 'outline-depth': 1 } r = pdfkit.PDFKit('ya.ru', 'url', options=options) cmd = r.command() #self.assertEqual(cmd[1:], ['--outline', '--outline-depth', '1', 'ya.ru', '-']) self.assertIn('--outline', cmd) self.assertEqual(cmd[cmd.index('--outline-depth') + 1], '1') def test_filter_empty_and_none_values_in_opts(self): options = { 'outline': '', 'footer-line': None, 'quiet': False } r = pdfkit.PDFKit('html', 'string', options=options) cmd = r.command() self.assertEqual(len(cmd), 6) class TestPDFKitGeneration(unittest.TestCase): """Test to_pdf() method""" def setUp(self): pass def tearDown(self): if os.path.exists('out.pdf'): os.remove('out.pdf') def test_pdf_generation(self): r = pdfkit.PDFKit('html', 'string', options={'page-size': 'Letter'}) pdf = r.to_pdf('out.pdf') self.assertTrue(pdf) def test_raise_error_with_invalid_url(self): r = pdfkit.PDFKit('wrongurl', 'url') with self.assertRaises(IOError): r.to_pdf('out.pdf') def test_raise_error_with_invalid_file_path(self): paths = ['frongpath.html', 'wrongpath2.html'] with self.assertRaises(IOError): pdfkit.PDFKit('wrongpath.html', 'file') with self.assertRaises(IOError): pdfkit.PDFKit(paths, 'file') def test_stylesheet_adding_to_the_head(self): #TODO rewrite this part of pdfkit.py r = pdfkit.PDFKit('<html><head></head><body>Hai!</body></html>', 'string', css='fixtures/example.css') with open('fixtures/example.css') as f: css = f.read() r._prepend_css('fixtures/example.css') self.assertIn('<style>%s</style>' % css, r.source.to_s()) def test_stylesheet_adding_without_head_tag(self): r = pdfkit.PDFKit('<html><body>Hai!</body></html>', 'string', options={'quiet': None}, css='fixtures/example.css') with open('fixtures/example.css') as f: css = f.read() r._prepend_css('fixtures/example.css') self.assertIn('<style>%s</style><html>' % css, r.source.to_s()) def test_multiple_stylesheets_adding_to_the_head(self): #TODO rewrite this part of pdfkit.py css_files = ['fixtures/example.css', 'fixtures/example2.css'] r = pdfkit.PDFKit('<html><head></head><body>Hai!</body></html>', 'string', css=css_files) css=[] for css_file in css_files: with open(css_file) as f: css.append(f.read()) r._prepend_css(css_files) self.assertIn('<style>%s</style>' % "\n".join(css), r.source.to_s()) def test_multiple_stylesheet_adding_without_head_tag(self): css_files = ['fixtures/example.css', 'fixtures/example2.css'] r = pdfkit.PDFKit('<html><body>Hai!</body></html>', 'string', options={'quiet': None}, css=css_files) css=[] for css_file in css_files: with open(css_file) as f: css.append(f.read()) r._prepend_css(css_files) self.assertIn('<style>%s</style><html>' % "\n".join(css), r.source.to_s()) def test_stylesheet_throw_error_when_url(self): r = pdfkit.PDFKit('http://ya.ru', 'url', css='fixtures/example.css') with self.assertRaises(r.ImproperSourceError): r.to_pdf() def test_stylesheet_adding_to_file_with_option(self): css = 'fixtures/example.css' r = pdfkit.PDFKit('fixtures/example.html', 'file', css=css) self.assertEqual(r.css, css) r._prepend_css(css) self.assertIn('font-size', r.source.to_s()) def test_wkhtmltopdf_error_handling(self): r = pdfkit.PDFKit('clearlywrongurl.asdf', 'url') with self.assertRaises(IOError): r.to_pdf() def test_pdf_generation_from_file_like(self): with open('fixtures/example.html', 'r') as f: r = pdfkit.PDFKit(f, 'file') output = r.to_pdf() self.assertEqual(output[:4].decode('utf-8'), '%PDF') def test_raise_error_with_wrong_css_path(self): css = 'fixtures/wrongpath.css' r = pdfkit.PDFKit('fixtures/example.html', 'file', css=css) with self.assertRaises(IOError): r.to_pdf() def test_raise_error_if_bad_wkhtmltopdf_option(self): r = pdfkit.PDFKit('<html><body>Hai!</body></html>', 'string', options={'bad-option': None}) with self.assertRaises(IOError) as cm: r.to_pdf() raised_exception = cm.exception self.assertRegex(str(raised_exception), '^wkhtmltopdf exited with non-zero code 1. error:\nUnknown long argument --bad-option\r?\n') if __name__ == "__main__": unittest.main()