Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pyroma for openSUSE:Factory 
checked in at 2021-06-01 10:37:59
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyroma (Old)
 and      /work/SRC/openSUSE:Factory/.python-pyroma.new.1898 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pyroma"

Tue Jun  1 10:37:59 2021 rev:5 rq:895937 version:3.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyroma/python-pyroma.changes      
2020-05-26 17:18:56.715926424 +0200
+++ /work/SRC/openSUSE:Factory/.python-pyroma.new.1898/python-pyroma.changes    
2021-06-01 10:39:15.268996176 +0200
@@ -1,0 +2,13 @@
+Fri May 28 08:31:34 UTC 2021 - [email protected]
+
+- version update to 3.1
+  - Added correct detection of setup.py encoding
+  - Code cleanup [CAM Gerlach]
+  - Drop support for Python 2 [Florian Bruhin]
+  - Add back official support for Python 3.6, I didn't realize it was still 
officially supported
+  - Update to the current list of Trove classifiers.
+  - Officially support Python 3.8 and 3.9
+  - Drop official support for Python 3.5 and 3.6 (still works though).
+- %check: use %pytestunit rpm macro
+
+-------------------------------------------------------------------

Old:
----
  pyroma-2.6.tar.gz

New:
----
  pyroma-3.1.tar.gz

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

Other differences:
------------------
++++++ python-pyroma.spec ++++++
--- /var/tmp/diff_new_pack.qmKCZE/_old  2021-06-01 10:39:15.748996994 +0200
+++ /var/tmp/diff_new_pack.qmKCZE/_new  2021-06-01 10:39:15.752997000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-pyroma
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 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-pyroma
-Version:        2.6
+Version:        3.1
 Release:        0
 Summary:        Program to test a Python project's adherence to packaging 
guidelines
 License:        MIT
@@ -34,7 +35,7 @@
 Requires:       python-docutils
 Requires:       python-setuptools
 Requires(post): update-alternatives
-Requires(postun): update-alternatives
+Requires(postun):update-alternatives
 BuildArch:      noarch
 %python_subpackages
 
@@ -62,7 +63,7 @@
 
 %check
 export LANG=en_US.UTF-8
-%python_exec setup.py test
+%pyunittest discover -v
 
 %post
 %python_install_alternative pyroma

++++++ pyroma-2.6.tar.gz -> pyroma-3.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/HISTORY.txt new/pyroma-3.1/HISTORY.txt
--- old/pyroma-2.6/HISTORY.txt  2019-11-02 16:01:12.000000000 +0100
+++ new/pyroma-3.1/HISTORY.txt  2021-03-06 12:21:43.000000000 +0100
@@ -1,12 +1,38 @@
 Changelog
 =========
 
+3.1 (2021-03-06)
+----------------
+
+- Added correct detection of setup.py encoding
+
+- Code cleanup [CAM Gerlach]
+
+
+3.0.1 (2021-03-02)
+------------------
+
+- Drop support for Python 2 [Florian Bruhin]
+
+- Add back official support for Python 3.6, I didn't realize it was still 
officially supported
+
+
+2.6.1 (2021-02-16)
+------------------
+
+- Update to the current list of Trove classifiers.
+
+- Officially support Python 3.8 and 3.9
+
+- Drop official support for Python 3.5 and 3.6 (still works though).
+
+
 2.6 (2019-11-02)
 ----------------
 
-- Ran flake8 and black on the code, better formatting for 
+- Ran flake8 and black on the code, better formatting for
   classifiers.py generation.
-  
+
 - Support for PEP 517, setup.cfg-only packages. [Max Tyulin]
 
 - Adds support for Markdown long_descriptions, if you set
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/PKG-INFO new/pyroma-3.1/PKG-INFO
--- old/pyroma-2.6/PKG-INFO     2019-11-02 16:01:13.000000000 +0100
+++ new/pyroma-3.1/PKG-INFO     2021-03-06 12:21:44.453837400 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: pyroma
-Version: 2.6
+Version: 3.1
 Summary: Test your project's packaging friendliness
 Home-page: https://github.com/regebro/pyroma
 Author: Lennart Regebro
@@ -114,16 +114,45 @@
           * Nikita Sobolev
           * Charles Tapley Hoyt
           * Max Tyulin
+          * Michael Howitz
+          * Florian Bruhin
+          * Christopher A.M. Gerlach
         
         Changelog
         =========
         
+        3.1 (2021-03-06)
+        ----------------
+        
+        - Added correct detection of setup.py encoding
+        
+        - Code cleanup [CAM Gerlach]
+        
+        
+        3.0.1 (2021-03-02)
+        ------------------
+        
+        - Drop support for Python 2 [Florian Bruhin]
+        
+        - Add back official support for Python 3.6, I didn't realize it was 
still officially supported
+        
+        
+        2.6.1 (2021-02-16)
+        ------------------
+        
+        - Update to the current list of Trove classifiers.
+        
+        - Officially support Python 3.8 and 3.9
+        
+        - Drop official support for Python 3.5 and 3.6 (still works though).
+        
+        
         2.6 (2019-11-02)
         ----------------
         
-        - Ran flake8 and black on the code, better formatting for 
+        - Ran flake8 and black on the code, better formatting for
           classifiers.py generation.
-          
+        
         - Support for PEP 517, setup.cfg-only packages. [Max Tyulin]
         
         - Adds support for Markdown long_descriptions, if you set
@@ -387,13 +416,13 @@
         
 Keywords: pypi,quality,testing
 Platform: UNKNOWN
-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 :: Only
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Development Status :: 5 - Production/Stable
-Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
+Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/README.rst new/pyroma-3.1/README.rst
--- old/pyroma-2.6/README.rst   2019-11-02 16:01:12.000000000 +0100
+++ new/pyroma-3.1/README.rst   2021-03-06 12:21:43.000000000 +0100
@@ -105,3 +105,6 @@
   * Nikita Sobolev
   * Charles Tapley Hoyt
   * Max Tyulin
+  * Michael Howitz
+  * Florian Bruhin
+  * Christopher A.M. Gerlach
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/pyroma/classifiers.py 
new/pyroma-3.1/pyroma/classifiers.py
--- old/pyroma-2.6/pyroma/classifiers.py        2019-11-02 16:01:12.000000000 
+0100
+++ new/pyroma-3.1/pyroma/classifiers.py        2021-03-06 12:21:43.000000000 
+0100
@@ -11,6 +11,34 @@
     "Environment :: Console :: Framebuffer",
     "Environment :: Console :: Newt",
     "Environment :: Console :: svgalib",
