Hello community,

here is the log from the commit of package python-pip-licenses for 
openSUSE:Factory checked in at 2020-10-23 12:21:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pip-licenses (Old)
 and      /work/SRC/openSUSE:Factory/.python-pip-licenses.new.3463 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pip-licenses"

Fri Oct 23 12:21:10 2020 rev:4 rq:839485 version:2.3.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pip-licenses/python-pip-licenses.changes  
2020-05-19 14:56:55.665193573 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pip-licenses.new.3463/python-pip-licenses.changes
        2020-10-23 12:22:22.708684017 +0200
@@ -1,0 +2,16 @@
+Sun Oct  4 14:33:50 UTC 2020 - John Vandenberg <jay...@gmail.com>
+
+- Add missing runtime dependency on pip
+- Update to v3.1.1
+  * Implement new option for manage unicode characters
+    + `--filter-strings`
+    + `--filter-code-page`
+- from v2.2.1
+  * Fixed the file that is selected when multiple matches are made
+    with `LICENSE*` with run `--with-license-file`
+- from v2.2.0
+  * Implement new option `--with-notice-file`
+  * Added to find British style file name `LICENCE` with run
+    `--with-license-file`
+
+-------------------------------------------------------------------

Old:
----
  pip-licenses-2.1.1.tar.gz

New:
----
  pip-licenses-2.3.0.tar.gz

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

Other differences:
------------------
++++++ python-pip-licenses.spec ++++++
--- /var/tmp/diff_new_pack.ivWctf/_old  2020-10-23 12:22:23.360684471 +0200
+++ /var/tmp/diff_new_pack.ivWctf/_new  2020-10-23 12:22:23.364684473 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-pip-licenses
-Version:        2.1.1
+Version:        2.3.0
 Release:        0
 Summary:        Python packages license list
 License:        MIT
@@ -29,11 +29,13 @@
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
+Requires:       python-pip
 Requires:       python-PrettyTable
 Requires(post): update-alternatives
 Requires(postun): update-alternatives
 BuildArch:      noarch
 # SECTION test requirements
+BuildRequires:  %{python_module docutils}
 BuildRequires:  %{python_module PrettyTable}
 BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module wheel}
@@ -62,7 +64,9 @@
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
-%pytest
+export LANG=en_US.UTF-8
+# Fails due to pytest output incompatibility
+%pytest -k 'not test_format_plain_vertical'
 %python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} 
%{buildroot}%{_bindir}/pip-licenses-%{$python_bin_suffix} -s
 
 %post

++++++ pip-licenses-2.1.1.tar.gz -> pip-licenses-2.3.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/CHANGELOG.md 
new/pip-licenses-2.3.0/CHANGELOG.md
--- old/pip-licenses-2.1.1/CHANGELOG.md 2020-02-16 06:42:14.000000000 +0100
+++ new/pip-licenses-2.3.0/CHANGELOG.md 2020-08-02 08:27:29.000000000 +0200
@@ -1,5 +1,20 @@
 ## CHANGELOG
 
+### 2.3.0
+
+* Implement new option for manage unicode characters
+    * `--filter-strings`
+    * `--filter-code-page`
+
+### 2.2.1
+
+* Fixed the file that is selected when multiple matches are made with 
`LICENSE*` with run `--with-license-file`
+
+### 2.2.0
+
+* Implement new option `--with-notice-file`
+* Added to find British style file name `LICENCE` with run 
`--with-license-file`
+
 ### 2.1.1
 
 * Suppress errors when opening license files
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/MANIFEST.in 
new/pip-licenses-2.3.0/MANIFEST.in
--- old/pip-licenses-2.1.1/MANIFEST.in  2019-12-22 04:59:20.000000000 +0100
+++ new/pip-licenses-2.3.0/MANIFEST.in  2020-08-02 07:17:40.000000000 +0200
@@ -2,3 +2,4 @@
 include README.md
 include CHANGELOG.md
 include test_piplicenses.py
