Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-flake8-deprecated for
openSUSE:Factory checked in at 2022-12-16 17:51:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-flake8-deprecated (Old)
and /work/SRC/openSUSE:Factory/.python-flake8-deprecated.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-flake8-deprecated"
Fri Dec 16 17:51:44 2022 rev:3 rq:1043222 version:2.0.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-flake8-deprecated/python-flake8-deprecated.changes
2021-05-19 17:49:54.745400707 +0200
+++
/work/SRC/openSUSE:Factory/.python-flake8-deprecated.new.1835/python-flake8-deprecated.changes
2022-12-16 17:51:52.060088980 +0100
@@ -1,0 +2,13 @@
+Thu Dec 15 21:07:44 UTC 2022 - Dirk Müller <[email protected]>
+
+- update to 2.0.1:
+ * Handle subscripts in method calls, thanks to @The-Compiler for the
+ report. [gforcada]
+ * Test the code in all python versions supported on GitHub actions.
+ [gforcada]
+ * Pin dependencies, to ensure reproducible builds. [gforcada]
+ * Drop python 2.7 and only support 3.7+. [gforcada]
+ * Ensure all deprecation aliases work. [gforcada]
+ * Check decorators as well. [gforcada]
+
+-------------------------------------------------------------------
Old:
----
flake8-deprecated-1.3.tar.gz
New:
----
flake8-deprecated-2.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-flake8-deprecated.spec ++++++
--- /var/tmp/diff_new_pack.USboug/_old 2022-12-16 17:51:52.864093405 +0100
+++ /var/tmp/diff_new_pack.USboug/_new 2022-12-16 17:51:52.920093714 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-flake8-deprecated
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,20 +18,21 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-flake8-deprecated
-Version: 1.3
+Version: 2.0.1
Release: 0
Summary: Flake8 deprecations plugin
License: GPL-2.0-only
Group: Development/Languages/Python
URL: https://github.com/gforcada/flake8-deprecated
Source:
https://files.pythonhosted.org/packages/source/f/flake8-deprecated/flake8-deprecated-%{version}.tar.gz
+BuildRequires: %{python_module base >= 3.7}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
-Requires: python-flake8 >= 3.0.0
+Requires: python-flake8 >= 5.0.4
BuildArch: noarch
# SECTION test requirements
-BuildRequires: %{python_module flake8 >= 3.0.0}
+BuildRequires: %{python_module flake8 >= 5.0.4}
BuildRequires: %{python_module pytest}
# /SECTION
%python_subpackages
@@ -54,7 +55,7 @@
%pytest run_tests.py
%files %{python_files}
-%license LICENSE LICENSE.rst
+%license LICENSE
%doc CHANGES.rst README.rst
%{python_sitelib}/*
++++++ flake8-deprecated-1.3.tar.gz -> flake8-deprecated-2.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/CHANGES.rst
new/flake8-deprecated-2.0.1/CHANGES.rst
--- old/flake8-deprecated-1.3/CHANGES.rst 2017-10-31 17:36:38.000000000
+0100
+++ new/flake8-deprecated-2.0.1/CHANGES.rst 2022-10-11 09:06:44.000000000
+0200
@@ -3,6 +3,24 @@
Changelog
=========
+2.0.1 (2022-10-11)
+------------------
+
+- Handle subscripts in method calls, thanks to @The-Compiler for the report.
[gforcada]
+
+2.0.0 (2022-10-09)
+------------------
+
+- Test the code in all python versions supported on GitHub actions. [gforcada]
+
+- Pin dependencies, to ensure reproducible builds. [gforcada]
+
+- Drop python 2.7 and only support 3.7+. [gforcada]
+
+- Ensure all deprecation aliases work. [gforcada]
+
+- Check decorators as well. [gforcada]
+
1.3 (2017-10-31)
----------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/LICENSE.rst
new/flake8-deprecated-2.0.1/LICENSE.rst
--- old/flake8-deprecated-1.3/LICENSE.rst 2017-10-31 17:36:38.000000000
+0100
+++ new/flake8-deprecated-2.0.1/LICENSE.rst 1970-01-01 01:00:00.000000000
+0100
@@ -1,17 +0,0 @@
-.. -*- coding: utf-8 -*-
-
-flake8-deprecated Copyright 2015, Gil Forcada
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License version 2
-as published by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-MA 02111-1307 USA.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/MANIFEST.in
new/flake8-deprecated-2.0.1/MANIFEST.in
--- old/flake8-deprecated-1.3/MANIFEST.in 2017-10-31 17:36:38.000000000
+0100
+++ new/flake8-deprecated-2.0.1/MANIFEST.in 1970-01-01 01:00:00.000000000
+0100
@@ -1,3 +0,0 @@
-include MANIFEST.in LICENSE *.rst *.py *.ini
-exclude .installed.cfg .coveragerc *.pyc
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/PKG-INFO
new/flake8-deprecated-2.0.1/PKG-INFO
--- old/flake8-deprecated-1.3/PKG-INFO 2017-10-31 17:36:38.000000000 +0100
+++ new/flake8-deprecated-2.0.1/PKG-INFO 2022-10-11 09:06:45.195644000
+0200
@@ -1,133 +1,162 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: flake8-deprecated
-Version: 1.3
+Version: 2.0.1
Summary: Warns about deprecated method calls.
Home-page: https://github.com/gforcada/flake8-deprecated
Author: Gil Forcada
Author-email: [email protected]
License: GPL version 2
-Description-Content-Type: UNKNOWN
-Description: .. -*- coding: utf-8 -*-
-
- .. image::
https://travis-ci.org/gforcada/flake8-deprecated.svg?branch=master
- :target: https://travis-ci.org/gforcada/flake8-deprecated
-
- .. image::
https://coveralls.io/repos/gforcada/flake8-deprecated/badge.svg?branch=master&service=github
- :target:
https://coveralls.io/github/gforcada/flake8-deprecated?branch=master
-
- Flake8 deprecations plugin
- ==========================
- No language, library or framework ever get everything right from the
very beginning.
- The project evolves, new features are added/changed/removed.
-
- This means that projects relying on them must keep an eye on what's
currently best practices.
-
- This flake8 plugin helps you keeping up with method deprecations ans
giving hints about what
- they should be replaced with.
-
- This plugin is based on a python checker that was in
`plone.recipe.codeanalysis`_.
-
- Install
- -------
- Install with pip::
-
- $ pip install flake8-deprecated
-
- Requirements
- ------------
- - Python 2.7, 3.5, 3.6
- - flake8
-
- TODO
- ----
- - add a way to provide more deprecations on a per user basis(?), other
plugins(?)
- - add a way to ignore specific deprecations
-
- License
- -------
- GPL 2.0
-
- .. _`plone.recipe.codeanalysis`:
https://pypi.python.org/pypi/plone.recipe.codeanalysis
-
- .. -*- coding: utf-8 -*-
-
- Changelog
- =========
-
- 1.3 (2017-10-31)
- ----------------
-
- - Fix flake8 errors on this package and enforce them on CI.
- [alexmuller]
-
- 1.2.2.dev0 (2017-10-22)
- -----------------------
-
- - Use the ast module to parse the code and ensure no false positives
are found.
- [alexmuller]
-
- 1.2.1 (2017-07-24)
- ------------------
- - Fix UnicodeDecodeError if system locale is not UTF-8.
- [sshishov]
-
- 1.2 (2017-05-12)
- ----------------
- - added support for sublimetext (stdin/filename handling).
- [iham]
-
- - Release as universal wheels.
- [gforcada]
-
- - Only test against Python 2.7, 3.5 and 3.6.
- It most probably works on earlier versions of 2.x and 3.x but it's
pointless to test on them as well.
- [gforcada]
-
- 1.1 (2016-10-26)
- ----------------
- - Fix compatibility with flake8 3.
- [gforcada]
-
- - Require flake8 > 3.0.
- [gforcada]
-
- 1.0 (2016-02-27)
- ----------------
- - Warn if using xmlconfig.file, self.loadZCML is the preferred option.
- [gforcada]
-
- - Avoid false reports by suffixing an opening parenthesis on all
methods.
- [gforcada]
-
- - Add decorators from zope.interface and zope.component.
- [gforcada]
-
- 0.2 (2016-01-20)
- ----------------
- - Suggest to use AccessControl and zope.interface decorators.
- [gforcada]
-
- 0.1 (2015-09-17)
- ----------------
- - Initial release.
- [gforcada]
-
- - Create the flake8 plugin per se.
- [gforcada]
-
-
Keywords: pep8 flake8 deprecations
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
+Classifier: Framework :: Flake8
Classifier: Framework :: Plone
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
-Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
+Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Quality Assurance
+Requires-Python: >=3.7
+Provides-Extra: test
+License-File: LICENSE
+
+
+.. -*- coding: utf-8 -*-
+
+.. image::
https://github.com/gforcada/flake8-deprecated/actions/workflows/testing.yml/badge.svg?branch=master
+ :target:
https://github.com/gforcada/flake8-deprecated/actions/workflows/testing.yml
+
+.. image::
https://coveralls.io/repos/gforcada/flake8-deprecated/badge.svg?branch=master
+ :target:
https://coveralls.io/github/gforcada/flake8-deprecated?branch=master
+
+Flake8 deprecations plugin
+==========================
+No language, library or framework ever get everything right from the very
beginning.
+The project evolves, new features are added/changed/removed.
+
+This means that projects relying on them must keep an eye on what's currently
best practices.
+
+This flake8 plugin helps you keeping up with method deprecations and giving
hints about what
+they should be replaced with.
+
+This plugin is based on a python checker that was in
`plone.recipe.codeanalysis`_.
+
+Install
+-------
+Install with pip::
+
+ $ pip install flake8-deprecated
+
+Requirements
+------------
+- Python 3.7, 3.8, 3.9, 3.10 and pypy3
+- flake8
+
+TODO
+----
+- add a way to provide more deprecations on a per user basis(?), other
plugins(?)
+- add a way to ignore specific deprecations
+
+License
+-------
+GPL 2.0
+
+.. _`plone.recipe.codeanalysis`:
https://pypi.python.org/pypi/plone.recipe.codeanalysis
+
+.. -*- coding: utf-8 -*-
+
+Changelog
+=========
+
+2.0.1 (2022-10-11)
+------------------
+
+- Handle subscripts in method calls, thanks to @The-Compiler for the report.
[gforcada]
+
+2.0.0 (2022-10-09)
+------------------
+
+- Test the code in all python versions supported on GitHub actions. [gforcada]
+
+- Pin dependencies, to ensure reproducible builds. [gforcada]
+
+- Drop python 2.7 and only support 3.7+. [gforcada]
+
+- Ensure all deprecation aliases work. [gforcada]
+
+- Check decorators as well. [gforcada]
+
+1.3 (2017-10-31)
+----------------
+
+- Fix flake8 errors on this package and enforce them on CI.
+ [alexmuller]
+
+1.2.2.dev0 (2017-10-22)
+-----------------------
+
+- Use the ast module to parse the code and ensure no false positives are found.
+ [alexmuller]
+
+1.2.1 (2017-07-24)
+------------------
+- Fix UnicodeDecodeError if system locale is not UTF-8.
+ [sshishov]
+
+1.2 (2017-05-12)
+----------------
+- added support for sublimetext (stdin/filename handling).
+ [iham]
+
+- Release as universal wheels.
+ [gforcada]
+
+- Only test against Python 2.7, 3.5 and 3.6.
+ It most probably works on earlier versions of 2.x and 3.x but it's pointless
to test on them as well.
+ [gforcada]
+
+1.1 (2016-10-26)
+----------------
+- Fix compatibility with flake8 3.
+ [gforcada]
+
+- Require flake8 > 3.0.
+ [gforcada]
+
+1.0 (2016-02-27)
+----------------
+- Warn if using xmlconfig.file, self.loadZCML is the preferred option.
+ [gforcada]
+
+- Avoid false reports by suffixing an opening parenthesis on all methods.
+ [gforcada]
+
+- Add decorators from zope.interface and zope.component.
+ [gforcada]
+
+0.2 (2016-01-20)
+----------------
+- Suggest to use AccessControl and zope.interface decorators.
+ [gforcada]
+
+0.1 (2015-09-17)
+----------------
+- Initial release.
+ [gforcada]
+
+- Create the flake8 plugin per se.
+ [gforcada]
+
+
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/README.rst
new/flake8-deprecated-2.0.1/README.rst
--- old/flake8-deprecated-1.3/README.rst 2017-10-31 17:36:38.000000000
+0100
+++ new/flake8-deprecated-2.0.1/README.rst 2022-10-11 09:06:44.000000000
+0200
@@ -1,9 +1,9 @@
.. -*- coding: utf-8 -*-
-.. image:: https://travis-ci.org/gforcada/flake8-deprecated.svg?branch=master
- :target: https://travis-ci.org/gforcada/flake8-deprecated
+.. image::
https://github.com/gforcada/flake8-deprecated/actions/workflows/testing.yml/badge.svg?branch=master
+ :target:
https://github.com/gforcada/flake8-deprecated/actions/workflows/testing.yml
-.. image::
https://coveralls.io/repos/gforcada/flake8-deprecated/badge.svg?branch=master&service=github
+.. image::
https://coveralls.io/repos/gforcada/flake8-deprecated/badge.svg?branch=master
:target:
https://coveralls.io/github/gforcada/flake8-deprecated?branch=master
Flake8 deprecations plugin
@@ -13,7 +13,7 @@
This means that projects relying on them must keep an eye on what's currently
best practices.
-This flake8 plugin helps you keeping up with method deprecations ans giving
hints about what
+This flake8 plugin helps you keeping up with method deprecations and giving
hints about what
they should be replaced with.
This plugin is based on a python checker that was in
`plone.recipe.codeanalysis`_.
@@ -26,7 +26,7 @@
Requirements
------------
-- Python 2.7, 3.5, 3.6
+- Python 3.7, 3.8, 3.9, 3.10 and pypy3
- flake8
TODO
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-deprecated-1.3/flake8_deprecated.egg-info/PKG-INFO
new/flake8-deprecated-2.0.1/flake8_deprecated.egg-info/PKG-INFO
--- old/flake8-deprecated-1.3/flake8_deprecated.egg-info/PKG-INFO
2017-10-31 17:36:38.000000000 +0100
+++ new/flake8-deprecated-2.0.1/flake8_deprecated.egg-info/PKG-INFO
2022-10-11 09:06:45.000000000 +0200
@@ -1,133 +1,162 @@
-Metadata-Version: 1.1
+Metadata-Version: 2.1
Name: flake8-deprecated
-Version: 1.3
+Version: 2.0.1
Summary: Warns about deprecated method calls.
Home-page: https://github.com/gforcada/flake8-deprecated
Author: Gil Forcada
Author-email: [email protected]
License: GPL version 2
-Description-Content-Type: UNKNOWN
-Description: .. -*- coding: utf-8 -*-
-
- .. image::
https://travis-ci.org/gforcada/flake8-deprecated.svg?branch=master
- :target: https://travis-ci.org/gforcada/flake8-deprecated
-
- .. image::
https://coveralls.io/repos/gforcada/flake8-deprecated/badge.svg?branch=master&service=github
- :target:
https://coveralls.io/github/gforcada/flake8-deprecated?branch=master
-
- Flake8 deprecations plugin
- ==========================
- No language, library or framework ever get everything right from the
very beginning.
- The project evolves, new features are added/changed/removed.
-
- This means that projects relying on them must keep an eye on what's
currently best practices.
-
- This flake8 plugin helps you keeping up with method deprecations ans
giving hints about what
- they should be replaced with.
-
- This plugin is based on a python checker that was in
`plone.recipe.codeanalysis`_.
-
- Install
- -------
- Install with pip::
-
- $ pip install flake8-deprecated
-
- Requirements
- ------------
- - Python 2.7, 3.5, 3.6
- - flake8
-
- TODO
- ----
- - add a way to provide more deprecations on a per user basis(?), other
plugins(?)
- - add a way to ignore specific deprecations
-
- License
- -------
- GPL 2.0
-
- .. _`plone.recipe.codeanalysis`:
https://pypi.python.org/pypi/plone.recipe.codeanalysis
-
- .. -*- coding: utf-8 -*-
-
- Changelog
- =========
-
- 1.3 (2017-10-31)
- ----------------
-
- - Fix flake8 errors on this package and enforce them on CI.
- [alexmuller]
-
- 1.2.2.dev0 (2017-10-22)
- -----------------------
-
- - Use the ast module to parse the code and ensure no false positives
are found.
- [alexmuller]
-
- 1.2.1 (2017-07-24)
- ------------------
- - Fix UnicodeDecodeError if system locale is not UTF-8.
- [sshishov]
-
- 1.2 (2017-05-12)
- ----------------
- - added support for sublimetext (stdin/filename handling).
- [iham]
-
- - Release as universal wheels.
- [gforcada]
-
- - Only test against Python 2.7, 3.5 and 3.6.
- It most probably works on earlier versions of 2.x and 3.x but it's
pointless to test on them as well.
- [gforcada]
-
- 1.1 (2016-10-26)
- ----------------
- - Fix compatibility with flake8 3.
- [gforcada]
-
- - Require flake8 > 3.0.
- [gforcada]
-
- 1.0 (2016-02-27)
- ----------------
- - Warn if using xmlconfig.file, self.loadZCML is the preferred option.
- [gforcada]
-
- - Avoid false reports by suffixing an opening parenthesis on all
methods.
- [gforcada]
-
- - Add decorators from zope.interface and zope.component.
- [gforcada]
-
- 0.2 (2016-01-20)
- ----------------
- - Suggest to use AccessControl and zope.interface decorators.
- [gforcada]
-
- 0.1 (2015-09-17)
- ----------------
- - Initial release.
- [gforcada]
-
- - Create the flake8 plugin per se.
- [gforcada]
-
-
Keywords: pep8 flake8 deprecations
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
+Classifier: Framework :: Flake8
Classifier: Framework :: Plone
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
-Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
+Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Quality Assurance
+Requires-Python: >=3.7
+Provides-Extra: test
+License-File: LICENSE
+
+
+.. -*- coding: utf-8 -*-
+
+.. image::
https://github.com/gforcada/flake8-deprecated/actions/workflows/testing.yml/badge.svg?branch=master
+ :target:
https://github.com/gforcada/flake8-deprecated/actions/workflows/testing.yml
+
+.. image::
https://coveralls.io/repos/gforcada/flake8-deprecated/badge.svg?branch=master
+ :target:
https://coveralls.io/github/gforcada/flake8-deprecated?branch=master
+
+Flake8 deprecations plugin
+==========================
+No language, library or framework ever get everything right from the very
beginning.
+The project evolves, new features are added/changed/removed.
+
+This means that projects relying on them must keep an eye on what's currently
best practices.
+
+This flake8 plugin helps you keeping up with method deprecations and giving
hints about what
+they should be replaced with.
+
+This plugin is based on a python checker that was in
`plone.recipe.codeanalysis`_.
+
+Install
+-------
+Install with pip::
+
+ $ pip install flake8-deprecated
+
+Requirements
+------------
+- Python 3.7, 3.8, 3.9, 3.10 and pypy3
+- flake8
+
+TODO
+----
+- add a way to provide more deprecations on a per user basis(?), other
plugins(?)
+- add a way to ignore specific deprecations
+
+License
+-------
+GPL 2.0
+
+.. _`plone.recipe.codeanalysis`:
https://pypi.python.org/pypi/plone.recipe.codeanalysis
+
+.. -*- coding: utf-8 -*-
+
+Changelog
+=========
+
+2.0.1 (2022-10-11)
+------------------
+
+- Handle subscripts in method calls, thanks to @The-Compiler for the report.
[gforcada]
+
+2.0.0 (2022-10-09)
+------------------
+
+- Test the code in all python versions supported on GitHub actions. [gforcada]
+
+- Pin dependencies, to ensure reproducible builds. [gforcada]
+
+- Drop python 2.7 and only support 3.7+. [gforcada]
+
+- Ensure all deprecation aliases work. [gforcada]
+
+- Check decorators as well. [gforcada]
+
+1.3 (2017-10-31)
+----------------
+
+- Fix flake8 errors on this package and enforce them on CI.
+ [alexmuller]
+
+1.2.2.dev0 (2017-10-22)
+-----------------------
+
+- Use the ast module to parse the code and ensure no false positives are found.
+ [alexmuller]
+
+1.2.1 (2017-07-24)
+------------------
+- Fix UnicodeDecodeError if system locale is not UTF-8.
+ [sshishov]
+
+1.2 (2017-05-12)
+----------------
+- added support for sublimetext (stdin/filename handling).
+ [iham]
+
+- Release as universal wheels.
+ [gforcada]
+
+- Only test against Python 2.7, 3.5 and 3.6.
+ It most probably works on earlier versions of 2.x and 3.x but it's pointless
to test on them as well.
+ [gforcada]
+
+1.1 (2016-10-26)
+----------------
+- Fix compatibility with flake8 3.
+ [gforcada]
+
+- Require flake8 > 3.0.
+ [gforcada]
+
+1.0 (2016-02-27)
+----------------
+- Warn if using xmlconfig.file, self.loadZCML is the preferred option.
+ [gforcada]
+
+- Avoid false reports by suffixing an opening parenthesis on all methods.
+ [gforcada]
+
+- Add decorators from zope.interface and zope.component.
+ [gforcada]
+
+0.2 (2016-01-20)
+----------------
+- Suggest to use AccessControl and zope.interface decorators.
+ [gforcada]
+
+0.1 (2015-09-17)
+----------------
+- Initial release.
+ [gforcada]
+
+- Create the flake8 plugin per se.
+ [gforcada]
+
+
+
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-deprecated-1.3/flake8_deprecated.egg-info/SOURCES.txt
new/flake8-deprecated-2.0.1/flake8_deprecated.egg-info/SOURCES.txt
--- old/flake8-deprecated-1.3/flake8_deprecated.egg-info/SOURCES.txt
2017-10-31 17:36:38.000000000 +0100
+++ new/flake8-deprecated-2.0.1/flake8_deprecated.egg-info/SOURCES.txt
2022-10-11 09:06:45.000000000 +0200
@@ -1,13 +1,11 @@
CHANGES.rst
LICENSE
-LICENSE.rst
-MANIFEST.in
README.rst
flake8_deprecated.py
+requirements.txt
run_tests.py
setup.cfg
setup.py
-tox.ini
flake8_deprecated.egg-info/PKG-INFO
flake8_deprecated.egg-info/SOURCES.txt
flake8_deprecated.egg-info/dependency_links.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/flake8-deprecated-1.3/flake8_deprecated.egg-info/requires.txt
new/flake8-deprecated-2.0.1/flake8_deprecated.egg-info/requires.txt
--- old/flake8-deprecated-1.3/flake8_deprecated.egg-info/requires.txt
2017-10-31 17:36:38.000000000 +0100
+++ new/flake8-deprecated-2.0.1/flake8_deprecated.egg-info/requires.txt
2022-10-11 09:06:45.000000000 +0200
@@ -1 +1,4 @@
-flake8>=3.0.0
+flake8
+
+[test]
+pytest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/flake8_deprecated.py
new/flake8-deprecated-2.0.1/flake8_deprecated.py
--- old/flake8-deprecated-1.3/flake8_deprecated.py 2017-10-31
17:36:38.000000000 +0100
+++ new/flake8-deprecated-2.0.1/flake8_deprecated.py 2022-10-11
09:06:44.000000000 +0200
@@ -1,45 +1,123 @@
-# -*- coding: utf-8 -*-
import ast
-class Flake8Deprecated(object):
+class Flake8Deprecated:
name = 'flake8_deprecated'
version = '1.2'
message = 'D001 found {0:s} replace it with {1:s}'
- checks = {
- 'assertEqual': ('failUnlessEqual', 'assertEquals', ),
- 'assertNotEqual': ('failIfEqual', ),
- 'assertTrue': ('failUnless', 'assert_', ),
- 'assertFalse': ('failIf', ),
- 'assertRaises': ('failUnlessRaises', ),
- 'assertAlmostEqual': ('failUnlessAlmostEqual', ),
- 'assertNotAlmostEqual': ('failIfAlmostEqual', ),
- 'AccessControl.ClassSecurityInfo.protected': ('declareProtected', ),
- 'AccessControl.ClassSecurityInfo.private': ('declarePrivate', ),
- 'AccessControl.ClassSecurityInfo.public': ('declarePublic', ),
- 'zope.interface.provider': ('directlyProvides', ),
- 'zope.interface.implementer': ('classImplements', 'implements', ),
- 'self.loadZCML(': ('xmlconfig.file', ),
- 'zope.component.adapter': ('adapts', ),
+ deprecations = {
+ 'assertEqual': (
+ 'failUnlessEqual',
+ 'assertEquals',
+ ),
+ 'assertNotEqual': ('failIfEqual',),
+ 'assertTrue': (
+ 'failUnless',
+ 'assert_',
+ ),
+ 'assertFalse': ('failIf',),
+ 'assertRaises': ('failUnlessRaises',),
+ 'assertAlmostEqual': ('failUnlessAlmostEqual',),
+ 'assertNotAlmostEqual': ('failIfAlmostEqual',),
+ 'AccessControl.ClassSecurityInfo.protected': ('declareProtected',),
+ 'AccessControl.ClassSecurityInfo.private': ('declarePrivate',),
+ 'AccessControl.ClassSecurityInfo.public': ('declarePublic',),
+ 'zope.interface.provider': ('directlyProvides',),
+ 'zope.interface.implementer': (
+ 'classImplements',
+ 'implements',
+ ),
+ 'self.loadZCML(': ('xmlconfig.file',),
+ 'zope.component.adapter': ('adapts',),
}
def __init__(self, tree):
- self.flat_checks = self._flatten_checks()
+ self.old_aliases = self._reverse_data()
self.tree = tree
def run(self):
for node in ast.walk(self.tree):
- if isinstance(node, ast.Call) and \
- isinstance(node.func, ast.Attribute):
- for newer_version, old_alias in self.flat_checks:
- if node.func.attr == old_alias:
- msg = self.message.format(old_alias, newer_version)
- yield node.lineno, node.col_offset, msg, type(self)
-
- def _flatten_checks(self):
- flattened_checks = []
- for new_version, old_alias in self.checks.items():
- for alias in old_alias:
- flattened_checks.append((new_version, alias, ))
-
- return flattened_checks
+ value = None
+ if isinstance(node, ast.Call):
+ value = self.check_calls(node)
+ elif isinstance(node, ast.FunctionDef):
+ value = self.check_decorators(node)
+
+ if value:
+ yield from value
+
+ def check_calls(self, node):
+ function_name = getattr(node.func, 'id', '')
+ if function_name:
+ value = self.check_function_call(node)
+ else:
+ value = self.check_method_call(node)
+
+ if value:
+ yield from value
+
+ def check_function_call(self, node):
+ function_name = node.func.id
+ for old_alias in self.old_aliases:
+ if function_name == old_alias:
+ yield self.error(node, old_alias)
+
+ def check_method_call(self, node):
+ """Check method calls, i.e. self.SOME_CALL()
+
+ Note that this can be endlessly nested, i.e.
self.obj.another.more.SOME_CALL()
+ """
+ method_name = getattr(node.func, 'attr', None)
+ if not method_name:
+ return
+ is_obj = getattr(node.func, 'value', False)
+ for old_alias in self.old_aliases:
+ if method_name == old_alias:
+ yield self.error(node, old_alias)
+
+ elif '.' in old_alias and is_obj:
+ obj_name = getattr(node.func.value, 'attr', False)
+ obj_id = getattr(node.func.value, 'id', False)
+ for name in (obj_name, obj_id):
+ if f'{name}.{method_name}' == old_alias:
+ yield self.error(node, old_alias)
+
+ def check_decorators(self, node):
+ """Check decorators names for deprecated aliases
+
+ Check for function-style decorators, i.e @my_deprecated_decorator()
+ as well as for alias-like decorators, i.e @my_deprecated_decorator
+ """
+ for decorator in node.decorator_list:
+ name = None
+ if isinstance(decorator, ast.Attribute):
+ name = decorator.attr
+ elif isinstance(decorator, ast.Name):
+ name = decorator.id
+ if not name:
+ continue
+
+ for old_alias in self.old_aliases:
+ if name == old_alias:
+ yield self.error(node, old_alias)
+
+ def _reverse_data(self):
+ """Reverse the deprecation dictionary
+
+ This way, we can more easily loop through the deprecated snippets.
+
+ We only care about the new version at error reporting time.
+ """
+ return {
+ old_alias: new_version
+ for new_version, alias_list in self.deprecations.items()
+ for old_alias in alias_list
+ }
+
+ def error(self, statement, old_alias):
+ return (
+ statement.lineno,
+ statement.col_offset,
+ self.message.format(self.old_aliases[old_alias], old_alias),
+ type(self),
+ )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/requirements.txt
new/flake8-deprecated-2.0.1/requirements.txt
--- old/flake8-deprecated-1.3/requirements.txt 1970-01-01 01:00:00.000000000
+0100
+++ new/flake8-deprecated-2.0.1/requirements.txt 2022-10-11
09:06:44.000000000 +0200
@@ -0,0 +1,172 @@
+#
+# This file is autogenerated by pip-compile with python 3.7
+# To update, run:
+#
+# pip-compile requirements.in
+#
+attrs==22.1.0
+ # via
+ # flake8-bugbear
+ # pytest
+bandit==1.7.4
+ # via -r requirements.in
+black==22.10.0
+ # via -r requirements.in
+certifi==2022.9.24
+ # via requests
+charset-normalizer==2.1.1
+ # via requests
+click==8.1.3
+ # via
+ # black
+ # safety
+codespell==2.2.1
+ # via -r requirements.in
+coverage[toml]==6.5.0
+ # via
+ # coveralls
+ # pytest-cov
+coveralls==3.3.1
+ # via -r requirements.in
+docopt==0.6.2
+ # via coveralls
+dparse==0.6.2
+ # via safety
+flake8==5.0.4
+ # via
+ # flake8-bugbear
+ # flake8-comprehensions
+ # flake8-debugger
+ # flake8-deprecated
+ # flake8-isort
+ # flake8-pep3101
+ # flake8-print
+ # flake8-quotes
+flake8-blind-except==0.2.1
+ # via -r requirements.in
+flake8-bugbear==22.9.23
+ # via -r requirements.in
+flake8-comprehensions==3.10.0
+ # via -r requirements.in
+flake8-debugger==4.1.2
+ # via -r requirements.in
+flake8-deprecated==1.3
+ # via -r requirements.in
+flake8-isort==5.0.0
+ # via -r requirements.in
+flake8-pep3101==2.0.0
+ # via -r requirements.in
+flake8-print==5.0.0
+ # via -r requirements.in
+flake8-quotes==3.3.1
+ # via -r requirements.in
+flake8-todo==0.7
+ # via -r requirements.in
+gitdb==4.0.9
+ # via gitpython
+gitpython==3.1.28
+ # via bandit
+idna==3.4
+ # via requests
+importlib-metadata==4.2.0 ; python_version < "3.8"
+ # via
+ # -r requirements.in
+ # click
+ # flake8
+ # flake8-comprehensions
+ # pluggy
+ # pytest
+ # stevedore
+iniconfig==1.1.1
+ # via pytest
+isort==5.10.1
+ # via
+ # -r requirements.in
+ # flake8-isort
+mccabe==0.7.0
+ # via flake8
+mypy==0.982
+ # via -r requirements.in
+mypy-extensions==0.4.3
+ # via
+ # black
+ # mypy
+packaging==21.3
+ # via
+ # dparse
+ # pytest
+ # safety
+pathspec==0.10.1
+ # via black
+pbr==5.10.0
+ # via stevedore
+platformdirs==2.5.2
+ # via black
+pluggy==1.0.0
+ # via pytest
+py==1.11.0
+ # via pytest
+pycodestyle==2.9.1
+ # via
+ # flake8
+ # flake8-debugger
+ # flake8-print
+ # flake8-todo
+pyflakes==2.5.0
+ # via flake8
+pyparsing==3.0.9
+ # via packaging
+pytest==7.1.3
+ # via
+ # -r requirements.in
+ # pytest-cov
+pytest-cov==4.0.0
+ # via -r requirements.in
+pyupgrade==3.0.0
+ # via -r requirements.in
+pyyaml==6.0
+ # via bandit
+requests==2.28.1
+ # via
+ # coveralls
+ # safety
+ruamel-yaml==0.17.21
+ # via safety
+ruamel-yaml-clib==0.2.6
+ # via ruamel-yaml
+safety==2.3.1
+ # via -r requirements.in
+smmap==5.0.0
+ # via gitdb
+stevedore==3.5.0
+ # via bandit
+tokenize-rt==5.0.0
+ # via pyupgrade
+toml==0.10.2
+ # via dparse
+tomli==2.0.1
+ # via
+ # black
+ # coverage
+ # mypy
+ # pytest
+typed-ast==1.5.4 ; python_version < "3.8"
+ # via
+ # -r requirements.in
+ # black
+ # mypy
+typing-extensions==4.4.0
+ # via
+ # black
+ # gitpython
+ # importlib-metadata
+ # mypy
+urllib3==1.26.12
+ # via requests
+zipp==3.9.0 ; python_version < "3.8"
+ # via
+ # -r requirements.in
+ # importlib-metadata
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/run_tests.py
new/flake8-deprecated-2.0.1/run_tests.py
--- old/flake8-deprecated-1.3/run_tests.py 2017-10-31 17:36:38.000000000
+0100
+++ new/flake8-deprecated-2.0.1/run_tests.py 2022-10-11 09:06:44.000000000
+0200
@@ -1,52 +1,188 @@
-# -*- coding: utf-8 -*-
-from flake8_deprecated import Flake8Deprecated
-
import ast
-import unittest
+import textwrap
+import pytest
-class TestFlake8Deprecated(unittest.TestCase):
-
- def _given_test_data(self, contents):
- return ast.parse(contents)
+from flake8_deprecated import Flake8Deprecated
- def test_no_deprecations_all_good(self):
- tree = self._given_test_data('\n'.join([
- 'b = 3',
- 'b.lower()',
- ]))
- checker = Flake8Deprecated(tree)
- ret = list(checker.run())
- self.assertEqual(len(ret), 0)
-
- def test_s_formatter(self):
- tree = self._given_test_data('\n'.join([
- 'import unittest',
- 'unittest.failUnlessAlmostEqual()',
- ]))
- checker = Flake8Deprecated(tree)
- ret = list(checker.run())
- self.assertEqual(len(ret), 1)
- self.assertEqual(ret[0][0], 2)
- self.assertEqual(ret[0][1], 0)
- self.assertEqual(
- ret[0][2],
- 'D001 found failUnlessAlmostEqual replace it with '
- 'assertAlmostEqual'
- )
-
- def test_ignores_comments(self):
- tree = self._given_test_data('\n'.join([
- 'import unittest',
- '# Maybe we could use assertEquals() here?',
- 'unittest.assertEquals()',
- ]))
- checker = Flake8Deprecated(tree)
- ret = list(checker.run())
- self.assertEqual(len(ret), 1)
- lint_line_number = ret[0][0]
- self.assertEqual(lint_line_number, 3)
+def check_code(source, expected_codes=None):
+ """Check if the given source code generates the given flake8 errors
-if __name__ == '__main__':
- unittest.main()
+ If `expected_codes` is a string is converted to a list,
+ if it is not given, then it is expected to **not** generate any error.
+ """
+ if isinstance(expected_codes, str):
+ expected_codes = [expected_codes]
+ elif expected_codes is None:
+ expected_codes = []
+
+ tree = ast.parse(textwrap.dedent(source))
+ checker = Flake8Deprecated(tree)
+ return_statements = list(checker.run())
+
+ assert len(return_statements) == len(expected_codes)
+ for item, code in zip(return_statements, expected_codes):
+ assert item[2].startswith(f'{code} ')
+
+
+def test_all_good():
+ source = 'a = 3'
+ check_code(source)
+
+
+def test_ignore_comments():
+ source = """
+ a = 3
+ # fortunately we remove all failIfEqual !
+ """
+ check_code(source)
+
+
+def test_error():
+ source = 'self.assertEquals()'
+ check_code(source, 'D001')
+
+
+def test_error_line():
+ source = """
+ import unittest
+ unittest.assertEquals()
+ """
+ tree = ast.parse(textwrap.dedent(source))
+ checker = Flake8Deprecated(tree)
+ return_statements = list(checker.run())
+
+ assert len(return_statements) == 1
+ assert return_statements[0][0] == 3
+
+
+def test_handle_subscripts():
+ source = """
+ funcs = [print]
+ funcs[0]("Hello World")
+ """
+ check_code(source)
+
+
+def test_error_column():
+ source = """
+ class Foo:
+ def test_all_good(self):
+ self.assertEquals()
+ """
+ tree = ast.parse(textwrap.dedent(source))
+ checker = Flake8Deprecated(tree)
+ return_statements = list(checker.run())
+
+ assert len(return_statements) == 1
+ assert return_statements[0][1] == 8
+
+
+def test_nested_method_call():
+ source = 'self.context.deep.chained.element.with_deprecated.assertEquals()'
+ check_code(source, 'D001')
+
+
+test_aliases = [
+ {
+ 'name': old_alias.lower(),
+ 'code': old_alias,
+ }
+ for old_alias, _ in Flake8Deprecated(None).old_aliases.items()
+]
+
+
[email protected](
+ 'example',
+ test_aliases,
+ ids=[t['name'] for t in test_aliases],
+)
+def test_code_suggestions(example):
+ source = f'self.{example["code"]}()'
+ check_code(source, 'D001')
+
+
+decorator_test_cases = [
+ {
+ 'name': 'decorator-basic',
+ 'code': '@assertEquals()',
+ },
+ {
+ 'name': 'decorator-basic-no-parenthesis',
+ 'code': '@assertEquals',
+ },
+ {
+ 'name': 'decorator-method-chain-basic',
+ 'code': '@obj.assertEquals()',
+ },
+ {
+ 'name': 'decorator-method-chain-deep',
+ 'code': '@obj.another.yet_anoher.last_one.assertEquals()',
+ },
+ {
+ 'name': 'decorator-method-chain-basic-no-parenthesis',
+ 'code': '@obj.assertEquals',
+ },
+ {
+ 'name': 'decorator-method-chain-deep-no-parenthesis',
+ 'code': '@obj.another.yet_anoher.last_one.assertEquals',
+ },
+ {
+ 'name': 'decorator-nested-first',
+ 'code': """
+ @obj.assertEquals()
+ @another_decorator()
+ """,
+ },
+ {
+ 'name': 'decorator-nested-last',
+ 'code': """
+ @another_decorator()
+ @obj.assertEquals()
+ """,
+ },
+ {
+ 'name': 'decorator-nested-in-between',
+ 'code': """
+ @another_decorator()
+ @obj.assertEquals
+ @yet_another_decorator()
+ """,
+ },
+ {
+ 'name': 'full-example-decorator-chained-in-method',
+ 'code': """
+ class Foo:
+ @another_decorator()
+ @obj.another_one.yet_one_more.assertEquals
+ def my_method(self): ...
+ """,
+ },
+ {
+ 'name': 'full-example-decorator-basic-in-method',
+ 'code': """
+ class Foo:
+ @another_decorator()
+ @assertEquals
+ def my_method(self): ...
+ """,
+ },
+]
+
+
[email protected](
+ 'testcase', decorator_test_cases, ids=[t['name'] for t in
decorator_test_cases]
+)
+def test_decorators(testcase):
+ if 'nested' in testcase['name']:
+ indentation = ' ' * 4 * 3
+ source = f'{testcase["code"]}\n{indentation}def my_function(): ...'
+ elif 'full-example' in testcase['name']:
+ source = testcase['code']
+ else:
+ source = f"""
+ {testcase['code']}
+ def my_function(): ...
+ """
+ check_code(source, 'D001')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/setup.cfg
new/flake8-deprecated-2.0.1/setup.cfg
--- old/flake8-deprecated-1.3/setup.cfg 2017-10-31 17:36:38.000000000 +0100
+++ new/flake8-deprecated-2.0.1/setup.cfg 2022-10-11 09:06:45.196644000
+0200
@@ -1,11 +1,12 @@
-[flake8]
-max-line-length = 80
-
[zest.releaser]
create-wheel = yes
-[bdist_wheel]
-universal = 1
+[check-manifest]
+ignore =
+ .installed.cfg
+
+[isort]
+profile = black
[egg_info]
tag_build =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/setup.py
new/flake8-deprecated-2.0.1/setup.py
--- old/flake8-deprecated-1.3/setup.py 2017-10-31 17:36:38.000000000 +0100
+++ new/flake8-deprecated-2.0.1/setup.py 2022-10-11 09:06:44.000000000
+0200
@@ -1,49 +1,60 @@
-# -*- coding: utf-8 -*-
from setuptools import setup
-
short_description = 'Warns about deprecated method calls.'
-long_description = '{0}\n{1}'.format(
- open('README.rst').read(),
- open('CHANGES.rst').read()
-)
+def read_file(filename):
+ with open(filename) as file_obj:
+ file_contents = file_obj.read()
+ return file_contents
+
+
+long_description = f"""
+{read_file('README.rst')}
+{read_file('CHANGES.rst')}
+"""
setup(
name='flake8-deprecated',
- version='1.3',
+ version='2.0.1',
description=short_description,
long_description=long_description,
- # Get more from http://pypi.python.org/pypi?%3Aaction=list_classifiers
+ # Get more from https://pypi.org/classifiers/
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Console',
+ 'Framework :: Flake8',
'Framework :: Plone',
'Intended Audience :: Developers',
'License :: OSI Approved :: GNU General Public License v2 (GPLv2)',
'Operating System :: OS Independent',
'Programming Language :: Python',
- 'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.5',
- 'Programming Language :: Python :: 3.6',
+ 'Programming Language :: Python :: 3 :: Only',
+ 'Programming Language :: Python :: 3.7',
+ 'Programming Language :: Python :: 3.8',
+ 'Programming Language :: Python :: 3.9',
+ 'Programming Language :: Python :: 3.10',
+ 'Programming Language :: Python :: Implementation :: CPython',
+ 'Programming Language :: Python :: Implementation :: PyPy',
+ 'Topic :: Software Development',
'Topic :: Software Development :: Quality Assurance',
],
+ python_requires='>=3.7',
keywords='pep8 flake8 deprecations',
author='Gil Forcada',
author_email='[email protected]',
url='https://github.com/gforcada/flake8-deprecated',
license='GPL version 2',
- py_modules=['flake8_deprecated', ],
+ py_modules=[
+ 'flake8_deprecated',
+ ],
include_package_data=True,
test_suite='run_tests',
zip_safe=False,
- install_requires=[
- 'flake8 >= 3.0.0',
- ],
+ install_requires=['flake8'],
+ extras_require={'test': ['pytest']},
entry_points={
'flake8.extension': ['D001 = flake8_deprecated:Flake8Deprecated'],
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/flake8-deprecated-1.3/tox.ini
new/flake8-deprecated-2.0.1/tox.ini
--- old/flake8-deprecated-1.3/tox.ini 2017-10-31 17:36:38.000000000 +0100
+++ new/flake8-deprecated-2.0.1/tox.ini 1970-01-01 01:00:00.000000000 +0100
@@ -1,16 +0,0 @@
-[testenv]
-passenv=
- TRAVIS*
-commands=
- python run_tests.py
-
-[testenv:coverage]
-deps=
- pytest
- pytest-cov
- coveralls
- flake8
-commands=
- flake8 *.py
- py.test run_tests.py --cov flake8_deprecated --cov-report term-missing
- coveralls