+    "Environment :: GPU",
+    "Environment :: GPU :: NVIDIA CUDA",
+    "Environment :: GPU :: NVIDIA CUDA :: 1.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 1.1",
+    "Environment :: GPU :: NVIDIA CUDA :: 10.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 10.1",
+    "Environment :: GPU :: NVIDIA CUDA :: 10.2",
+    "Environment :: GPU :: NVIDIA CUDA :: 11.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 2.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 2.1",
+    "Environment :: GPU :: NVIDIA CUDA :: 2.2",
+    "Environment :: GPU :: NVIDIA CUDA :: 2.3",
+    "Environment :: GPU :: NVIDIA CUDA :: 3.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 3.1",
+    "Environment :: GPU :: NVIDIA CUDA :: 3.2",
+    "Environment :: GPU :: NVIDIA CUDA :: 4.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 4.1",
+    "Environment :: GPU :: NVIDIA CUDA :: 4.2",
+    "Environment :: GPU :: NVIDIA CUDA :: 5.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 5.5",
+    "Environment :: GPU :: NVIDIA CUDA :: 6.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 6.5",
+    "Environment :: GPU :: NVIDIA CUDA :: 7.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 7.5",
+    "Environment :: GPU :: NVIDIA CUDA :: 8.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 9.0",
+    "Environment :: GPU :: NVIDIA CUDA :: 9.1",
+    "Environment :: GPU :: NVIDIA CUDA :: 9.2",
     "Environment :: Handhelds/PDA's",
     "Environment :: MacOS X",
     "Environment :: MacOS X :: Aqua",
@@ -26,10 +54,12 @@
     "Environment :: Web Environment :: ToscaWidgets",
     "Environment :: Win32 (MS Windows)",
     "Environment :: X11 Applications",
-    "Environment :: X11 Applications :: Gnome",
     "Environment :: X11 Applications :: GTK",
+    "Environment :: X11 Applications :: Gnome",
     "Environment :: X11 Applications :: KDE",
     "Environment :: X11 Applications :: Qt",
+    "Framework :: AWS CDK",
+    "Framework :: AWS CDK :: 1",
     "Framework :: AiiDA",
     "Framework :: AsyncIO",
     "Framework :: BEAT",
@@ -44,6 +74,7 @@
     "Framework :: Chandler",
     "Framework :: CherryPy",
     "Framework :: CubicWeb",
+    "Framework :: Dash",
     "Framework :: Django",
     "Framework :: Django :: 1.10",
     "Framework :: Django :: 1.11",
@@ -57,19 +88,23 @@
     "Framework :: Django :: 2.1",
     "Framework :: Django :: 2.2",
     "Framework :: Django :: 3.0",
+    "Framework :: Django :: 3.1",
     "Framework :: Django CMS",
     "Framework :: Django CMS :: 3.4",
     "Framework :: Django CMS :: 3.5",
     "Framework :: Django CMS :: 3.6",
     "Framework :: Django CMS :: 3.7",
+    "Framework :: Django CMS :: 3.8",
     "Framework :: Flake8",
     "Framework :: Flask",
     "Framework :: Hypothesis",
     "Framework :: IDLE",
     "Framework :: IPython",
     "Framework :: Jupyter",
+    "Framework :: Kedro",
     "Framework :: Lektor",
     "Framework :: Masonite",
+    "Framework :: Matplotlib",
     "Framework :: Nengo",
     "Framework :: Odoo",
     "Framework :: Opps",
@@ -88,6 +123,7 @@
     "Framework :: Plone :: 5.1",
     "Framework :: Plone :: 5.2",
     "Framework :: Plone :: 5.3",
+    "Framework :: Plone :: 6.0",
     "Framework :: Plone :: Addon",
     "Framework :: Plone :: Core",
     "Framework :: Plone :: Theme",
@@ -103,7 +139,6 @@
     "Framework :: Sphinx",
     "Framework :: Sphinx :: Extension",
     "Framework :: Sphinx :: Theme",
-    "Framework :: tox",
     "Framework :: Trac",
     "Framework :: Trio",
     "Framework :: Tryton",
@@ -116,12 +151,13 @@
     "Framework :: Wagtail :: 2",
     "Framework :: ZODB",
     "Framework :: Zope",
-    "Framework :: Zope2",
     "Framework :: Zope :: 2",
-    "Framework :: Zope3",
     "Framework :: Zope :: 3",
     "Framework :: Zope :: 4",
     "Framework :: Zope :: 5",
+    "Framework :: Zope2",
+    "Framework :: Zope3",
+    "Framework :: tox",
     "Intended Audience :: Customer Service",
     "Intended Audience :: Developers",
     "Intended Audience :: Education",
@@ -144,9 +180,9 @@
     "License :: Eiffel Forum License (EFL)",
     "License :: Free For Educational Use",
     "License :: Free For Home Use",
+    "License :: Free To Use But Restricted",
     "License :: Free for non-commercial use",
     "License :: Freely Distributable",
-    "License :: Free To Use But Restricted",
     "License :: Freeware",
     "License :: GUST Font License 1.0",
     "License :: GUST Font License 2006-09-30",
@@ -158,8 +194,8 @@
     "License :: OSI Approved :: Apple Public Source License",
     "License :: OSI Approved :: Artistic License",
     "License :: OSI Approved :: Attribution Assurance License",
-    "License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)",
     "License :: OSI Approved :: BSD License",
+    "License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)",
     "License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 
2.1 (CeCILL-2.1)",
     "License :: OSI Approved :: Common Development and Distribution License 
1.0 (CDDL-1.0)",
     "License :: OSI Approved :: Common Public License",
@@ -184,12 +220,12 @@
     "License :: OSI Approved :: GNU Library or Lesser General Public License 
(LGPL)",
     "License :: OSI Approved :: Historical Permission Notice and Disclaimer 
(HPND)",
     "License :: OSI Approved :: IBM Public License",
-    "License :: OSI Approved :: Intel Open Source License",
     "License :: OSI Approved :: ISC License (ISCL)",
+    "License :: OSI Approved :: Intel Open Source License",
     "License :: OSI Approved :: Jabber Open Source License",
-    "License :: OSI Approved :: MirOS License (MirOS)",
     "License :: OSI Approved :: MIT License",
     "License :: OSI Approved :: MITRE Collaborative Virtual Workspace License 
(CVW)",
+    "License :: OSI Approved :: MirOS License (MirOS)",
     "License :: OSI Approved :: Motosoto License",
     "License :: OSI Approved :: Mozilla Public License 1.0 (MPL)",
     "License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)",
@@ -212,13 +248,14 @@
     "License :: OSI Approved :: Vovida Software License 1.0",
     "License :: OSI Approved :: W3C License",
     "License :: OSI Approved :: X.Net License",
