Hello community,

here is the log from the commit of package python-pip-licenses for 
openSUSE:Factory checked in at 2020-03-18 12:28:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pip-licenses (Old)
 and      /work/SRC/openSUSE:Factory/.python-pip-licenses.new.3160 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pip-licenses"

Wed Mar 18 12:28:43 2020 rev:2 rq:785586 version:2.1.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pip-licenses/python-pip-licenses.changes  
2020-01-02 14:44:03.788976331 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-pip-licenses.new.3160/python-pip-licenses.changes
        2020-03-18 12:40:35.268772338 +0100
@@ -1,0 +2,12 @@
+Mon Mar 16 10:17:11 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- Update to 2.1.1
+  * Suppress errors when opening license files
+  * Implement new option --format=plain-vertical
+  * Support for outputting license file named COPYING *
+  * Better license file open handling in Python 3
+  * Dropped support Python 2.7
+  * Options like --format-* were marked obsolete
+  * Implement new option --no-license-path
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ python-pip-licenses.spec ++++++
--- /var/tmp/diff_new_pack.rkZmNG/_old  2020-03-18 12:40:37.356773659 +0100
+++ /var/tmp/diff_new_pack.rkZmNG/_new  2020-03-18 12:40:37.384773676 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-pip-licenses
 #
-# Copyright (c) 2019 SUSE LLC
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,8 +17,9 @@
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%define skip_python2 1
 Name:           python-pip-licenses
-Version:        1.18.0
+Version:        2.1.1
 Release:        0
 Summary:        Python packages license list
 License:        MIT

++++++ pip-licenses-1.18.0.tar.gz -> pip-licenses-2.1.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-1.18.0/CHANGELOG.md 
new/pip-licenses-2.1.1/CHANGELOG.md
--- old/pip-licenses-1.18.0/CHANGELOG.md        2019-12-22 05:16:08.000000000 
+0100
+++ new/pip-licenses-2.1.1/CHANGELOG.md 2020-02-16 06:42:14.000000000 +0100
@@ -1,5 +1,31 @@
 ## CHANGELOG
 
+### 2.1.1
+
+* Suppress errors when opening license files
+
+### 2.1.0
+
+* Implement new option `--format=plain-vertical`
+* Support for outputting license file named `COPYING *`
+
+### 2.0.1
+
+* Better license file open handling in Python 3
+
+### 2.0.0
+
+* Dropped support Python 2.7
+* Breaking changes
+    * Removed migration path to obsolete options
+        * `--from-classifier`
+        * `--format-markdown`
+        * `--format-rst`
+        * `--format-confluence`
+        * `--format-html`
+        * `--format-json`
+* Implement new option `--no-license-path`
+
 ### 1.18.0
 
 * Supports compatibility to work with either PTable or prettytable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-1.18.0/PKG-INFO 
new/pip-licenses-2.1.1/PKG-INFO
--- old/pip-licenses-1.18.0/PKG-INFO    2019-12-22 05:33:46.000000000 +0100
+++ new/pip-licenses-2.1.1/PKG-INFO     2020-02-16 06:45:05.292676400 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pip-licenses
-Version: 1.18.0
+Version: 2.1.1
 Summary: Dump the software license list of Python packages installed with pip.
 Home-page: https://github.com/raimon49/pip-licenses
 Author: raimon
@@ -9,7 +9,7 @@
         ============
         
         |Build Status| |PyPI - Python Version| |PyPI version| |GitHub Release|
-        |Codecov| |BSD License| |Requirements Status|
+        |Codecov| |GitHub contributors| |BSD License| |Requirements Status|
         
         Dump the software license list of Python packages installed with pip.
         
@@ -22,9 +22,6 @@
         -  `Command-Line Options <#command-line-options>`__
         
            -  `Option: from <#option-from>`__
-        
-              -  `Deprecated from-classifier <#deprecated-from-classifier>`__
-        
            -  `Option: with-system <#option-with-system>`__
            -  `Option: with-authors <#option-with-authors>`__
            -  `Option: with-urls <#option-with-urls>`__
@@ -41,7 +38,7 @@
               -  `JSON <#json>`__
               -  `JSON LicenseFinder <#json-licensefinder>`__
               -  `CSV <#csv>`__
-              -  `Deprecated options <#deprecated-options>`__
+              -  `Plain Vertical <#plain-vertical>`__
         
            -  `Option: summary <#option-summary>`__
            -  `Option: output-file <#option-output-file>`__
@@ -77,6 +74,13 @@
             # Install or Upgrade to newest available version
             $ pip install -U pip-licenses
         
+        **Note:** If you are still using Python 2.7, install version less than
+        2.0. No new features will be provided for version 1.x.
+        
+        .. code:: bash
+        
+            $ pip install 'pip-licenses<2.0'
+        
         Usage
         -----
         
