Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pypandoc for openSUSE:Factory 
checked in at 2021-12-05 22:46:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pypandoc (Old)
 and      /work/SRC/openSUSE:Factory/.python-pypandoc.new.31177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pypandoc"

Sun Dec  5 22:46:13 2021 rev:4 rq:935726 version:1.6.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pypandoc/python-pypandoc.changes  
2020-12-28 10:31:46.857599521 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-pypandoc.new.31177/python-pypandoc.changes   
    2021-12-05 22:47:06.809446169 +0100
@@ -1,0 +2,7 @@
+Sat Dec  4 23:33:35 UTC 2021 - John Vandenberg <jay...@gmail.com>
+
+- Update to v1.6.4
+- Remove no longer needed fix-test.patch
+- Add tests.py from upstream master to workaround failures
+
+-------------------------------------------------------------------

Old:
----
  fix-test.patch
  pypandoc-1.5.tar.gz

New:
----
  pypandoc-1.6.4.tar.gz
  tests.py

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pypandoc.spec ++++++
--- /var/tmp/diff_new_pack.Hr06Cm/_old  2021-12-05 22:47:07.309444539 +0100
+++ /var/tmp/diff_new_pack.Hr06Cm/_new  2021-12-05 22:47:07.313444526 +0100
@@ -18,22 +18,19 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-pypandoc
-Version:        1.5
+Version:        1.6.4
 Release:        0
 Summary:        Thin wrapper for pandoc
 License:        MIT
 Group:          Development/Languages/Python
 URL:            https://github.com/bebraw/pypandoc
-Source:         
https://pypi.org/packages/source/p/pypandoc/pypandoc-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM fix-test.patch -- ATX-style headings are default for
-# markdown, see https://pandoc.org/MANUAL#option--markdown-headings
-Patch1:         fix-test.patch
+Source:         
https://github.com/NicklasTegner/pypandoc/archive/refs/tags/v%{version}.tar.gz#/pypandoc-%{version}.tar.gz
+Source1:        
https://raw.githubusercontent.com/NicklasTegner/pypandoc/master/tests.py
 BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
-BuildRequires:  ghc-citeproc
 BuildRequires:  pandoc
 BuildRequires:  python-rpm-macros
 BuildRequires:  texlive-latex-bin
@@ -49,9 +46,8 @@
 
 %prep
 %setup -q -n pypandoc-%{version}
-%autopatch -p1
-# Disable test that requires internet
-sed -i 's/\(test_basic_conversion_from_http_url\)/_\1/' tests.py
+
+cp %{SOURCE1} tests.py
 
 %build
 %python_build
@@ -61,9 +57,8 @@
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
-# test_conversion_with_citeproc_filter depends on ghc-pandoc-citeproc
-# which was removed from factory
-%pytest tests.py -k 'not test_conversion_with_citeproc_filter'
+# test_basic_conversion_from_http_url needs network
+%pytest tests.py -k 'not test_basic_conversion_from_http_url'
 
 %files %{python_files}
 %license LICENSE

++++++ pypandoc-1.5.tar.gz -> pypandoc-1.6.4.tar.gz ++++++
++++ 2482 lines of diff (skipped)

++++++ tests.py ++++++
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import contextlib
import io
import os
import shutil
import subprocess
import sys
import tempfile
import unittest
import warnings

import pypandoc
from pypandoc.py3compat import path2url, string_types, unicode_type


@contextlib.contextmanager
def closed_tempfile(suffix, text=None, dir_name=None):
    file_name = None
    try:
        if dir_name:
            dir_name = tempfile.mkdtemp(suffix=dir_name)

        with tempfile.NamedTemporaryFile('w+t', suffix=suffix, delete=False, 
dir=dir_name) as test_file:
            file_name = test_file.name
            if text:
                test_file.write(text)
                test_file.flush()
        yield file_name
    finally:
        if dir_name:
            shutil.rmtree(dir_name, ignore_errors=True)
        elif file_name:
            os.remove(file_name)


# Stolen from pandas
def is_list_like(arg):
    return (hasattr(arg, '__iter__') and
            not isinstance(arg, string_types))