-    "License :: OSI Approved :: zlib/libpng License",
     "License :: OSI Approved :: Zope Public License",
+    "License :: OSI Approved :: zlib/libpng License",
     "License :: Other/Proprietary License",
     "License :: Public Domain",
     "License :: Repoze Public License",
     "Natural Language :: Afrikaans",
     "Natural Language :: Arabic",
+    "Natural Language :: Basque",
     "Natural Language :: Bengali",
     "Natural Language :: Bosnian",
     "Natural Language :: Bulgarian",
@@ -242,15 +279,18 @@
     "Natural Language :: Hungarian",
     "Natural Language :: Icelandic",
     "Natural Language :: Indonesian",
+    "Natural Language :: Irish",
     "Natural Language :: Italian",
     "Natural Language :: Japanese",
     "Natural Language :: Javanese",
     "Natural Language :: Korean",
     "Natural Language :: Latin",
     "Natural Language :: Latvian",
+    "Natural Language :: Lithuanian",
     "Natural Language :: Macedonian",
     "Natural Language :: Malay",
     "Natural Language :: Marathi",
+    "Natural Language :: Nepali",
     "Natural Language :: Norwegian",
     "Natural Language :: Panjabi",
     "Natural Language :: Persian",
@@ -274,7 +314,6 @@
     "Natural Language :: Vietnamese",
     "Operating System :: Android",
     "Operating System :: BeOS",
-    "Operating System :: iOS",
     "Operating System :: MacOS",
     "Operating System :: MacOS :: MacOS 9",
     "Operating System :: MacOS :: MacOS X",
@@ -293,10 +332,9 @@
     "Operating System :: Microsoft :: Windows :: Windows Server 2008",
     "Operating System :: Microsoft :: Windows :: Windows Vista",
     "Operating System :: Microsoft :: Windows :: Windows XP",
-    "Operating System :: OS/2",
     "Operating System :: OS Independent",
+    "Operating System :: OS/2",
     "Operating System :: Other OS",
-    "Operating System :: PalmOS",
     "Operating System :: PDA Systems",
     "Operating System :: POSIX",
     "Operating System :: POSIX :: AIX",
@@ -312,10 +350,13 @@
     "Operating System :: POSIX :: Other",
     "Operating System :: POSIX :: SCO",
     "Operating System :: POSIX :: SunOS/Solaris",
+    "Operating System :: PalmOS",
+    "Operating System :: RISC OS",
     "Operating System :: Unix",
-    "Programming Language :: Ada",
+    "Operating System :: iOS",
     "Programming Language :: APL",
     "Programming Language :: ASP",
+    "Programming Language :: Ada",
     "Programming Language :: Assembly",
     "Programming Language :: Awk",
     "Programming Language :: Basic",
@@ -337,32 +378,34 @@
     "Programming Language :: Haskell",
     "Programming Language :: Java",
     "Programming Language :: JavaScript",
+    "Programming Language :: Kotlin",
     "Programming Language :: Lisp",
     "Programming Language :: Logo",
     "Programming Language :: ML",
     "Programming Language :: Modula",
-    "Programming Language :: Objective C",
-    "Programming Language :: Object Pascal",
     "Programming Language :: OCaml",
+    "Programming Language :: Object Pascal",
+    "Programming Language :: Objective C",
     "Programming Language :: Other",
     "Programming Language :: Other Scripting Engines",
+    "Programming Language :: PHP",
+    "Programming Language :: PL/SQL",
+    "Programming Language :: PROGRESS",
     "Programming Language :: Pascal",
     "Programming Language :: Perl",
-    "Programming Language :: PHP",
     "Programming Language :: Pike",
     "Programming Language :: Pliant",
-    "Programming Language :: PL/SQL",
-    "Programming Language :: PROGRESS",
     "Programming Language :: Prolog",
     "Programming Language :: Python",
     "Programming Language :: Python :: 2",
+    "Programming Language :: Python :: 2 :: Only",
     "Programming Language :: Python :: 2.3",
     "Programming Language :: Python :: 2.4",
     "Programming Language :: Python :: 2.5",
     "Programming Language :: Python :: 2.6",
     "Programming Language :: Python :: 2.7",
-    "Programming Language :: Python :: 2 :: Only",
     "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3 :: Only",
     "Programming Language :: Python :: 3.0",
     "Programming Language :: Python :: 3.1",
     "Programming Language :: Python :: 3.2",
@@ -373,7 +416,6 @@
     "Programming Language :: Python :: 3.7",
     "Programming Language :: Python :: 3.8",
     "Programming Language :: Python :: 3.9",
-    "Programming Language :: Python :: 3 :: Only",
     "Programming Language :: Python :: Implementation",
     "Programming Language :: Python :: Implementation :: CPython",
     "Programming Language :: Python :: Implementation :: IronPython",
@@ -386,10 +428,10 @@
     "Programming Language :: Rexx",
     "Programming Language :: Ruby",
     "Programming Language :: Rust",
+    "Programming Language :: SQL",
     "Programming Language :: Scheme",
     "Programming Language :: Simula",
     "Programming Language :: Smalltalk",
-    "Programming Language :: SQL",
     "Programming Language :: Tcl",
     "Programming Language :: Unix Shell",
     "Programming Language :: Visual Basic",
@@ -409,13 +451,13 @@
     "Topic :: Communications :: Email :: Address Book",
     "Topic :: Communications :: Email :: Email Clients (MUA)",
     "Topic :: Communications :: Email :: Filters",
-    "Topic :: Communications :: Email :: Mailing List Servers",
     "Topic :: Communications :: Email :: Mail Transport Agents",
+    "Topic :: Communications :: Email :: Mailing List Servers",
     "Topic :: Communications :: Email :: Post-Office",
     "Topic :: Communications :: Email :: Post-Office :: IMAP",
     "Topic :: Communications :: Email :: Post-Office :: POP3",
-    "Topic :: Communications :: Fax",
     "Topic :: Communications :: FIDO",
+    "Topic :: Communications :: Fax",
     "Topic :: Communications :: File Sharing",
     "Topic :: Communications :: File Sharing :: Gnutella",
     "Topic :: Communications :: File Sharing :: Napster",
@@ -428,8 +470,8 @@
     "Topic :: Database :: Front-Ends",
     "Topic :: Desktop Environment",
     "Topic :: Desktop Environment :: File Managers",
-    "Topic :: Desktop Environment :: Gnome",
     "Topic :: Desktop Environment :: GNUstep",
+    "Topic :: Desktop Environment :: Gnome",
     "Topic :: Desktop Environment :: K Desktop Environment (KDE)",
     "Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes",
     "Topic :: Desktop Environment :: PicoGUI",
