python-nose package is retired on branch c10s for BAKERY-412

This commit is contained in:
Troy Dawson 2024-03-21 19:28:42 +00:00
parent 6c82f02bef
commit 8b7df53a72
15 changed files with 1 additions and 5976 deletions

13
.gitignore vendored
View File

@ -1,13 +0,0 @@
nose-0.11.3.tar.gz
nose-0.11.4.tar.gz
/nose-1.0.0.tar.gz
/nose-1.1.1.tar.gz
/nose-1.1.2.tar.gz
/nose-1.2.0.tar.gz
/nose-1.2.1.tar.gz
/nose-1.3.0.tar.gz
/nose-1.3.1.tar.gz
/nose-1.3.2.tar.gz
/nose-1.3.4.tar.gz
/nose-1.3.6.tar.gz
/nose-1.3.7.tar.gz

1
dead.package Normal file
View File

@ -0,0 +1 @@
python-nose package is retired on branch c10s for BAKERY-412

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +0,0 @@
diff -up nose-1.3.7/nose/plugins/cover.py.coverage4 nose-1.3.7/nose/plugins/cover.py
--- nose-1.3.7/nose/plugins/cover.py.coverage4 2015-04-04 03:28:20.000000000 -0600
+++ nose-1.3.7/nose/plugins/cover.py 2016-11-09 16:16:32.832927855 -0700
@@ -187,7 +187,7 @@ class Coverage(Plugin):
for name, module in sys.modules.items()
if self.wantModuleCoverage(name, module)]
log.debug("Coverage report will cover modules: %s", modules)
- self.coverInstance.report(modules, file=stream)
+ self.coverInstance.report(modules, file=stream, show_missing=True)
import coverage
if self.coverHtmlDir:
@@ -207,7 +207,7 @@ class Coverage(Plugin):
# make sure we have minimum required coverage
if self.coverMinPercentage:
f = StringIO.StringIO()
- self.coverInstance.report(modules, file=f)
+ self.coverInstance.report(modules, file=f, show_missing=True)
multiPackageRe = (r'-------\s\w+\s+\d+\s+\d+(?:\s+\d+\s+\d+)?'
r'\s+(\d+)%\s+\d*\s{0,1}$')

View File

@ -1,53 +0,0 @@
diff --git a/setup.py b/setup.py
index a2091c0..7e01bba 100644
--- a/setup.py
+++ b/setup.py
@@ -13,8 +13,7 @@ if sys.version_info >= (3,):
from distribute_setup import use_setuptools
use_setuptools()
- extra = {'use_2to3': True,
- 'test_dirs': test_dirs,
+ extra = {'test_dirs': test_dirs,
'test_build_dir': 'build/tests',
'pyversion_patching': True,
}
diff --git a/setup3lib.py b/setup3lib.py
index 27bdb93..761b74f 100644
--- a/setup3lib.py
+++ b/setup3lib.py
@@ -18,7 +18,6 @@ else:
import logging
from setuptools import Distribution as _Distribution
from distutils.core import Command
- from setuptools.command.build_py import Mixin2to3
from distutils import dir_util, file_util, log
import setuptools.command.test
from pkg_resources import normalize_path
@@ -68,7 +67,7 @@ else:
self.pyversion_patching = False
_Distribution.__init__(self, attrs)
- class BuildTestsCommand (Command, Mixin2to3):
+ class BuildTestsCommand (Command):
# Create mirror copy of tests, convert all .py files using 2to3
user_options = []
@@ -83,7 +82,6 @@ else:
self.test_base = test_base
def run(self):
- use_2to3 = getattr(self.distribution, 'use_2to3', False)
test_dirs = getattr(self.distribution, 'test_dirs', [])
test_base = self.test_base
bpy_cmd = self.get_finalized_command("build_py")
@@ -112,9 +110,6 @@ else:
if fn.endswith(ext):
doc_modified.append(dstfile)
break
- if use_2to3:
- self.run_2to3(py_modified)
- self.run_2to3(doc_modified, True)
if self.distribution.pyversion_patching:
if patch is not None:
for file in modified:

View File

@ -1,56 +0,0 @@
diff --git a/functional_tests/doc_tests/test_issue145/imported_tests.rst b/functional_tests/doc_tests/test_issue145/imported_tests.rst
index c4eee78..caad752 100644
--- a/functional_tests/doc_tests/test_issue145/imported_tests.rst
+++ b/functional_tests/doc_tests/test_issue145/imported_tests.rst
@@ -42,11 +42,11 @@ imported, not the source modules.
>>> argv = [__file__, '-v', support]
>>> run(argv=argv) # doctest: +REPORT_NDIFF
package1 setup
- test (package1.test_module.TestCase) ... ok
+ test (package1.test_module.TestCase.test) ... ok
package1.test_module.TestClass.test_class ... ok
package1.test_module.test_function ... ok
package2c setup
- test (package2c.test_module.TestCase) ... ok
+ test (package2c.test_module.TestCase.test) ... ok
package2c.test_module.TestClass.test_class ... ok
package2f setup
package2f.test_module.test_function ... ok
@@ -71,7 +71,7 @@ packages are executed.
>>> argv = [__file__, '-v', os.path.join(support, 'package2c')]
>>> run(argv=argv) # doctest: +REPORT_NDIFF
package2c setup
- test (package2c.test_module.TestCase) ... ok
+ test (package2c.test_module.TestCase.test) ... ok
package2c.test_module.TestClass.test_class ... ok
<BLANKLINE>
----------------------------------------------------------------------
@@ -98,7 +98,7 @@ command-line.
... ':TestCase.test']
>>> run(argv=argv) # doctest: +REPORT_NDIFF
package2c setup
- test (package2c.test_module.TestCase) ... ok
+ test (package2c.test_module.TestCase.test) ... ok
<BLANKLINE>
----------------------------------------------------------------------
Ran 1 test in ...s
diff --git a/functional_tests/doc_tests/test_selector_plugin/selector_plugin.rst b/functional_tests/doc_tests/test_selector_plugin/selector_plugin.rst
index f5f7913..5463cf1 100644
--- a/functional_tests/doc_tests/test_selector_plugin/selector_plugin.rst
+++ b/functional_tests/doc_tests/test_selector_plugin/selector_plugin.rst
@@ -108,10 +108,10 @@ Now we can execute a test run using the custom selector, and the
project's tests will be collected.
>>> run(argv=argv, plugins=[UseMySelector()])
- test_add (basic.TestBasicMath) ... ok
- test_sub (basic.TestBasicMath) ... ok
- test_tuple_groups (my_function.MyFunction) ... ok
- test_cat (cat.StringsCat) ... ok
+ test_add (basic.TestBasicMath.test_add) ... ok
+ test_sub (basic.TestBasicMath.test_sub) ... ok
+ test_tuple_groups (my_function.MyFunction.test_tuple_groups) ... ok
+ test_cat (cat.StringsCat.test_cat) ... ok
<BLANKLINE>
----------------------------------------------------------------------
Ran 4 tests in ...s

View File

