15
0

Accepting request 999222 from home:bnavigator:branches:devel:languages:python

- Update to 2.1.0
  * New class-based API.
- No further release notes

OBS-URL: https://build.opensuse.org/request/show/999222
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-eradicate?expand=0&rev=7
This commit is contained in:
2022-08-26 06:37:05 +00:00
committed by Git OBS Bridge
parent fa95c06e0f
commit da81943ba6
5 changed files with 243 additions and 61 deletions

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4ffda82aae6fd49dfffa777a857cb758d77502a1f2e0f54c9ac5155a39d2d01a
size 4644

3
eradicate-2.1.0.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aac7384ab25b1bf21c4c012de9b4bf8398945a14c98c911545b2ea50ab558014
size 6007

View File

@@ -1,3 +1,10 @@
-------------------------------------------------------------------
Thu Aug 25 09:45:28 UTC 2022 - Ben Greiner <code@bnavigator.de>
- Update to 2.1.0
* New class-based API.
- No further release notes
-------------------------------------------------------------------
Thu Feb 14 01:29:57 UTC 2019 - Jan Engelhardt <jengelh@inai.de>

View File

@@ -1,7 +1,7 @@
#
# spec file for package python-eradicate
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
# 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,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-eradicate
Version: 1.0
Version: 2.1.0
Release: 0
Summary: Python utility for removing commented-out code
License: MIT
@@ -30,7 +30,7 @@ BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires(post): update-alternatives
Requires(postun): update-alternatives
Requires(postun):update-alternatives
BuildArch: noarch
%python_subpackages
@@ -62,12 +62,13 @@ cp %{SOURCE1} .
%python_uninstall_alternative eradicate
%check
export PYTHONPATH=.
%python_exec %{SOURCE1}
%pyunittest -v
%files %{python_files}
%doc README.rst
%python_alternative %{_bindir}/eradicate
%{python_sitelib}/*
%{python_sitelib}/eradicate.py*
%pycache_only %{python_sitelib}/__pycache__/eradicate*.pyc
%{python_sitelib}/eradicate-%{version}*-info
%changelog

View File

@@ -10,6 +10,11 @@ import subprocess
import sys
import tempfile
import unittest
try: # pragma: no cover
import mock
except ModuleNotFoundError: # pragma: no cover
import unittest.mock as mock
import re
import eradicate
@@ -17,141 +22,254 @@ import eradicate
class UnitTests(unittest.TestCase):
def test_comment_contains_code(self):
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'#'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# This is a (real) comment.'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# 123'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# 123.1'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# 1, 2, 3'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'x = 1 # x = 1'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# pylint: disable=redefined-outer-name'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# Issue #999: This is not code'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'# x = 1'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#from foo import eradicate'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#import eradicate'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#"key": value,'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#"key": "value",'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#"key": 1 + 1,'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
"#'key': 1 + 1,"))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#"key": {'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#}'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#} )]'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#},'))
def test_comment_contains_code_with_print(self):
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#print'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#print(1)'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#print 1'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'#to print'))
def test_comment_contains_code_with_return(self):
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#return x'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'#to return'))
def test_comment_contains_code_with_multi_line(self):
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#def foo():'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#else:'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'# else : '))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'# "foo %d" % \\'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#elif True:'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#x = foo('))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'#except Exception:'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# this is = to that :('))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'#else'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'#or else:'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'#else True:'))
def test_comment_contains_code_with_sentences(self):
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'#code is good'))
def test_comment_contains_code_with_encoding(self):
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# coding=utf-8'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'#coding= utf-8'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# coding: utf-8'))
self.assertFalse(eradicate.comment_contains_code(
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# encoding: utf8'))
self.assertTrue(eradicate.comment_contains_code(
self.assertTrue(eradicate.Eradicator().comment_contains_code(
'# codings=utf-8'))
def test_comment_contains_code_with_default_whitelist(self):
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# pylint: disable=A0123'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# pylint:disable=A0123'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# pylint: disable = A0123'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# pylint:disable = A0123'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# pyright: reportErrorName=true'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# noqa'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# NOQA'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# noqa: A123'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# noqa:A123'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# nosec'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# fmt: on'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# fmt: off'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# fmt:on'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# fmt:off'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort: on'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort:on'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort: off'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort:off'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort: skip'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort:skip'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort: skip_file'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort:skip_file'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort: split'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort:split'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort: dont-add-imports'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort:dont-add-imports'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort: dont-add-imports: ["import os"]'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort:dont-add-imports: ["import os"]'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort: dont-add-imports:["import os"]'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# isort:dont-add-imports:["import os"]'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# type: ignore'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# type:ignore'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# type: ignore[import]'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# type:ignore[import]'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# TODO: Do that'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# FIXME: Fix that'))
self.assertFalse(eradicate.Eradicator().comment_contains_code(
'# XXX: What ever'))
def test_commented_out_code_line_numbers(self):
self.assertEqual(
[1, 3],
list(eradicate.commented_out_code_line_numbers(
list(eradicate.Eradicator().commented_out_code_line_numbers(
"""\
# print(5)
# This is a comment.
@@ -166,7 +284,7 @@ y = 1 # x = 3
def test_commented_out_code_line_numbers_with_errors(self):
self.assertEqual(
[1, 3],
list(eradicate.commented_out_code_line_numbers(
list(eradicate.Eradicator().commented_out_code_line_numbers(
"""\
# print(5)
# This is a comment.
@@ -184,7 +302,7 @@ def foo():
def test_commented_out_code_line_numbers_with_with_statement(self):
self.assertEqual(
[1, 2],
list(eradicate.commented_out_code_line_numbers("""\
list(eradicate.Eradicator().commented_out_code_line_numbers("""\
# with open('filename', 'w') as out_file:
# json.dump(objects, out_file)
#
@@ -193,7 +311,7 @@ def foo():
def test_commented_out_code_line_numbers_with_for_statement(self):
self.assertEqual(
[1, 2],
list(eradicate.commented_out_code_line_numbers("""\
list(eradicate.Eradicator().commented_out_code_line_numbers("""\
# for x in y:
# oops = x.ham
""")))
@@ -208,7 +326,7 @@ y = 1 # x = 3
# The below is another comment.
# 3 / 2 + 21
""",
''.join(eradicate.filter_commented_out_code(
''.join(eradicate.Eradicator().filter_commented_out_code(
"""\
# print(5)
# This is a comment.
@@ -233,7 +351,7 @@ if False: \\
"""
self.assertEqual(
line,
''.join(eradicate.filter_commented_out_code(line)))
''.join(eradicate.Eradicator().filter_commented_out_code(line)))
def test_filter_commented_out_code_with_larger_example(self):
self.assertEqual(
@@ -245,7 +363,7 @@ y = 1 # x = 3
# The below is another comment.
# 3 / 2 + 21
""",
''.join(eradicate.filter_commented_out_code(
''.join(eradicate.Eradicator().filter_commented_out_code(
"""\
# print(5)
# This is a comment.
@@ -266,13 +384,13 @@ y = 1 # x = 3
"""
self.assertEqual(
code,
''.join(eradicate.filter_commented_out_code(code,
''.join(eradicate.Eradicator().filter_commented_out_code(code,
aggressive=False)))
def test_filter_commented_out_code_with_annotation(self):
self.assertEqual(
'\n\n\n',
''.join(eradicate.filter_commented_out_code("""\
''.join(eradicate.Eradicator().filter_commented_out_code("""\
# class CommentedClass(object):
# def __init__(self, prop: int) -> None:
# self.property = prop
@@ -290,7 +408,21 @@ y = 1 # x = 3
def test_detect_encoding_with_bad_encoding(self):
with temporary_file('# -*- coding: blah -*-\n') as filename:
self.assertEqual('latin-1',
eradicate.detect_encoding(filename))
eradicate.Eradicator().detect_encoding(filename))
def test_extend_whitelist(self):
eradicator = eradicate.Eradicator()
eradicator.update_whitelist(["foo"], True)
self.assertTrue(
eradicator.WHITELIST_REGEX == re.compile(
r'|'.join(list(eradicator.DEFAULT_WHITELIST) + ["foo"]), flags=re.IGNORECASE
)
)
def test_update_whitelist(self):
eradicator = eradicate.Eradicator()
eradicator.update_whitelist(["foo"], False)
self.assertTrue(eradicator.WHITELIST_REGEX == re.compile("foo", flags=re.IGNORECASE))
class SystemTests(unittest.TestCase):
@@ -372,6 +504,28 @@ class SystemTests(unittest.TestCase):
standard_error=ignore)
self.assertFalse(output_file.getvalue())
def test_returns_error_code_if_requested(self):
with temporary_file("""\
# x * 3 == False
# x is a variable
""") as filename:
output_file = io.StringIO()
result = eradicate.main(argv=['my_fake_program', filename, "-e"],
standard_out=output_file,
standard_error=None)
self.assertTrue(result)
def test_returns_None_if_no_error_request(self):
with temporary_file("""\
# x * 3 == False
# x is a variable
""") as filename:
output_file = io.StringIO()
result = eradicate.main(argv=['my_fake_program', filename],
standard_out=output_file,
standard_error=None)
self.assertTrue(result is None)
def test_end_to_end(self):
with temporary_file("""\
# x * 3 == False
@@ -386,6 +540,26 @@ class SystemTests(unittest.TestCase):
# x is a variable
""", '\n'.join(process.communicate()[0].decode().split('\n')[2:]))
def test_whitelist(self):
mock_update = mock.Mock()
with mock.patch.object(eradicate.Eradicator, 'update_whitelist', mock_update):
with temporary_file("# empty") as filename:
result = eradicate.main(argv=['my_fake_program', '--whitelist', 'foo# bar', filename],
standard_out=None,
standard_error=None)
self.assertTrue(result is None)
mock_update.assert_called_once_with(["foo", " bar"], False)
def test_whitelist_extend(self):
mock_update = mock.Mock()
with mock.patch.object(eradicate.Eradicator, 'update_whitelist', mock_update):
with temporary_file("# empty") as filename:
result = eradicate.main(argv=['my_fake_program', '--whitelist-extend', 'foo #bar', filename],
standard_out=None,
standard_error=None)
self.assertTrue(result is None)
mock_update.assert_called_once_with(["foo ", "bar"], True)
@contextlib.contextmanager
def temporary_file(contents, directory='.', prefix=''):