@@ -449,10 +491,10 @@
     "Topic :: Desktop Environment :: Window Managers :: Enlightenment :: 
Themes DR15",
     "Topic :: Desktop Environment :: Window Managers :: Enlightenment :: 
Themes DR16",
     "Topic :: Desktop Environment :: Window Managers :: Enlightenment :: 
Themes DR17",
-    "Topic :: Desktop Environment :: Window Managers :: Fluxbox",
-    "Topic :: Desktop Environment :: Window Managers :: Fluxbox :: Themes",
     "Topic :: Desktop Environment :: Window Managers :: FVWM",
     "Topic :: Desktop Environment :: Window Managers :: FVWM :: Themes",
+    "Topic :: Desktop Environment :: Window Managers :: Fluxbox",
+    "Topic :: Desktop Environment :: Window Managers :: Fluxbox :: Themes",
     "Topic :: Desktop Environment :: Window Managers :: IceWM",
     "Topic :: Desktop Environment :: Window Managers :: IceWM :: Themes",
     "Topic :: Desktop Environment :: Window Managers :: MetaCity",
@@ -530,11 +572,11 @@
     "Topic :: Multimedia :: Graphics :: Viewers",
     "Topic :: Multimedia :: Sound/Audio",
     "Topic :: Multimedia :: Sound/Audio :: Analysis",
-    "Topic :: Multimedia :: Sound/Audio :: Capture/Recording",
     "Topic :: Multimedia :: Sound/Audio :: CD Audio",
     "Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Playing",
     "Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Ripping",
     "Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Writing",
+    "Topic :: Multimedia :: Sound/Audio :: Capture/Recording",
     "Topic :: Multimedia :: Sound/Audio :: Conversion",
     "Topic :: Multimedia :: Sound/Audio :: Editors",
     "Topic :: Multimedia :: Sound/Audio :: MIDI",
@@ -572,6 +614,7 @@
     "Topic :: Scientific/Engineering :: GIS",
     "Topic :: Scientific/Engineering :: Human Machine Interfaces",
     "Topic :: Scientific/Engineering :: Hydrology",
+    "Topic :: Scientific/Engineering :: Image Processing",
     "Topic :: Scientific/Engineering :: Image Recognition",
     "Topic :: Scientific/Engineering :: Information Analysis",
     "Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator",
@@ -599,13 +642,13 @@
     "Topic :: Software Development :: Libraries",
     "Topic :: Software Development :: Libraries :: Application Frameworks",
     "Topic :: Software Development :: Libraries :: Java Libraries",
-    "Topic :: Software Development :: Libraries :: Perl Modules",
     "Topic :: Software Development :: Libraries :: PHP Classes",
+    "Topic :: Software Development :: Libraries :: Perl Modules",
     "Topic :: Software Development :: Libraries :: Pike Modules",
-    "Topic :: Software Development :: Libraries :: pygame",
     "Topic :: Software Development :: Libraries :: Python Modules",
     "Topic :: Software Development :: Libraries :: Ruby Modules",
     "Topic :: Software Development :: Libraries :: Tcl Extensions",
+    "Topic :: Software Development :: Libraries :: pygame",
     "Topic :: Software Development :: Localization",
     "Topic :: Software Development :: Object Brokering",
     "Topic :: Software Development :: Object Brokering :: CORBA",
@@ -661,11 +704,11 @@
     "Topic :: System :: Recovery Tools",
     "Topic :: System :: Shells",
     "Topic :: System :: Software Distribution",
+    "Topic :: System :: System Shells",
     "Topic :: System :: Systems Administration",
     "Topic :: System :: Systems Administration :: Authentication/Directory",
     "Topic :: System :: Systems Administration :: Authentication/Directory :: 
LDAP",
     "Topic :: System :: Systems Administration :: Authentication/Directory :: 
NIS",
-    "Topic :: System :: System Shells",
     "Topic :: Terminals",
     "Topic :: Terminals :: Serial",
     "Topic :: Terminals :: Telnet",
@@ -685,9 +728,11 @@
     "Topic :: Text Processing :: Markup",
     "Topic :: Text Processing :: Markup :: HTML",
     "Topic :: Text Processing :: Markup :: LaTeX",
+    "Topic :: Text Processing :: Markup :: Markdown",
     "Topic :: Text Processing :: Markup :: SGML",
     "Topic :: Text Processing :: Markup :: VRML",
     "Topic :: Text Processing :: Markup :: XML",
+    "Topic :: Text Processing :: Markup :: reStructuredText",
     "Topic :: Utilities",
     "Typing :: Typed",
 }
@@ -695,90 +740,44 @@
 LICENSE_CODES = {
     "License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)": 
{"EPL-2.0"},
     "License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication": {"CC0 
1.0"},
-    "License :: OSI Approved :: Sun Industry Standards Source License 
(SISSL)": {
-        "SISSL"
-    },
-    "License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)": {
-        "GPLv2+",
-        "GPL",
-    },
+    "License :: OSI Approved :: Sun Industry Standards Source License 
(SISSL)": {"SISSL"},
+    "License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)": {"GPLv2+", "GPL"},
     "License :: OSI Approved :: Eclipse Public License 1.0 (EPL-1.0)": 
{"EPL-1.0"},
-    "License :: OSI Approved :: GNU Lesser General Public License v3 
(LGPLv3)": {
-        "LGPL",
-        "LGPLv3",
-    },
+    "License :: OSI Approved :: GNU Lesser General Public License v3 
(LGPLv3)": {"LGPL", "LGPLv3"},
     "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)": {"MPL 
2.0"},
-    "License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 1.0)": 
{
-        "EUPL 1.0"
-    },
+    "License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 1.0)": 
{"EUPL 1.0"},
     "License :: CeCILL-C Free Software License Agreement (CECILL-C)": 
{"CECILL-C"},
-    "License :: OSI Approved :: GNU Lesser General Public License v2 or later 
(LGPLv2+)": {
-        "LGPL",
-        "LGPLv2+",
-    },
-    "License :: OSI Approved :: GNU General Public License v3 (GPLv3)": {
-        "GPL",
-        "GPLv3",
-    },
+    "License :: OSI Approved :: GNU Lesser General Public License v2 or later 
(LGPLv2+)": {"LGPL", "LGPLv2+"},
+    "License :: OSI Approved :: GNU General Public License v3 (GPLv3)": 
{"GPL", "GPLv3"},
     "License :: CeCILL-B Free Software License Agreement (CECILL-B)": 
{"CECILL-B"},
-    "License :: OSI Approved :: GNU Affero General Public License v3 or later 
(AGPLv3+)": {
-        "AGPLv3+"
-    },
+    "License :: OSI Approved :: GNU Affero General Public License v3 or later 
(AGPLv3+)": {"AGPLv3+"},
     "License :: OSI Approved :: MirOS License (MirOS)": {"MirOS"},
