diff --git a/pyutilib/component/loader/tests/eggs1/Package1-0.1-py2.4.egg b/pyutilib/component/loader/tests/eggs1/Package1-0.1-py2.4.egg deleted file mode 100644 index 9edd686c..00000000 Binary files a/pyutilib/component/loader/tests/eggs1/Package1-0.1-py2.4.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs1/Package1-0.1-py2.5.egg b/pyutilib/component/loader/tests/eggs1/Package1-0.1-py2.5.egg deleted file mode 100644 index 1fd67b76..00000000 Binary files a/pyutilib/component/loader/tests/eggs1/Package1-0.1-py2.5.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs1/Package1-0.1-py3.7.egg b/pyutilib/component/loader/tests/eggs1/Package1-0.1-py3.7.egg new file mode 100644 index 00000000..a17b3e0c Binary files /dev/null and b/pyutilib/component/loader/tests/eggs1/Package1-0.1-py3.7.egg differ diff --git a/pyutilib/component/loader/tests/eggs1/Package2-0.1-py2.4.egg b/pyutilib/component/loader/tests/eggs1/Package2-0.1-py2.4.egg deleted file mode 100644 index 5eddb5e7..00000000 Binary files a/pyutilib/component/loader/tests/eggs1/Package2-0.1-py2.4.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs1/Package2-0.1-py2.5.egg b/pyutilib/component/loader/tests/eggs1/Package2-0.1-py2.5.egg deleted file mode 100644 index 9c2a74b1..00000000 Binary files a/pyutilib/component/loader/tests/eggs1/Package2-0.1-py2.5.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs1/Package2-0.1-py3.7.egg b/pyutilib/component/loader/tests/eggs1/Package2-0.1-py3.7.egg new file mode 100644 index 00000000..3d033ed8 Binary files /dev/null and b/pyutilib/component/loader/tests/eggs1/Package2-0.1-py3.7.egg differ diff --git a/pyutilib/component/loader/tests/eggs2/Package3-0.1-py2.4.egg b/pyutilib/component/loader/tests/eggs2/Package3-0.1-py2.4.egg deleted file mode 100644 index f97919b1..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package3-0.1-py2.4.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package3-0.1-py2.5.egg b/pyutilib/component/loader/tests/eggs2/Package3-0.1-py2.5.egg deleted file mode 100644 index c453f96b..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package3-0.1-py2.5.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package3-0.1-py3.7.egg b/pyutilib/component/loader/tests/eggs2/Package3-0.1-py3.7.egg new file mode 100644 index 00000000..e53832ef Binary files /dev/null and b/pyutilib/component/loader/tests/eggs2/Package3-0.1-py3.7.egg differ diff --git a/pyutilib/component/loader/tests/eggs2/Package4-0.1-py2.4.egg b/pyutilib/component/loader/tests/eggs2/Package4-0.1-py2.4.egg deleted file mode 100644 index e889080f..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package4-0.1-py2.4.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package4-0.1-py2.5.egg b/pyutilib/component/loader/tests/eggs2/Package4-0.1-py2.5.egg deleted file mode 100644 index e2012b9f..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package4-0.1-py2.5.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package4-0.1-py3.7.egg b/pyutilib/component/loader/tests/eggs2/Package4-0.1-py3.7.egg new file mode 100644 index 00000000..e294ef41 Binary files /dev/null and b/pyutilib/component/loader/tests/eggs2/Package4-0.1-py3.7.egg differ diff --git a/pyutilib/component/loader/tests/eggs2/Package5-0.1-py2.4.egg b/pyutilib/component/loader/tests/eggs2/Package5-0.1-py2.4.egg deleted file mode 100644 index 04d676d4..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package5-0.1-py2.4.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package5-0.1-py2.5.egg b/pyutilib/component/loader/tests/eggs2/Package5-0.1-py2.5.egg deleted file mode 100644 index 8b9c9686..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package5-0.1-py2.5.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package5-0.1-py3.7.egg b/pyutilib/component/loader/tests/eggs2/Package5-0.1-py3.7.egg new file mode 100644 index 00000000..d5e76abf Binary files /dev/null and b/pyutilib/component/loader/tests/eggs2/Package5-0.1-py3.7.egg differ diff --git a/pyutilib/component/loader/tests/eggs2/Package6-0.1-py2.4.egg b/pyutilib/component/loader/tests/eggs2/Package6-0.1-py2.4.egg deleted file mode 100644 index e62d153c..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package6-0.1-py2.4.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package6-0.1-py2.5.egg b/pyutilib/component/loader/tests/eggs2/Package6-0.1-py2.5.egg deleted file mode 100644 index e8268a4b..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package6-0.1-py2.5.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package6-0.1-py3.7.egg b/pyutilib/component/loader/tests/eggs2/Package6-0.1-py3.7.egg new file mode 100644 index 00000000..7ee3049c Binary files /dev/null and b/pyutilib/component/loader/tests/eggs2/Package6-0.1-py3.7.egg differ diff --git a/pyutilib/component/loader/tests/eggs2/Package7-0.1-py2.4.egg b/pyutilib/component/loader/tests/eggs2/Package7-0.1-py2.4.egg deleted file mode 100644 index 04f93ef2..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package7-0.1-py2.4.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package7-0.1-py2.5.egg b/pyutilib/component/loader/tests/eggs2/Package7-0.1-py2.5.egg deleted file mode 100644 index 81bf318c..00000000 Binary files a/pyutilib/component/loader/tests/eggs2/Package7-0.1-py2.5.egg and /dev/null differ diff --git a/pyutilib/component/loader/tests/eggs2/Package7-0.1-py3.7.egg b/pyutilib/component/loader/tests/eggs2/Package7-0.1-py3.7.egg new file mode 100644 index 00000000..4ac0b6af Binary files /dev/null and b/pyutilib/component/loader/tests/eggs2/Package7-0.1-py3.7.egg differ diff --git a/pyutilib/component/loader/tests/eggsrc/update b/pyutilib/component/loader/tests/eggsrc/update new file mode 100755 index 00000000..73ce4977 --- /dev/null +++ b/pyutilib/component/loader/tests/eggsrc/update @@ -0,0 +1,27 @@ +#!/bin/sh + +cd pkg1 +python setup.py sdist bdist_egg + +cd ../pkg2 +python setup.py sdist bdist_egg + +cd ../pkg3 +python setup.py sdist bdist_egg + +cd ../pkg4 +python setup.py sdist bdist_egg + +cd ../pkg5 +python setup.py sdist bdist_egg + +cd ../pkg6 +python setup.py sdist bdist_egg + +cd ../pkg7 +python setup.py sdist bdist_egg + +cd .. +cp pkg[1-2]/dist/P*egg ../eggs1 +cp pkg[3-7]/dist/P*egg ../eggs2 + diff --git a/pyutilib/component/loader/tests/test_egg.py b/pyutilib/component/loader/tests/test_egg.py index 58240933..c8674d06 100644 --- a/pyutilib/component/loader/tests/test_egg.py +++ b/pyutilib/component/loader/tests/test_egg.py @@ -22,10 +22,14 @@ yaml_available = False +@unittest.skipIf(not pkg_resources_avail, "Cannot import 'pkg_resources'") class Test(pyutilib.th.TestCase): def test_egg1(self): - """Load an egg for the 'project1' project. Eggs are loaded in the 'eggs1' directory, but only the Project1 stuff is actually imported.""" + # + # Load an egg for the 'project1' project. + # Eggs are loaded in the 'eggs1' directory, but only the Project1 stuff is actually imported. + # pyutilib.subprocess.run( [sys.executable, currdir + os.sep + "egg1.py", currdir, "json"]) self.assertMatchesJsonBaseline(currdir + "egg1.out", @@ -37,7 +41,11 @@ def test_egg1(self): currdir + "egg1.yml") def test_egg2(self): - """Load an egg for the 'project1' project. Eggs are loaded in the 'eggs1' and 'eggs2' directories, but only the Project1 and Project 3 stuff is actually imported.""" + # + # Load an egg for the 'project1' project. + # Eggs are loaded in the 'eggs1' and 'eggs2' directories, but only the + # Project1 and Project 3 stuff is actually imported. + # pyutilib.subprocess.run( [sys.executable, currdir + os.sep + "egg2.py", currdir, "json"]) self.assertMatchesJsonBaseline(currdir + "egg2.out", @@ -48,9 +56,5 @@ def test_egg2(self): self.assertMatchesYamlBaseline(currdir + "egg2.out", currdir + "egg2.yml") -# Apply class decorator explicitly, which works in Python 2.5 -Test = unittest.skipIf(not pkg_resources_avail, - "Cannot import 'pkg_resources'")(Test) - if __name__ == "__main__": unittest.main() diff --git a/pyutilib/misc/tests/test_config.py b/pyutilib/misc/tests/test_config.py index e71d6b96..2d383a94 100644 --- a/pyutilib/misc/tests/test_config.py +++ b/pyutilib/misc/tests/test_config.py @@ -528,7 +528,7 @@ def test_parseDisplayAndValue_default(self): self.skipTest("Cannot execute test because PyYAML is not available") test = _display(self.config) sys.stdout.write(test) - self.assertEqual(yaml.load(test), self.config.value()) + self.assertEqual(yaml.load(test, Loader=yaml.FullLoader), self.config.value()) def test_parseDisplayAndValue_list(self): if not using_yaml: @@ -537,14 +537,14 @@ def test_parseDisplayAndValue_list(self): self.config['scenarios'].append({'merlion': True, 'detection': []}) test = _display(self.config) sys.stdout.write(test) - self.assertEqual(yaml.load(test), self.config.value()) + self.assertEqual(yaml.load(test, Loader=yaml.FullLoader), self.config.value()) def test_parseDisplay_userdata_default(self): if not using_yaml: self.skipTest("Cannot execute test because PyYAML is not available") test = _display(self.config, 'userdata') sys.stdout.write(test) - self.assertEqual(yaml.load(test), None) + self.assertEqual(yaml.load(test, Loader=yaml.FullLoader), None) def test_parseDisplay_userdata_list(self): if not using_yaml: @@ -552,7 +552,7 @@ def test_parseDisplay_userdata_list(self): self.config['scenarios'].append() test = _display(self.config, 'userdata') sys.stdout.write(test) - self.assertEqual(yaml.load(test), {'scenarios': [None]}) + self.assertEqual(yaml.load(test, Loader=yaml.FullLoader), {'scenarios': [None]}) def test_parseDisplay_userdata_list_nonDefault(self): if not using_yaml: @@ -562,7 +562,7 @@ def test_parseDisplay_userdata_list_nonDefault(self): test = _display(self.config,'userdata') sys.stdout.write(test) self.assertEqual( - yaml.load(test), {'scenarios': + yaml.load(test, Loader=yaml.FullLoader), {'scenarios': [None, {'merlion': True, 'detection': []}]}) @@ -573,7 +573,7 @@ def test_parseDisplay_userdata_block(self): self.config.add("bar", ConfigBlock()) test = _display(self.config, 'userdata') sys.stdout.write(test) - self.assertEqual(yaml.load(test), None) + self.assertEqual(yaml.load(test, Loader=yaml.FullLoader), None) def test_parseDisplay_userdata_block_nonDefault(self): if not using_yaml: @@ -583,7 +583,7 @@ def test_parseDisplay_userdata_block_nonDefault(self): .add("baz", ConfigBlock()) test = _display(self.config, 'userdata') sys.stdout.write(test) - self.assertEqual(yaml.load(test), {'bar': None}) + self.assertEqual(yaml.load(test, Loader=yaml.FullLoader), {'bar': None}) def test_value_ConfigValue(self): val = self.config['flushing']['flush nodes']['rate'] diff --git a/pyutilib/subprocess/processmngr.py b/pyutilib/subprocess/processmngr.py index 8171206f..100b83ba 100644 --- a/pyutilib/subprocess/processmngr.py +++ b/pyutilib/subprocess/processmngr.py @@ -106,6 +106,7 @@ def kill_process(process, sig=signal.SIGTERM, verbose=False): print(" ERROR: invalid pid %d" % pid) sys.exit(1) os.killpg(pgid, signal.SIGTERM) + process.terminate() # # This is a hack. The Popen.__del__ method references # the 'os' package, and when a process is interupted this @@ -893,6 +894,8 @@ def kill(self, sig=signal.SIGTERM): Kill the subprocess and its children """ kill_process(self.process, sig) + self.process.terminate() + self.process.wait() del self.process self.process = None diff --git a/pyutilib/subprocess/tests/test_subprocess.py b/pyutilib/subprocess/tests/test_subprocess.py index 269d0e3e..e4bf5c49 100644 --- a/pyutilib/subprocess/tests/test_subprocess.py +++ b/pyutilib/subprocess/tests/test_subprocess.py @@ -49,11 +49,11 @@ def test_timeout(self): if ' ' in sys.executable: foo = SubprocessMngr( "'" + sys.executable + "' -q -c \"while True: pass\"", - shell=not _mswindows) + shell=False) else: foo = SubprocessMngr( sys.executable + " -q -c \"while True: pass\"", - shell=not _mswindows) + shell=False) foo.wait(targetTime) runTime = timer() - stime print("Ran for %f seconds" % (runTime,)) @@ -114,7 +114,7 @@ def test_outputfile(self): INPUT.close() os.remove(currdir + 'tee.out') if _peek_available: - self.assertEquals( + self.assertEqual( sorted(output.splitlines()), ["Tee Script: ERR", "Tee Script: OUT"]) else: @@ -129,7 +129,7 @@ def test_ostream_stringio(self): [sys.executable, currdir + "tee_script.py"], ostream=script_out) if _peek_available: - self.assertEquals( + self.assertEqual( sorted(script_out.getvalue().splitlines()), ["Tee Script: ERR", "Tee Script: OUT"]) else: @@ -151,10 +151,10 @@ def test_tee(self): pyutilib.misc.reset_redirect() # The following is only deterministic if Peek/Select is available if _peek_available: - self.assertEquals( + self.assertEqual( sorted(stream_out.getvalue().splitlines()), ["Tee Script: ERR", "Tee Script: OUT"]) - self.assertEquals( + self.assertEqual( sorted(script_out.getvalue().splitlines()), ["Tee Script: ERR", "Tee Script: OUT"]) else: @@ -179,12 +179,12 @@ def test_tee_stdout(self): ostream=script_out, tee=(True, False)) pyutilib.misc.reset_redirect() - self.assertEquals(stream_out.getvalue().splitlines(), + self.assertEqual(stream_out.getvalue().splitlines(), ["Tee Script: OUT"]) # The following is only deterministic if Peek/Select is available if _peek_available: - self.assertEquals( + self.assertEqual( sorted(script_out.getvalue().splitlines()), ["Tee Script: ERR", "Tee Script: OUT"]) else: @@ -204,12 +204,12 @@ def test_tee_stderr(self): ostream=script_out, tee=(False, True)) pyutilib.misc.reset_redirect() - self.assertEquals(stream_out.getvalue().splitlines(), + self.assertEqual(stream_out.getvalue().splitlines(), ["Tee Script: ERR"]) # The following is only deterministic if Peek/Select is available if _peek_available: - self.assertEquals( + self.assertEqual( sorted(script_out.getvalue().splitlines()), ["Tee Script: ERR", "Tee Script: OUT"]) else: