Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pymod2pkg for 
openSUSE:Factory checked in at 2024-01-07 21:40:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pymod2pkg (Old)
 and      /work/SRC/openSUSE:Factory/.python-pymod2pkg.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pymod2pkg"

Sun Jan  7 21:40:51 2024 rev:24 rq:1137433 version:0.28.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pymod2pkg/python-pymod2pkg.changes        
2023-09-08 21:16:16.092029904 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pymod2pkg.new.28375/python-pymod2pkg.changes 
    2024-01-07 21:41:07.173802795 +0100
@@ -1,0 +2,33 @@
+Sun Jan  7 20:04:31 UTC 2024 - cloud-de...@suse.de
+
+- removed 0001-add-suse_py39-flavor-to-explicitly-render-templates-.patch
+- update to version 0.28.0
+  - Moving IRC network reference to OFTC
+  - Remove retired Qinling support
+  - Remove retired Searchlight usage
+  - add suse_py39 flavor to explicitly render templates for py39
+  - Remove retired karbor usage
+  - Add RDO mapping for psycopg2-binary
+  - Remove retired Karbor support
+  - Update package rules for some packages in the Redhat ecosystems
+  - update to zed level jobs
+  - Add python2 and python3 return values
+  - Bump some requirements in lower-constraints.txt
+  - Convert from "-" to "_" in setup.cfg
+  - Add RDO mapping for semantic-version
+  - Revert "Fix PyYAML mapping for RDO"
+  - bump py37 to py38 in tox.ini
+  - Move CLI code into it's own module
+  - [tox] Update constraints, flake8 settings and default envlist
+  - Add reqs2pkg
+  - Use py3 as the default runtime for tox
+  - remove unicode from code
+  - [community goal] Update contributor documentation
+  - Add doc/requirements
+  - Retire django-openstack-auth
+  - add suse_py311 flavor to explicitly render templates for py311
+  - Add RDO mapping for suds-community
+  - Add RDO mapping for prometheus-client
+  - Change RDO mapping for sympy and protobuf
+
+-------------------------------------------------------------------

Old:
----
  0001-add-suse_py39-flavor-to-explicitly-render-templates-.patch
  pymod2pkg-0.26.0.tar.gz

New:
----
  pymod2pkg-0.28.0.tar.gz

BETA DEBUG BEGIN:
  Old:
- removed 0001-add-suse_py39-flavor-to-explicitly-render-templates-.patch
- update to version 0.28.0
BETA DEBUG END:

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

Other differences:
------------------
++++++ python-pymod2pkg.spec ++++++
--- /var/tmp/diff_new_pack.XDtYYW/_old  2024-01-07 21:41:07.901829278 +0100
+++ /var/tmp/diff_new_pack.XDtYYW/_new  2024-01-07 21:41:07.905829423 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-pymod2pkg
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,14 +18,13 @@
 
 %global sname pymod2pkg
 Name:           python-pymod2pkg
-Version:        0.26.0
+Version:        0.28.0
 Release:        0
 Summary:        OpenStack Packaging - python module name to package name map
 License:        Apache-2.0
 Group:          Development/Libraries/Python
 URL:            https://wiki.openstack.org/wiki/Rpm-packaging
-Source0:        
https://files.pythonhosted.org/packages/source/p/pymod2pkg/pymod2pkg-0.26.0.tar.gz
-Patch1:         0001-add-suse_py39-flavor-to-explicitly-render-templates-.patch
+Source0:        
https://files.pythonhosted.org/packages/source/p/pymod2pkg/pymod2pkg-0.28.0.tar.gz
 BuildRequires:  openstack-macros
 BuildRequires:  python3-distro
 BuildRequires:  python3-pbr >= 2.0.0
@@ -61,7 +60,7 @@
 Documentation for python module name to package name map library.
 
 %prep
-%autosetup -p1 -n pymod2pkg-0.26.0
+%autosetup -p1 -n pymod2pkg-0.28.0
 %py_req_cleanup
 
 %build
@@ -82,7 +81,9 @@
 %license LICENSE
 %doc README*
 %{_bindir}/pymod2pkg