-    "License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 
2.1 (CeCILL-2.1)": {
-        "CeCILL-2.1"
-    },
-    "License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)": 
{
-        "EUPL 1.2"
-    },
-    "License :: OSI Approved :: MITRE Collaborative Virtual Workspace License 
(CVW)": {
-        "CVW"
-    },
+    "License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 
2.1 (CeCILL-2.1)": {"CeCILL-2.1"},
+    "License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)": 
{"EUPL 1.2"},
+    "License :: OSI Approved :: MITRE Collaborative Virtual Workspace License 
(CVW)": {"CVW"},
     "License :: OSI Approved :: GNU Free Documentation License (FDL)": {"FDL"},
     "License :: Aladdin Free Public License (AFPL)": {"AFPL"},
     "License :: OSI Approved :: GNU General Public License (GPL)": {"GPL"},
     "License :: Eiffel Forum License (EFL)": {"EFL"},
     "License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)": {"MPL 
1.1"},
-    "License :: OSI Approved :: Python License (CNRI Python License)": {
-        "CNRI Python License"
-    },
+    "License :: OSI Approved :: Python License (CNRI Python License)": {"CNRI 
Python License"},
     "License :: OSI Approved :: Open Software License 3.0 (OSL-3.0)": 
{"OSL-3.0"},
     "License :: Nokia Open Source License (NOKOS)": {"NOKOS"},
     "License :: OSI Approved :: Mozilla Public License 1.0 (MPL)": {"MPL"},
-    "License :: OSI Approved :: GNU Lesser General Public License v3 or later 
(LGPLv3+)": {
-        "LGPLv3+",
-        "LGPL",
-    },
+    "License :: OSI Approved :: GNU Lesser General Public License v3 or later 
(LGPLv3+)": {"LGPLv3+", "LGPL"},
     "License :: OSI Approved :: Qt Public License (QPL)": {"QPL"},
-    "License :: OSI Approved :: GNU Library or Lesser General Public License 
(LGPL)": {
-        "LGPL"
-    },
+    "License :: OSI Approved :: GNU Library or Lesser General Public License 
(LGPL)": {"LGPL"},
     "License :: OSI Approved :: SIL Open Font License 1.1 (OFL-1.1)": 
{"OFL-1.1"},
-    "License :: OSI Approved :: Common Development and Distribution License 
1.0 (CDDL-1.0)": {
-        "CDDL-1.0"
-    },
-    "License :: OSI Approved :: GNU General Public License v2 (GPLv2)": {
-        "GPL",
-        "GPLv2",
-    },
+    "License :: OSI Approved :: Common Development and Distribution License 
1.0 (CDDL-1.0)": {"CDDL-1.0"},
+    "License :: OSI Approved :: GNU General Public License v2 (GPLv2)": 
{"GPL", "GPLv2"},
     "License :: OSI Approved :: MIT License": {"MIT"},
     "License :: OSI Approved :: Zope Public License": {"ZPL"},
-    "License :: OSI Approved :: Historical Permission Notice and Disclaimer 
(HPND)": {
-        "HPND"
-    },
+    "License :: OSI Approved :: Historical Permission Notice and Disclaimer 
(HPND)": {"HPND"},
     "License :: Netscape Public License (NPL)": {"NPL"},
-    "License :: OSI Approved :: GNU General Public License v3 or later 
(GPLv3+)": {
-        "GPL",
-        "GPLv3+",
-    },
-    "License :: OSI Approved :: GNU Lesser General Public License v2 
(LGPLv2)": {
-        "LGPL",
-        "LGPLv2",
-    },
+    "License :: OSI Approved :: GNU General Public License v3 or later 
(GPLv3+)": {"GPL", "GPLv3+"},
+    "License :: OSI Approved :: GNU Lesser General Public License v2 
(LGPLv2)": {"LGPL", "LGPLv2"},
     "License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)": 
{"BSL-1.0"},
-    "License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)": 
{
-        "EUPL 1.1"
-    },
+    "License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)": 
{"EUPL 1.1"},
     "License :: OSI Approved :: ISC License (ISCL)": {"ISCL"},
     "License :: OSI Approved :: Academic Free License (AFL)": {"AFL"},
     "License :: OSI Approved :: Universal Permissive License (UPL)": {"UPL"},
