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
-[](https://travis-ci.org/raimon49/pip-licenses)
[](https://pypi.org/project/pip-licenses/)
[](https://badge.fury.io/py/pip-licenses)
[](https://github.com/raimon49/pip-licenses/releases)
[](https://codecov.io/gh/raimon49/pip-licenses)
[](https://github.com/raimon49/pip-licenses/blob/master/LICENSE)
[](https://requires.io/github/raimon49/pip-licenses/requirements/?branch=master)
+[](https://travis-ci.org/raimon49/pip-licenses)
[](https://pypi.org/project/pip-licenses/)
[](https://badge.fury.io/py/pip-licenses)
[](https://github.com/raimon49/pip-licenses/releases)
[](https://codecov.io/gh/raimon49/pip-licenses)
[](https://github.com/raimon49/pip-licenses/graphs/contributors)
[](https://github.com/raimon49/pip-licenses/blob/master/LICENSE)
[](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)