Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pip-licenses for 
openSUSE:Factory checked in at 2023-05-05 15:57:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pip-licenses (Old)
 and      /work/SRC/openSUSE:Factory/.python-pip-licenses.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pip-licenses"

Fri May  5 15:57:37 2023 rev:11 rq:1084817 version:4.3.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pip-licenses/python-pip-licenses.changes  
2023-04-12 15:48:23.034752858 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pip-licenses.new.1533/python-pip-licenses.changes
        2023-05-05 15:57:41.140222824 +0200
@@ -1,0 +2,9 @@
+Thu May  4 16:56:21 UTC 2023 - Daniel Garcia <daniel.gar...@suse.com>
+
+- Update to 4.3.1:
+  * Fix to treat package names as normalized as in PEP 503 with
+    --packages and --ignore-packages option
+- 4.3.0:
+  * Implement new option --no-version
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ python-pip-licenses.spec ++++++
--- /var/tmp/diff_new_pack.RYzsYO/_old  2023-05-05 15:57:41.656225780 +0200
+++ /var/tmp/diff_new_pack.RYzsYO/_new  2023-05-05 15:57:41.664225826 +0200
@@ -18,7 +18,7 @@
 
 %define skip_python2 1
 Name:           python-pip-licenses
-Version:        4.2.0
+Version:        4.3.1
 Release:        0
 Summary:        Python packages license list
 License:        MIT
@@ -40,6 +40,7 @@
 BuildRequires:  %{python_module docutils}
 BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module py}
+BuildRequires:  %{python_module typing_extensions}
 BuildRequires:  %{python_module wheel}
 # /SECTION
 %python_subpackages
@@ -65,8 +66,7 @@
 %check
 export LANG=en_US.UTF-8
 # gh#raimon49/pip-licenses#120 for test_from_all
-# gh#raimon49/pip-licenses#156 for test_different_python
-%pytest -k 'not (test_from_all or test_different_python)'
+%pytest -k 'not test_from_all'
 %python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} 
%{buildroot}%{_bindir}/pip-licenses-%{$python_bin_suffix} -s
 
 %post

++++++ pip-licenses-4.2.0.tar.gz -> pip-licenses-4.3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-4.2.0/CHANGELOG.md 
new/pip-licenses-4.3.1/CHANGELOG.md
--- old/pip-licenses-4.2.0/CHANGELOG.md 2023-04-12 11:58:29.000000000 +0200
+++ new/pip-licenses-4.3.1/CHANGELOG.md 2023-05-04 04:29:28.000000000 +0200
@@ -1,5 +1,13 @@
 ## CHANGELOG
 