+include tests/fixtures/*.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/PKG-INFO 
new/pip-licenses-2.3.0/PKG-INFO
--- old/pip-licenses-2.1.1/PKG-INFO     2020-02-16 06:45:05.292676400 +0100
+++ new/pip-licenses-2.3.0/PKG-INFO     2020-08-02 08:30:42.341660000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pip-licenses
-Version: 2.1.1
+Version: 2.3.0
 Summary: Dump the software license list of Python packages installed with pip.
 Home-page: https://github.com/raimon49/pip-licenses
 Author: raimon
@@ -42,6 +42,8 @@
         
            -  `Option: summary <#option-summary>`__
            -  `Option: output-file <#option-output-file>`__
+           -  `Option: filter-strings <#option-filter-strings>`__
+           -  `Option: filter-code-page <#option-filter-code-page>`__
            -  `More Information <#more-information>`__
         
         -  `Dockerfile <#dockerfile>`__
@@ -218,6 +220,9 @@
         that file. Due to the length of these fields, this option is best 
paired
         with ``--format=json``.
         
+        If you also want to output the file ``NOTICE`` distributed under Apache
+        License etc., specify the ``--with-notice-file`` option additionally.
+        
         **Note:** If you want to keep the license file path secret, specify
         ``--no-license-path`` option together.
         
@@ -475,6 +480,23 @@
             (venv) $ pip-licenses --format=rst --output-file=/tmp/output.rst
             created path: /tmp/output.rst
         
+        Option: filter-strings
+        ~~~~~~~~~~~~~~~~~~~~~~
+        
+        Some package data contains Unicode characters which might cause 
problems
+        for certain output formats (in particular ReST tables). If this filter
+        is enabled, all characters which cannot be encoded with a given code
+        page (see ``--filter-code-page``) will be removed from any input 
strings
+        (e.g. package name, description).
+        
+        Option: filter-code-page
+        ~~~~~~~~~~~~~~~~~~~~~~~~
+        
+        If the input strings are filtered (see ``--filter-strings``), you can
+        specify the applied code page (default ``latin-1``). A list of all
+        available code pages can be found `codecs module
+        document 
<https://docs.python.org/3/library/codecs.html#standard-encodings>`__.
+        
         More Information
         ~~~~~~~~~~~~~~~~
         
@@ -607,6 +629,27 @@
         CHANGELOG
         ---------
         
+        2.3.0
+        ~~~~~
+        
+        -  Implement new option for manage unicode characters
+        
+           -  ``--filter-strings``
+           -  ``--filter-code-page``
+        
+        2.2.1
+        ~~~~~
+        
+        -  Fixed the file that is selected when multiple matches are made with
+           ``LICENSE*`` with run ``--with-license-file``
+        
+        2.2.0
+        ~~~~~
+        
+        -  Implement new option ``--with-notice-file``
+        -  Added to find British style file name ``LICENCE`` with run
+           ``--with-license-file``
+        
         2.1.1
         ~~~~~
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/README.md 
new/pip-licenses-2.3.0/README.md
--- old/pip-licenses-2.1.1/README.md    2020-02-06 16:29:52.000000000 +0100
+++ new/pip-licenses-2.3.0/README.md    2020-08-02 08:19:12.000000000 +0200
@@ -29,6 +29,8 @@
         * [Plain Vertical](#plain-vertical)
     * [Option: summary](#option-summary)
     * [Option: output\-file](#option-output-file)
+    * [Option: filter\-strings](#option-filter-strings)
+    * [Option: filter\-code\-page](#option-filter-code-page)
     * [More Information](#more-information)
 * [Dockerfile](#dockerfile)
 * [About UnicodeEncodeError](#about-unicodeencodeerror)
@@ -167,6 +169,8 @@
 
 When executed with the `--with-license-file` option, output the location of 
the package's license file on disk and the full contents of that file. Due to 
the length of these fields, this option is best paired with `--format=json`.
 
+If you also want to output the file `NOTICE` distributed under Apache License 
etc., specify the `--with-notice-file` option additionally.
+
 **Note:** If you want to keep the license file path secret, specify 
`--no-license-path` option together.
 
 ### Option: ignore-packages
@@ -384,6 +388,14 @@
 created path: /tmp/output.rst
 ```
 
+### Option: filter\-strings
+
+Some package data contains Unicode characters which might cause problems for 
certain output formats (in particular ReST tables). If this filter is enabled, 
all characters which cannot be encoded with a given code page (see 
`--filter-code-page`) will be removed from any input strings (e.g. package 
name, description).
+
+### Option: filter\-code\-page
+
+If the input strings are filtered (see `--filter-strings`), you can specify 
the applied code page (default `latin-1`). A list of all available code pages 
can be found [codecs module 
document](https://docs.python.org/3/library/codecs.html#standard-encodings).
+
 ### More Information
 
 Other, please make sure to execute the `--help` option.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/pip_licenses.egg-info/PKG-INFO 
new/pip-licenses-2.3.0/pip_licenses.egg-info/PKG-INFO
--- old/pip-licenses-2.1.1/pip_licenses.egg-info/PKG-INFO       2020-02-16 
06:45:05.000000000 +0100
+++ new/pip-licenses-2.3.0/pip_licenses.egg-info/PKG-INFO       2020-08-02 
08:30:42.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pip-licenses
-Version: 2.1.1
+Version: 2.3.0
 Summary: Dump the software license list of Python packages installed with pip.
 Home-page: https://github.com/raimon49/pip-licenses
 Author: raimon
@@ -42,6 +42,8 @@
         
            -  `Option: summary <#option-summary>`__
            -  `Option: output-file <#option-output-file>`__
+           -  `Option: filter-strings <#option-filter-strings>`__
+           -  `Option: filter-code-page <#option-filter-code-page>`__
            -  `More Information <#more-information>`__
         
         -  `Dockerfile <#dockerfile>`__
@@ -218,6 +220,9 @@
         that file. Due to the length of these fields, this option is best 
paired
         with ``--format=json``.
         
+        If you also want to output the file ``NOTICE`` distributed under Apache
+        License etc., specify the ``--with-notice-file`` option additionally.
+        
         **Note:** If you want to keep the license file path secret, specify
         ``--no-license-path`` option together.
         
@@ -475,6 +480,23 @@
             (venv) $ pip-licenses --format=rst --output-file=/tmp/output.rst
             created path: /tmp/output.rst
         
+        Option: filter-strings
+        ~~~~~~~~~~~~~~~~~~~~~~
+        
+        Some package data contains Unicode characters which might cause 
problems
+        for certain output formats (in particular ReST tables). If this filter
+        is enabled, all characters which cannot be encoded with a given code
+        page (see ``--filter-code-page``) will be removed from any input 
strings
+        (e.g. package name, description).
+        
+        Option: filter-code-page
+        ~~~~~~~~~~~~~~~~~~~~~~~~
+        
+        If the input strings are filtered (see ``--filter-strings``), you can
+        specify the applied code page (default ``latin-1``). A list of all
+        available code pages can be found `codecs module
+        document 
<https://docs.python.org/3/library/codecs.html#standard-encodings>`__.
+        
         More Information
         ~~~~~~~~~~~~~~~~
         
@@ -607,6 +629,27 @@
         CHANGELOG
         ---------
         
+        2.3.0
+        ~~~~~
+        
+        -  Implement new option for manage unicode characters
+        
+           -  ``--filter-strings``
+           -  ``--filter-code-page``
+        
+        2.2.1
+        ~~~~~
+        
+        -  Fixed the file that is selected when multiple matches are made with
+           ``LICENSE*`` with run ``--with-license-file``
+        
+        2.2.0
+        ~~~~~
+        
+        -  Implement new option ``--with-notice-file``
+        -  Added to find British style file name ``LICENCE`` with run
+           ``--with-license-file``
+        
         2.1.1
         ~~~~~
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/pip_licenses.egg-info/SOURCES.txt 
new/pip-licenses-2.3.0/pip_licenses.egg-info/SOURCES.txt
--- old/pip-licenses-2.1.1/pip_licenses.egg-info/SOURCES.txt    2020-02-16 
06:45:05.000000000 +0100
+++ new/pip-licenses-2.3.0/pip_licenses.egg-info/SOURCES.txt    2020-08-02 
08:30:42.000000000 +0200
@@ -11,4 +11,5 @@
 pip_licenses.egg-info/dependency_links.txt
 pip_licenses.egg-info/entry_points.txt
 pip_licenses.egg-info/requires.txt
-pip_licenses.egg-info/top_level.txt
\ No newline at end of file
+pip_licenses.egg-info/top_level.txt
+tests/fixtures/unicode_characters.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pip-licenses-2.1.1/pip_licenses.egg-info/requires.txt 
new/pip-licenses-2.3.0/pip_licenses.egg-info/requires.txt
--- old/pip-licenses-2.1.1/pip_licenses.egg-info/requires.txt   2020-02-16 
06:45:05.000000000 +0100
+++ new/pip-licenses-2.3.0/pip_licenses.egg-info/requires.txt   2020-08-02 
08:30:42.000000000 +0200
@@ -1,6 +1,7 @@
 PTable
 
 [test]
+docutils
 pytest-cov
 pytest-pycodestyle
 pytest-runner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/piplicenses.py 
new/pip-licenses-2.3.0/piplicenses.py
--- old/pip-licenses-2.1.1/piplicenses.py       2020-02-16 06:42:22.000000000 
+0100
+++ new/pip-licenses-2.3.0/piplicenses.py       2020-08-02 08:27:50.000000000 
+0200
@@ -26,6 +26,7 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 """
+import codecs
 import sys
 import glob
 import os
@@ -60,7 +61,7 @@
 open = open  # allow monkey patching
 
 __pkgname__ = 'pip-licenses'
-__version__ = '2.1.1'
+__version__ = '2.3.0'
 __author__ = 'raimon'
 __license__ = 'MIT License'
 __summary__ = ('Dump the software license list of '
@@ -74,6 +75,8 @@
     'License',
     'LicenseFile',
     'LicenseText',
+    'NoticeFile',
+    'NoticeText',
     'Author',
     'Description',
     'URL',
@@ -126,37 +129,46 @@
 
 def get_packages(args):
 
-    def get_pkg_license_file(pkg):
+    def get_pkg_included_file(pkg, file_names):
         """
-        Attempt to find the package's LICENSE file on disk and return the
-        tuple (license_file_path, license_file_contents).
+        Attempt to find the package's included file on disk and return the
+        tuple (included_file_path, included_file_contents).
         """
-        license_file = LICENSE_UNKNOWN
-        license_text = LICENSE_UNKNOWN
+        included_file = LICENSE_UNKNOWN
+        included_text = LICENSE_UNKNOWN
         pkg_dirname = "{}-{}.dist-info".format(
             pkg.project_name.replace("-", "_"), pkg.version)
-        file_names = ('LICENSE*', 'COPYING*')
         patterns = []
-        [patterns.extend(glob.glob(os.path.join(pkg.location,
-                                                pkg_dirname,
-                                                f))) for f in file_names]
+        [patterns.extend(sorted(glob.glob(os.path.join(pkg.location,
+                                                       pkg_dirname,
+                                                       f))))
+         for f in file_names]
         for test_file in patterns:
             if os.path.exists(test_file):
-                license_file = test_file
+                included_file = test_file
                 with open(test_file, encoding='utf-8',
-                          errors='backslashreplace') as license_file_handle:
-                    license_text = license_file_handle.read()
+                          errors='backslashreplace') as included_file_handle:
+                    included_text = included_file_handle.read()
                 break
-        return (license_file, license_text)
+        return (included_file, included_text)
 
     def get_pkg_info(pkg):
-        (license_file, license_text) = get_pkg_license_file(pkg)
+        (license_file, license_text) = get_pkg_included_file(
+            pkg,
+            ('LICENSE*', 'LICENCE*', 'COPYING*')
+        )
+        (notice_file, notice_text) = get_pkg_included_file(
+            pkg,
+            ('NOTICE*',)
+        )
         pkg_info = {
             'name': pkg.project_name,
             'version': pkg.version,
             'namever': str(pkg),
             'licensefile': license_file,
             'licensetext': license_text,
+            'noticefile': notice_file,
+            'noticetext': notice_text,
         }
         metadata = None
         if pkg.has_metadata('METADATA'):
@@ -188,6 +200,11 @@
             pkg_info['license'] = select_license_by_source(from_source,
                                                            license_classifier,
                                                            license_meta)
+        if args.filter_strings:
+            for k in pkg_info:
+                pkg_info[k] = pkg_info[k]. \
+                    encode(args.filter_code_page, errors="ignore"). \
+                    decode(args.filter_code_page)
 
         return pkg_info
 
@@ -423,6 +440,11 @@
 
         output_fields.append('LicenseText')
 
+        if args.with_notice_file:
+            output_fields.append('NoticeText')
+            if not args.no_license_path:
+                output_fields.append('NoticeFile')
+
     return output_fields
 
 
@@ -482,10 +504,23 @@
         args = super(CompatibleArgumentParser, self).parse_args(args,
                                                                 namespace)
         self._compatible_format_args(args)
+        self._check_code_page(args.filter_code_page)
 
         return args
 
-    def _compatible_format_args(self, args):
+    @staticmethod
+    def _check_code_page(code_page):
+        try:
+            codecs.lookup(code_page)
+        except LookupError:
+            print(("error: invalid code page '%s' given for "
+                   "--filter-code-page;\n"
+                   "       check https://docs.python.org/3/library/";
+                   "codecs.html for valid code pages") % code_page)
+            sys.exit(1)
+
+    @staticmethod
+    def _compatible_format_args(args):
         from_input = getattr(args, 'from').lower()
         order_input = args.order.lower()
         format_input = args.format.lower()
@@ -578,6 +613,11 @@
                         default=False,
                         help='when specified together with option -l, '
                              'suppress location of license file output')
+    parser.add_argument('--with-notice-file',
+                        action='store_true',
+                        default=False,
+                        help='when specified together with option -l, '
+                             'dump with location of license file and contents')
     parser.add_argument('-i', '--ignore-packages',
                         action='store', type=str,
                         nargs='+', metavar='PKG',
@@ -597,6 +637,14 @@
                               '"confluence", "html", "json", \n'
                               '"json-license-finder",  "csv"\n'
                               'default: --format=plain'))
+    parser.add_argument('--filter-strings',
+                        action="store_true",
+                        default=False,
+                        help=('filter input according to code page'))
+    parser.add_argument('--filter-code-page',
+                        action="store", type=str,
+                        default="latin1",
+                        help=('specify code page for filtering'))
     parser.add_argument('--summary',
                         action='store_true',
                         default=False,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/setup.py 
new/pip-licenses-2.3.0/setup.py
--- old/pip-licenses-2.1.1/setup.py     2020-02-16 06:37:47.000000000 +0100
+++ new/pip-licenses-2.3.0/setup.py     2020-07-24 12:13:49.000000000 +0200
@@ -61,6 +61,7 @@
 
 
 TEST_DEPENDS = [
+    'docutils',
     'pytest-cov',
     'pytest-pycodestyle',
     'pytest-runner',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-2.1.1/test_piplicenses.py 
new/pip-licenses-2.3.0/test_piplicenses.py
--- old/pip-licenses-2.1.1/test_piplicenses.py  2020-01-27 13:10:58.000000000 
+0100
+++ new/pip-licenses-2.3.0/test_piplicenses.py  2020-08-02 08:07:41.000000000 
+0200
@@ -6,6 +6,10 @@
 import unittest
 from email import message_from_string
 
+import docutils.parsers.rst
+import docutils.utils
+import docutils.frontend
+
 import piplicenses
 from piplicenses import (__pkgname__, create_parser, output_colored,
                          create_licenses_table, get_output_fields, get_sortby,
@@ -17,6 +21,23 @@
                          LICENSE_UNKNOWN)
 
 
+UNICODE_APPENDIX = ""
+with open('tests/fixtures/unicode_characters.txt', encoding='utf-8') as f:
+    # Read from external file considering a terminal that cannot handle "emoji"
+    UNICODE_APPENDIX = f.readline().replace("\n", "")
+
+
+def get_installed_distributions_mocked(*args, **kwargs):
+    packages = get_installed_distributions_orig(*args, **kwargs)
+    if not packages[-1].project_name.endswith(UNICODE_APPENDIX):
+        packages[-1].project_name += " "+UNICODE_APPENDIX
+    return packages
+
+
+get_installed_distributions_orig = piplicenses.get_installed_distributions
+piplicenses.get_installed_distributions = get_installed_distributions_mocked
+
+
 class CommandLineTestCase(unittest.TestCase):
     @classmethod
     def setUpClass(cls):
@@ -47,6 +68,18 @@
 
         return pkg_name_columns
 
+    # from https://stackoverflow.com/questions/12883428/ ...
+    # ... how-to-parse-restructuredtext-in-python
+    @staticmethod
+    def check_rst(text: str):
+        parser = docutils.parsers.rst.Parser()
+        components = (docutils.parsers.rst.Parser,)
+        settings = docutils.frontend.\
+            OptionParser(components=components).get_default_values()
+        settings.halt_level = 3
+        document = docutils.utils.new_document('<rst-doc>', settings=settings)
+        parser.parse(text, document)
+
     def test_with_empty_args(self):
         empty_args = []
         args = self.parser.parse_args(empty_args)
@@ -203,23 +236,49 @@
         self.assertNotEqual(output_fields, list(DEFAULT_OUTPUT_FIELDS))
         self.assertIn('LicenseFile', output_fields)
         self.assertIn('LicenseText', output_fields)
+        self.assertNotIn('NoticeFile', output_fields)
+        self.assertNotIn('NoticeText', output_fields)
 
         output_string = create_output_string(args)
         self.assertIn('LicenseFile', output_string)
         self.assertIn('LicenseText', output_string)
+        self.assertNotIn('NoticeFile', output_string)
+        self.assertNotIn('NoticeText', output_string)
+
+    def test_with_notice_file(self):
+        with_license_file_args = ['--with-license-file', '--with-notice-file']
+        args = self.parser.parse_args(with_license_file_args)
+
+        output_fields = get_output_fields(args)
+        self.assertNotEqual(output_fields, list(DEFAULT_OUTPUT_FIELDS))
+        self.assertIn('LicenseFile', output_fields)
+        self.assertIn('LicenseText', output_fields)
+        self.assertIn('NoticeFile', output_fields)
+        self.assertIn('NoticeText', output_fields)
+
+        output_string = create_output_string(args)
+        self.assertIn('LicenseFile', output_string)
+        self.assertIn('LicenseText', output_string)
+        self.assertIn('NoticeFile', output_string)
+        self.assertIn('NoticeText', output_string)
 
     def test_with_license_file_no_path(self):
-        with_license_file_args = ['--with-license-file', '--no-license-path']
+        with_license_file_args = ['--with-license-file', '--with-notice-file',
+                                  '--no-license-path']
         args = self.parser.parse_args(with_license_file_args)
 
         output_fields = get_output_fields(args)
         self.assertNotEqual(output_fields, list(DEFAULT_OUTPUT_FIELDS))
         self.assertNotIn('LicenseFile', output_fields)
         self.assertIn('LicenseText', output_fields)
+        self.assertNotIn('NoticeFile', output_fields)
+        self.assertIn('NoticeText', output_fields)
 
         output_string = create_output_string(args)
         self.assertNotIn('LicenseFile', output_string)
         self.assertIn('LicenseText', output_string)
+        self.assertNotIn('NoticeFile', output_string)
+        self.assertIn('NoticeText', output_string)
 
     def test_with_license_file_warning(self):
         with_license_file_args = ['--with-license-file', '--format=markdown']
@@ -296,7 +355,7 @@
     def test_format_markdown(self):
         format_markdown_args = ['--format=markdown']
         args = self.parser.parse_args(format_markdown_args)
-        table = factory_styled_table_with_args(args)
+        table = create_licenses_table(args)
 
         self.assertIn('l', table.align.values())
         self.assertTrue(table.border)
@@ -304,21 +363,37 @@
         self.assertEqual('|', table.junction_char)
         self.assertEqual(RULE_HEADER, table.hrules)
 
-    def test_format_rst(self):
+    @unittest.skipIf(sys.version_info < (3, 6, 0),
+                     "To unsupport Python 3.5 in the near future")
+    def test_format_rst_without_filter(self):
         format_rst_args = ['--format=rst']
         args = self.parser.parse_args(format_rst_args)
-        table = factory_styled_table_with_args(args)
+        table = create_licenses_table(args)
 
         self.assertIn('l', table.align.values())
         self.assertTrue(table.border)
         self.assertTrue(table.header)
         self.assertEqual('+', table.junction_char)
         self.assertEqual(RULE_ALL, table.hrules)
+        with self.assertRaises(docutils.utils.SystemMessage):
+            self.check_rst(str(table))
+
+    def test_format_rst_default_filter(self):
+        format_rst_args = ['--format=rst', '--filter-strings']
+        args = self.parser.parse_args(format_rst_args)
+        table = create_licenses_table(args)
+
+        self.assertIn('l', table.align.values())
+        self.assertTrue(table.border)
+        self.assertTrue(table.header)
+        self.assertEqual('+', table.junction_char)
+        self.assertEqual(RULE_ALL, table.hrules)
+        self.check_rst(str(table))
 
     def test_format_confluence(self):
         format_confluence_args = ['--format=confluence']
         args = self.parser.parse_args(format_confluence_args)
-        table = factory_styled_table_with_args(args)
+        table = create_licenses_table(args)
 
         self.assertIn('l', table.align.values())
         self.assertTrue(table.border)
@@ -418,6 +493,27 @@
         self.assertIn(text, actual)
         self.assertTrue(actual.endswith('\033[0m'))
 
+    def test_without_filter(self):
+        args = self.parser.parse_args([])
+        packages = list(piplicenses.get_packages(args))
+        self.assertIn(UNICODE_APPENDIX, packages[-1]["name"])
+
+    def test_with_default_filter(self):
+        args = self.parser.parse_args(["--filter-strings"])
+        packages = list(piplicenses.get_packages(args))
+        self.assertNotIn(UNICODE_APPENDIX, packages[-1]["name"])
+
+    def test_with_specified_filter(self):
+        args = self.parser.parse_args(["--filter-strings",
+                                       "--filter-code-page=ascii"])
+        packages = list(piplicenses.get_packages(args))
+        self.assertNotIn(UNICODE_APPENDIX, packages[-1]["summary"])
+
+    def test_invalid_code_page(self):
+        with self.assertRaises(SystemExit):
+            self.parser.parse_args(["--filter-strings",
+                                    "--filter-code-page=XXX"])
+
 
 class MockStdStream(object):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pip-licenses-2.1.1/tests/fixtures/unicode_characters.txt 
new/pip-licenses-2.3.0/tests/fixtures/unicode_characters.txt
--- old/pip-licenses-2.1.1/tests/fixtures/unicode_characters.txt        
1970-01-01 01:00:00.000000000 +0100
+++ new/pip-licenses-2.3.0/tests/fixtures/unicode_characters.txt        
2020-08-02 07:08:19.000000000 +0200
@@ -0,0 +1 @@
+🐍🐓🐿️


Reply via email to