-%{python3_sitelib}/*
+%{_bindir}/reqs2pkg
+%{python3_sitelib}/pymod2pkg
+%{python3_sitelib}/pymod2pkg-%{version}*-info
 
 %files -n python-pymod2pkg-doc
 %doc doc/build/html

++++++ _service ++++++
--- /var/tmp/diff_new_pack.XDtYYW/_old  2024-01-07 21:41:07.929830296 +0100
+++ /var/tmp/diff_new_pack.XDtYYW/_new  2024-01-07 21:41:07.929830296 +0100
@@ -1,14 +1,14 @@
 <services>
-  <service mode="disabled" name="renderspec">
+  <service mode="manual" name="renderspec">
     <param 
name="input-template">https://git.openstack.org/cgit/openstack/rpm-packaging/plain/openstack/pymod2pkg/pymod2pkg.spec.j2</param>
     <param name="output-name">python-pymod2pkg.spec</param>
     <param 
name="requirements">https://raw.githubusercontent.com/openstack/pymod2pkg/master/requirements.txt</param>
     <param name="changelog-email">cloud-de...@suse.de</param>
     <param name="changelog-provider">gh,openstack,pymod2pkg</param>
   </service>
-  <service mode="disabled" name="download_files">
+  <service mode="manual" name="download_files">
     <param name="changesgenerate">enable</param>
   </service>
-  <service name="format_spec_file" mode="disabled"/>
+  <service name="format_spec_file" mode="manual"/>
 </services>
 

++++++ pymod2pkg-0.26.0.tar.gz -> pymod2pkg-0.28.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/.zuul.yaml 
new/pymod2pkg-0.28.0/.zuul.yaml
--- old/pymod2pkg-0.26.0/.zuul.yaml     2020-10-02 10:44:14.000000000 +0200
+++ new/pymod2pkg-0.28.0/.zuul.yaml     2024-01-07 16:56:19.000000000 +0100
@@ -1,5 +1,4 @@
 - project:
     templates:
-      - openstack-lower-constraints-jobs
-      - openstack-python3-ussuri-jobs
+      - openstack-python3-zed-jobs
       - publish-openstack-docs-pti
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/AUTHORS new/pymod2pkg-0.28.0/AUTHORS
--- old/pymod2pkg-0.26.0/AUTHORS        2020-10-02 10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/AUTHORS        2024-01-07 16:57:12.000000000 +0100
@@ -9,6 +9,7 @@
 Colleen Murphy <colleen.mur...@suse.de>
 Corey Bryant <corey.bry...@canonical.com>
 Dirk Mueller <d...@dmllr.de>
+Dirk Müller <d...@dmllr.de>
 Doug Hellmann <d...@doughellmann.com>
 Flavio Percoco <flape...@gmail.com>
 Ghanshyam Mann <gm...@ghanshyammann.com>
@@ -26,6 +27,7 @@
 Jon Schlueter <jschl...@redhat.com>
 Joseph Davis <joseph.da...@suse.com>
 Ken Dreyer <kdre...@redhat.com>
+Kendall Nelson <kennelso...@gmail.com>
 Ondřej Nový <ondrej.n...@firma.seznam.cz>
 Ryan Tidwell <rtidw...@suse.com>
 Sean McGinnis <sean.mcgin...@gmail.com>
@@ -33,8 +35,14 @@
 Sumit Jamgade <sjamg...@suse.com>
 Thomas Bechtold <tbecht...@suse.com>
 Tomasz Trębski <tomasz.treb...@ts.fujitsu.com>
+Tony Breeds <t...@bakeyournoodle.com>
 Tony Xu <hhkt...@gmail.com>
+karolinku <kk...@redhat.com>
 liuwei <liuw...@chinaunicom.cn>
 loooosy <syluo5...@fiberhome.com>
+maaoyu <maa...@inspur.com>
 malei <malei@maleideMacBook-Pro.local>
+manchandavishal <manchandavishal...@gmail.com>
 melissaml <ma....@99cloud.net>
+wangjiaqi07 <wangjiaq...@inspur.com>
+zhangboye <zhangb...@inspur.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/CONTRIBUTING.rst 
new/pymod2pkg-0.28.0/CONTRIBUTING.rst
--- old/pymod2pkg-0.26.0/CONTRIBUTING.rst       1970-01-01 01:00:00.000000000 
+0100
+++ new/pymod2pkg-0.28.0/CONTRIBUTING.rst       2024-01-07 16:56:19.000000000 
+0100
@@ -0,0 +1,22 @@
+The source repository for this project can be found at:
+
+   https://opendev.org/openstack/pymod2pkg
+
+Pull requests submitted through GitHub are not monitored.
+
+To start contributing to OpenStack, follow the steps in the contribution guide
+to set up and use Gerrit:
+
+   
https://docs.openstack.org/contributors/code-and-documentation/quick-start.html
+
+Bugs should be filed on Launchpad:
+
+   https://bugs.launchpad.net/pymod2pkg
+
+Developers should also join the discussion on the mailing list, at:
+
+  http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-discuss
+
+or join the IRC channel on
+
+  https://webchat.oftc.net/?channels=openstack-rpm-packaging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/ChangeLog 
new/pymod2pkg-0.28.0/ChangeLog
--- old/pymod2pkg-0.26.0/ChangeLog      2020-10-02 10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/ChangeLog      2024-01-07 16:57:12.000000000 +0100
@@ -1,6 +1,37 @@
 CHANGES
 =======
 
+0.28.0
+------
+
+* add suse\_py311 flavor to explicitly render templates for py311
+* add suse\_py39 flavor to explicitly render templates for py39
+* Add reqs2pkg
+* Move CLI code into it's own module
+* Convert from "-" to "\_" in setup.cfg
+* remove unicode from code
+* Update package rules for some packages in the Redhat ecosystems
+* [tox] Update constraints, flake8 settings and default envlist
+* Add python2 and python3 return values
+* update to zed level jobs
+* Add RDO mapping for semantic-version
+* Change RDO mapping for sympy and protobuf
+* Add RDO mapping for psycopg2-binary
+* Revert "Fix PyYAML mapping for RDO"
+* Add RDO mapping for suds-community
+* Remove retired Karbor support
+* Add RDO mapping for prometheus-client
+* [community goal] Update contributor documentation
+* Retire django-openstack-auth
+* Moving IRC network reference to OFTC
+* Use py3 as the default runtime for tox
+* Add doc/requirements
+* Remove retired Qinling support
+* Bump some requirements in lower-constraints.txt
+* Remove retired karbor usage
+* Remove retired Searchlight usage
+* bump py37 to py38 in tox.ini
+
 0.26.0
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/PKG-INFO 
new/pymod2pkg-0.28.0/PKG-INFO
--- old/pymod2pkg-0.26.0/PKG-INFO       2020-10-02 10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/PKG-INFO       2024-01-07 16:57:12.786491600 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: pymod2pkg
-Version: 0.26.0
+Version: 0.28.0
 Summary: python module name to package name map
 Home-page: https://docs.openstack.org/pymod2pkg/latest/
 Author: OpenStack
@@ -48,7 +48,7 @@
         
         or join the IRC channel on
         
-           http://webchat.freenode.net/?channels=openstack-rpm-packaging
+           http://webchat.oftc.net/?channels=openstack-rpm-packaging
         
         
 Platform: UNKNOWN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/README.rst 
new/pymod2pkg-0.28.0/README.rst
--- old/pymod2pkg-0.26.0/README.rst     2020-10-02 10:44:14.000000000 +0200
+++ new/pymod2pkg-0.28.0/README.rst     2024-01-07 16:56:19.000000000 +0100
@@ -40,5 +40,5 @@
 
 or join the IRC channel on
 
-   http://webchat.freenode.net/?channels=openstack-rpm-packaging
+   http://webchat.oftc.net/?channels=openstack-rpm-packaging
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/doc/requirements.txt 
new/pymod2pkg-0.28.0/doc/requirements.txt
--- old/pymod2pkg-0.26.0/doc/requirements.txt   1970-01-01 01:00:00.000000000 
+0100
+++ new/pymod2pkg-0.28.0/doc/requirements.txt   2024-01-07 16:56:19.000000000 
+0100
@@ -0,0 +1,2 @@
+sphinx>=2.0.0,!=2.1.0 # BSD
+openstackdocstheme>=2.2.1 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/doc/source/conf.py 
new/pymod2pkg-0.28.0/doc/source/conf.py
--- old/pymod2pkg-0.26.0/doc/source/conf.py     2020-10-02 10:44:14.000000000 
+0200
+++ new/pymod2pkg-0.28.0/doc/source/conf.py     2024-01-07 16:56:19.000000000 
+0100
@@ -27,8 +27,8 @@
 master_doc = 'index'
 
 # General information about the project.
-project = u'pymod2pkg'
-copyright = u'2016, OpenStack Foundation'
+project = 'pymod2pkg'
+copyright = '2016, OpenStack Foundation'
 
 # If true, '()' will be appended to :func: etc. cross-reference text.
 add_function_parentheses = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/lower-constraints.txt 
new/pymod2pkg-0.28.0/lower-constraints.txt
--- old/pymod2pkg-0.26.0/lower-constraints.txt  2020-10-02 10:44:14.000000000 
+0200
+++ new/pymod2pkg-0.28.0/lower-constraints.txt  2024-01-07 16:56:19.000000000 
+0100
@@ -1,13 +1,13 @@
 alabaster==0.7.10
 Babel==2.3.4
-docutils==0.11
+docutils==0.14
 extras==1.0.0
 fixtures==3.0.0
 flake8==3.5.0
 imagesize==0.7.1
 Jinja2==2.10
 linecache2==1.0.0
-MarkupSafe==1.0
+MarkupSafe==1.1
 mccabe==0.6.1
 openstackdocstheme==2.2.1
 pbr==2.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/pymod2pkg/__init__.py 
new/pymod2pkg-0.28.0/pymod2pkg/__init__.py
--- old/pymod2pkg-0.26.0/pymod2pkg/__init__.py  2020-10-02 10:44:14.000000000 
+0200
+++ new/pymod2pkg-0.28.0/pymod2pkg/__init__.py  2024-01-07 16:56:19.000000000 
+0100
@@ -10,8 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import argparse
-import distro
 import re
 
 
@@ -106,21 +104,49 @@
     return (pkg, py2pkg, py3pkg)
 
 
+def default_suse_py39_tr(mod):
+    """
+    Default translation function for openSUSE, SLES, and other
+    SUSE based systems that have python 3.9
+
+    Returns a tuple of 3 elements - the unversioned name, the python2 versioned
+    name and the python3 versioned name.
+    """
+    pkg = 'python-%s' % mod
+    py2pkg = 'python2-%s' % mod
+    py3pkg = 'python39-%s' % mod
+    return (pkg, py2pkg, py3pkg)
+
+
+def default_suse_py311_tr(mod):
+    """
+    Default translation function for openSUSE, SLES, and other
+    SUSE based systems that have python 3.11
+
+    Returns a tuple of 3 elements - the unversioned name, the python2 versioned
+    name and the python3 versioned name.
+    """
+    pkg = 'python-%s' % mod
+    py2pkg = 'python2-%s' % mod
+    py3pkg = 'python311-%s' % mod
+    return (pkg, py2pkg, py3pkg)
+
+
 def openstack_prefix_tr(mod):
     pkg = 'openstack-' + mod.lower()
-    return (pkg, '', '')
+    return (pkg, pkg, pkg)
 
 
 def rdo_horizon_plugins_tr(mod):
     mod = mod.replace('dashboard', 'ui')
     pkg = 'openstack-' + mod
-    return (pkg, '', '')
+    return (pkg, pkg, pkg)
 
 
 def suse_horizon_plugins_tr(mod):
     mod = mod.replace('dashboard', 'ui')
     pkg = 'openstack-horizon-plugin-' + mod
-    return (pkg, '', '')
+    return (pkg, pkg, pkg)
 
 
 def rdo_xstatic_tr(mod):
@@ -155,7 +181,7 @@
     'Tempest', 'aodh', 'barbican', 'ceilometer', 'cinder',
     'cloudkitty', 'cyborg', 'designate', 'ec2-api', 'freezer', 'freezer-api',
     'freezer-dr', 'glance', 'heat', 'heat-templates', 'ironic',
-    'ironic-discoverd', 'ironic-inspector', 'ironic-python-agent', 'karbor',
+    'ironic-discoverd', 'ironic-inspector', 'ironic-python-agent',
     'keystone', 'magnum', 'manila', 'masakari', 'masakari-monitors',
     'mistral', 'monasca-agent', 'monasca-api', 'monasca-ceilometer',
     'monasca-log-api', 'monasca-notification', 'monasca-persister',
@@ -198,14 +224,19 @@
     SingleRule('nosexcover', 'python-nose-xcover',
                py3pkg='python3-nose-xcover'),
     SingleRule('posix_ipc', 'python-posix_ipc', py3pkg='python3-posix_ipc'),
+    SingleRule('prometheus-client', 'python-prometheus_client',
+               py3pkg='python3-prometheus_client'),
     SingleRule('sysv_ipc', 'python-sysv_ipc', py3pkg='python3-sysv_ipc'),
     SingleRule('oslosphinx', 'python-oslo-sphinx',
                py3pkg='python3-oslo-sphinx'),
     SingleRule('ovs', 'python-openvswitch', py3pkg='python3-openvswitch'),
+    SingleRule('psycopg2-binary', 'python-psycopg2',
+               py3pkg='python3-psycopg2'),
     SingleRule('pyinotify', 'python-inotify', py3pkg='python3-inotify'),
     SingleRule('pyScss', 'python-scss', py3pkg='python3-scss'),
     SingleRule('tripleo-incubator', 'openstack-tripleo'),
     SingleRule('pika-pool', 'python-pika_pool', py3pkg='python3-pika_pool'),
+    SingleRule('suds-community', 'python-suds', py3pkg='python3-suds'),
     SingleRule('suds-jurko', 'python-suds', py3pkg='python3-suds'),
     SingleRule('supervisor', 'supervisor', py3pkg='python3-supervisor'),
     SingleRule('wsgi_intercept', 'python-wsgi_intercept',
@@ -223,21 +254,26 @@
     SingleRule('networking-l2gw', 'openstack-neutron-l2gw'),
     SingleRule('neutron-dynamic-routing', 'openstack-neutron-dynamic-routing'),
     SingleRule('m2crypto', 'm2crypto'),
-    SingleRule('libvirt-python', 'libvirt-python', py3pkg='libvirt-python3'),
+    SingleRule('libvirt-python', 'python-libvirt', py3pkg='python3-libvirt'),
     SingleRule('tempest-horizon', 'python-horizon-tests-tempest'),
     SingleRule('rtslib-fb', 'python-rtslib', py3pkg='python3-rtslib'),
-    SingleRule('PyYAML', 'PyYAML', py3pkg='python3-PyYAML'),
+    SingleRule('PyYAML', 'python-pyyaml', py3pkg='python3-pyyaml'),
     SingleRule('pyOpenSSL', 'python-pyOpenSSL', py3pkg='python3-pyOpenSSL'),
     SingleRule('semantic_version', 'python-semantic_version',
                py3pkg='python3-semantic_version'),
+    SingleRule('semantic-version', 'python-semantic_version',
+               py3pkg='python3-semantic_version'),
     SingleRule('sphinxcontrib-svg2pdfconverter',
                'python-sphinxcontrib-rsvgconverter',
                py3pkg='python3-sphinxcontrib-rsvgconverter'),
+    SingleRule('systemd-python', 'python-systemd', py3pkg='python3-systemd'),
     # simple direct mapping no name change
     MultiRule(
+        mods=['dib-utils', 'diskimage-builder'],
+        pkgfun=lambda mod: ((mod, mod, mod))),
+    # simple direct mapping no name change - except for python3
+    MultiRule(
         mods=['numpy', 'pyflakes', 'pylint',
-              'dib-utils',
-              'diskimage-builder',
               'graphviz',
               'instack-undercloud',
               'os-apply-config',
@@ -245,9 +281,6 @@
               'os-net-config',
               'os-refresh-config',
               'pexpect',
-              'protobuf',
-              'sympy',
-              'systemd-python',
               'watchdog',
               'pystache', 'pysendfile'],
         pkgfun=lambda mod: ((mod, mod, 'python3-' + mod))),
@@ -263,7 +296,7 @@
 ]
 
 
-SUSE_PKG_MAP = [
+SUSE_COMMON_PKG_MAP = [
     # not following SUSE naming policy
     SingleRule('ansible', 'ansible'),
     SingleRule('ansible-runner', 'ansible-runner'),
@@ -276,10 +309,10 @@
             'barbican', 'ceilometer', 'cinder', 'cloudkitty',
             'congress', 'cue', 'cyborg', 'designate', 'distil', 'drac', 'fuel',
             'freezer', 'heat', 'glance', 'glare', 'ironic',
-            'ironic-inspector-', 'karbor', 'k8s', 'keystone',
+            'ironic-inspector-', 'k8s', 'keystone',
             'magnum', 'manila', 'masakari', 'mistral', 'monasca',
             'murano', 'nimble', 'neutron', 'nova', 'octavia', 'oneview',
-            'openstack', 'qinling', 'sahara', 'scci', 'searchlight', 'senlin',
+            'openstack', 'sahara', 'scci', 'senlin',
             'smaug', 'solum', 'swift', 'tacker', 'tripleo', 'trove',
             'vitrage', 'watcher', 'zaqar', 'zun')],
         pkgfun=subst_python2_python3),
@@ -304,8 +337,19 @@
               pkgfun=suse_horizon_plugins_tr),
 ]
 
+SUSE_PKG_MAP = SUSE_COMMON_PKG_MAP
+
+SUSE_PY39_PKG_MAP = SUSE_COMMON_PKG_MAP
+SUSE_PY39_PKG_MAP.extend([
+    SingleRule('devel', 'python-devel', 'python39-devel'),
+])
+
+SUSE_PY311_PKG_MAP = SUSE_COMMON_PKG_MAP
+SUSE_PY311_PKG_MAP.extend([
+    SingleRule('devel', 'python-devel', 'python311-devel'),
+])
+
 UBUNTU_PKG_MAP = [
-    SingleRule('django_openstack_auth', 'python-openstack-auth'),
     SingleRule('glance_store', 'python-glance-store'),
     SingleRule('GitPython', 'python-git'),
     SingleRule('libvirt-python', 'python-libvirt'),
@@ -320,10 +364,10 @@
         mods=['python-%sclient' % c for c in (
             'barbican', 'ceilometer', 'cinder', 'cloudkitty', 'congress',
             'designate', 'fuel', 'heat', 'glance', 'ironic',
-            'karbor',  'keystone',
+            'keystone',
             'magnum', 'manila', 'masakari', 'mistral', 'monasca',
             'murano', 'neutron', 'nova', 'octavia',
-            'openstack', 'qinling', 'sahara',
+            'openstack', 'sahara',
             'senlin', 'swift',
             'trove',  'zaqar', 'zun')],
         pkgfun=same_name_python_subst_python3),
@@ -342,6 +386,10 @@
 
 def get_pkg_map(dist):
     d_lower = dist.lower()
+    if 'suse_py39' in d_lower:
+        return SUSE_PY39_PKG_MAP
+    if 'suse_py311' in d_lower:
+        return SUSE_PY311_PKG_MAP
     if 'suse' in d_lower or 'sles' in d_lower:
         return SUSE_PKG_MAP
     if 'ubuntu' in d_lower:
@@ -351,6 +399,10 @@
 
 def get_default_tr_func(dist):
     d_lower = dist.lower()
+    if 'suse_py39' in d_lower:
+        return default_suse_py39_tr
+    if 'suse_py311' in d_lower:
+        return default_suse_py311_tr
     if 'suse' in d_lower or 'sles' in d_lower:
         return default_suse_tr
     if 'ubuntu' in d_lower:
@@ -408,40 +460,3 @@
         if pkglist:
             return pkglist[0]
     return mod
-
-
-def main():
-    """for resolving names from command line"""
-    parser = argparse.ArgumentParser(description='Python module name to'
-                                     'package name')
-    group = parser.add_mutually_exclusive_group()
-    group.add_argument(
-        '--dist', help='distribution style (default: %(default)s)',
-        default=distro.LinuxDistribution().id().partition(' ')[0])
-    group.add_argument('--upstream', help='map to OpenStack project name',
-                       action='store_true')
-    parser.add_argument('--pyver', help='Python versions to return. "py" is '
-                        'the unversioned name',
-                        action='append', choices=['py', 'py2', 'py3'],
-                        default=[])
-    parser.add_argument('modulename', help='python module name')
-    args = vars(parser.parse_args())
-
-    pyversions = args['pyver'] if args['pyver'] else ['py']
-
-    if args['upstream']:
-        print(module2upstream(args['modulename']))
-    else:
-        pylist = module2package(args['modulename'], args['dist'],
-                                py_vers=pyversions)
-        # When only 1 version is requested, it will be returned as a string,
-        # for backwards compatibility. Else, it will be a list.
-        if type(pylist) is list:
-            print(' '.join(pylist))
-        else:
-            print(pylist)
-
-
-# for debugging to call the file directly
-if __name__ == "__main__":
-    main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/pymod2pkg/cli/pymod2pkg.py 
new/pymod2pkg-0.28.0/pymod2pkg/cli/pymod2pkg.py
--- old/pymod2pkg-0.26.0/pymod2pkg/cli/pymod2pkg.py     1970-01-01 
01:00:00.000000000 +0100
+++ new/pymod2pkg-0.28.0/pymod2pkg/cli/pymod2pkg.py     2024-01-07 
16:56:19.000000000 +0100
@@ -0,0 +1,48 @@
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import argparse
+import distro
+
+import pymod2pkg
+
+
+def main():
+    """for resolving names from command line"""
+    parser = argparse.ArgumentParser(description='Python module name to'
+                                     'package name')
+    group = parser.add_mutually_exclusive_group()
+    group.add_argument(
+        '--dist', help='distribution style (default: %(default)s)',
+        default=distro.LinuxDistribution().id().partition(' ')[0])
+    group.add_argument('--upstream', help='map to OpenStack project name',
+                       action='store_true')
+    parser.add_argument('--pyver', help='Python versions to return. "py" is '
+                        'the unversioned name',
+                        action='append', choices=['py', 'py2', 'py3'],
+                        default=[])
+    parser.add_argument('modulename', help='python module name')
+    args = vars(parser.parse_args())
+
+    pyversions = args['pyver'] if args['pyver'] else ['py']
+
+    if args['upstream']:
+        print(pymod2pkg.module2upstream(args['modulename']))
+    else:
+        pylist = pymod2pkg.module2package(args['modulename'], args['dist'],
+                                          py_vers=pyversions)
+        # When only 1 version is requested, it will be returned as a string,
+        # for backwards compatibility. Else, it will be a list.
+        if type(pylist) is list:
+            print(' '.join(pylist))
+        else:
+            print(pylist)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/pymod2pkg/cli/reqs2pkg.py 
new/pymod2pkg-0.28.0/pymod2pkg/cli/reqs2pkg.py
--- old/pymod2pkg-0.26.0/pymod2pkg/cli/reqs2pkg.py      1970-01-01 
01:00:00.000000000 +0100
+++ new/pymod2pkg-0.28.0/pymod2pkg/cli/reqs2pkg.py      2024-01-07 
16:56:19.000000000 +0100
@@ -0,0 +1,115 @@
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import argparse
+import distro
+import packaging.requirements
+import pymod2pkg
+import sys
+
+
+def get_default_prefix(dist):
+    d_lower = dist.lower()
+    if 'ubuntu' in d_lower:
+        return "Depends"
+    return "Requires"
+
+
+def main():
+    """Process python requirements files into a list of distribution
+       packages"""
+    parser = argparse.ArgumentParser(
+        description='Process python requirements files into a list of '
+                    'distribution packages'
+    )
+    parser.add_argument(
+        '--dist', help='distribution style (default: %(default)s)',
+        default=distro.LinuxDistribution().id().partition(' ')[0])
+    parser.add_argument('--pyver', help='Python versions to return. "py" is '
+                        'the unversioned name',
+                        action='append', choices=['py', 'py2', 'py3'],
+                        default=[])
+    parser.add_argument('-r', '--requirements', action="append",
+                        dest='requirements', required=True, default=[],
+                        help="python requirements file to parse")
+    parser.add_argument('-v', '--verbose', dest='verbose', action='count',
+                        default=1, help='Invrease verbosity of the program')
+    parser.add_argument('-b', '--brief', dest='verbose', action='store_const',
+                        const=0, help='Only generate packagenames')
+    parser.add_argument('--prefix', dest='prefix', nargs='?', const=None,
+                        help="Prefix the output with a string provided by "
+                        "the user or one determined by the --dist value")
+
+    args = vars(parser.parse_args())
+
+    pyversions = args['pyver'] if args['pyver'] else ['py']
+    if len(pyversions) > 1:
+        print("Please select only one version of python", file=sys.stderr)
+        return 1
+    args['prefix'] = get_default_prefix(args['dist'])
+
+    for reqs_file in args['requirements']:
+        if args['verbose']:
+            print(f'Processing: {reqs_file}')
+        try:
+            with open(reqs_file) as f:
+                reqs_txt = [line.strip() for line in f.readlines()]
+        except FileNotFoundError as ex:
+            print(ex)
+
+        reqs = []
+        for line in reqs_txt:
+            if line.startswith('#') or line == '':
+                continue
+            # TODO(tonyb): Do we need to extend this so that it does the
+            # right thing when given muliple versions of python for example:
+            # requirements,txt":
+            # liba>2;python_version>=3
+            # altlib;python_version<3
+            # We should honor this based on pyversions
+            req = packaging.requirements.Requirement(line.split('#')[0])
+            pkg = pymod2pkg.module2package(req.name, args['dist'],
+                                           py_vers=pyversions)
+            # We can potentially extend this to include versions
+            # specifications.  The exact output will clearly be
+            # distribution specific
+            reqs.append(pkg)
+
+        # This is slightly complex but it handles the following scenarios:
+        # $ reqs2pkg -r test-requirements.txt --dist ubuntu -b
+        # python-stestr
+        # python-testresources
+        # python-testtools
+        # $ reqs2pkg -r test-requirements.txt --dist ubuntu
+        # Processing: test-requirements.txt
+        # Depends: python-stestr, python-testresources, python-testtools
+        # $ reqs2pkg -r test-requirements.txt --dist rhel -b
+        # python-stestr
+        # python-testresources
+        # python-testtools
+        # $ reqs2pkg -r test-requirements.txt --dist rhel
+        # Processing: test-requirements.txt
+        # Requires: python-stestr
+        # Requires: python-testresources
+        # Requires: python-testtools
+        prefix = ''
+        if args['verbose']:
+            prefix = f"{args['prefix']}: "
+        if args['dist'].lower() in 'ubuntu':
+            delim = ", "
+        else:
+            delim = f"\n{prefix}"
+
+        if args['verbose']:
+            print(prefix + delim.join(reqs))
+        else:
+            print("\n".join(reqs))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/pymod2pkg.egg-info/PKG-INFO 
new/pymod2pkg-0.28.0/pymod2pkg.egg-info/PKG-INFO
--- old/pymod2pkg-0.26.0/pymod2pkg.egg-info/PKG-INFO    2020-10-02 
10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/pymod2pkg.egg-info/PKG-INFO    2024-01-07 
16:57:12.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: pymod2pkg
-Version: 0.26.0
+Version: 0.28.0
 Summary: python module name to package name map
 Home-page: https://docs.openstack.org/pymod2pkg/latest/
 Author: OpenStack
@@ -48,7 +48,7 @@
         
         or join the IRC channel on
         
-           http://webchat.freenode.net/?channels=openstack-rpm-packaging
+           http://webchat.oftc.net/?channels=openstack-rpm-packaging
         
         
 Platform: UNKNOWN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/pymod2pkg.egg-info/SOURCES.txt 
new/pymod2pkg-0.28.0/pymod2pkg.egg-info/SOURCES.txt
--- old/pymod2pkg-0.26.0/pymod2pkg.egg-info/SOURCES.txt 2020-10-02 
10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/pymod2pkg.egg-info/SOURCES.txt 2024-01-07 
16:57:12.000000000 +0100
@@ -1,6 +1,7 @@
 .stestr.conf
 .zuul.yaml
 AUTHORS
+CONTRIBUTING.rst
 ChangeLog
 LICENSE
 MANIFEST.in
@@ -13,6 +14,7 @@
 test-requirements.txt
 tests.py
 tox.ini
+doc/requirements.txt
 doc/source/conf.py
 doc/source/index.rst
 doc/source/static/.placeholder
@@ -24,4 +26,7 @@
 pymod2pkg.egg-info/not-zip-safe
 pymod2pkg.egg-info/pbr.json
 pymod2pkg.egg-info/requires.txt
-pymod2pkg.egg-info/top_level.txt
\ No newline at end of file
+pymod2pkg.egg-info/top_level.txt
+pymod2pkg/cli/__init__.py
+pymod2pkg/cli/pymod2pkg.py
+pymod2pkg/cli/reqs2pkg.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/pymod2pkg.egg-info/entry_points.txt 
new/pymod2pkg-0.28.0/pymod2pkg.egg-info/entry_points.txt
--- old/pymod2pkg-0.26.0/pymod2pkg.egg-info/entry_points.txt    2020-10-02 
10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/pymod2pkg.egg-info/entry_points.txt    2024-01-07 
16:57:12.000000000 +0100
@@ -1,3 +1,4 @@
 [console_scripts]
-pymod2pkg = pymod2pkg:main
+pymod2pkg = pymod2pkg.cli.pymod2pkg:main
+reqs2pkg = pymod2pkg.cli.reqs2pkg:main
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/pymod2pkg.egg-info/pbr.json 
new/pymod2pkg-0.28.0/pymod2pkg.egg-info/pbr.json
--- old/pymod2pkg-0.26.0/pymod2pkg.egg-info/pbr.json    2020-10-02 
10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/pymod2pkg.egg-info/pbr.json    2024-01-07 
16:57:12.000000000 +0100
@@ -1 +1 @@
-{"git_version": "3b2f6d7", "is_release": true}
\ No newline at end of file
+{"git_version": "520ee43", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/pymod2pkg.egg-info/requires.txt 
new/pymod2pkg-0.28.0/pymod2pkg.egg-info/requires.txt
--- old/pymod2pkg-0.26.0/pymod2pkg.egg-info/requires.txt        2020-10-02 
10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/pymod2pkg.egg-info/requires.txt        2024-01-07 
16:57:12.000000000 +0100
@@ -1,2 +1,3 @@
 distro
+packaging
 pbr!=2.1.0,>=2.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/requirements.txt 
new/pymod2pkg-0.28.0/requirements.txt
--- old/pymod2pkg-0.26.0/requirements.txt       2020-10-02 10:44:14.000000000 
+0200
+++ new/pymod2pkg-0.28.0/requirements.txt       2024-01-07 16:56:19.000000000 
+0100
@@ -3,3 +3,4 @@
 # process, which may cause wedges in the gate later.
 distro
 pbr!=2.1.0,>=2.0.0 # Apache-2.0
+packaging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/setup.cfg 
new/pymod2pkg-0.28.0/setup.cfg
--- old/pymod2pkg-0.26.0/setup.cfg      2020-10-02 10:45:04.000000000 +0200
+++ new/pymod2pkg-0.28.0/setup.cfg      2024-01-07 16:57:12.786491600 +0100
@@ -1,12 +1,12 @@
 [metadata]
 name = pymod2pkg
 summary = python module name to package name map
-description-file = 
+description_file = 
        README.rst
 author = OpenStack
-author-email = openstack-disc...@lists.openstack.org
-home-page = https://docs.openstack.org/pymod2pkg/latest/
-python-requires = >=3.6
+author_email = openstack-disc...@lists.openstack.org
+home_page = https://docs.openstack.org/pymod2pkg/latest/
+python_requires = >=3.6
 classifier = 
        Programming Language :: Python :: 3
        Programming Language :: Python :: 3.6
@@ -19,7 +19,8 @@
 
 [entry_points]
 console_scripts = 
-       pymod2pkg = pymod2pkg:main
+       pymod2pkg = pymod2pkg.cli.pymod2pkg:main
+       reqs2pkg = pymod2pkg.cli.reqs2pkg:main
 
 [files]
 packages = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/test-requirements.txt 
new/pymod2pkg-0.28.0/test-requirements.txt
--- old/pymod2pkg-0.26.0/test-requirements.txt  2020-10-02 10:44:14.000000000 
+0200
+++ new/pymod2pkg-0.28.0/test-requirements.txt  2024-01-07 16:56:19.000000000 
+0100
@@ -4,6 +4,3 @@
 stestr>=2.0.0 # Apache-2.0
 testresources>=2.0.0 # Apache-2.0/BSD
 testtools>=2.2.0 # MIT
-
-sphinx>=2.0.0,!=2.1.0 # BSD
-openstackdocstheme>=2.2.1 # Apache-2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/tests.py 
new/pymod2pkg-0.28.0/tests.py
--- old/pymod2pkg-0.26.0/tests.py       2020-10-02 10:44:14.000000000 +0200
+++ new/pymod2pkg-0.28.0/tests.py       2024-01-07 16:56:19.000000000 +0100
@@ -132,7 +132,8 @@
     def test_translation_py2py3_suse(self):
         self.assertEqual(pymod2pkg.module2package('nova', 'suse',
                          py_vers=['py', 'py2', 'py3']),
-                         ['openstack-nova', '', ''])
+                         ['openstack-nova', 'openstack-nova',
+                          'openstack-nova'])
         self.assertEqual(pymod2pkg.module2package('aodhclient',
                          'suse', py_vers=['py2', 'py3']),
                          ['python2-aodhclient', 'python3-aodhclient'])
@@ -149,7 +150,8 @@
                          ['python2-neutronclient', 'python3-neutronclient'])
         self.assertEqual(pymod2pkg.module2package('Tempest', 'suse',
                          py_vers=['py', 'py2', 'py3']),
-                         ['openstack-tempest', '', ''])
+                         ['openstack-tempest', 'openstack-tempest',
+                          'openstack-tempest'])
         self.assertEqual(pymod2pkg.module2package('devel', 'suse',
                          py_vers=['py2', 'py3']),
                          ['python-devel', 'python3-devel'])
@@ -179,7 +181,8 @@
                          ['python-babel', 'python3-babel'])
         self.assertEqual(pymod2pkg.module2package('nova', 'fedora',
                          py_vers=['py', 'py2', 'py3']),
-                         ['openstack-nova', '', ''])
+                         ['openstack-nova', 'openstack-nova',
+                          'openstack-nova'])
 
 
 class RegexRuleTests(unittest.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymod2pkg-0.26.0/tox.ini new/pymod2pkg-0.28.0/tox.ini
--- old/pymod2pkg-0.26.0/tox.ini        2020-10-02 10:44:14.000000000 +0200
+++ new/pymod2pkg-0.28.0/tox.ini        2024-01-07 16:56:19.000000000 +0100
@@ -1,5 +1,5 @@
 [tox]
-envlist = py37,pypy,pep8
+envlist = py3,pypy3,pep8
 minversion = 3.1
 skipsdist = True
 ignore_basepython_conflict = True
@@ -13,20 +13,22 @@
          OS_STDERR_NOCAPTURE=False
          PYTHONHASHSEED=0
 deps =
-       
-c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
+       
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
        -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements.txt
 commands = stestr run {posargs}
 
 [testenv:pep8]
 deps = {[testenv]deps}
-    flake8<3.8.0,>=3.7.0
+    flake8<7.1.0,>=7.0.0
 commands = flake8
 
 [testenv:venv]
 commands = {posargs}
 
 [testenv:docs]
+deps = 
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
+       -r{toxinidir}/doc/requirements.txt
 commands =
   sphinx-build -W -b html doc/source doc/build/html
 
@@ -36,3 +38,6 @@
   -c{toxinidir}/lower-constraints.txt
   -r{toxinidir}/test-requirements.txt
   -r{toxinidir}/requirements.txt
+
+[flake8]
+exclude=.tox,.venv

Reply via email to