@contextlib.contextmanager
def assert_produces_warning(expected_warning=Warning, filter_level="always",
                            clear=None, check_stacklevel=True):
    """
    Context manager for running code that expects to raise (or not raise)
    warnings.  Checks that code raises the expected warning and only the
    expected warning. Pass ``False`` or ``None`` to check that it does *not*
    raise a warning. Defaults to ``exception.Warning``, baseclass of all
    Warnings. (basically a wrapper around ``warnings.catch_warnings``).
    >>> import warnings
    >>> with assert_produces_warning():
    ...     warnings.warn(UserWarning())
    ...
    >>> with assert_produces_warning(False):
    ...     warnings.warn(RuntimeWarning())
    ...
    Traceback (most recent call last):
        ...
    AssertionError: Caused unexpected warning(s): ['RuntimeWarning'].
    >>> with assert_produces_warning(UserWarning):
    ...     warnings.warn(RuntimeWarning())
    Traceback (most recent call last):
        ...
    AssertionError: Did not see expected warning of class 'UserWarning'.
    ..warn:: This is *not* thread-safe.
    """
    with warnings.catch_warnings(record=True) as w:

        if clear is not None:
            # make sure that we are clearing these warnings
            # if they have happened before
            # to guarantee that we will catch them
            if not is_list_like(clear):
                clear = [clear]
            for m in clear:
                try:
                    m.__warningregistry__.clear()
                except Exception as e:
                    # ignore...
                    print(str(e))

        saw_warning = False
        warnings.simplefilter(filter_level)
        yield w
        extra_warnings = []

        for actual_warning in w:
            if (expected_warning and issubclass(actual_warning.category,
                                                expected_warning)):
                saw_warning = True

                if check_stacklevel and issubclass(actual_warning.category,
                                                   (FutureWarning,
                                                    DeprecationWarning)):
                    from inspect import getframeinfo, stack
                    caller = getframeinfo(stack()[2][0])
                    msg = (("Warning not set with correct stacklevel. " +
                            "File where warning is raised: {0} != {1}. " +
                            "Warning message: {2}").format(
                        actual_warning.filename, caller.filename,
                        actual_warning.message))
                    assert actual_warning.filename == caller.filename, msg
            else:
                extra_warnings.append(actual_warning.category.__name__)
        if expected_warning:
            assert saw_warning, ("Did not see expected warning of class %r."
                                 % expected_warning.__name__)
        assert not extra_warnings, ("Caused unexpected warning(s): %r."
                                    % extra_warnings)


class TestPypandoc(unittest.TestCase):

    # Python 2 compatibility
    if not hasattr(unittest.TestCase, 'assertRaisesRegex'):
        assertRaisesRegex = unittest.TestCase.assertRaisesRegexp

    def setUp(self):
        if 'HOME' not in os.environ:
            # if this is used with older versions of pandoc-citeproc
            # https://github.com/jgm/pandoc-citeproc/issues/35
            if 'TRAVIS_BUILD_DIR' in os.environ:
                os.environ["HOME"] = os.environ["TRAVIS_BUILD_DIR"]
                print("Using TRAVIS_BUILD_DIR as HOME")
            else:
                os.environ["HOME"] = str(os.getcwd())
                print("Using current dir as HOME")
        print(os.environ["HOME"])

    def test_get_pandoc_formats(self):
        inputs, outputs = pypandoc.get_pandoc_formats()
        self.assertTrue("markdown" in inputs)
        self.assertTrue("json" in inputs)
        self.assertTrue("twiki" in inputs)
        self.assertTrue("markdown" in outputs)

    def test_get_pandoc_version(self):
        assert "HOME" in os.environ, "No HOME set, this will error..."
        version = pypandoc.get_pandoc_version()
        self.assertTrue(isinstance(version, pypandoc.string_types))
        major = int(version.split(".")[0])
        # according to http://pandoc.org/releases.html there were only two 