@ -1,203 +0,0 @@
diff --git a/functional_tests/test_attribute_plugin.py b/functional_tests/test_attribute_plugin.py
index c9bab66..df2cfd3 100644
--- a/functional_tests/test_attribute_plugin.py
+++ b/functional_tests/test_attribute_plugin.py
@@ -150,7 +150,10 @@ class TestClassAndMethodAttrs(AttributePluginTester):
args = ["-a", "meth_attr=method,cls_attr=class"]
def verify(self):
- assert '(test_attr.TestClassAndMethodAttrs) ... ok' in self.output
+ if sys.version_info >= (3, 11):
+ assert '(test_attr.TestClassAndMethodAttrs.test_method) ... ok' in self.output
+ else:
+ assert '(test_attr.TestClassAndMethodAttrs) ... ok' in self.output
assert 'test_case_two' not in self.output
assert 'test_case_one' not in self.output
assert 'test_case_three' not in self.output
@@ -166,7 +169,10 @@ class TestTopLevelNotSelected(AttributePluginTester):
# rather than the attribute plugin, but the issue more easily manifests
# itself when using attributes.
assert 'test.test_b ... ok' in self.output
- assert 'test_a (test.TestBase) ... ok' in self.output
+ if sys.version_info >= (3, 11):
+ assert 'test_a (test.TestBase.test_a) ... ok' in self.output
+ else:
+ assert 'test_a (test.TestBase) ... ok' in self.output
assert 'TestDerived' not in self.output
diff --git a/functional_tests/test_load_tests_from_test_case.py b/functional_tests/test_load_tests_from_test_case.py
index 13d0c8a..934d43b 100644
--- a/functional_tests/test_load_tests_from_test_case.py
+++ b/functional_tests/test_load_tests_from_test_case.py
@@ -2,6 +2,7 @@
Tests that plugins can override loadTestsFromTestCase
"""
import os
+import sys
import unittest
from nose import loader
from nose.plugins import PluginTester
@@ -44,9 +45,14 @@ class TestLoadTestsFromTestCaseHook(PluginTester, unittest.TestCase):
suitepath = os.path.join(support, 'ltftc')
def runTest(self):
- expect = [
- 'test_value (%s.Derived) ... ERROR' % __name__,
- 'test_value (tests.Tests) ... ok']
+ if sys.version_info >= (3, 11):
+ expect = [
+ 'test_value (%s.Derived.test_value) ... ERROR' % __name__,
+ 'test_value (tests.Tests.test_value) ... ok']
+ else:
+ expect = [
+ 'test_value (%s.Derived) ... ERROR' % __name__,
+ 'test_value (tests.Tests) ... ok']
print str(self.output)
for line in self.output:
if expect:
diff --git a/functional_tests/test_xunit.py b/functional_tests/test_xunit.py
index 6c2e99d..6e76a7d 100644
--- a/functional_tests/test_xunit.py
+++ b/functional_tests/test_xunit.py
@@ -25,7 +25,10 @@ class TestXUnitPlugin(PluginTester, unittest.TestCase):
assert "ERROR: test_error" in self.output
assert "FAIL: test_fail" in self.output
- assert "test_skip (test_xunit_as_suite.TestForXunit) ... SKIP: skipit" in self.output
+ if sys.version_info >= (3, 11):
+ assert "test_skip (test_xunit_as_suite.TestForXunit.test_skip) ... SKIP: skipit" in self.output
+ else:
+ assert "test_skip (test_xunit_as_suite.TestForXunit) ... SKIP: skipit" in self.output
assert "XML: %s" % xml_results_filename in self.output
f = codecs.open(xml_results_filename,'r', encoding='utf8')
diff --git a/nose/config.py b/nose/config.py
index ad01e61..d9aec2d 100644
--- a/nose/config.py
+++ b/nose/config.py
@@ -78,7 +78,7 @@ class ConfiguredDefaultsOptionParser(object):
except AttributeError:
filename = '<???>'
try:
- cfg.readfp(fh)
+ cfg.read_file(fh)
except ConfigParser.Error, exc:
raise ConfigError("Error reading config file %r: %s" %
(filename, str(exc)))
diff --git a/nose/plugins/errorclass.py b/nose/plugins/errorclass.py
index d1540e0..38ecec9 100644
--- a/nose/plugins/errorclass.py
+++ b/nose/plugins/errorclass.py
@@ -1,4 +1,15 @@
+import sys
+
+if sys.version_info >= (3, 11):
+ method = "TestTodo.runTest"
+ traceback = """
+...Todo("I need to test something")
+...
"""
+else:
+ method = "TestTodo"
+ traceback = ""
+f"""
ErrorClass Plugins
------------------
@@ -66,7 +77,7 @@ each step.
Now run the test. TODO is printed.
>>> _ = case(result) # doctest: +ELLIPSIS
- runTest (....TestTodo) ... TODO: I need to test something
+ runTest (....{method}) ... TODO: I need to test something
Errors and failures are empty, but todo has our test:
@@ -79,10 +90,10 @@ Errors and failures are empty, but todo has our test:
>>> result.printErrors() # doctest: +ELLIPSIS
<BLANKLINE>
======================================================================
- TODO: runTest (....TestTodo)
+ TODO: runTest (....{method})
----------------------------------------------------------------------
Traceback (most recent call last):
- ...
+ ...{traceback}
...Todo: I need to test something
<BLANKLINE>
diff --git a/nose/plugins/manager.py b/nose/plugins/manager.py
index 4d2ed22..daa9edb 100644
--- a/nose/plugins/manager.py
+++ b/nose/plugins/manager.py
@@ -105,7 +105,7 @@ class PluginProxy(object):
meth = getattr(plugin, call, None)
if meth is not None:
if call == 'loadTestsFromModule' and \
- len(inspect.getargspec(meth)[0]) == 2:
+ len(inspect.getfullargspec(meth)[0]) == 2:
orig_meth = meth
meth = lambda module, path, **kwargs: orig_meth(module)
self.plugins.append((plugin, meth))
diff --git a/nose/result.py b/nose/result.py
index f974a14..228a42c 100644
--- a/nose/result.py
+++ b/nose/result.py
@@ -13,7 +13,7 @@ try:
# 2.7+
from unittest.runner import _TextTestResult
except ImportError:
- from unittest import _TextTestResult
+ from unittest import TextTestResult as _TextTestResult
from nose.config import Config
from nose.util import isclass, ln as _ln # backwards compat
diff --git a/nose/util.py b/nose/util.py
index 80ab1d4..21770ae 100644
--- a/nose/util.py
+++ b/nose/util.py
@@ -449,15 +449,15 @@ def try_run(obj, names):
if type(obj) == types.ModuleType:
# py.test compatibility
if isinstance(func, types.FunctionType):
- args, varargs, varkw, defaults = \
- inspect.getargspec(func)
+ args, varargs, varkw, defaults, *_ = \
+ inspect.getfullargspec(func)
else:
# Not a function. If it's callable, call it anyway
if hasattr(func, '__call__') and not inspect.ismethod(func):
func = func.__call__
try:
- args, varargs, varkw, defaults = \
- inspect.getargspec(func)
+ args, varargs, varkw, defaults, *_ = \
+ inspect.getfullargspec(func)
args.pop(0) # pop the self off
except TypeError:
raise TypeError("Attribute %s of %r is not a python "
diff --git a/unit_tests/test_xunit.py b/unit_tests/test_xunit.py
index 2a9f69b..560b9c2 100644
--- a/unit_tests/test_xunit.py
+++ b/unit_tests/test_xunit.py
@@ -134,7 +134,8 @@ class TestXMLOutputWithXML(unittest.TestCase):
err_lines = err.text.strip().split("\n")
eq_(err_lines[0], 'Traceback (most recent call last):')
eq_(err_lines[-1], 'AssertionError: one is not \'equal\' to two')
- eq_(err_lines[-2], ' raise AssertionError("one is not \'equal\' to two")')
+ r_line = -3 if '^' * 10 in err_lines[-2] else -2
+ eq_(err_lines[r_line], ' raise AssertionError("one is not \'equal\' to two")')
else:
# this is a dumb test for 2.4-
assert '<?xml version="1.0" encoding="UTF-8"?>' in result
@@ -201,7 +202,8 @@ class TestXMLOutputWithXML(unittest.TestCase):
err_lines = err.text.strip().split("\n")
eq_(err_lines[0], 'Traceback (most recent call last):')
eq_(err_lines[-1], 'RuntimeError: some error happened')
- eq_(err_lines[-2], ' raise RuntimeError("some error happened")')
+ r_line = -3 if '^' * 10 in err_lines[-2] else -2
+ eq_(err_lines[r_line], ' raise RuntimeError("some error happened")')
else:
# this is a dumb test for 2.4-
assert '<?xml version="1.0" encoding="UTF-8"?>' in result

View File

@ -1,376 +0,0 @@
From 4fe4d9f74c29368f64fb062978868fa81b7fc138 Mon Sep 17 00:00:00 2001
From: Michael Mintz <mdmintz@gmail.com>
Date: Mon, 1 May 2023 21:46:14 -0400
Subject: [PATCH] Python 3.12 compatibility
---
nose/case.py | 4 ++
nose/importer.py | 121 +++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 122 insertions(+), 3 deletions(-)
diff --git a/nose/case.py b/nose/case.py
index cffa4ab..97fabf0 100644
--- a/nose/case.py
+++ b/nose/case.py
@@ -139,6 +139,9 @@ class Test(unittest.TestCase):
finally:
self.afterTest(result)
+ def addDuration(*args, **kwargs):
+ pass
+
def runTest(self, result):
"""Run the test. Plugins may alter the test by returning a
value from prepareTestCase. The value must be callable and
@@ -148,6 +151,7 @@ class Test(unittest.TestCase):
plug_test = self.config.plugins.prepareTestCase(self)
if plug_test is not None:
test = plug_test
+ result.addDuration = self.addDuration
test(result)
def shortDescription(self):
diff --git a/nose/importer.py b/nose/importer.py
index e677658..188272f 100644
--- a/nose/importer.py
+++ b/nose/importer.py
@@ -7,9 +7,124 @@ the builtin importer.
import logging
import os
import sys
+import importlib.machinery
+import importlib.util
+import tokenize
from nose.config import Config
+from importlib import _imp
+from importlib._bootstrap import _ERR_MSG, _builtin_from_name
+
+acquire_lock = _imp.acquire_lock
+is_builtin = _imp.is_builtin
+init_frozen = _imp.init_frozen
+is_frozen = _imp.is_frozen
+release_lock = _imp.release_lock
+SEARCH_ERROR = 0
+PY_SOURCE = 1
+PY_COMPILED = 2
+C_EXTENSION = 3
+PY_RESOURCE = 4
+PKG_DIRECTORY = 5
+C_BUILTIN = 6
+PY_FROZEN = 7
+PY_CODERESOURCE = 8
+IMP_HOOK = 9
+
+
+def get_suffixes():
+ extensions = [
+ (s, 'rb', C_EXTENSION) for s in importlib.machinery.EXTENSION_SUFFIXES
+ ]
+ source = [
+ (s, 'r', PY_SOURCE) for s in importlib.machinery.SOURCE_SUFFIXES
+ ]
+ bytecode = [
+ (s, 'rb', PY_COMPILED) for s in importlib.machinery.BYTECODE_SUFFIXES
+ ]
+ return extensions + source + bytecode
+
+
+def init_builtin(name):
+ try:
+ return _builtin_from_name(name)
+ except ImportError:
+ return None
+
+
+def load_package(name, path):
+ if os.path.isdir(path):
+ extensions = (
+ importlib.machinery.SOURCE_SUFFIXES[:]
+ + importlib.machinery.BYTECODE_SUFFIXES[:]
+ )
+ for extension in extensions:
+ init_path = os.path.join(path, '__init__' + extension)
+ if os.path.exists(init_path):
+ path = init_path
+ break
+ else:
+ raise ValueError('{!r} is not a package'.format(path))
+ spec = importlib.util.spec_from_file_location(
+ name, path, submodule_search_locations=[]
+ )
+ sys.modules[name] = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(sys.modules[name])
+ return sys.modules[name]
+
+
+def find_module(name, path=None):
+ """Search for a module.
+ If path is omitted or None, search for a built-in, frozen or special
+ module and continue search in sys.path. The module name cannot
+ contain '.'; to search for a submodule of a package, pass the
+ submodule name and the package's __path__."""
+ if is_builtin(name):
+ return None, None, ('', '', C_BUILTIN)
+ elif is_frozen(name):
+ return None, None, ('', '', PY_FROZEN)
+
+ # find_spec(fullname, path=None, target=None)
+ spec = importlib.machinery.PathFinder().find_spec(
+ fullname=name, path=path
+ )
+ if spec is None:
+ raise ImportError(_ERR_MSG.format(name), name=name)
+
+ # RETURN (file, file_path, desc=(suffix, mode, type_))
+ if os.path.splitext(os.path.basename(spec.origin))[0] == '__init__':
+ return None, os.path.dirname(spec.origin), ('', '', PKG_DIRECTORY)
+ for suffix, mode, type_ in get_suffixes():
+ if spec.origin.endswith(suffix):
+ break
+ else:
+ suffix = '.py'
+ mode = 'r'
+ type_ = PY_SOURCE
+
+ encoding = None
+ if 'b' not in mode:
+ with open(spec.origin, 'rb') as file:
+ encoding = tokenize.detect_encoding(file.readline)[0]
+ file = open(spec.origin, mode, encoding=encoding)
+ return file, spec.origin, (suffix, mode, type_)
+
+
+def load_module(name, file, filename, details):
+ """Load a module, given information returned by find_module().
+ The module name must include the full package name, if any."""
+ suffix, mode, type_ = details
+ if type_ == PKG_DIRECTORY:
+ return load_package(name, filename)
+ elif type_ == C_BUILTIN:
+ return init_builtin(name)
+ elif type_ == PY_FROZEN:
+ return init_frozen(name)
+ spec = importlib.util.spec_from_file_location(name, filename)
+ mod = importlib.util.module_from_spec(spec)
+ sys.modules[name] = mod
+ spec.loader.exec_module(mod)
+ return mod
-from imp import find_module, load_module, acquire_lock, release_lock
log = logging.getLogger(__name__)
@@ -105,8 +220,8 @@ class Importer(object):
def _dirname_if_file(self, filename):
# We only take the dirname if we have a path to a non-dir,
- # because taking the dirname of a symlink to a directory does not
- # give the actual directory parent.
+ # because taking the dirname of a symlink to a directory
+ # does not give the actual directory parent.
if os.path.isdir(filename):
return filename
else:
--
2.40.1
diff --git a/unit_tests/mock.py b/unit_tests/mock.py
index 98e7d43..9da9e12 100644
--- a/unit_tests/mock.py
+++ b/unit_tests/mock.py
@@ -1,4 +1,4 @@
-import imp
+import importlib
import sys
from nose.config import Config
from nose import proxy
@@ -7,7 +7,7 @@ from nose.util import odict
def mod(name):
- m = imp.new_module(name)
+ m = type(importlib)(name)
sys.modules[name] = m
return m
diff --git a/unit_tests/support/doctest/noname_wrapper.py b/unit_tests/support/doctest/noname_wrapper.py
index 32c0bc5..016b49c 100644
--- a/unit_tests/support/doctest/noname_wrapper.py
+++ b/unit_tests/support/doctest/noname_wrapper.py
@@ -5,8 +5,8 @@ def __bootstrap__():
dynamic libraries when installing.
"""
import os
- import imp
+ #import importlib
here = os.path.join(os.path.dirname(__file__))
- imp.load_source(__name__, os.path.join(here, 'noname_wrapped.not_py'))
+ # I GIVE UP imp.load_source(__name__, os.path.join(here, 'noname_wrapped.not_py'))
__bootstrap__()
diff --git a/unit_tests/test_doctest_no_name.py b/unit_tests/test_doctest_no_name.py
index a2330a0..225fb35 100644
--- a/unit_tests/test_doctest_no_name.py
+++ b/unit_tests/test_doctest_no_name.py
@@ -20,7 +20,7 @@ class TestDoctestErrorHandling(unittest.TestCase):
def tearDown(self):
sys.path = self._path[:]
- def test_no_name(self):
+ def xxx_no_name(self): # I AM SORRY
p = self.p
mod = __import__('noname_wrapper')
loaded = [ t for t in p.loadTestsFromModule(mod) ]
diff --git a/unit_tests/test_inspector.py b/unit_tests/test_inspector.py
index d5e7542..41cdf52 100644
--- a/unit_tests/test_inspector.py
+++ b/unit_tests/test_inspector.py
@@ -125,7 +125,7 @@ class TestExpander(unittest.TestCase):
print_line +
">> assert 1 % 2 == 0 or 3 % 2 == 0")
- def test_bug_95(self):
+ def xxx_bug_95(self): # I AM SORRY
"""Test that inspector can handle multi-line docstrings"""
try:
"""docstring line 1
diff --git a/unit_tests/test_loader.py b/unit_tests/test_loader.py
index e2dfcc4..aee7681 100644
--- a/unit_tests/test_loader.py
+++ b/unit_tests/test_loader.py
@@ -1,4 +1,4 @@
-import imp
+import importlib
import os
import sys
import unittest
@@ -20,22 +20,22 @@ def mods():
# test loading
#
M = {}
- M['test_module'] = imp.new_module('test_module')
- M['module'] = imp.new_module('module')
- M['package'] = imp.new_module('package')
+ M['test_module'] = type(importlib)('test_module')
+ M['module'] = type(importlib)('module')
+ M['package'] = type(importlib)('package')
M['package'].__path__ = [safepath('/package')]
M['package'].__file__ = safepath('/package/__init__.py')
- M['package.subpackage'] = imp.new_module('package.subpackage')
+ M['package.subpackage'] = type(importlib)('package.subpackage')
M['package'].subpackage = M['package.subpackage']
M['package.subpackage'].__path__ = [safepath('/package/subpackage')]
M['package.subpackage'].__file__ = safepath(
'/package/subpackage/__init__.py')
- M['test_module_with_generators'] = imp.new_module(
+ M['test_module_with_generators'] = type(importlib)(
'test_module_with_generators')
- M['test_module_with_metaclass_tests'] = imp.new_module(
+ M['test_module_with_metaclass_tests'] = type(importlib)(
'test_module_with_metaclass_tests')
- M['test_transplant'] = imp.new_module('test_transplant')
- M['test_module_transplant_generator'] = imp.new_module(
+ M['test_transplant'] = type(importlib)('test_transplant')
+ M['test_module_transplant_generator'] = type(importlib)(
'test_module_transplant_generator')
# a unittest testcase subclass
diff --git a/unit_tests/test_multiprocess_runner.py b/unit_tests/test_multiprocess_runner.py
index 71ee398..2e22c8e 100644
--- a/unit_tests/test_multiprocess_runner.py
+++ b/unit_tests/test_multiprocess_runner.py
@@ -1,5 +1,5 @@
import unittest
-import imp
+import importlib
import sys
from nose.loader import TestLoader
from nose.plugins import multiprocess
@@ -34,7 +34,7 @@ class TestMultiProcessTestRunner(unittest.TestCase):
self.assertEqual(len(tests), 3)
def test_next_batch_with_module_fixt(self):
- mod_with_fixt = imp.new_module('mod_with_fixt')
+ mod_with_fixt = type(importlib)('mod_with_fixt')
sys.modules['mod_with_fixt'] = mod_with_fixt
def teardown():
@@ -54,7 +54,7 @@ class TestMultiProcessTestRunner(unittest.TestCase):
self.assertEqual(len(tests), 1)
def test_next_batch_with_module(self):
- mod_no_fixt = imp.new_module('mod_no_fixt')
+ mod_no_fixt = type(importlib)('mod_no_fixt')
sys.modules['mod_no_fixt'] = mod_no_fixt
class Test2(T):
@@ -90,7 +90,7 @@ class TestMultiProcessTestRunner(unittest.TestCase):
def test_next_batch_can_split_set(self):
- mod_with_fixt2 = imp.new_module('mod_with_fixt2')
+ mod_with_fixt2 = type(importlib)('mod_with_fixt2')
sys.modules['mod_with_fixt2'] = mod_with_fixt2
def setup():
diff --git a/unit_tests/test_suite.py b/unit_tests/test_suite.py
index b6eae20..cdd391d 100644
--- a/unit_tests/test_suite.py
+++ b/unit_tests/test_suite.py
@@ -2,7 +2,7 @@ from nose.config import Config
from nose import case
from nose.suite import LazySuite, ContextSuite, ContextSuiteFactory, \
ContextList
-import imp
+import importlib
import sys
import unittest
from mock import ResultProxyFactory, ResultProxy
@@ -149,9 +149,9 @@ class TestContextSuite(unittest.TestCase):
assert context.was_torndown
def test_context_fixtures_for_ancestors(self):
- top = imp.new_module('top')
- top.bot = imp.new_module('top.bot')
- top.bot.end = imp.new_module('top.bot.end')
+ top = type(importlib)('top')
+ top.bot = type(importlib)('top.bot')
+ top.bot.end = type(importlib)('top.bot.end')
sys.modules['top'] = top
sys.modules['top.bot'] = top.bot
@@ -258,9 +258,9 @@ class TestContextSuite(unittest.TestCase):
class TestContextSuiteFactory(unittest.TestCase):
def test_ancestry(self):
- top = imp.new_module('top')
- top.bot = imp.new_module('top.bot')
- top.bot.end = imp.new_module('top.bot.end')
+ top = type(importlib)('top')
+ top.bot = type(importlib)('top.bot')
+ top.bot.end = type(importlib)('top.bot.end')
sys.modules['top'] = top
sys.modules['top.bot'] = top.bot
diff --git a/unit_tests/test_utils.py b/unit_tests/test_utils.py
index df6a98c..f329cbb 100644
--- a/unit_tests/test_utils.py
+++ b/unit_tests/test_utils.py
@@ -154,7 +154,7 @@ class TestUtils(unittest.TestCase):
def test_try_run(self):
try_run = util.try_run
- import imp
+ import importlib
def bar():
pass
@@ -174,7 +174,7 @@ class TestUtils(unittest.TestCase):
def method(self):
pass
- foo = imp.new_module('foo')
+ foo = type(importlib)('foo')
foo.bar = bar
foo.bar_m = bar_m
foo.i_bar = Bar()

View File

@ -1,33 +0,0 @@
diff -up nose-1.3.7/functional_tests/test_load_tests_from_test_case.py.py35 nose-1.3.7/functional_tests/test_load_tests_from_test_case.py
--- nose-1.3.7/functional_tests/test_load_tests_from_test_case.py.py35 2012-09-29 02:18:54.000000000 -0600
+++ nose-1.3.7/functional_tests/test_load_tests_from_test_case.py 2016-11-15 13:42:27.946707472 -0700
@@ -29,6 +29,7 @@ class NoFixturePlug(Plugin):
pass
def tearDown(self):
pass
+ Derived.__qualname__ = Derived.__name__
# must use nose loader here because the default loader in 2.3
# won't load tests from base classes
l = loader.TestLoader()
diff -up nose-1.3.7/nose/util.py.py35 nose-1.3.7/nose/util.py
--- nose-1.3.7/nose/util.py.py35 2015-04-04 02:52:52.000000000 -0600
+++ nose-1.3.7/nose/util.py 2016-11-15 13:42:27.946707472 -0700
@@ -643,6 +643,7 @@ def transplant_class(cls, module):
pass
C.__module__ = module
C.__name__ = cls.__name__
+ C.__qualname__ = cls.__name__
return C
diff -up nose-1.3.7/unit_tests/test_xunit.py.py35 nose-1.3.7/unit_tests/test_xunit.py
--- nose-1.3.7/unit_tests/test_xunit.py.py35 2015-04-04 02:52:52.000000000 -0600
+++ nose-1.3.7/unit_tests/test_xunit.py 2016-11-15 13:42:27.946707472 -0700
@@ -16,6 +16,7 @@ def mktest():
class TC(unittest.TestCase):
def runTest(self):
pass
+ TC.__qualname__ = TC.__name__
test = TC()
return test

View File

@ -1,69 +0,0 @@
From acf7c4e073030a69712172b133076101e2b7d81f Mon Sep 17 00:00:00 2001
From: Tomas Orsava <torsava@redhat.com>
Date: Mon, 12 Dec 2016 12:09:47 +0100
Subject: [PATCH] Patch for compatibility with Python 3.6
Python 3.6 returns a ModuleNotFoundError instead of the previous ImportError.
---
functional_tests/test_loader.py | 2 +-
functional_tests/test_withid_failures.rst | 12 ++++++------
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/functional_tests/test_loader.py b/functional_tests/test_loader.py
index 81aaa7b..3f82122 100644
--- a/functional_tests/test_loader.py
+++ b/functional_tests/test_loader.py
@@ -369,7 +369,7 @@ class TestNoseTestLoader(unittest.TestCase):
assert res.errors, "Expected errors but got none"
assert not res.failures, res.failures
err = res.errors[0][0].test.exc_class
- assert err is ImportError, \
+ assert issubclass(err, ImportError), \
"Expected import error, got %s" % err
def test_load_nonsense_name(self):
diff --git a/functional_tests/test_withid_failures.rst b/functional_tests/test_withid_failures.rst
index cf09d4f..cb20886 100644
--- a/functional_tests/test_withid_failures.rst
+++ b/functional_tests/test_withid_failures.rst
@@ -7,16 +7,16 @@
>>> support = os.path.join(os.path.dirname(__file__), 'support', 'id_fails')
>>> argv = [__file__, '-v', '--with-id', '--id-file', idfile, support]
>>> run(argv=argv, plugins=[TestId()]) # doctest: +ELLIPSIS
- #1 Failure: ImportError (No module ...apackagethatdoesntexist...) ... ERROR
+ #1 Failure: ... (No module ...apackagethatdoesntexist...) ... ERROR
#2 test_b.test ... ok
#3 test_b.test_fail ... FAIL
<BLANKLINE>
======================================================================
- ERROR: Failure: ImportError (No module ...apackagethatdoesntexist...)
+ ERROR: Failure: ... (No module ...apackagethatdoesntexist...)
----------------------------------------------------------------------
Traceback (most recent call last):
...
- ImportError: No module ...apackagethatdoesntexist...
+ ...: No module ...apackagethatdoesntexist...
<BLANKLINE>
======================================================================
FAIL: test_b.test_fail
@@ -35,14 +35,14 @@ Addressing failures works (sometimes).
>>> argv.append('1')
>>> _junk = sys.modules.pop('test_a', None) # 2.3 requires
>>> run(argv=argv, plugins=[TestId()]) #doctest: +ELLIPSIS
- #1 Failure: ImportError (No module ...apackagethatdoesntexist...) ... ERROR
+ #1 Failure: ... (No module ...apackagethatdoesntexist...) ... ERROR
<BLANKLINE>
======================================================================
- ERROR: Failure: ImportError (No module ...apackagethatdoesntexist...)
+ ERROR: Failure: ... (No module ...apackagethatdoesntexist...)
----------------------------------------------------------------------
Traceback (most recent call last):
...
- ImportError: No module ...apackagethatdoesntexist...
+ ...: No module ...apackagethatdoesntexist...
<BLANKLINE>
----------------------------------------------------------------------
Ran 1 test in ...s
--
2.11.0

View File

@ -1,62 +0,0 @@
diff --git a/nose/config.py b/nose/config.py
index 125eb55..ad01e61 100644
--- a/nose/config.py
+++ b/nose/config.py
@@ -139,7 +139,7 @@ class ConfiguredDefaultsOptionParser(object):
class Config(object):
- """nose configuration.
+ r"""nose configuration.
Instances of Config are used throughout nose to configure
behavior, including plugin lists. Here are the default values for
diff --git a/nose/ext/dtcompat.py b/nose/ext/dtcompat.py
index 332cf08..b5698c5 100644
--- a/nose/ext/dtcompat.py
+++ b/nose/ext/dtcompat.py
@@ -683,7 +683,7 @@ class DocTestParser:
# This regular expression finds the indentation of every non-blank
# line in a string.
- _INDENT_RE = re.compile('^([ ]*)(?=\S)', re.MULTILINE)
+ _INDENT_RE = re.compile(r'^([ ]*)(?=\S)', re.MULTILINE)
def _min_indent(self, s):
"Return the minimum indentation of any non-blank line in `s`"
@@ -1018,7 +1018,7 @@ class DocTestFinder:
if lineno is not None:
if source_lines is None:
return lineno+1
- pat = re.compile('(^|.*:)\s*\w*("|\')')
+ pat = re.compile(r'(^|.*:)\s*\w*("|\')')
for lineno in range(lineno, len(source_lines)):
if pat.match(source_lines[lineno]):
return lineno
@@ -1427,11 +1427,11 @@ class OutputChecker:
# blank line, unless the DONT_ACCEPT_BLANKLINE flag is used.
if not (optionflags & DONT_ACCEPT_BLANKLINE):
# Replace <BLANKLINE> in want with a blank line.
- want = re.sub('(?m)^%s\s*?$' % re.escape(BLANKLINE_MARKER),
+ want = re.sub(r'(?m)^%s\s*?$' % re.escape(BLANKLINE_MARKER),
'', want)
# If a line in got contains only spaces, then remove the
# spaces.
- got = re.sub('(?m)^\s*?$', '', got)
+ got = re.sub(r'(?m)^\s*?$', '', got)
if got == want:
return True
diff --git a/nose/inspector.py b/nose/inspector.py
index a6c4a3e..ad22c0c 100644
--- a/nose/inspector.py
+++ b/nose/inspector.py
@@ -107,7 +107,7 @@ def tbsource(tb, context=6):
def find_inspectable_lines(lines, pos):
- """Find lines in home that are inspectable.
+ r"""Find lines in home that are inspectable.
Walk back from the err line up to 3 lines, but don't walk back over
changes in indent level.

View File

@ -1,20 +0,0 @@
diff -up nose-1.3.7/nose/plugins/doctests.py.readunicode nose-1.3.7/nose/plugins/doctests.py
--- nose-1.3.7/nose/plugins/doctests.py.readunicode 2015-04-04 02:52:52.000000000 -0600
+++ nose-1.3.7/nose/plugins/doctests.py 2016-11-15 14:24:54.298239018 -0700
@@ -49,6 +49,7 @@ test.
"""
from __future__ import generators
+import codecs
import logging
import os
import sys
@@ -259,7 +260,7 @@ class Doctest(Plugin):
"""
if self.extension and anyp(filename.endswith, self.extension):
name = os.path.basename(filename)
- dh = open(filename)
+ dh = codecs.open(filename, encoding='utf-8')
try:
doc = dh.read()
finally:

View File

@ -1,128 +0,0 @@
diff -up nose-1.3.7/AUTHORS.unicode nose-1.3.7/AUTHORS
diff -up nose-1.3.7/CHANGELOG.unicode nose-1.3.7/CHANGELOG
diff -up nose-1.3.7/nose/plugins/capture.py.unicode nose-1.3.7/nose/plugins/capture.py
--- nose-1.3.7/nose/plugins/capture.py.unicode 2015-04-04 02:52:52.000000000 -0600
+++ nose-1.3.7/nose/plugins/capture.py 2016-11-15 13:58:18.713025335 -0700
@@ -12,6 +12,7 @@ the options ``-s`` or ``--nocapture``.
import logging
import os
import sys
+import traceback
from nose.plugins.base import Plugin
from nose.pyversion import exc_to_unicode, force_unicode
from nose.util import ln
@@ -71,26 +72,56 @@ class Capture(Plugin):
def formatError(self, test, err):
"""Add captured output to error report.
"""
- test.capturedOutput = output = self.buffer
+ test.capturedOutput = output = ''
+ output_exc_info = None
+ try:
+ test.capturedOutput = output = self.buffer
+ except UnicodeError:
+ # python2's StringIO.StringIO [1] class has this warning:
+ #
+ # The StringIO object can accept either Unicode or 8-bit strings,
+ # but mixing the two may take some care. If both are used, 8-bit
+ # strings that cannot be interpreted as 7-bit ASCII (that use the
+ # 8th bit) will cause a UnicodeError to be raised when getvalue()
+ # is called.
+ #
+ # This exception handler is a protection against issue #816 [2].
+ # Capturing the exception info allows us to display it back to the
+ # user.
+ #
+ # [1] <https://github.com/python/cpython/blob/2.7/Lib/StringIO.py#L258>
+ # [2] <https://github.com/nose-devs/nose/issues/816>
+ output_exc_info = sys.exc_info()
self._buf = None
- if not output:
+ if (not output) and (not output_exc_info):
# Don't return None as that will prevent other
# formatters from formatting and remove earlier formatters
# formats, instead return the err we got
return err
ec, ev, tb = err
- return (ec, self.addCaptureToErr(ev, output), tb)
+ return (ec, self.addCaptureToErr(ev, output, output_exc_info=output_exc_info), tb)
def formatFailure(self, test, err):
"""Add captured output to failure report.
"""
return self.formatError(test, err)
- def addCaptureToErr(self, ev, output):
+ def addCaptureToErr(self, ev, output, output_exc_info=None):
+ # If given, output_exc_info should be a 3-tuple from sys.exc_info(),
+ # from an exception raised while trying to get the captured output.
ev = exc_to_unicode(ev)
output = force_unicode(output)
- return u'\n'.join([ev, ln(u'>> begin captured stdout <<'),
- output, ln(u'>> end captured stdout <<')])
+ error_text = [ev, ln(u'>> begin captured stdout <<'),
+ output, ln(u'>> end captured stdout <<')]
+ if output_exc_info:
+ error_text.extend([u'OUTPUT ERROR: Could not get captured output.',
+ # <https://github.com/python/cpython/blob/2.7/Lib/StringIO.py#L258>
+ # <https://github.com/nose-devs/nose/issues/816>
+ u"The test might've printed both 'unicode' strings and non-ASCII 8-bit 'str' strings.",
+ ln(u'>> begin captured stdout exception traceback <<'),
+ u''.join(traceback.format_exception(*output_exc_info)),
+ ln(u'>> end captured stdout exception traceback <<')])
+ return u'\n'.join(error_text)
def start(self):
self.stdout.append(sys.stdout)
diff -up nose-1.3.7/unit_tests/test_capture_plugin.py.unicode nose-1.3.7/unit_tests/test_capture_plugin.py
--- nose-1.3.7/unit_tests/test_capture_plugin.py.unicode 2012-09-29 02:18:54.000000000 -0600
+++ nose-1.3.7/unit_tests/test_capture_plugin.py 2016-11-15 13:58:18.714025330 -0700
@@ -4,6 +4,12 @@ import unittest
from optparse import OptionParser
from nose.config import Config
from nose.plugins.capture import Capture
+from nose.pyversion import force_unicode
+
+if sys.version_info[0] == 2:
+ py2 = True
+else:
+ py2 = False
class TestCapturePlugin(unittest.TestCase):
@@ -62,6 +68,35 @@ class TestCapturePlugin(unittest.TestCas
c.end()
self.assertEqual(c.buffer, "test 日本\n")
+ def test_does_not_crash_with_mixed_unicode_and_nonascii_str(self):
+ class Dummy:
+ pass
+ d = Dummy()
+ c = Capture()
+ c.start()
+ printed_nonascii_str = force_unicode("test 日本").encode('utf-8')
+ printed_unicode = force_unicode("Hello")
+ print printed_nonascii_str
+ print printed_unicode
+ try:
+ raise Exception("boom")
+ except:
+ err = sys.exc_info()
+ formatted = c.formatError(d, err)
+ _, fev, _ = formatted
+
+ if py2:
+ for string in [force_unicode(printed_nonascii_str, encoding='utf-8'), printed_unicode]:
+ assert string not in fev, "Output unexpectedly found in error message"
+ assert d.capturedOutput == '', "capturedOutput unexpectedly non-empty"
+ assert "OUTPUT ERROR" in fev
+ assert "captured stdout exception traceback" in fev
+ assert "UnicodeDecodeError" in fev
+ else:
+ for string in [repr(printed_nonascii_str), printed_unicode]:
+ assert string in fev, "Output not found in error message"
+ assert string in d.capturedOutput, "Output not attached to test"
+
def test_format_error(self):
class Dummy:
pass

View File

@ -1,403 +0,0 @@
%global modname nose
Name: python-%{modname}
Version: 1.3.7
Release: 43%{?dist}
BuildArch: noarch
License: LGPLv2+ and Public Domain
Summary: Deprecated test runner for Python
URL: https://nose.readthedocs.org/en/latest/
Source0: http://pypi.python.org/packages/source/n/nose/nose-%{version}.tar.gz
# Make compatible with coverage 4.1
# https://github.com/nose-devs/nose/pull/1004
Patch0: python-nose-coverage4.patch
# Fix python 3.5 compat
# https://github.com/nose-devs/nose/pull/983
Patch1: python-nose-py35.patch
# Fix UnicodeDecodeError with captured output
# https://github.com/nose-devs/nose/pull/988
Patch2: python-nose-unicode.patch
# Allow docutils to read utf-8 source
Patch3: python-nose-readunicode.patch
# Fix Python 3.6 compatibility
# Python now returns ModuleNotFoundError instead of the previous ImportError
# https://github.com/nose-devs/nose/pull/1029
Patch4: python-nose-py36.patch
# Remove a SyntaxWarning (other projects may treat it as error)
Patch5: python-nose-py38.patch
# Remove use_2to3 from setuptools.setup() call
# We call the command line tool in %%prep instead
# https://fedoraproject.org/wiki/Changes/Setuptools_58+
Patch6: python-nose-no-use_2to3.patch
# Import unittest.TextTestResult instead of removed unittest._TextTestResult
# Use ConfigParser.read_file() instead of .readfp()
# Adapt test_xunit to tracebacks/exceptions with ^^^^^^^^ lines
# Migrate from removed inspect.getargspec() to inspect.getfullargspec()
Patch7: python-nose-py311.patch
# Adapt doctest to new tracebacks/exceptions on Python 3.11+
Patch8: python-nose-py311-doctest.patch
# Python 3.12 support from mdmintz/pynose
# https://github.com/mdmintz/pynose/commit/b5247565df (rebased)
# changes in tests hacked on top
Patch9: python-nose-py312.patch
# Python 3.13 removes 2to3, so we have a patch instead
Patch10: python-nose-2to3.patch
BuildRequires: dos2unix
%global _description %{expand:
A deprecated test runner for Python.
See https://fedoraproject.org/wiki/Changes/DeprecateNose}
%description %_description
%package -n python3-%{modname}
Summary: %{summary}
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-coverage >= 3.4-1
Requires: python3-setuptools
%{?python_provide:%python_provide python3-%{modname}}
Conflicts: python-%{modname} < %{version}-%{release}
Obsoletes: python-%{modname}-docs < 1.3.7-30
# This package is deprecated, no new packages in Fedora can depend on it
# https://fedoraproject.org/wiki/Changes/DeprecateNose
# Contact the change owners for help migrating to pytest
Provides: deprecated()
%description -n python3-%{modname} %_description
%prep
%autosetup -p1 -n %{modname}-%{version}
dos2unix examples/attrib_plugin.py
%build
%py3_build
%install
mkdir -p %{buildroot}%{_mandir}/man1
%py3_install
mv %{buildroot}%{_bindir}/nosetests{,-%{python3_version}}
ln -sf nosetests-%{python3_version} %{buildroot}%{_bindir}/nosetests-3
mv %{buildroot}%{_prefix}/man/man1/nosetests.1 %{buildroot}%{_mandir}/man1/nosetests-%{python3_version}.1
ln -sf nosetests-%{python3_version}.1 %{buildroot}%{_mandir}/man1/nosetests-3.1
ln -sf nosetests-3 %{buildroot}%{_bindir}/nosetests
ln -sf nosetests-3.1 %{buildroot}%{_mandir}/man1/nosetests.1
%check
%{__python3} setup.py build_tests
%{__python3} selftest.py
%files -n python3-%{modname}
%license lgpl.txt
%doc AUTHORS CHANGELOG NEWS README.txt
%{_bindir}/nosetests
%{_bindir}/nosetests-3
%{_bindir}/nosetests-%{python3_version}
%{_mandir}/man1/nosetests.1*
%{_mandir}/man1/nosetests-3.1*
%{_mandir}/man1/nosetests-%{python3_version}.1*
%{python3_sitelib}/nose-*.egg-info/
%{python3_sitelib}/nose/
%changelog
* Wed Oct 18 2023 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-43
- Don't run 2to3 during package build
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-42
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 1.3.7-41
- Rebuilt for Python 3.12
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-40
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-39
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 1.3.7-38
- Rebuilt for Python 3.11
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-37
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Nov 01 2021 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-36
- Fix build with setuptools 58+
- Fixes rhbz#2018972
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-35
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Wed Jun 02 2021 Python Maint <python-maint@redhat.com> - 1.3.7-34
- Rebuilt for Python 3.10
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-33
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-32
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri May 22 2020 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-31
- Rebuilt for Python 3.9
* Fri Jan 31 2020 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-30
- Deprecate the package
https://fedoraproject.org/wiki/Changes/DeprecateNose
- Drop the docs subpackage
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-29
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Nov 15 2019 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-28
- Subpackage python2-nose has been removed
See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal
* Thu Oct 31 2019 Petr Viktorin <pviktori@redhat.com> - 1.3.7-27
- Remove build dependency on python2-coverage
Don't test coverage plugin on Python 2
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-26
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Thu Aug 15 2019 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-25
- Rebuilt for Python 3.8
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-24
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Mon Jul 22 2019 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-23
- Make /usr/bin/nosetests Python 3
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-22
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-21
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu Jun 14 2018 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-20
- Rebuilt for Python 3.7
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Tue Nov 07 2017 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.3.7-18
- Use better Obsoletes for platform-python
* Sat Nov 04 2017 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1.3.7-17
- Remove platform-python subpackage
- Cleanup spec
* Fri Sep 29 2017 Troy Dawson <tdawson@redhat.com> - 1.3.7-16
- Cleanup spec file conditionals
* Thu Aug 10 2017 Miro Hrončok <mhroncok@redhat.com> - 1.3.7-15
- Add platform-python subpackage
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.7-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Mon Dec 12 2016 Tomas Orsava <torsava@redhat.com> - 1.3.7-12
- Patched to fix compatibility with Python 3.6
* Mon Dec 05 2016 Randy Barlow <bowlofeggs@fedoraproject.org> - 1.3.7-11
- Provide nosetests-3 (#1289820).
- Rename python-nose to python2-nose and use Python provides macro.
- Include the license with the -docs subpackage.
- Use symlinks to provide man pages for all the Python version variants of /usr/bin/nosetests.
- The -docs subpackage no longer requires python-nose since that doesn't make sense.
* Tue Nov 15 2016 Orion Poplawski <orion@cora.nwra.com> 1.3.7-10
- Add upstream patch to fix python 3.5 compat
- Add patch to allow docutils to read unicode source
- Update spec
* Wed Nov 9 2016 Orion Poplawski <orion@cora.nwra.com> 1.3.7-9
- Add patch to fix build with coverage 4.1
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.7-8
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
* Tue Feb 2 2016 Orion Poplawski <orion@cora.nwra.com> 1.3.7-7
- Fix URL
* Thu Sep 24 2015 Robert Kuska <rkuska@redhat.com> 1.3.7-6
- Rebuilt for Python3.5 rebuild with disabled tests under python3
* Sun Aug 09 2015 Kevin Fenzi <kevin@scrye.com> 1.3.7-5
- Add conditional for python-sphinx buildrequires when with_docs is not set.
- Fixes bug #1251700
* Fri Jul 24 2015 Kevin Fenzi <kevin@scrye.com> 1.3.7-4
- Version provides correctly for python2-nose.
* Fri Jul 17 2015 Kevin Fenzi <kevin@scrye.com> 1.3.7-3
- Add provides for python2-nose. Fixes bug #1241670
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.7-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Wed Jun 03 2015 Kevin Fenzi <kevin@scrye.com> 1.3.7-1
- Update to 1.3.7 (#1227345)
* Sat Apr 04 2015 Ralph Bean <rbean@redhat.com> - 1.3.6-1
- new version
* Wed Aug 27 2014 Luke Macken <lmacken@redhat.com> - 1.3.4-1
- Update to 1.3.4 (#1094718)
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Mon May 19 2014 Bohuslav Kabrda <bkabrda@redhat.com> - 1.3.2-2
- Add patch for issue https://github.com/nose-devs/nose/pull/811,
which makes tests of python-billiard and python-falcon fail with Python 3.4
* Sat May 03 2014 Orion Poplawski <orion@cora.nwra.com> - 1.3.2-1
- Update to 1.3.2 for Python 3.4 suport
* Fri May 02 2014 Orion Poplawski <orion@cora.nwra.com> - 1.3.1-2
- Rebuild for Python 3.4
* Fri Mar 14 2014 Luke Macken <lmacken@redhat.com> - 1.3.1-1
- Update to 1.3.1 (#1074971)
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Tue Apr 9 2013 Toshio Kuratomi <toshio@fedoraproject.org> - 1.3.0-1
- Update to 1.3.0 upstream with python-3.3 fixes
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.2.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Wed Sep 12 2012 Toshio Kuratomi <toshio@fedoraproject.org> - 1.2.1-1
- New upsream 1.2.1 that just bumps the version properly
* Mon Sep 10 2012 Toshio Kuratomi <toshio@fedoraproject.org> - 1.2.0-1
- Update to nose-1.2.0.
- Two less python3 test failures than 1.1.2
* Sat Aug 4 2012 David Malcolm <dmalcolm@redhat.com> - 1.1.2-5
- rebuild for https://fedoraproject.org/wiki/Features/Python_3.3
- disable selftests that fail under 3.3
* Fri Aug 3 2012 David Malcolm <dmalcolm@redhat.com> - 1.1.2-4
- remove rhel logic from with_python3 conditional
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.1.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.1.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Mon Aug 1 2011 Toshio Kuratomi <toshio@fedoraproject.org> - 1.1.2-1
- Upstream bugfix release
* Wed Jul 27 2011 Toshio Kuratomi <toshio@fedoraproject.org> - 1.1.1-1
- Upstream bugfix release
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Sun Dec 26 2010 Toshio Kuratomi <toshio@fedoraproject.org> - 1.0.0-1
- Update to 1.0.0
- Create the docs subpackage for text docs even if we don't create the html docs.
- Make python3 subpackage
* Tue Dec 7 2010 Toshio Kuratomi <toshio@fedoraproject.org> - 0.11.4-2
- Fix FTBFS with newer coverage
* Thu Oct 21 2010 Luke Macken <lmacken@redhat.com> - 0.11.4-1
- Update to 0.11.4 (#3630722)
* Wed Jul 21 2010 David Malcolm <dmalcolm@redhat.com> - 0.11.3-5
- add support for building without docs, to avoid a circular build-time
dependency between this and python-sphinx; disable docs subpackage for now
- add (apparently) missing BR on python-coverage (appears to be needed
for %%check)
- cherrypick upstream compatibility fixes for 2.7
* Wed Jul 21 2010 David Malcolm <dmalcolm@redhat.com> - 0.11.3-4
- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
* Thu May 20 2010 Luke Macken <lmacken@redhat.com> - 0.11.3-3
- Update URL to http://code.google.com/p/python-nose/
- Align description to reflect that in setup.py
- Create a docs subpackage containing HTML & reST documentation
- Thanks to Gareth Armstrong at HP for the patch
* Thu May 06 2010 Luke Macken <lmacken@redhat.com> - 0.11.3-2
- Don't hardcode the python version
* Thu May 06 2010 Luke Macken <lmacken@redhat.com> - 0.11.3-1
- Update to 0.11.3
- Enable the self tests
* Mon Oct 05 2009 Luke Macken <lmacken@redhat.com> - 0.11.1-2
- Include the new nosetests-2.6 script as well
* Mon Oct 05 2009 Luke Macken <lmacken@redhat.com> - 0.11.1-1
- Update to 0.11.1
* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.10.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Thu Feb 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.10.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 0.10.4-1
- Update to 0.10.4 to fix 2.6 issues
* Sat Nov 29 2008 Ignacio Vazquez-Abrams <ivazqueznet+rpm@gmail.com> - 0.10.3-2
- Rebuild for Python 2.6
* Sat Aug 02 2008 Luke Macken <lmacken@redhat.com> 0.10.3-1
- Update to 0.10.3
* Thu Feb 28 2008 Luke Macken <lmacken@redhat.com> 0.10.1-1
- Update to 0.10.1
* Mon Dec 3 2007 Luke Macken <lmacken@redhat.com> 0.10.0-2
- Add python-setuptools to Requires (Bug #408491)
* Tue Nov 27 2007 Luke Macken <lmacken@redhat.com> 0.10.0-1
- 0.10.0
* Sun Sep 2 2007 Luke Macken <lmacken@redhat.com> 0.10.0-0.3.b1
- Update for python-setuptools changes in rawhide
* Tue Aug 21 2007 Luke Macken <lmacken@redhat.com> 0.10.0-0.2.b1
- 0.10.0b1
- Update license tag to LGPLv2
* Wed Jun 20 2007 Luke Macken <lmacken@redhat.com> 0.10.0-0.1.a2
- 0.10.0a2
* Sat Jun 2 2007 Luke Macken <lmacken@redhat.com> 0.9.3-1
- Latest upstream release
- Remove python-nose-0.9.2-mandir.patch
* Sat Mar 3 2007 Luke Macken <lmacken@redhat.com> 0.9.2-1
- Add nosetests(1) manpage, and python-nose-0.9.2-mandir.patch to put it in
the correct location.
- 0.9.2
* Sat Dec 9 2006 Luke Macken <lmacken@redhat.com> 0.9.1-2
- Rebuild for python 2.5
* Fri Nov 24 2006 Luke Macken <lmacken@redhat.com> 0.9.1-1
- 0.9.1
* Fri Sep 8 2006 Luke Macken <lmacken@redhat.com> 0.9.0-1
- 0.9.0
* Wed Apr 19 2006 Ignacio Vazquez-Abrams <ivazquez@ivazquez.net> 0.8.7.2-1
- Initial RPM release

View File

@ -1 +0,0 @@
4d3ad0ff07b61373d2cefc89c5d0b20b nose-1.3.7.tar.gz