@@ -147,12 +151,6 @@
         -  The ``c`` keyword is prepared as alias of ``classifier``.
         -  The ``mix`` keyword is prepared as alias of ``mixed``.
         
-        Deprecated from-classifier
-        ^^^^^^^^^^^^^^^^^^^^^^^^^^
-        
-        ``from-classifier`` option will be deprecated in version 2.0.0. Please
-        migrate to ``--from`` option.
-        
         Option: with-system
         ~~~~~~~~~~~~~~~~~~~
         
@@ -220,6 +218,9 @@
         that file. Due to the length of these fields, this option is best 
paired
         with ``--format=json``.
         
+        **Note:** If you want to keep the license file path secret, specify
+        ``--no-license-path`` option together.
+        
         Option: ignore-packages
         ~~~~~~~~~~~~~~~~~~~~~~~
         
@@ -410,17 +411,41 @@
             "Django","2.0.2","BSD"
             "pytz","2017.3","MIT"
         
-        Deprecated options
-        ^^^^^^^^^^^^^^^^^^
+        Plain Vertical
+        ^^^^^^^^^^^^^^
         
-        The following options will be deprecated in version 2.0.0. Please
-        migrate to ``--format`` option.
+        | When executed with the ``--format=plain-vertical`` option, you can
+          output a simple plain vertical output that is similar to Angular 
CLI's
+        | `--extractLicenses flag <https://angular.io/cli/build#options>`__.
+          This format minimizes rightward drift.
         
-        -  ``--format-markdown``
-        -  ``--format-rst``
-        -  ``--format-confluence``
-        -  ``--format-html``
-        -  ``--format-json``
+        .. code:: bash
+        
+            (venv) $ pip-licenses --format=plain-vertical --with-license-file 
--no-license-path
+            pytest
+            5.3.4
+            MIT license
+            The MIT License (MIT)
+        
+            Copyright (c) 2004-2020 Holger Krekel and others
+        
+            Permission is hereby granted, free of charge, to any person 
obtaining a copy of
+            this software and associated documentation files (the "Software"), 
to deal in
+            the Software without restriction, including without limitation the 
rights to
+            use, copy, modify, merge, publish, distribute, sublicense, and/or 
sell copies
+            of the Software, and to permit persons to whom the Software is 
furnished to do
+            so, subject to the following conditions:
+        
+            The above copyright notice and this permission notice shall be 
included in all
+            copies or substantial portions of the Software.
+        
+            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR
+            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
MERCHANTABILITY,
+            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 
SHALL THE
+            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 
OTHER
+            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM,
+            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
DEALINGS IN THE
+            SOFTWARE.
         
         Option: summary
         ~~~~~~~~~~~~~~~
@@ -571,6 +596,8 @@
            :target: https://github.com/raimon49/pip-licenses/releases
         .. |Codecov| image:: 
https://codecov.io/gh/raimon49/pip-licenses/branch/master/graph/badge.svg
            :target: https://codecov.io/gh/raimon49/pip-licenses
+        .. |GitHub contributors| image:: 
https://img.shields.io/github/contributors/raimon49/pip-licenses
+           :target: 
https://github.com/raimon49/pip-licenses/graphs/contributors
         .. |BSD License| image:: 
http://img.shields.io/badge/license-MIT-green.svg
            :target: 
https://github.com/raimon49/pip-licenses/blob/master/LICENSE
         .. |Requirements Status| image:: 
https://requires.io/github/raimon49/pip-licenses/requirements.svg?branch=master
@@ -580,6 +607,39 @@
         CHANGELOG
         ---------
         
+        2.1.1
+        ~~~~~
+        
+        -  Suppress errors when opening license files
+        
+        2.1.0
+        ~~~~~
+        
+        -  Implement new option ``--format=plain-vertical``
+        -  Support for outputting license file named ``COPYING *``
+        
+        2.0.1
+        ~~~~~
+        
+        -  Better license file open handling in Python 3
+        
+        2.0.0
+        ~~~~~
+        
+        -  Dropped support Python 2.7
+        -  Breaking changes
+        
+           -  Removed migration path to obsolete options
+        
+              -  ``--from-classifier``
+              -  ``--format-markdown``
+              -  ``--format-rst``
+              -  ``--format-confluence``
+              -  ``--format-html``
+              -  ``--format-json``
+        
+        -  Implement new option ``--no-license-path``
+        
         1.18.0
         ~~~~~~
         
@@ -750,8 +810,6 @@
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
@@ -759,5 +817,5 @@
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Topic :: System :: Systems Administration
 Classifier: Topic :: System :: System Shells
-Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*
+Requires-Python: ~=3.5
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-1.18.0/README.md 
new/pip-licenses-2.1.1/README.md
--- old/pip-licenses-1.18.0/README.md   2019-12-22 05:32:01.000000000 +0100
+++ new/pip-licenses-2.1.1/README.md    2020-02-06 16:29:52.000000000 +0100
@@ -1,6 +1,6 @@
 # pip-licenses
 
-[![Build 
Status](https://travis-ci.org/raimon49/pip-licenses.svg?branch=master)](https://travis-ci.org/raimon49/pip-licenses)
 [![PyPI - Python 
Version](https://img.shields.io/pypi/pyversions/pip-licenses.svg)](https://pypi.org/project/pip-licenses/)
 [![PyPI 
version](https://badge.fury.io/py/pip-licenses.svg)](https://badge.fury.io/py/pip-licenses)
 [![GitHub 
Release](https://img.shields.io/github/release/raimon49/pip-licenses.svg)](https://github.com/raimon49/pip-licenses/releases)
 
[![Codecov](https://codecov.io/gh/raimon49/pip-licenses/branch/master/graph/badge.svg)](https://codecov.io/gh/raimon49/pip-licenses)
 [![BSD 
License](http://img.shields.io/badge/license-MIT-green.svg)](https://github.com/raimon49/pip-licenses/blob/master/LICENSE)
 [![Requirements 
Status](https://requires.io/github/raimon49/pip-licenses/requirements.svg?branch=master)](https://requires.io/github/raimon49/pip-licenses/requirements/?branch=master)
+[![Build 
Status](https://travis-ci.org/raimon49/pip-licenses.svg?branch=master)](https://travis-ci.org/raimon49/pip-licenses)
 [![PyPI - Python 
Version](https://img.shields.io/pypi/pyversions/pip-licenses.svg)](https://pypi.org/project/pip-licenses/)
 [![PyPI 
version](https://badge.fury.io/py/pip-licenses.svg)](https://badge.fury.io/py/pip-licenses)
 [![GitHub 
Release](https://img.shields.io/github/release/raimon49/pip-licenses.svg)](https://github.com/raimon49/pip-licenses/releases)
 
[![Codecov](https://codecov.io/gh/raimon49/pip-licenses/branch/master/graph/badge.svg)](https://codecov.io/gh/raimon49/pip-licenses)
 [![GitHub 
contributors](https://img.shields.io/github/contributors/raimon49/pip-licenses)](https://github.com/raimon49/pip-licenses/graphs/contributors)
 [![BSD 
License](http://img.shields.io/badge/license-MIT-green.svg)](https://github.com/raimon49/pip-licenses/blob/master/LICENSE)
 [![Requirements 
Status](https://requires.io/github/raimon49/pip-licenses/requirements.svg?branch=master)](https://requires.io/github/raimon49/pip-licenses/requirements/?branch=master)
 
 Dump the software license list of Python packages installed with pip.
 
@@ -11,7 +11,6 @@
 * [Usage](#usage)
 * [Command\-Line Options](#command-line-options)
     * [Option: from](#option-from)
-        * [Deprecated from\-classifier](#deprecated-from-classifier)
     * [Option: with\-system](#option-with-system)
     * [Option: with\-authors](#option-with-authors)
     * [Option: with\-urls](#option-with-urls)
@@ -27,7 +26,7 @@
         * [JSON](#json)
         * [JSON LicenseFinder](#json-licensefinder)
         * [CSV](#csv)
-        * [Deprecated options](#deprecated-options)
+        * [Plain Vertical](#plain-vertical)
     * [Option: summary](#option-summary)
     * [Option: output\-file](#option-output-file)
     * [More Information](#more-information)
@@ -55,6 +54,12 @@
 $ pip install -U pip-licenses
 ```
 
+**Note:** If you are still using Python 2.7, install version less than 2.0. No 
new features will be provided for version 1.x.
+
+```bash
+$ pip install 'pip-licenses<2.0'
+```
+
 ## Usage
 
 Execute the command with your venv (or virtualenv) environment.
@@ -108,10 +113,6 @@
 * The `c` keyword is prepared as alias of `classifier`.
 * The `mix` keyword is prepared as alias of `mixed`.
 
-#### Deprecated from-classifier
-
-`from-classifier` option will be deprecated in version 2.0.0. Please migrate 
to `--from` option.
-
 ### Option: with-system
 
 By default, system packages such as `pip` and `setuptools` are ignored.
@@ -166,6 +167,7 @@
 
 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`.
 
+**Note:** If you want to keep the license file path secret, specify 
`--no-license-path` option together.
 
 ### Option: ignore-packages
 
@@ -327,15 +329,38 @@
 "pytz","2017.3","MIT"
 ```
 
-#### Deprecated options
+#### Plain Vertical
 
-The following options will be deprecated in version 2.0.0. Please migrate to 
`--format` option.
+When executed with the `--format=plain-vertical` option, you can output a 
simple plain vertical output that is similar to Angular CLI's
+[--extractLicenses flag](https://angular.io/cli/build#options). This format 
minimizes rightward drift.
 
-* `--format-markdown`
-* `--format-rst`
-* `--format-confluence`
-* `--format-html`
-* `--format-json`
+```bash
+(venv) $ pip-licenses --format=plain-vertical --with-license-file 
--no-license-path
+pytest
+5.3.4
+MIT license
+The MIT License (MIT)
+
+Copyright (c) 2004-2020 Holger Krekel and others
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+```
 
 ### Option: summary
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-1.18.0/pip_licenses.egg-info/PKG-INFO 
new/pip-licenses-2.1.1/pip_licenses.egg-info/PKG-INFO
--- old/pip-licenses-1.18.0/pip_licenses.egg-info/PKG-INFO      2019-12-22 
05:33:46.000000000 +0100
+++ new/pip-licenses-2.1.1/pip_licenses.egg-info/PKG-INFO       2020-02-16 
06:45:05.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pip-licenses
-Version: 1.18.0
+Version: 2.1.1
 Summary: Dump the software license list of Python packages installed with pip.
 Home-page: https://github.com/raimon49/pip-licenses
 Author: raimon
@@ -9,7 +9,7 @@
         ============
         
         |Build Status| |PyPI - Python Version| |PyPI version| |GitHub Release|
-        |Codecov| |BSD License| |Requirements Status|
+        |Codecov| |GitHub contributors| |BSD License| |Requirements Status|
         
         Dump the software license list of Python packages installed with pip.
         
@@ -22,9 +22,6 @@
         -  `Command-Line Options <#command-line-options>`__
         
            -  `Option: from <#option-from>`__
-        
-              -  `Deprecated from-classifier <#deprecated-from-classifier>`__
-        
            -  `Option: with-system <#option-with-system>`__
            -  `Option: with-authors <#option-with-authors>`__
            -  `Option: with-urls <#option-with-urls>`__
@@ -41,7 +38,7 @@
               -  `JSON <#json>`__
               -  `JSON LicenseFinder <#json-licensefinder>`__
               -  `CSV <#csv>`__
-              -  `Deprecated options <#deprecated-options>`__
+              -  `Plain Vertical <#plain-vertical>`__
         
            -  `Option: summary <#option-summary>`__
            -  `Option: output-file <#option-output-file>`__
@@ -77,6 +74,13 @@
             # Install or Upgrade to newest available version
             $ pip install -U pip-licenses
         
+        **Note:** If you are still using Python 2.7, install version less than
+        2.0. No new features will be provided for version 1.x.
+        
+        .. code:: bash
+        
+            $ pip install 'pip-licenses<2.0'
+        
         Usage
         -----
         
@@ -147,12 +151,6 @@
         -  The ``c`` keyword is prepared as alias of ``classifier``.
         -  The ``mix`` keyword is prepared as alias of ``mixed``.
         
-        Deprecated from-classifier
-        ^^^^^^^^^^^^^^^^^^^^^^^^^^
-        
-        ``from-classifier`` option will be deprecated in version 2.0.0. Please
-        migrate to ``--from`` option.
-        
         Option: with-system
         ~~~~~~~~~~~~~~~~~~~
         
@@ -220,6 +218,9 @@
         that file. Due to the length of these fields, this option is best 
paired
         with ``--format=json``.
         
+        **Note:** If you want to keep the license file path secret, specify
+        ``--no-license-path`` option together.
+        
         Option: ignore-packages
         ~~~~~~~~~~~~~~~~~~~~~~~
         
@@ -410,17 +411,41 @@
             "Django","2.0.2","BSD"
             "pytz","2017.3","MIT"
         
-        Deprecated options
-        ^^^^^^^^^^^^^^^^^^
+        Plain Vertical
+        ^^^^^^^^^^^^^^
         
-        The following options will be deprecated in version 2.0.0. Please
-        migrate to ``--format`` option.
+        | When executed with the ``--format=plain-vertical`` option, you can
+          output a simple plain vertical output that is similar to Angular 
CLI's
+        | `--extractLicenses flag <https://angular.io/cli/build#options>`__.
+          This format minimizes rightward drift.
         
-        -  ``--format-markdown``
-        -  ``--format-rst``
-        -  ``--format-confluence``
-        -  ``--format-html``
-        -  ``--format-json``
+        .. code:: bash
+        
+            (venv) $ pip-licenses --format=plain-vertical --with-license-file 
--no-license-path
+            pytest
+            5.3.4
+            MIT license
+            The MIT License (MIT)
+        
+            Copyright (c) 2004-2020 Holger Krekel and others
+        
+            Permission is hereby granted, free of charge, to any person 
obtaining a copy of
+            this software and associated documentation files (the "Software"), 
to deal in
+            the Software without restriction, including without limitation the 
rights to
+            use, copy, modify, merge, publish, distribute, sublicense, and/or 
sell copies
+            of the Software, and to permit persons to whom the Software is 
furnished to do
+            so, subject to the following conditions:
+        
+            The above copyright notice and this permission notice shall be 
included in all
+            copies or substantial portions of the Software.
+        
+            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
EXPRESS OR
+            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
MERCHANTABILITY,
+            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 
SHALL THE
+            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 
OTHER
+            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM,
+            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
DEALINGS IN THE
+            SOFTWARE.
         
         Option: summary
         ~~~~~~~~~~~~~~~
@@ -571,6 +596,8 @@
            :target: https://github.com/raimon49/pip-licenses/releases
         .. |Codecov| image:: 
https://codecov.io/gh/raimon49/pip-licenses/branch/master/graph/badge.svg
            :target: https://codecov.io/gh/raimon49/pip-licenses
+        .. |GitHub contributors| image:: 
https://img.shields.io/github/contributors/raimon49/pip-licenses
+           :target: 
https://github.com/raimon49/pip-licenses/graphs/contributors
         .. |BSD License| image:: 
http://img.shields.io/badge/license-MIT-green.svg
            :target: 
https://github.com/raimon49/pip-licenses/blob/master/LICENSE
         .. |Requirements Status| image:: 
https://requires.io/github/raimon49/pip-licenses/requirements.svg?branch=master
@@ -580,6 +607,39 @@
         CHANGELOG
         ---------
         
+        2.1.1
+        ~~~~~
+        
+        -  Suppress errors when opening license files
+        
+        2.1.0
+        ~~~~~
+        
+        -  Implement new option ``--format=plain-vertical``
+        -  Support for outputting license file named ``COPYING *``
+        
+        2.0.1
+        ~~~~~
+        
+        -  Better license file open handling in Python 3
+        
+        2.0.0
+        ~~~~~
+        
+        -  Dropped support Python 2.7
+        -  Breaking changes
+        
+           -  Removed migration path to obsolete options
+        
+              -  ``--from-classifier``
+              -  ``--format-markdown``
+              -  ``--format-rst``
+              -  ``--format-confluence``
+              -  ``--format-html``
+              -  ``--format-json``
+        
+        -  Implement new option ``--no-license-path``
+        
         1.18.0
         ~~~~~~
         
@@ -750,8 +810,6 @@
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
@@ -759,5 +817,5 @@
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Topic :: System :: Systems Administration
 Classifier: Topic :: System :: System Shells
-Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*
+Requires-Python: ~=3.5
 Provides-Extra: test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-1.18.0/piplicenses.py 
new/pip-licenses-2.1.1/piplicenses.py
--- old/pip-licenses-1.18.0/piplicenses.py      2019-12-22 05:16:12.000000000 
+0100
+++ new/pip-licenses-2.1.1/piplicenses.py       2020-02-16 06:42:22.000000000 
+0100
@@ -26,20 +26,18 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 """
-from __future__ import (division, print_function,
-                        absolute_import, unicode_literals)
 import sys
 import glob
 import os
-import codecs
 import argparse
+from collections import Counter
 from functools import partial
 from email.parser import FeedParser
 from email import message_from_string
 
 try:
     from pip._internal.utils.misc import get_installed_distributions
-except ImportError:
+except ImportError:  # pragma: no cover
     from pip import get_installed_distributions
 from prettytable import PrettyTable
 try:
@@ -59,8 +57,10 @@
     )
     PTABLE = False
 
+open = open  # allow monkey patching
+
 __pkgname__ = 'pip-licenses'
-__version__ = '1.18.0'
+__version__ = '2.1.1'
 __author__ = 'raimon'
 __license__ = 'MIT License'
 __summary__ = ('Dump the software license list of '
@@ -135,21 +135,17 @@
         license_text = LICENSE_UNKNOWN
         pkg_dirname = "{}-{}.dist-info".format(
             pkg.project_name.replace("-", "_"), pkg.version)
-        license_file_base = os.path.join(pkg.location, pkg_dirname, 'LICENSE*')
-        for test_file in glob.glob(license_file_base):
+        file_names = ('LICENSE*', 'COPYING*')
+        patterns = []
+        [patterns.extend(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
-                with codecs.open(test_file,
-                                 encoding='utf-8',
-                                 errors='replace') as license_file_handle:
-                    file_lines = license_file_handle.readlines()
-                try:
-                    # python 3 is happy with maybe-Unicode files
-                    license_text = "".join(file_lines)
-                except UnicodeDecodeError:  # pragma: no cover
-                    # python 2 not so much
-                    license_text = "".join([line.decode('utf-8', 'replace')
-                                            for line in file_lines])
+                with open(test_file, encoding='utf-8',
+                          errors='backslashreplace') as license_file_handle:
+                    license_text = license_file_handle.read()
                 break
         return (license_file, license_text)
 
@@ -226,17 +222,11 @@
 
 
 def create_summary_table(args):
-    licenses = {}
-    for pkg in get_packages(args):
-        if pkg['license'] not in licenses:
-            licenses.update({pkg['license']: 1})
-        else:
-            licenses[pkg['license']] += 1
+    counts = Counter(pkg['license'] for pkg in get_packages(args))
 
     table = factory_styled_table_with_args(args, SUMMARY_FIELD_NAMES)
-    for license in licenses.keys():
-        table.add_row([licenses[license],
-                       license, ])
+    for license, count in counts.items():
+        table.add_row([count, license])
     return table
 
 
@@ -335,6 +325,26 @@
         return '\n'.join(lines)
 
 
+class PlainVerticalTable(PrettyTable):
+    """PrettyTable for outputting to a simple non-column based style.
+
+    When used with --with-license-file, this style is similar to the default
+    style generated from Angular CLI's --extractLicenses flag.
+    """
+
+    def get_string(self, **kwargs):
+        options = self._get_options(kwargs)
+        rows = self._get_rows(options)
+
+        output = ''
+        for row in rows:
+            for v in row:
+                output += '{}\n'.format(v)
+            output += '\n'
+
+        return output
+
+
 def factory_styled_table_with_args(args, output_fields=DEFAULT_OUTPUT_FIELDS):
     table = PrettyTable()
     table.field_names = output_fields
@@ -358,6 +368,8 @@
         table = JsonLicenseFinderTable(table.field_names)
     elif args.format == 'csv':
         table = CSVPrettyTable(table.field_names)
+    elif args.format == 'plain-vertical':
+        table = PlainVerticalTable(table.field_names)
 
     return table
 
@@ -406,7 +418,9 @@
         output_fields.append('Description')
 
     if args.with_license_file:
-        output_fields.append('LicenseFile')
+        if not args.no_license_path:
+            output_fields.append('LicenseFile')
+
         output_fields.append('LicenseText')
 
     return output_fields
@@ -459,17 +473,6 @@
                         'will be ignored.'))
         warn_messages.append(message)
 
-    if args.from_classifier:
-        message = warn(('The option "--from-classifier" is deprecated. '
-                        'Please migrate to "--from=classifier".'))
-        warn_messages.append(message)
-
-    if (args.format_markdown or args.format_rst or args.format_confluence or
-            args.format_html or args.format_json):
-        message = warn(('The option "--format-xxx" is deprecated. '
-                        'Please migrate to "--format=xxx".'))
-        warn_messages.append(message)
-
     return '\n'.join(warn_messages)
 
 
@@ -536,20 +539,6 @@
         if format_input in ('csv', ):
             args.format = 'csv'
 
-        if args.from_classifier:
-            setattr(args, 'from', 'classifier')
-
-        if args.format_markdown:
-            args.format = 'markdown'
-        elif args.format_rst:
-            args.format = 'rst'
-        elif args.format_confluence:
-            args.format = 'confluence'
-        elif args.format_html:
-            args.format = 'html'
-        elif args.format_json:
-            args.format = 'json'
-
 
 def create_parser():
     parser = CompatibleArgumentParser(
@@ -563,10 +552,6 @@
                         help=('where to find license information\n'
                               '"meta", "classifier, "mixed"\n'
                               'default: --from=meta'))
-    parser.add_argument('-c', '--from-classifier',
-                        action='store_true',
-                        default=False,
-                        help='find license from classifier')
     parser.add_argument('-s', '--with-system',
                         action='store_true',
                         default=False,
@@ -588,6 +573,11 @@
                         default=False,
                         help='dump with location of license file and '
                              'contents, most useful with JSON output')
+    parser.add_argument('--no-license-path',
+                        action='store_true',
+                        default=False,
+                        help='when specified together with option -l, '
+                             'suppress location of license file output')
     parser.add_argument('-i', '--ignore-packages',
                         action='store', type=str,
                         nargs='+', metavar='PKG',
@@ -603,29 +593,10 @@
                         action='store', type=str,
                         default='plain', metavar='STYLE',
                         help=('dump as set format style\n'
-                              '"plain", "markdown", "rst", "confluence",\n'
-                              '"html", "json", "json-license-finder",  "csv"\n'
+                              '"plain", "plain-vertical" "markdown", "rst", \n'
+                              '"confluence", "html", "json", \n'
+                              '"json-license-finder",  "csv"\n'
                               'default: --format=plain'))
-    parser.add_argument('-m', '--format-markdown',
-                        action='store_true',
-                        default=False,
-                        help='dump as markdown style')
-    parser.add_argument('-r', '--format-rst',
-                        action='store_true',
-                        default=False,
-                        help='dump as reST style')
-    parser.add_argument('--format-confluence',
-                        action='store_true',
-                        default=False,
-                        help='dump as confluence wiki style')
-    parser.add_argument('--format-html',
-                        action='store_true',
-                        default=False,
-                        help='dump as html style')
-    parser.add_argument('--format-json',
-                        action='store_true',
-                        default=False,
-                        help='dump as json')
     parser.add_argument('--summary',
                         action='store_true',
                         default=False,
@@ -655,7 +626,7 @@
         return
 
     try:
-        with codecs.open(output_file, 'w', 'utf-8',) as f:
+        with open(output_file, 'w', encoding='utf-8') as f:
             f.write(output_string)
         sys.stdout.write('created path: ' + output_file + '\n')
         sys.exit(0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-1.18.0/setup.cfg 
new/pip-licenses-2.1.1/setup.cfg
--- old/pip-licenses-1.18.0/setup.cfg   2019-12-22 05:33:46.000000000 +0100
+++ new/pip-licenses-2.1.1/setup.cfg    2020-02-16 06:45:05.296676600 +0100
@@ -1,11 +1,11 @@
 [bdist_wheel]
-universal = 1
+universal = 0
 
 [aliases]
 test = pytest
 
 [tool:pytest]
-addopts = --pep8 -v --cov --cov-report term-missing
+addopts = --pycodestyle -v --cov --cov-report term-missing
 
 [egg_info]
 tag_build = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-1.18.0/setup.py 
new/pip-licenses-2.1.1/setup.py
--- old/pip-licenses-1.18.0/setup.py    2019-12-14 06:52:55.000000000 +0100
+++ new/pip-licenses-2.1.1/setup.py     2020-02-16 06:37:47.000000000 +0100
@@ -49,11 +49,11 @@
 
 LONG_DESC = ''
 try:
-    from pypandoc import convert
+    from pypandoc import convert_file
 
-    about_this = convert('README.md', 'rst', format='markdown_github')
+    about_this = convert_file('README.md', 'rst', format='markdown_github')
     separate = '\n\n'
-    change_log = convert('CHANGELOG.md', 'rst', format='markdown_github')
+    change_log = convert_file('CHANGELOG.md', 'rst', format='markdown_github')
 
     LONG_DESC = about_this + separate + change_log
 except (IOError, ImportError):
@@ -78,8 +78,6 @@
         'Development Status :: 5 - Production/Stable',
         'Intended Audience :: Developers',
         'License :: OSI Approved :: MIT License',
-        'Programming Language :: Python :: 2',
-        'Programming Language :: Python :: 2.7',
         'Programming Language :: Python :: 3',
         'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
@@ -91,7 +89,7 @@
     keywords='pip pypi package license check',
     py_modules=['piplicenses'],
     license=LICENSE,
-    python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*',
+    python_requires='~=3.5',
     install_requires=['PTable'],
     setup_requires=[
         'pytest-runner',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-1.18.0/test_piplicenses.py 
new/pip-licenses-2.1.1/test_piplicenses.py
--- old/pip-licenses-1.18.0/test_piplicenses.py 2019-12-22 05:13:35.000000000 
+0100
+++ new/pip-licenses-2.1.1/test_piplicenses.py  2020-01-27 13:10:58.000000000 
+0100
@@ -1,10 +1,12 @@
 # -*- coding: utf-8 -*-
 # vim:fenc=utf-8 ff=unix ft=python ts=4 sw=4 sts=4 si et
-from __future__ import (division, print_function,
-                        absolute_import, unicode_literals)
+import copy
+import re
+import sys
 import unittest
 from email import message_from_string
 
+import piplicenses
 from piplicenses import (__pkgname__, create_parser, output_colored,
                          create_licenses_table, get_output_fields, get_sortby,
                          factory_styled_table_with_args, create_warn_string,
@@ -22,11 +24,8 @@
 
 
 class TestGetLicenses(CommandLineTestCase):
-    def setUp(self):
-        pass
 
     def _create_pkg_name_columns(self, table):
-        import copy
         index = DEFAULT_OUTPUT_FIELDS.index('Name')
 
         # XXX: access to private API
@@ -38,7 +37,6 @@
         return pkg_name_columns
 
     def _create_license_columns(self, table):
-        import copy
         index = DEFAULT_OUTPUT_FIELDS.index('License')
 
         # XXX: access to private API
@@ -210,6 +208,19 @@
         self.assertIn('LicenseFile', output_string)
         self.assertIn('LicenseText', output_string)
 
+    def test_with_license_file_no_path(self):
+        with_license_file_args = ['--with-license-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)
+
+        output_string = create_output_string(args)
+        self.assertNotIn('LicenseFile', output_string)
+        self.assertIn('LicenseText', output_string)
+
     def test_with_license_file_warning(self):
         with_license_file_args = ['--with-license-file', '--format=markdown']
         args = self.parser.parse_args(with_license_file_args)
@@ -275,6 +286,13 @@
         self.assertEqual('+', table.junction_char)
         self.assertEqual(RULE_FRAME, table.hrules)
 
+    def test_format_plain_vertical(self):
+        format_plain_args = ['--format=plain-vertical']
+        args = self.parser.parse_args(format_plain_args)
+        output_string = create_output_string(args)
+        self.assertIsNotNone(
+            re.search(r'pytest\n\d\.\d\.\d\nMIT license\n', output_string))
+
     def test_format_markdown(self):
         format_markdown_args = ['--format=markdown']
         args = self.parser.parse_args(format_markdown_args)
@@ -342,50 +360,6 @@
         expected_header = '"Name","Version","License","Author"'
         self.assertEqual(obtained_header, expected_header)
 
-    def test_from_compatibility(self):
-        from_old_style_args = ['--from-classifier']
-        args = self.parser.parse_args(from_old_style_args)
-        warn_string = create_warn_string(args)
-
-        self.assertEqual('classifier', getattr(args, 'from'))
-        self.assertIn('deprecated', warn_string)
-
-    def test_format_compatibility(self):
-        format_old_style_args = ['--format-markdown']
-        args = self.parser.parse_args(format_old_style_args)
-        warn_string = create_warn_string(args)
-
-        self.assertEqual('markdown', args.format)
-        self.assertIn('deprecated', warn_string)
-
-        format_old_style_args = ['--format-rst']
-        args = self.parser.parse_args(format_old_style_args)
-        warn_string = create_warn_string(args)
-
-        self.assertEqual('rst', args.format)
-        self.assertIn('deprecated', warn_string)
-
-        format_old_style_args = ['--format-confluence']
-        args = self.parser.parse_args(format_old_style_args)
-        warn_string = create_warn_string(args)
-
-        self.assertEqual('confluence', args.format)
-        self.assertIn('deprecated', warn_string)
-
-        format_old_style_args = ['--format-html']
-        args = self.parser.parse_args(format_old_style_args)
-        warn_string = create_warn_string(args)
-
-        self.assertEqual('html', args.format)
-        self.assertIn('deprecated', warn_string)
-
-        format_old_style_args = ['--format-json']
-        args = self.parser.parse_args(format_old_style_args)
-        warn_string = create_warn_string(args)
-
-        self.assertEqual('json', args.format)
-        self.assertIn('deprecated', warn_string)
-
     def test_summary(self):
         summary_args = ['--summary']
         args = self.parser.parse_args(summary_args)
@@ -444,9 +418,6 @@
         self.assertIn(text, actual)
         self.assertTrue(actual.endswith('\033[0m'))
 
-    def tearDown(self):
-        pass
-
 
 class MockStdStream(object):
 
@@ -464,9 +435,7 @@
 
     mocked_stdout = MockStdStream()
     mocked_stderr = MockStdStream()
-    import codecs
-    import sys
-    monkeypatch.setattr(codecs, 'open', mocked_open)
+    monkeypatch.setattr(piplicenses, 'open', mocked_open)
     monkeypatch.setattr(sys.stdout, 'write', mocked_stdout.write)
     monkeypatch.setattr(sys.stderr, 'write', mocked_stderr.write)
     monkeypatch.setattr(sys, 'exit', lambda n: None)
@@ -482,9 +451,7 @@
 
     mocked_stdout = MockStdStream()
     mocked_stderr = MockStdStream()
-    import codecs
-    import sys
-    monkeypatch.setattr(codecs, 'open', mocked_open)
+    monkeypatch.setattr(piplicenses, 'open', mocked_open)
     monkeypatch.setattr(sys.stdout, 'write', mocked_stdout.write)
     monkeypatch.setattr(sys.stderr, 'write', mocked_stderr.write)
     monkeypatch.setattr(sys, 'exit', lambda n: None)
@@ -497,8 +464,6 @@
 def test_output_file_none(monkeypatch):
     mocked_stdout = MockStdStream()
     mocked_stderr = MockStdStream()
-    import codecs
-    import sys
     monkeypatch.setattr(sys.stdout, 'write', mocked_stdout.write)
     monkeypatch.setattr(sys.stderr, 'write', mocked_stderr.write)
 


Reply via email to