@@ -786,90 +785,98 @@
 
 CODE_LICENSES = {
     "GPLv2+": {
-        "License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)"
-    },
-    "MirOS": {"License :: OSI Approved :: MirOS License (MirOS)"},
+        "License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)"},
+    "MirOS": {
+        "License :: OSI Approved :: MirOS License (MirOS)"},
     "GPLv3+": {
-        "License :: OSI Approved :: GNU General Public License v3 or later 
(GPLv3+)"
-    },
-    "CECILL-C": {"License :: CeCILL-C Free Software License Agreement 
(CECILL-C)"},
-    "CECILL-B": {"License :: CeCILL-B Free Software License Agreement 
(CECILL-B)"},
-    "GPLv2": {"License :: OSI Approved :: GNU General Public License v2 
(GPLv2)"},
-    "GPLv3": {"License :: OSI Approved :: GNU General Public License v3 
(GPLv3)"},
-    "BSL-1.0": {"License :: OSI Approved :: Boost Software License 1.0 
(BSL-1.0)"},
-    "FDL": {"License :: OSI Approved :: GNU Free Documentation License (FDL)"},
-    "AFPL": {"License :: Aladdin Free Public License (AFPL)"},
+        "License :: OSI Approved :: GNU General Public License v3 or later 
(GPLv3+)"},
+    "CECILL-C": {
+        "License :: CeCILL-C Free Software License Agreement (CECILL-C)"},
+    "CECILL-B": {
+        "License :: CeCILL-B Free Software License Agreement (CECILL-B)"},
+    "GPLv2": {
+        "License :: OSI Approved :: GNU General Public License v2 (GPLv2)"},
+    "GPLv3": {
+        "License :: OSI Approved :: GNU General Public License v3 (GPLv3)"},
+    "BSL-1.0": {
+        "License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)"},
+    "FDL": {
+        "License :: OSI Approved :: GNU Free Documentation License (FDL)"},
+    "AFPL": {
+        "License :: Aladdin Free Public License (AFPL)"},
     "CDDL-1.0": {
-        "License :: OSI Approved :: Common Development and Distribution 
License 1.0 (CDDL-1.0)"
-    },
-    "MPL 1.1": {"License :: OSI Approved :: Mozilla Public License 1.1 (MPL 
1.1)"},
+        "License :: OSI Approved :: Common Development and Distribution 
License 1.0 (CDDL-1.0)"},
+    "MPL 1.1": {
+        "License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)"},
     "LGPLv2+": {
-        "License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)"
-    },
-    "MPL 2.0": {"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 
2.0)"},
+        "License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)"},
+    "MPL 2.0": {
+        "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)"},
     "CNRI Python License": {
-        "License :: OSI Approved :: Python License (CNRI Python License)"
-    },
-    "QPL": {"License :: OSI Approved :: Qt Public License (QPL)"},
-    "OSL-3.0": {"License :: OSI Approved :: Open Software License 3.0 
(OSL-3.0)"},
-    "MIT": {"License :: OSI Approved :: MIT License"},
-    "EPL-2.0": {"License :: OSI Approved :: Eclipse Public License 2.0 
(EPL-2.0)"},
+        "License :: OSI Approved :: Python License (CNRI Python License)"},
+    "QPL": {
+        "License :: OSI Approved :: Qt Public License (QPL)"},
+    "OSL-3.0": {
+        "License :: OSI Approved :: Open Software License 3.0 (OSL-3.0)"},
+    "MIT": {
+        "License :: OSI Approved :: MIT License"},
+    "EPL-2.0": {
+        "License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)"},
     "CVW": {
-        "License :: OSI Approved :: MITRE Collaborative Virtual Workspace 
License (CVW)"
-    },
+        "License :: OSI Approved :: MITRE Collaborative Virtual Workspace 
License (CVW)"},
     "EUPL 1.1": {
-        "License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 
1.1)"
-    },
+        "License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 
1.1)"},
     "EUPL 1.0": {
-        "License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 
1.0)"
-    },
-    "EPL-1.0": {"License :: OSI Approved :: Eclipse Public License 1.0 
(EPL-1.0)"},
+        "License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 
1.0)"},
+    "EPL-1.0": {
+        "License :: OSI Approved :: Eclipse Public License 1.0 (EPL-1.0)"},
     "EUPL 1.2": {
-        "License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 
1.2)"
-    },
-    "CC0 1.0": {"License :: CC0 1.0 Universal (CC0 1.0) Public Domain 
Dedication"},
-    "NOKOS": {"License :: Nokia Open Source License (NOKOS)"},
-    "AFL": {"License :: OSI Approved :: Academic Free License (AFL)"},
+        "License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 
1.2)"},
+    "CC0 1.0": {
+        "License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication"},
+    "NOKOS": {
+        "License :: Nokia Open Source License (NOKOS)"},
+    "AFL": {
+        "License :: OSI Approved :: Academic Free License (AFL)"},
     "LGPLv3+": {
-        "License :: OSI Approved :: GNU Lesser General Public License v3 or 
later (LGPLv3+)"
-    },
+        "License :: OSI Approved :: GNU Lesser General Public License v3 or 
later (LGPLv3+)"},
     "SISSL": {
-        "License :: OSI Approved :: Sun Industry Standards Source License 
(SISSL)"
-    },
-    "EFL": {"License :: Eiffel Forum License (EFL)"},
-    "ZPL": {"License :: OSI Approved :: Zope Public License"},
-    "ISCL": {"License :: OSI Approved :: ISC License (ISCL)"},
+        "License :: OSI Approved :: Sun Industry Standards Source License 
(SISSL)"},
+    "EFL": {
+        "License :: Eiffel Forum License (EFL)"},
+    "ZPL": {
+        "License :: OSI Approved :: Zope Public License"},
+    "ISCL": {
+        "License :: OSI Approved :: ISC License (ISCL)"},
     "HPND": {
-        "License :: OSI Approved :: Historical Permission Notice and 
Disclaimer (HPND)"
-    },
-    "OFL-1.1": {"License :: OSI Approved :: SIL Open Font License 1.1 
(OFL-1.1)"},
-    "NPL": {"License :: Netscape Public License (NPL)"},
+        "License :: OSI Approved :: Historical Permission Notice and 
Disclaimer (HPND)"},
+    "OFL-1.1": {
+        "License :: OSI Approved :: SIL Open Font License 1.1 (OFL-1.1)"},
+    "NPL": {
+        "License :: Netscape Public License (NPL)"},
     "LGPL": {
         "License :: OSI Approved :: GNU Lesser General Public License v3 
(LGPLv3)",
         "License :: OSI Approved :: GNU Lesser General Public License v3 or 
later (LGPLv3+)",
         "License :: OSI Approved :: GNU Library or Lesser General Public 
License (LGPL)",
         "License :: OSI Approved :: GNU Lesser General Public License v2 
(LGPLv2)",
-        "License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)",
-    },
+        "License :: OSI Approved :: GNU Lesser General Public License v2 or 
later (LGPLv2+)"},
     "GPL": {
         "License :: OSI Approved :: GNU General Public License (GPL)",
         "License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
         "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
         "License :: OSI Approved :: GNU General Public License v3 or later 
(GPLv3+)",
-        "License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)",
-    },
-    "MPL": {"License :: OSI Approved :: Mozilla Public License 1.0 (MPL)"},
+        "License :: OSI Approved :: GNU General Public License v2 or later 
(GPLv2+)"},
+    "MPL": {
+        "License :: OSI Approved :: Mozilla Public License 1.0 (MPL)"},
     "CeCILL-2.1": {
-        "License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, 
version 2.1 (CeCILL-2.1)"
-    },
+        "License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, 
version 2.1 (CeCILL-2.1)"},
     "AGPLv3+": {
-        "License :: OSI Approved :: GNU Affero General Public License v3 or 
later (AGPLv3+)"
-    },
-    "UPL": {"License :: OSI Approved :: Universal Permissive License (UPL)"},
+        "License :: OSI Approved :: GNU Affero General Public License v3 or 
later (AGPLv3+)"},
+    "UPL": {
+        "License :: OSI Approved :: Universal Permissive License (UPL)"},
     "LGPLv3": {
-        "License :: OSI Approved :: GNU Lesser General Public License v3 
(LGPLv3)"
-    },
+        "License :: OSI Approved :: GNU Lesser General Public License v3 
(LGPLv3)"},
     "LGPLv2": {
-        "License :: OSI Approved :: GNU Lesser General Public License v2 
(LGPLv2)"
-    },
+        "License :: OSI Approved :: GNU Lesser General Public License v2 
(LGPLv2)"},
 }
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/pyroma/distributiondata.py 
new/pyroma-3.1/pyroma/distributiondata.py
--- old/pyroma-2.6/pyroma/distributiondata.py   2019-11-02 16:01:12.000000000 
+0100
+++ new/pyroma-3.1/pyroma/distributiondata.py   2021-03-06 12:21:43.000000000 
+0100
@@ -19,10 +19,12 @@
         tempdir = tempfile.mkdtemp()
 
         if ext in (".bz2", ".tbz", "tb2", ".gz", ".tgz", ".tar"):
-            tarfile.open(name=path, mode="r:*").extractall(tempdir)
+            with tarfile.open(name=path, mode="r:*") as tar_file:
+                tar_file.extractall(tempdir)
 
         elif ext in (".zip", ".egg"):
-            zipfile.ZipFile(path, mode="r").extractall(tempdir)
+            with zipfile.ZipFile(path, mode="r") as zip_file:
+                zip_file.extractall(tempdir)
 
         else:
             raise ValueError("Unknown file type: " + ext)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/pyroma/projectdata.py 
new/pyroma-3.1/pyroma/projectdata.py
--- old/pyroma-2.6/pyroma/projectdata.py        2019-11-02 16:01:12.000000000 
+0100
+++ new/pyroma-3.1/pyroma/projectdata.py        2021-03-06 12:21:43.000000000 
+0100
@@ -2,12 +2,13 @@
 import os
 import sys
 import logging
+import tokenize
 
 from copy import copy
 from distutils import core
 
 
-class FakeContext(object):
+class FakeContext:
     def __init__(self, path):
         self._path = path
 
@@ -31,7 +32,7 @@
         os.chdir(self._old_path)
 
 
-class SetupMonkey(object):
+class SetupMonkey:
 
     used_setuptools = False
 
@@ -106,7 +107,7 @@
     used to drive the Distutils.
     """
     if stop_after not in ("init", "config", "commandline", "run"):
-        raise ValueError("invalid value for 'stop_after': %r" % stop_after)
+        raise ValueError(f"invalid value for 'stop_after': {stop_after!r}")
 
     core._setup_stop_after = stop_after
 
@@ -119,11 +120,13 @@
             sys.argv[0] = script_name
             if script_args is not None:
                 sys.argv[1:] = script_args
-            f = open(script_name)
-            try:
+
+            # Find the encoding
+            with open(script_name, "rb") as f:
+                encoding = tokenize.detect_encoding(f.readline)[0]
+
+            with open(script_name, "rt", encoding=encoding) as f:
                 exec(f.read(), glocals, glocals)
-            finally:
-                f.close()
         finally:
             sys.argv = save_argv
             core._setup_stop_after = None
@@ -133,7 +136,7 @@
     if core._setup_distribution is None:
         raise RuntimeError(
             "'distutils.core.setup()' was never called -- "
-            "perhaps '%s' is not a Distutils setup script?" % script_name
+            f"perhaps '{script_name}' is not a Distutils setup script?"
         )
 
     # I wonder if the setup script's namespace -- g and l -- would be of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/pyroma/pypidata.py 
new/pyroma-3.1/pyroma/pypidata.py
--- old/pyroma-2.6/pyroma/pypidata.py   2019-11-02 16:01:12.000000000 +0100
+++ new/pyroma-3.1/pyroma/pypidata.py   2021-03-06 12:21:43.000000000 +0100
@@ -27,13 +27,13 @@
         projects = [p for p in projects if p["name"].lower() == project_name]
         if not projects:
             raise ValueError(
-                "Did not find '%s' on PyPI. Did you misspell it?" % project
+                f"Did not find '{project}' on PyPI. Did you misspell it?"
             )
         project = projects[0]["name"]
         releases = [p["version"] for p in reversed(projects)]
     release = releases[0]
     # Get the metadata:
-    logging.debug("Found %s version %s" % (project, release))
+    logging.debug(f"Found {project} version {release}")
     data = client.release_data(project, release)
 
     # Map things around:
@@ -60,7 +60,7 @@
             tempdir = tempfile.gettempdir()
             filename = download["url"].split("/")[-1]
             tmp = os.path.join(tempdir, filename)
-            logging.debug("Downloading %s to verify distribution" % filename)
+            logging.debug(f"Downloading {filename} to verify distribution")
             try:
                 with open(tmp, "wb") as outfile:
                     outfile.write(urllib.urlopen(download["url"]).read())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/pyroma/ratings.py 
new/pyroma-3.1/pyroma/ratings.py
--- old/pyroma-2.6/pyroma/ratings.py    2019-11-02 16:01:12.000000000 +0100
+++ new/pyroma-3.1/pyroma/ratings.py    2021-03-06 12:21:43.000000000 +0100
@@ -1,4 +1,3 @@
-# -*- coding: UTF-8 -*-
 # This is a collection of "tests" done on the package data. The resut of the
 # tests is used to give the package a rating.
 #
@@ -21,27 +20,22 @@
 from docutils.utils import SystemMessage
 from pyroma.classifiers import CLASSIFIERS, CODE_LICENSES
 
-try:
-    stringtypes = (basestring,)
-except NameError:
-    stringtypes = (str,)
-
 LEVELS = [
-    u"This cheese seems to contain no dairy products",
-    u"Vieux Bologne",
-    u"Limburger",
-    u"Gorgonzola",
-    u"Stilton",
-    u"Brie",
-    u"Comt??",
-    u"Jarlsberg",
-    u"Philadelphia",
-    u"Cottage Cheese",
-    u"Your cheese is so fresh most people think it's a cream: Mascarpone",
+    "This cheese seems to contain no dairy products",
+    "Vieux Bologne",
+    "Limburger",
+    "Gorgonzola",
+    "Stilton",
+    "Brie",
+    "Comt??",
+    "Jarlsberg",
+    "Philadelphia",
+    "Cottage Cheese",
+    "Your cheese is so fresh most people think it's a cream: Mascarpone",
 ]
 
 
-class BaseTest(object):
+class BaseTest:
     fatal = False
 
 
@@ -52,7 +46,7 @@
         return bool(data.get(self.field))
 
     def message(self):
-        return ("Your package does not have %s data" % self.field) + (
+        return (f"Your package does not have {self.field} data") + (
             self.fatal and "!" or "."
         )
 
@@ -73,7 +67,7 @@
     def test(self, data):
         # Check that the version is a string
         version = data.get("version")
-        return isinstance(version, stringtypes)
+        return isinstance(version, str)
 
     def message(self):
         return "The version number should be a string."
@@ -175,7 +169,7 @@
 
     def test(self, data):
         long_description = data.get("long_description", "")
-        if not isinstance(long_description, stringtypes):
+        if not isinstance(long_description, str):
             long_description = ""
         return len(long_description) > 100
 
@@ -306,8 +300,8 @@
         if license in CODE_LICENSES:
             if not CODE_LICENSES[license].intersection(licenses):
                 self._message = (
-                    "The license '%s' specified is not listed in "
-                    "your classifiers." % license
+                    f"The license '{license}' specified is not listed in "
+                    "your classifiers."
                 )
                 return False
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/pyroma/testdata/complete/setup.py 
new/pyroma-3.1/pyroma/testdata/complete/setup.py
--- old/pyroma-2.6/pyroma/testdata/complete/setup.py    2019-11-02 
16:01:12.000000000 +0100
+++ new/pyroma-3.1/pyroma/testdata/complete/setup.py    2021-03-06 
12:21:43.000000000 +0100
@@ -2,7 +2,7 @@
 
 version = "1.0"
 
-with open("README.txt", "rt") as readme:
+with open("README.txt", encoding="UTF-8") as readme:
     long_description = readme.read()
 
 setup(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/pyroma/tests.py 
new/pyroma-3.1/pyroma/tests.py
--- old/pyroma-2.6/pyroma/tests.py      2019-11-02 16:01:13.000000000 +0100
+++ new/pyroma-3.1/pyroma/tests.py      2021-03-06 12:21:43.000000000 +0100
@@ -1,4 +1,3 @@
-from __future__ import print_function
 import unittest
 import os
 import collections
@@ -47,14 +46,16 @@
 }
 
 
-class FakeResponse(object):
+class FakeResponse:
     def __init__(self, responsecode, filename=None):
         self.filename = filename
         self.headers = collections.defaultdict(lambda: None)
         self.code = responsecode
 
     def read(self):
-        return open(self.filename, "rb").read()
+        with open(self.filename, "rb") as f:
+            file_contents = f.read()
+        return file_contents
 
 
 def urlopenstub(url):
@@ -87,13 +88,14 @@
     raise ValueError("Don't know how to stub " + url)
 
 
-class ProxyStub(object):
+class ProxyStub:
     def __init__(self, dataname, real_class, developmode):
         filename = resource_filename(
             __name__, os.path.join("testdata", "xmlrpcdata", dataname)
         )
         data = {}
-        exec(open(filename, "rt").read(), None, data)
+        with open(filename, encoding="UTF-8") as f:
+            exec(f.read(), None, data)
         self.args = data["args"]
         self.kw = data["kw"]
         self._data = data["data"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/pyroma.egg-info/PKG-INFO 
new/pyroma-3.1/pyroma.egg-info/PKG-INFO
--- old/pyroma-2.6/pyroma.egg-info/PKG-INFO     2019-11-02 16:01:13.000000000 
+0100
+++ new/pyroma-3.1/pyroma.egg-info/PKG-INFO     2021-03-06 12:21:44.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: pyroma
-Version: 2.6
+Version: 3.1
 Summary: Test your project's packaging friendliness
 Home-page: https://github.com/regebro/pyroma
 Author: Lennart Regebro
@@ -114,16 +114,45 @@
           * Nikita Sobolev
           * Charles Tapley Hoyt
           * Max Tyulin
+          * Michael Howitz
+          * Florian Bruhin
+          * Christopher A.M. Gerlach
         
         Changelog
         =========
         
+        3.1 (2021-03-06)
+        ----------------
+        
+        - Added correct detection of setup.py encoding
+        
+        - Code cleanup [CAM Gerlach]
+        
+        
+        3.0.1 (2021-03-02)
+        ------------------
+        
+        - Drop support for Python 2 [Florian Bruhin]
+        
+        - Add back official support for Python 3.6, I didn't realize it was 
still officially supported
+        
+        
+        2.6.1 (2021-02-16)
+        ------------------
+        
+        - Update to the current list of Trove classifiers.
+        
+        - Officially support Python 3.8 and 3.9
+        
+        - Drop official support for Python 3.5 and 3.6 (still works though).
+        
+        
         2.6 (2019-11-02)
         ----------------
         
-        - Ran flake8 and black on the code, better formatting for 
+        - Ran flake8 and black on the code, better formatting for
           classifiers.py generation.
-          
+        
         - Support for PEP 517, setup.cfg-only packages. [Max Tyulin]
         
         - Adds support for Markdown long_descriptions, if you set
@@ -387,13 +416,13 @@
         
 Keywords: pypi,quality,testing
 Platform: UNKNOWN
-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 :: Only
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Development Status :: 5 - Production/Stable
-Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*
+Requires-Python: >=3.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/setup.cfg new/pyroma-3.1/setup.cfg
--- old/pyroma-2.6/setup.cfg    2019-11-02 16:01:13.000000000 +0100
+++ new/pyroma-3.1/setup.cfg    2021-03-06 12:21:44.454377700 +0100
@@ -1,5 +1,5 @@
 [bdist_wheel]
-universal = 1
+universal = 0
 
 [egg_info]
 tag_build = 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyroma-2.6/setup.py new/pyroma-3.1/setup.py
--- old/pyroma-2.6/setup.py     2019-11-02 16:01:13.000000000 +0100
+++ new/pyroma-3.1/setup.py     2021-03-06 12:21:43.000000000 +0100
@@ -1,12 +1,11 @@
 from setuptools import setup, find_packages
-from io import open
 
-version = "2.6"
+version = "3.1"
 
-with open("README.rst", "rt", encoding="UTF-8") as file:
+with open("README.rst", encoding="UTF-8") as file:
     long_description = file.read() + "\n"
 
-with open("HISTORY.txt", "rt", encoding="UTF-8") as file:
+with open("HISTORY.txt", encoding="UTF-8") as file:
     long_description += file.read()
 
 setup(
@@ -14,14 +13,14 @@
     version=version,
     description="Test your project's packaging friendliness",
     long_description=long_description,
-    python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
+    python_requires=">=3.6",
     classifiers=[
-        "Programming Language :: Python :: 2",
-        "Programming Language :: Python :: 2.7",
         "Programming Language :: Python :: 3",
-        "Programming Language :: Python :: 3.5",
+        "Programming Language :: Python :: 3 :: Only",
         "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
+        "Programming Language :: Python :: 3.9",
         "Programming Language :: Python :: Implementation :: PyPy",
         "License :: OSI Approved :: MIT License",
         "Development Status :: 5 - Production/Stable",
@@ -35,7 +34,11 @@
     packages=find_packages(exclude=["ez_setup"]),
     include_package_data=True,
     zip_safe=False,
-    install_requires=["setuptools", "docutils", "pygments"],
+    install_requires=[
+        "setuptools",
+        "docutils",
+        "pygments",
+    ],
     entry_points={
         "console_scripts": ["pyroma = pyroma:main"],
         "zest.releaser.prereleaser.before": ["pyroma = pyroma:zester"],

Reply via email to