+### 4.3.1
+
+* Fix to treat package names as normalized as in [PEP 
503](https://peps.python.org/pep-0503/) with `--packages` and 
`--ignore-packages` option
+
+### 4.3.0
+
+* Implement new option `--no-version`
+
 ### 4.2.0
 
 * Implement new option `--with-maintainers`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-4.2.0/PKG-INFO 
new/pip-licenses-4.3.1/PKG-INFO
--- old/pip-licenses-4.2.0/PKG-INFO     2023-04-12 13:24:35.490549600 +0200
+++ new/pip-licenses-4.3.1/PKG-INFO     2023-05-04 04:33:00.846429300 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pip-licenses
-Version: 4.2.0
+Version: 4.3.1
 Summary: Dump the software license list of Python packages installed with pip.
 Home-page: https://github.com/raimon49/pip-licenses
 Author: raimon
@@ -70,6 +70,7 @@
       -  `Option: with-maintainers <#option-with-maintainers>`__
       -  `Option: with-urls <#option-with-urls>`__
       -  `Option: with-description <#option-with-description>`__
+      -  `Option: no-version <#option-no-version>`__
       -  `Option: with-license-file <#option-with-license-file>`__
       -  `Option: filter-strings <#option-filter-strings>`__
       -  `Option: filter-code-page <#option-filter-code-page>`__
@@ -590,6 +591,19 @@
     Django  2.0.2    BSD      A high-level Python Web framework that 
encourages rapid development and clean, pragmatic design.
     pytz    2017.3   MIT      World timezone definitions, modern and historical
 
+Option: no-version
+^^^^^^^^^^^^^^^^^^
+
+When executed with the ``--no-version`` option, output without the
+version number.
+
+.. code:: bash
+
+   (venv) $ pip-licenses --no-version
+    Name    License
+    Django  BSD
+    pytz    MIT
+
 Option: with-license-file
 ^^^^^^^^^^^^^^^^^^^^^^^^^
 
@@ -815,6 +829,22 @@
 CHANGELOG
 ---------
 
+.. _431:
+
+4.3.1
+~~~~~
+
+-  Fix to treat package names as normalized as in `PEP
+   503 <https://peps.python.org/pep-0503/>`__ with ``--packages`` and
+   ``--ignore-packages`` option
+
+.. _430:
+
+4.3.0
+~~~~~
+
+-  Implement new option ``--no-version``
+
 .. _420:
 
 4.2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-4.2.0/README.md 
new/pip-licenses-4.3.1/README.md
--- old/pip-licenses-4.2.0/README.md    2023-04-12 11:58:26.000000000 +0200
+++ new/pip-licenses-4.3.1/README.md    2023-04-25 10:07:16.000000000 +0200
@@ -33,6 +33,7 @@
         * [Option: with\-maintainers](#option-with-maintainers)
         * [Option: with\-urls](#option-with-urls)
         * [Option: with\-description](#option-with-description)
+        * [Option: no\-version](#option-no-version)
         * [Option: with\-license\-file](#option-with-license-file)
         * [Option: filter\-strings](#option-filter-strings)
         * [Option: filter\-code\-page](#option-filter-code-page)
@@ -458,6 +459,17 @@
  pytz    2017.3   MIT      World timezone definitions, modern and historical
 ```
 
+#### Option: no-version
+
+When executed with the `--no-version` option, output without the version 
number.
+
+```bash
+(venv) $ pip-licenses --no-version
+ Name    License
+ Django  BSD
+ pytz    MIT
+```
+
 #### Option: with-license-file
 
 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`.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-4.2.0/pip_licenses.egg-info/PKG-INFO 
new/pip-licenses-4.3.1/pip_licenses.egg-info/PKG-INFO
--- old/pip-licenses-4.2.0/pip_licenses.egg-info/PKG-INFO       2023-04-12 
13:24:35.000000000 +0200
+++ new/pip-licenses-4.3.1/pip_licenses.egg-info/PKG-INFO       2023-05-04 
04:33:00.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: pip-licenses
-Version: 4.2.0
+Version: 4.3.1
 Summary: Dump the software license list of Python packages installed with pip.
 Home-page: https://github.com/raimon49/pip-licenses
 Author: raimon
@@ -70,6 +70,7 @@
       -  `Option: with-maintainers <#option-with-maintainers>`__
       -  `Option: with-urls <#option-with-urls>`__
       -  `Option: with-description <#option-with-description>`__
+      -  `Option: no-version <#option-no-version>`__
       -  `Option: with-license-file <#option-with-license-file>`__
       -  `Option: filter-strings <#option-filter-strings>`__
       -  `Option: filter-code-page <#option-filter-code-page>`__
@@ -590,6 +591,19 @@
     Django  2.0.2    BSD      A high-level Python Web framework that 
encourages rapid development and clean, pragmatic design.
     pytz    2017.3   MIT      World timezone definitions, modern and historical
 
+Option: no-version
+^^^^^^^^^^^^^^^^^^
+
+When executed with the ``--no-version`` option, output without the
+version number.
+
+.. code:: bash
+
+   (venv) $ pip-licenses --no-version
+    Name    License
+    Django  BSD
+    pytz    MIT
+
 Option: with-license-file
 ^^^^^^^^^^^^^^^^^^^^^^^^^
 
@@ -815,6 +829,22 @@
 CHANGELOG
 ---------
 
+.. _431:
+
+4.3.1
+~~~~~
+
+-  Fix to treat package names as normalized as in `PEP
+   503 <https://peps.python.org/pep-0503/>`__ with ``--packages`` and
+   ``--ignore-packages`` option
+
+.. _430:
+
+4.3.0
+~~~~~
+
+-  Implement new option ``--no-version``
+
 .. _420:
 
 4.2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-4.2.0/piplicenses.py 
new/pip-licenses-4.3.1/piplicenses.py
--- old/pip-licenses-4.2.0/piplicenses.py       2023-04-12 13:23:06.000000000 
+0200
+++ new/pip-licenses-4.3.1/piplicenses.py       2023-05-04 04:26:34.000000000 
+0200
@@ -56,7 +56,7 @@
 open = open  # allow monkey patching
 
 __pkgname__ = "pip-licenses"
-__version__ = "4.2.0"
+__version__ = "4.3.1"
 __author__ = "raimon"
 __license__ = "MIT"
 __summary__ = (
@@ -129,6 +129,24 @@
     return None
 
 
+PATTERN_DELIMITER = re.compile(r"[-_.]+")
+
+
+def normalize_pkg_name(pkg_name: str) -> str:
+    """Return normalized name according to PEP specification
+
+    See here: https://peps.python.org/pep-0503/#normalized-names
+
+    Args:
+        pkg_name: Package name it is extracted from the package metadata
+                  or specified in the CLI
+
+    Returns:
+        normalized packege name
+    """
+    return PATTERN_DELIMITER.sub("-", pkg_name).lower()
+
+
 METADATA_KEYS: Dict[str, List[Callable[[Message], Optional[str]]]] = {
     "home-page": [extract_homepage],
     "author": [
@@ -254,8 +272,10 @@
         search_paths = get_python_sys_path(args.python)
 
     pkgs = importlib_metadata.distributions(path=search_paths)
-    ignore_pkgs_as_lower = [pkg.lower() for pkg in args.ignore_packages]
-    pkgs_as_lower = [pkg.lower() for pkg in args.packages]
+    ignore_pkgs_as_normalize = [
+        normalize_pkg_name(pkg) for pkg in args.ignore_packages
+    ]
+    pkgs_as_normalize = [normalize_pkg_name(pkg) for pkg in args.packages]
 
     fail_on_licenses = set()
     if args.fail_on:
@@ -266,16 +286,16 @@
         allow_only_licenses = set(map(str.strip, args.allow_only.split(";")))
 
     for pkg in pkgs:
-        pkg_name = pkg.metadata["name"]
+        pkg_name = normalize_pkg_name(pkg.metadata["name"])
         pkg_name_and_version = pkg_name + ":" + pkg.metadata["version"]
 
         if (
-            pkg_name.lower() in ignore_pkgs_as_lower
-            or pkg_name_and_version.lower() in ignore_pkgs_as_lower
+            pkg_name.lower() in ignore_pkgs_as_normalize
+            or pkg_name_and_version.lower() in ignore_pkgs_as_normalize
         ):
             continue
 
-        if pkgs_as_lower and pkg_name.lower() not in pkgs_as_lower:
+        if pkgs_as_normalize and pkg_name.lower() not in pkgs_as_normalize:
             continue
 
         if not args.with_system and pkg_name in SYSTEM_PACKAGES:
@@ -594,6 +614,9 @@
     if args.with_description:
         output_fields.append("Description")
 
+    if args.no_version:
+        output_fields.remove("Version")
+
     if args.with_license_file:
         if not args.no_license_path:
             output_fields.append("LicenseFile")
@@ -967,6 +990,13 @@
         help="dump with short package description",
     )
     format_options.add_argument(
+        "-nv",
+        "--no-version",
+        action="store_true",
+        default=False,
+        help="dump without package version",
+    )
+    format_options.add_argument(
         "-l",
         "--with-license-file",
         action="store_true",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pip-licenses-4.2.0/test_piplicenses.py 
new/pip-licenses-4.3.1/test_piplicenses.py
--- old/pip-licenses-4.2.0/test_piplicenses.py  2023-04-12 11:58:29.000000000 
+0200
+++ new/pip-licenses-4.3.1/test_piplicenses.py  2023-05-04 04:22:44.000000000 
+0200
@@ -46,6 +46,7 @@
     get_output_fields,
     get_packages,
     get_sortby,
+    normalize_pkg_name,
     output_colored,
     save_if_needs,
     select_license_by_source,
@@ -344,6 +345,17 @@
         output_string = create_output_string(args)
         self.assertIn("Description", output_string)
 
+    def test_without_version(self) -> None:
+        without_version_args = ["--no-version"]
+        args = self.parser.parse_args(without_version_args)
+
+        output_fields = get_output_fields(args)
+        self.assertNotEqual(output_fields, list(DEFAULT_OUTPUT_FIELDS))
+        self.assertNotIn("Version", output_fields)
+
+        output_string = create_output_string(args)
+        self.assertNotIn("Version", output_string)
+
     def test_with_license_file(self) -> None:
         with_license_file_args = ["--with-license-file"]
         args = self.parser.parse_args(with_license_file_args)
@@ -418,6 +430,18 @@
         pkg_name_columns = self._create_pkg_name_columns(table)
         self.assertNotIn(ignore_pkg_name, pkg_name_columns)
 
+    def test_ignore_normalized_packages(self) -> None:
+        ignore_pkg_name = "pip-licenses"
+        ignore_packages_args = [
+            "--ignore-package=pip_licenses",
+            "--with-system",
+        ]
+        args = self.parser.parse_args(ignore_packages_args)
+        table = create_licenses_table(args)
+
+        pkg_name_columns = self._create_pkg_name_columns(table)
+        self.assertNotIn(ignore_pkg_name, pkg_name_columns)
+
     def test_ignore_packages_and_version(self) -> None:
         # Fictitious version that does not exist
         ignore_pkg_name = "prettytable"
@@ -442,6 +466,18 @@
         pkg_name_columns = self._create_pkg_name_columns(table)
         self.assertListEqual([pkg_name], pkg_name_columns)
 
+    def test_with_normalized_packages(self) -> None:
+        pkg_name = "typing_extensions"
+        only_packages_args = [
+            "--package=typing-extensions",
+            "--with-system",
+        ]
+        args = self.parser.parse_args(only_packages_args)
+        table = create_licenses_table(args)
+
+        pkg_name_columns = self._create_pkg_name_columns(table)
+        self.assertListEqual([pkg_name], pkg_name_columns)
+
     def test_with_packages_with_system(self) -> None:
         pkg_name = "prettytable"
         only_packages_args = ["--packages=" + pkg_name, "--with-system"]
@@ -830,7 +866,7 @@
         python_arg = f"--python={python_exec}"
         args = create_parser().parse_args([python_arg, "-s", "-f=json"])
         pkgs = get_packages(args)
-        package_names = sorted(p["name"] for p in pkgs)
+        package_names = sorted(set(p["name"] for p in pkgs))
         print(package_names)
 
     assert package_names == ["pip", "setuptools"]
@@ -909,6 +945,14 @@
         assert arg in capture
 
 
+def test_normalize_pkg_name() -> None:
+    expected_normalized_name = "pip-licenses"
+
+    assert normalize_pkg_name("pip_licenses") == expected_normalized_name
+    assert normalize_pkg_name("pip.licenses") == expected_normalized_name
+    assert normalize_pkg_name("Pip-Licenses") == expected_normalized_name
+
+
 def test_extract_homepage_home_page_set() -> None:
     metadata = MagicMock()
     metadata.get.return_value = "Foobar"

Reply via email to