versions 0.x ...
        self.assertTrue(major in [0, 1, 2])

    def test_converts_valid_format(self):
        self.assertEqualExceptForNewlineEnd(pypandoc.convert_text("ok", 
format='md', to='rest'), 'ok')

    def test_does_not_convert_to_invalid_format(self):
        def f():
            pypandoc.convert_text("ok", format='md', to='invalid')

        with self.assertRaisesRegex(RuntimeError, "Invalid output format! Got 
invalid but "):
            f()

    def test_does_not_convert_from_invalid_format(self):
        def f():
            pypandoc.convert_text("ok", format='invalid', to='rest')

        with self.assertRaisesRegex(RuntimeError, 'Invalid input format! Got 
"invalid" but '):
            f()

    def test_basic_conversion_from_file(self):
        with closed_tempfile('.md', text='# some title\n') as file_name:
            expected = u'some title{0}=========={0}{0}'.format(os.linesep)
            received = pypandoc.convert_file(file_name, 'rst')
            self.assertEqualExceptForNewlineEnd(expected, received)

    @unittest.skipIf(sys.platform.startswith("win"), "File based urls do not 
work on windows: "
                                                     
"https://github.com/jgm/pandoc/issues/4613";)
    def test_basic_conversion_from_file_url(self):
        with closed_tempfile('.md', text='# some title\n') as file_name:
            expected = u'some title{0}=========={0}{0}'.format(os.linesep)
            # this keeps the : (which should be '|' on windows but pandoc
            # doesn't like it
            file_url = path2url(file_name)
            assert pypandoc._identify_path(file_url)

            received = pypandoc.convert_file(file_url, 'rst')
            self.assertEqualExceptForNewlineEnd(expected, received)

    def test_basic_conversion_from_http_url(self):
        url = 
'https://raw.githubusercontent.com/bebraw/pypandoc/master/README.md'
        received = pypandoc.convert_file(url, 'html')
        assert "GPL2 license" in received

    def test_convert_with_custom_writer(self):
        lua_file_content = self.create_sample_lua()
        with closed_tempfile('.md', text='# title\n') as file_name:
            with closed_tempfile('.lua', text=lua_file_content, 
dir_name="foo-bar+baz") as lua_file_name:
                expected = u'<h1 id="title">title</h1>{0}'.format(os.linesep)
                received = pypandoc.convert_file(file_name, lua_file_name)
                self.assertEqualExceptForNewlineEnd(expected, received)

    def test_basic_conversion_from_file_with_format(self):
        with closed_tempfile('.md', text='# some title\n') as file_name:
            expected = u'some title{0}=========={0}{0}'.format(os.linesep)
            received = pypandoc.convert_file(file_name, 'rst', format='md')
            self.assertEqualExceptForNewlineEnd(expected, received)

            received = pypandoc.convert_file(file_name, 'rst', format='md')
            self.assertEqualExceptForNewlineEnd(expected, received)

    def test_basic_conversion_from_string(self):
        expected = u'some title{0}=========={0}{0}'.format(os.linesep)
        received = pypandoc.convert_text('# some title', 'rst', format='md')
        self.assertEqualExceptForNewlineEnd(expected, received)

        expected = u'some title{0}=========={0}{0}'.format(os.linesep)
        received = pypandoc.convert_text('# some title', 'rst', format='md')
        self.assertEqualExceptForNewlineEnd(expected, received)

    def test_conversion_with_markdown_extensions(self):
        input = '<s>strike</s>'
        expected_with_extension = u'~~strike~~'
        expected_without_extension = u'<s>strike</s>'
        received_with_extension = pypandoc.convert_text(input, 
'markdown+strikeout',
                                                   format='html')
        received_without_extension = pypandoc.convert_text(input,
                                                      'markdown-strikeout',
                                                      format='html')
        self.assertEqualExceptForNewlineEnd(expected_with_extension, 
received_with_extension)
        self.assertEqualExceptForNewlineEnd(expected_without_extension, 
received_without_extension)

    def test_conversion_from_markdown_with_extensions(self):
        # Apparently without the extension, ~~ gets turned into different code
        # depending on the pandoc version. So we do not test for that anymore...
        input = u'~~strike~~'
        expected_with_extension = u'<p><del>strike</del></p>'
        received_with_extension = pypandoc.convert_text(input, 'html', 
format=u'markdown+strikeout')
        self.assertEqualExceptForNewlineEnd(expected_with_extension, 
received_with_extension)

    def test_basic_conversion_to_file(self):
        with closed_tempfile('.rst', ) as file_name:
            expected = u'some title{0}=========={0}{0}'.format(os.linesep)
            received = pypandoc.convert_text('# some title\n', to='rst', 
format='md', outputfile=file_name)
            self.assertEqualExceptForNewlineEnd("", received)
            with io.open(file_name) as f:
                written = f.read()
            self.assertEqualExceptForNewlineEnd(expected, written)

        # to odf does not work without a file
        def f():
            pypandoc.convert_text('# some title\n', to='odf', format='md',
                             outputfile=None)

        with self.assertRaisesRegex(RuntimeError, "Invalid output format! Got 
odf but "):
            f()

    def test_conversion_with_empty_filter(self):
        # we just want to get a temp file name, where we can write to
        filters = ''
        written = pypandoc.convert_file('./filter_test.md', to='html', 
format='md',
                                   outputfile=None, filters=filters)
        import re as re
        # This should not use the pandoc-citeproc module and will not find the
        # strings
        found = re.search(r'Fenner', written)
        self.assertTrue(found is None)
        found = re.search(r'10.1038', written)
        self.assertTrue(found is None)

    def test_conversion_error(self):
        # pandoc dies on wrong commandline arguments
        def f():
            pypandoc.convert_text('<h1>Primary Heading</h1>', 'md', 
format='html', extra_args=["--blah"])

        with self.assertRaisesRegex(RuntimeError, 'Pandoc died with exitcode 
"6" during conversion: Unknown option --blah'):
            f()

    def test_unicode_input(self):
        # make sure that pandoc always returns unicode and does not mishandle it
        expected = u'????????????{0}'.format(os.linesep)
        written = pypandoc.convert_text(u'<p>????????????</p>', 'md', 
format='html')
        self.assertTrue(isinstance(written, unicode_type))
        self.assertEqualExceptForNewlineEnd(expected, written)
        bytes = u'<p>????????????</p>'.encode("utf-8")
        written = pypandoc.convert_text(bytes, 'md', format='html')
        self.assertTrue(expected == written)
        self.assertTrue(isinstance(written, unicode_type))

        # Only use german umlauts in the next test, as iso-8859-15 covers that
        expected = u'????????{0}'.format(os.linesep)
        bytes = u'<p>????????</p>'.encode("iso-8859-15")

        # Without encoding, this fails as we expect utf-8 per default

        def f():
            written = pypandoc.convert_text(bytes, 'md', format='html')

            assert expected != written

        def f():
            # we have to use something which interprets '\xa4', so latin and -1 
does not work :-/
            written = pypandoc.convert_text(bytes, 'md', format='html', 
encoding="utf-16")

            assert expected != written
        # with the right encoding it should work...
        written = pypandoc.convert_text(bytes, 'md', format='html', 
encoding="iso-8859-15")
        self.assertEqualExceptForNewlineEnd(expected, written)
        self.assertTrue(isinstance(written, unicode_type))

    def test_conversion_from_non_plain_text_file(self):
        with closed_tempfile('.docx') as file_name:
            expected = u'some title{0}=========={0}{0}'.format(os.linesep)
            # let's just test conversion (to and) from docx, testing e.g. odt
            # as well would really be testing pandoc rather than pypandoc
            received = pypandoc.convert_text('# some title\n', to='docx', 
format='md', outputfile=file_name)
            self.assertEqualExceptForNewlineEnd("", received)
            received = pypandoc.convert_file(file_name, to='rst')
            self.assertEqualExceptForNewlineEnd(expected, received)

    def test_pdf_conversion(self):
        with closed_tempfile('.pdf') as file_name:
            ret = pypandoc.convert_text('# some title\n', to='pdf', 
format='md', outputfile=file_name)
            assert ret == ""
            with io.open(file_name, mode='rb') as f:
                written = f.read()
            assert written[:4] == b"%PDF"
            # TODO: find a test for the content?

        def f():
            # needs an outputfile
            pypandoc.convert_text('# some title\n', to='pdf', format='md')

        with self.assertRaisesRegex(RuntimeError, "Output to pdf only works by 
using a outputfile"):
            f()

        # outputfile needs to end in pdf
        with closed_tempfile('.WRONG') as file_name:
            def f():
                pypandoc.convert_text('# some title\n', to='pdf', format='md', 
outputfile=file_name)

            with self.assertRaisesRegex(RuntimeError, 'PDF output needs an 
outputfile with ".pdf" as a fileending'):
                f()

        # no extensions allowed
        with closed_tempfile('.pdf') as file_name:
            def f():
                pypandoc.convert_text('# some title\n', to='pdf+somethign', 
format='md', outputfile=file_name)

            with self.assertRaisesRegex(RuntimeError, r"PDF output can't 
contain any extensions: pdf\+somethign"):
                f()

    def test_get_pandoc_path(self):
        result = pypandoc.get_pandoc_path()
        assert "pandoc" in result

    def test_call_with_nonexisting_file(self):
        files = ['/file/does/not/exists.md',
                 'file:///file/does/not/exists.md'
                 '',
                 42,
                 None
                 ]

        def f(filepath):
            pypandoc.convert_file(filepath, 'rst')

        for filepath in files:
            with self.assertRaisesRegex(RuntimeError, "source_file is not a 
valid path"):
                f(filepath)

    def test_convert_text_with_existing_file(self):
        with closed_tempfile('.md', text='# some title\n') as file_name:
            received = pypandoc.convert_text(file_name, 'rst', format='md')
            self.assertTrue("title" not in received)

            # The following is a problematic case
            received = pypandoc.convert_file(file_name, 'rst', format='md')
            self.assertTrue("title" in received)

    def test_depreaction_warnings(self):
        # convert itself is deprecated...
        with assert_produces_warning(DeprecationWarning):
            pypandoc.convert('# some title\n', to='rst', format='md')

    def create_sample_lua(self):
        args = [pypandoc.get_pandoc_path(), '--print-default-data-file', 
'sample.lua']
        p = subprocess.Popen(args, stdout=subprocess.PIPE)
        out, err = p.communicate()
        return out.decode('utf-8')

    def assertEqualExceptForNewlineEnd(self, expected, received):  # noqa
        # output written to a file does not seem to have os.linesep
        # handle everything here by replacing the os linesep by a simple \n
        expected = expected.replace(os.linesep, "\n")
        received = received.replace(os.linesep, "\n")
        self.assertEqual(expected.rstrip('\n'), received.rstrip('\n'))


if __name__ == '__main__':
    suite = unittest.TestLoader().loadTestsFromTestCase(TestPypandoc)
    ret = unittest.TextTestRunner(verbosity=2).run(suite)
    sys.exit(0 if ret.wasSuccessful() else 1)

Reply via email to