Mercurial > cpython-lru_cache-weakref
annotate Lib/test/support.py @ 63948:aa89cbb7bc21
Oops, I did it again: add missing \ removed in previous commit
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Fri, 13 Aug 2010 13:47:18 +0000 |
| parents | a449ce1f385b |
| children | 291c9afab12c |
| rev | line source |
|---|---|
|
28968
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
1 """Supporting definitions for the Python regression tests.""" |
|
13682
7de18f04f85a
Restore TestSkipped exception; appears to have disappeared in last checkin.
Fred Drake <fdrake@acm.org>
parents:
13647
diff
changeset
|
2 |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
47067
diff
changeset
|
3 if __name__ != 'test.support': |
|
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
47067
diff
changeset
|
4 raise ImportError('support must be imported from the test package') |
|
24442
226ba34bd998
Complete the absolute import patch for the test suite. All relative
Barry Warsaw <barry@python.org>
parents:
21595
diff
changeset
|
5 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
6 import contextlib |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
7 import errno |
|
54501
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
8 import functools |
|
54504
2c00bdaad7a9
Merged revisions 73073-73074,73089 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
54501
diff
changeset
|
9 import gc |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
10 import socket |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
11 import sys |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
12 import os |
|
52389
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
13 import platform |
|
45514
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
14 import shutil |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
15 import warnings |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
16 import unittest |
|
52625
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
17 import importlib |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
18 import collections |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
19 import re |
|
62874
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
20 import subprocess |
| 60648 | 21 import imp |
|
60517
b4f60df31b14
Merged revisions 79934 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59720
diff
changeset
|
22 import time |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
23 try: |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
24 import _thread |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
25 except ImportError: |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
26 _thread = None |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
27 |
| 60648 | 28 __all__ = [ |
| 29 "Error", "TestFailed", "ResourceDenied", "import_module", | |
| 30 "verbose", "use_resources", "max_memuse", "record_original_stdout", | |
| 31 "get_original_stdout", "unload", "unlink", "rmtree", "forget", | |
| 32 "is_resource_enabled", "requires", "find_unused_port", "bind_port", | |
| 33 "fcmp", "is_jython", "TESTFN", "HOST", "FUZZ", "SAVEDCWD", "temp_cwd", | |
| 34 "findfile", "sortdict", "check_syntax_error", "open_urlresource", | |
| 35 "check_warnings", "CleanImport", "EnvironmentVarGuard", | |
| 36 "TransientResource", "captured_output", "captured_stdout", | |
| 37 "time_out", "socket_peer_reset", "ioerror_peer_reset", | |
| 38 "run_with_locale", 'temp_umask', | |
| 39 "set_memlimit", "bigmemtest", "bigaddrspacetest", "BasicTestRunner", | |
| 40 "run_unittest", "run_doctest", "threading_setup", "threading_cleanup", | |
| 41 "reap_children", "cpython_only", "check_impl_detail", "get_attribute", | |
|
62874
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
42 "swap_item", "swap_attr", "can_symlink", "skip_unless_symlink"] |
|
47317
ba8015e23487
Merged revisions 63698 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
47201
diff
changeset
|
43 |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
44 |
|
13682
7de18f04f85a
Restore TestSkipped exception; appears to have disappeared in last checkin.
Fred Drake <fdrake@acm.org>
parents:
13647
diff
changeset
|
45 class Error(Exception): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
46 """Base class for regression test exceptions.""" |
|
13682
7de18f04f85a
Restore TestSkipped exception; appears to have disappeared in last checkin.
Fred Drake <fdrake@acm.org>
parents:
13647
diff
changeset
|
47 |
|
7de18f04f85a
Restore TestSkipped exception; appears to have disappeared in last checkin.
Fred Drake <fdrake@acm.org>
parents:
13647
diff
changeset
|
48 class TestFailed(Error): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
49 """Test failed.""" |
| 653 | 50 |
|
52389
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
51 class ResourceDenied(unittest.SkipTest): |
|
27636
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
52 """Test skipped because it requested a disallowed resource. |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
53 |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
54 This is raised when a test calls requires() for a resource that |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
55 has not be enabled. It is used to distinguish between expected |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
56 and unexpected skips. |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
57 """ |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
58 |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
59 @contextlib.contextmanager |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
60 def _ignore_deprecated_imports(ignore=True): |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
61 """Context manager to suppress package and module deprecation |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
62 warnings when importing them. |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
63 |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
64 If ignore is False, this context manager has no effect.""" |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
65 if ignore: |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
66 with warnings.catch_warnings(): |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
67 warnings.filterwarnings("ignore", ".+ (module|package)", |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
68 DeprecationWarning) |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
69 yield |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
70 else: |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
71 yield |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
72 |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
73 |
|
46769
5d15a8bcc445
Merged revisions 62873,62887,62892-62896,62904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
74 def import_module(name, deprecated=False): |
|
52625
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
75 """Import and return the module to be tested, raising SkipTest if |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
76 it is not available. |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
77 |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
78 If deprecated is True, any module or package deprecation messages |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
79 will be suppressed.""" |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
80 with _ignore_deprecated_imports(deprecated): |
|
46769
5d15a8bcc445
Merged revisions 62873,62887,62892-62896,62904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
81 try: |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
82 return importlib.import_module(name) |
|
52625
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
83 except ImportError as msg: |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
84 raise unittest.SkipTest(str(msg)) |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
85 |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
86 |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
87 def _save_and_remove_module(name, orig_modules): |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
88 """Helper function to save and remove a module from sys.modules |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
89 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
90 Return value is True if the module was in sys.modules and |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
91 False otherwise.""" |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
92 saved = True |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
93 try: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
94 orig_modules[name] = sys.modules[name] |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
95 except KeyError: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
96 saved = False |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
97 else: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
98 del sys.modules[name] |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
99 return saved |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
100 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
101 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
102 def _save_and_block_module(name, orig_modules): |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
103 """Helper function to save and block a module in sys.modules |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
104 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
105 Return value is True if the module was in sys.modules and |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
106 False otherwise.""" |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
107 saved = True |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
108 try: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
109 orig_modules[name] = sys.modules[name] |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
110 except KeyError: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
111 saved = False |
|
62998
b5749dd8c421
Set sys.modules[name] to None instead of 0 to block module import.
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
62874
diff
changeset
|
112 sys.modules[name] = None |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
113 return saved |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
114 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
115 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
116 def import_fresh_module(name, fresh=(), blocked=(), deprecated=False): |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
117 """Imports and returns a module, deliberately bypassing the sys.modules cache |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
118 and importing a fresh copy of the module. Once the import is complete, |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
119 the sys.modules cache is restored to its original state. |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
120 |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
121 Modules named in fresh are also imported anew if needed by the import. |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
122 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
123 Importing of modules named in blocked is prevented while the fresh import |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
124 takes place. |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
125 |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
126 If deprecated is True, any module or package deprecation messages |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
127 will be suppressed.""" |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
128 # NOTE: test_heapq and test_warnings include extra sanity checks to make |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
129 # sure that this utility function is working as expected |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
130 with _ignore_deprecated_imports(deprecated): |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
131 # Keep track of modules saved for later restoration as well |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
132 # as those which just need a blocking entry removed |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
133 orig_modules = {} |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
134 names_to_remove = [] |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
135 _save_and_remove_module(name, orig_modules) |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
136 try: |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
137 for fresh_name in fresh: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
138 _save_and_remove_module(fresh_name, orig_modules) |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
139 for blocked_name in blocked: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
140 if not _save_and_block_module(blocked_name, orig_modules): |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
141 names_to_remove.append(blocked_name) |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
142 fresh_module = importlib.import_module(name) |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
143 finally: |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
144 for orig_name, module in orig_modules.items(): |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
145 sys.modules[orig_name] = module |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
146 for name_to_remove in names_to_remove: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
147 del sys.modules[name_to_remove] |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
148 return fresh_module |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
149 |
|
46769
5d15a8bcc445
Merged revisions 62873,62887,62892-62896,62904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
150 |
|
52625
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
151 def get_attribute(obj, name): |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
152 """Get an attribute, raising SkipTest if AttributeError is raised.""" |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
153 try: |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
154 attribute = getattr(obj, name) |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
155 except AttributeError: |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
156 raise unittest.SkipTest("module %s has no attribute %s" % ( |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
157 obj.__name__, name)) |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
158 else: |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
159 return attribute |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
160 |
|
19416
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
161 verbose = 1 # Flag set to 0 by regrtest.py |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
162 use_resources = None # Flag set to [] by regrtest.py |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
163 max_memuse = 0 # Disable bigmem tests (they will still be run with |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
164 # small sizes, to make sure they work.) |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
165 real_max_memuse = 0 |
|
4791
a2fd80eed27f
Add verbose flag for regression test to clear.
Guido van Rossum <guido@python.org>
parents:
1197
diff
changeset
|
166 |
|
20091
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
167 # _original_stdout is meant to hold stdout at the time regrtest began. |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
168 # This may be "the real" stdout, or IDLE's emulation of stdout, or whatever. |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
169 # The point is to have some flavor of stdout the user can actually see. |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
170 _original_stdout = None |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
171 def record_original_stdout(stdout): |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
172 global _original_stdout |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
173 _original_stdout = stdout |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
174 |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
175 def get_original_stdout(): |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
176 return _original_stdout or sys.stdout |
|
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
177 |
| 653 | 178 def unload(name): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
179 try: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
180 del sys.modules[name] |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
181 except KeyError: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
182 pass |
| 653 | 183 |
|
36382
99d491faa65c
Convenience function to remove a possibly non-existant file
Neal Norwitz <nnorwitz@gmail.com>
parents:
35998
diff
changeset
|
184 def unlink(filename): |
|
99d491faa65c
Convenience function to remove a possibly non-existant file
Neal Norwitz <nnorwitz@gmail.com>
parents:
35998
diff
changeset
|
185 try: |
|
99d491faa65c
Convenience function to remove a possibly non-existant file
Neal Norwitz <nnorwitz@gmail.com>
parents:
35998
diff
changeset
|
186 os.unlink(filename) |
| 60648 | 187 except OSError as error: |
| 188 # The filename need not exist. | |
|
61226
d49f1310e23f
Fix error handling removing files in test.support.unlink
Michael Foord <fuzzyman@voidspace.org.uk>
parents:
61163
diff
changeset
|
189 if error.errno not in (errno.ENOENT, errno.ENOTDIR): |
| 60648 | 190 raise |
|
36382
99d491faa65c
Convenience function to remove a possibly non-existant file
Neal Norwitz <nnorwitz@gmail.com>
parents:
35998
diff
changeset
|
191 |
|
45514
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
192 def rmtree(path): |
|
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
193 try: |
|
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
194 shutil.rmtree(path) |
| 60648 | 195 except OSError as error: |
|
45514
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
196 # Unix returns ENOENT, Windows returns ESRCH. |
| 60648 | 197 if error.errno not in (errno.ENOENT, errno.ESRCH): |
|
45514
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
198 raise |
|
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
199 |
| 60648 | 200 def make_legacy_pyc(source): |
| 201 """Move a PEP 3147 pyc/pyo file to its legacy pyc/pyo location. | |
| 202 | |
| 203 The choice of .pyc or .pyo extension is done based on the __debug__ flag | |
| 204 value. | |
| 205 | |
| 206 :param source: The file system path to the source file. The source file | |
| 207 does not need to exist, however the PEP 3147 pyc file must exist. | |
| 208 :return: The file system path to the legacy pyc file. | |
| 209 """ | |
| 210 pyc_file = imp.cache_from_source(source) | |
| 211 up_one = os.path.dirname(os.path.abspath(source)) | |
| 212 legacy_pyc = os.path.join(up_one, source + ('c' if __debug__ else 'o')) | |
| 213 os.rename(pyc_file, legacy_pyc) | |
| 214 return legacy_pyc | |
| 215 | |
| 653 | 216 def forget(modname): |
| 60648 | 217 """'Forget' a module was ever imported. |
| 218 | |
| 219 This removes the module from sys.modules and deletes any PEP 3147 or | |
| 220 legacy .pyc and .pyo files. | |
| 221 """ | |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
222 unload(modname) |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
223 for dirname in sys.path: |
| 60648 | 224 source = os.path.join(dirname, modname + '.py') |
| 225 # It doesn't matter if they exist or not, unlink all possible | |
| 226 # combinations of PEP 3147 and legacy pyc and pyo files. | |
| 227 unlink(source + 'c') | |
| 228 unlink(source + 'o') | |
| 229 unlink(imp.cache_from_source(source, debug_override=True)) | |
| 230 unlink(imp.cache_from_source(source, debug_override=False)) | |
| 653 | 231 |
|
26527
18dcf80e6f8d
Rearrange test_socket_ssl so that a skip is expected iff the network
Tim Peters <tim.peters@gmail.com>
parents:
26139
diff
changeset
|
232 def is_resource_enabled(resource): |
|
28968
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
233 """Test whether a resource is enabled. Known resources are set by |
|
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
234 regrtest.py.""" |
|
26527
18dcf80e6f8d
Rearrange test_socket_ssl so that a skip is expected iff the network
Tim Peters <tim.peters@gmail.com>
parents:
26139
diff
changeset
|
235 return use_resources is not None and resource in use_resources |
|
18dcf80e6f8d
Rearrange test_socket_ssl so that a skip is expected iff the network
Tim Peters <tim.peters@gmail.com>
parents:
26139
diff
changeset
|
236 |
|
19416
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
237 def requires(resource, msg=None): |
|
28968
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
238 """Raise ResourceDenied if the specified resource is not available. |
|
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
239 |
|
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
240 If the caller's module is __main__ then automatically return True. The |
| 60648 | 241 possibility of False being returned occurs when regrtest.py is |
| 242 executing. | |
| 243 """ | |
|
28799
46d26afa8b95
if the test is run directly (__name__ == "__main__") don't actually require
Skip Montanaro <skip@pobox.com>
parents:
28174
diff
changeset
|
244 # see if the caller's module is __main__ - if so, treat as if |
|
46d26afa8b95
if the test is run directly (__name__ == "__main__") don't actually require
Skip Montanaro <skip@pobox.com>
parents:
28174
diff
changeset
|
245 # the resource was set |
|
52389
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
246 if sys._getframe(1).f_globals.get("__name__") == "__main__": |
|
28799
46d26afa8b95
if the test is run directly (__name__ == "__main__") don't actually require
Skip Montanaro <skip@pobox.com>
parents:
28174
diff
changeset
|
247 return |
|
26527
18dcf80e6f8d
Rearrange test_socket_ssl so that a skip is expected iff the network
Tim Peters <tim.peters@gmail.com>
parents:
26139
diff
changeset
|
248 if not is_resource_enabled(resource): |
|
19416
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
249 if msg is None: |
|
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
250 msg = "Use of the `%s' resource not enabled" % resource |
|
27636
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
251 raise ResourceDenied(msg) |
|
19416
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
252 |
|
46370
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
253 HOST = 'localhost' |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
254 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
255 def find_unused_port(family=socket.AF_INET, socktype=socket.SOCK_STREAM): |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
256 """Returns an unused port that should be suitable for binding. This is |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
257 achieved by creating a temporary socket with the same family and type as |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
258 the 'sock' parameter (default is AF_INET, SOCK_STREAM), and binding it to |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
259 the specified host address (defaults to 0.0.0.0) with the port set to 0, |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
260 eliciting an unused ephemeral port from the OS. The temporary socket is |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
261 then closed and deleted, and the ephemeral port is returned. |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
262 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
263 Either this method or bind_port() should be used for any tests where a |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
264 server socket needs to be bound to a particular port for the duration of |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
265 the test. Which one to use depends on whether the calling code is creating |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
266 a python socket, or if an unused port needs to be provided in a constructor |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
267 or passed to an external program (i.e. the -accept argument to openssl's |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
268 s_server mode). Always prefer bind_port() over find_unused_port() where |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
269 possible. Hard coded ports should *NEVER* be used. As soon as a server |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
270 socket is bound to a hard coded port, the ability to run multiple instances |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
271 of the test simultaneously on the same host is compromised, which makes the |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
272 test a ticking time bomb in a buildbot environment. On Unix buildbots, this |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
273 may simply manifest as a failed test, which can be recovered from without |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
274 intervention in most cases, but on Windows, the entire python process can |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
275 completely and utterly wedge, requiring someone to log in to the buildbot |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
276 and manually kill the affected process. |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
277 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
278 (This is easy to reproduce on Windows, unfortunately, and can be traced to |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
279 the SO_REUSEADDR socket option having different semantics on Windows versus |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
280 Unix/Linux. On Unix, you can't have two AF_INET SOCK_STREAM sockets bind, |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
281 listen and then accept connections on identical host/ports. An EADDRINUSE |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
282 socket.error will be raised at some point (depending on the platform and |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
283 the order bind and listen were called on each socket). |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
284 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
285 However, on Windows, if SO_REUSEADDR is set on the sockets, no EADDRINUSE |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
286 will ever be raised when attempting to bind two identical host/ports. When |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
287 accept() is called on each socket, the second caller's process will steal |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
288 the port from the first caller, leaving them both in an awkwardly wedged |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
289 state where they'll no longer respond to any signals or graceful kills, and |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
290 must be forcibly killed via OpenProcess()/TerminateProcess(). |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
291 |
|
46370
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
292 The solution on Windows is to use the SO_EXCLUSIVEADDRUSE socket option |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
293 instead of SO_REUSEADDR, which effectively affords the same semantics as |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
294 SO_REUSEADDR on Unix. Given the propensity of Unix developers in the Open |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
295 Source world compared to Windows ones, this is a common mistake. A quick |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
296 look over OpenSSL's 0.9.8g source shows that they use SO_REUSEADDR when |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
297 openssl.exe is called with the 's_server' option, for example. See |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
298 http://bugs.python.org/issue2550 for more info. The following site also |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
299 has a very thorough description about the implications of both REUSEADDR |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
300 and EXCLUSIVEADDRUSE on Windows: |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
301 http://msdn2.microsoft.com/en-us/library/ms740621(VS.85).aspx) |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
302 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
303 XXX: although this approach is a vast improvement on previous attempts to |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
304 elicit unused ports, it rests heavily on the assumption that the ephemeral |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
305 port returned to us by the OS won't immediately be dished back out to some |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
306 other process when we close and delete our temporary socket but before our |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
307 calling code has a chance to bind the returned port. We can deal with this |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
308 issue if/when we come across it. |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
309 """ |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
310 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
311 tempsock = socket.socket(family, socktype) |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
312 port = bind_port(tempsock) |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
313 tempsock.close() |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
314 del tempsock |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
315 return port |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
316 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
317 def bind_port(sock, host=HOST): |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
318 """Bind the socket to a free port and return the port number. Relies on |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
319 ephemeral ports in order to ensure we are using an unbound port. This is |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
320 important as many tests may be running simultaneously, especially in a |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
321 buildbot environment. This method raises an exception if the sock.family |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
322 is AF_INET and sock.type is SOCK_STREAM, *and* the socket has SO_REUSEADDR |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
323 or SO_REUSEPORT set on it. Tests should *never* set these socket options |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
324 for TCP/IP sockets. The only case for setting these options is testing |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
325 multicasting via multiple UDP sockets. |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
326 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
327 Additionally, if the SO_EXCLUSIVEADDRUSE socket option is available (i.e. |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
328 on Windows), it will be set on the socket. This will prevent anyone else |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
329 from bind()'ing to our host/port for the duration of the test. |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
330 """ |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
331 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
332 if sock.family == socket.AF_INET and sock.type == socket.SOCK_STREAM: |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
333 if hasattr(socket, 'SO_REUSEADDR'): |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
334 if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) == 1: |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
335 raise TestFailed("tests should never set the SO_REUSEADDR " \ |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
336 "socket option on TCP/IP sockets!") |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
337 if hasattr(socket, 'SO_REUSEPORT'): |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
338 if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1: |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
339 raise TestFailed("tests should never set the SO_REUSEPORT " \ |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
340 "socket option on TCP/IP sockets!") |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
341 if hasattr(socket, 'SO_EXCLUSIVEADDRUSE'): |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
342 sock.setsockopt(socket.SOL_SOCKET, socket.SO_EXCLUSIVEADDRUSE, 1) |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
343 |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
344 sock.bind((host, 0)) |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
345 port = sock.getsockname()[1] |
|
2e917b0c8f6e
Merged revisions 62194,62197-62198,62204-62205,62214,62219-62221,62227,62229-62231,62233-62235,62237-62239 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46262
diff
changeset
|
346 return port |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
347 |
|
1197
675a02820d66
* os.py: _exit doesn't exist in all variations of posix
Guido van Rossum <guido@python.org>
parents:
653
diff
changeset
|
348 FUZZ = 1e-6 |
|
675a02820d66
* os.py: _exit doesn't exist in all variations of posix
Guido van Rossum <guido@python.org>
parents:
653
diff
changeset
|
349 |
|
675a02820d66
* os.py: _exit doesn't exist in all variations of posix
Guido van Rossum <guido@python.org>
parents:
653
diff
changeset
|
350 def fcmp(x, y): # fuzzy comparison function |
|
39602
73a3291c58dc
use isinstance instead of type. Use bool instead of int for flag.
Neal Norwitz <nnorwitz@gmail.com>
parents:
39442
diff
changeset
|
351 if isinstance(x, float) or isinstance(y, float): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
352 try: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
353 fuzz = (abs(x) + abs(y)) * FUZZ |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
354 if abs(x-y) <= fuzz: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
355 return 0 |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
356 except: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
357 pass |
|
39602
73a3291c58dc
use isinstance instead of type. Use bool instead of int for flag.
Neal Norwitz <nnorwitz@gmail.com>
parents:
39442
diff
changeset
|
358 elif type(x) == type(y) and isinstance(x, (tuple, list)): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
359 for i in range(min(len(x), len(y))): |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
360 outcome = fcmp(x[i], y[i]) |
|
15540
9d43129c8c55
Update the code to better reflect recommended style:
Fred Drake <fdrake@acm.org>
parents:
15305
diff
changeset
|
361 if outcome != 0: |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
362 return outcome |
|
39644
13d5e5f0e993
Restructure comparison dramatically. There is no longer a default
Guido van Rossum <guido@python.org>
parents:
39602
diff
changeset
|
363 return (len(x) > len(y)) - (len(x) < len(y)) |
|
13d5e5f0e993
Restructure comparison dramatically. There is no longer a default
Guido van Rossum <guido@python.org>
parents:
39602
diff
changeset
|
364 return (x > y) - (x < y) |
|
1197
675a02820d66
* os.py: _exit doesn't exist in all variations of posix
Guido van Rossum <guido@python.org>
parents:
653
diff
changeset
|
365 |
|
25982
e1bf4604c0a5
Patch #631972: Adds an is_jython flag.
Finn Bock <bckfnn@worldonline.dk>
parents:
24442
diff
changeset
|
366 is_jython = sys.platform.startswith('java') |
|
e1bf4604c0a5
Patch #631972: Adds an is_jython flag.
Finn Bock <bckfnn@worldonline.dk>
parents:
24442
diff
changeset
|
367 |
|
17213
4d6ee7f2bee6
In Jython, `@' is not allowed in module names. Extend the TESTFN test
Barry Warsaw <barry@python.org>
parents:
17171
diff
changeset
|
368 # Filename used for testing |
|
4d6ee7f2bee6
In Jython, `@' is not allowed in module names. Extend the TESTFN test
Barry Warsaw <barry@python.org>
parents:
17171
diff
changeset
|
369 if os.name == 'java': |
|
4d6ee7f2bee6
In Jython, `@' is not allowed in module names. Extend the TESTFN test
Barry Warsaw <barry@python.org>
parents:
17171
diff
changeset
|
370 # Jython disallows @ in module names |
|
4d6ee7f2bee6
In Jython, `@' is not allowed in module names. Extend the TESTFN test
Barry Warsaw <barry@python.org>
parents:
17171
diff
changeset
|
371 TESTFN = '$test' |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
28968
diff
changeset
|
372 else: |
|
17213
4d6ee7f2bee6
In Jython, `@' is not allowed in module names. Extend the TESTFN test
Barry Warsaw <barry@python.org>
parents:
17171
diff
changeset
|
373 TESTFN = '@test' |
|
41993
0d81a656412a
Rename checks for test_support.have_unicode (we always
Walter Dörwald <walter@livinglogic.de>
parents:
41716
diff
changeset
|
374 |
|
54967
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
375 # Disambiguate TESTFN for parallel testing, while letting it remain a valid |
|
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
376 # module name. |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
377 TESTFN = "{}_{}_tmp".format(TESTFN, os.getpid()) |
|
54967
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
378 |
|
61226
d49f1310e23f
Fix error handling removing files in test.support.unlink
Michael Foord <fuzzyman@voidspace.org.uk>
parents:
61163
diff
changeset
|
379 |
|
54967
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
380 # Assuming sys.getfilesystemencoding()!=sys.getdefaultencoding() |
|
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
381 # TESTFN_UNICODE is a filename that can be encoded using the |
|
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
382 # file system encoding, but *not* with the default (ascii) encoding |
|
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
383 TESTFN_UNICODE = TESTFN + "-\xe0\xf2" |
|
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
384 TESTFN_ENCODING = sys.getfilesystemencoding() |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
385 |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
386 # TESTFN_UNENCODEABLE is a filename (str type) that should *not* be able to be |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
387 # encoded by the filesystem encoding (in strict mode). It can be None if we |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
388 # cannot generate such filename. |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
389 if os.name in ('nt', 'ce'): |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
390 if sys.getwindowsversion().platform < 2: |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
391 # win32s (0) or Windows 9x/ME (1) |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
392 TESTFN_UNENCODEABLE = None |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
393 else: |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
394 # Japanese characters (I think - from bug 846133) |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
395 TESTFN_UNENCODEABLE = TESTFN + "-\u5171\u6709\u3055\u308c\u308b" |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
396 try: |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
397 TESTFN_UNENCODEABLE.encode(TESTFN_ENCODING) |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
398 except UnicodeEncodeError: |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
399 pass |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
400 else: |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
401 print('WARNING: The filename %r CAN be encoded by the filesystem encoding (%s). ' |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
402 'Unicode filename tests may not be effective' |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
403 % (TESTFN_UNENCODEABLE, TESTFN_ENCODING)) |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
404 TESTFN_UNENCODEABLE = None |
|
54967
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
405 else: |
|
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
406 try: |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
407 # ascii and utf-8 cannot encode the byte 0xff |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
408 b'\xff'.decode(TESTFN_ENCODING) |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
409 except UnicodeDecodeError: |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
410 # 0xff will be encoded using the surrogate character u+DCFF |
|
63948
aa89cbb7bc21
Oops, I did it again: add missing \ removed in previous commit
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63947
diff
changeset
|
411 TESTFN_UNENCODEABLE = TESTFN \ |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
412 + b'-\xff'.decode(TESTFN_ENCODING, 'surrogateescape') |
|
41993
0d81a656412a
Rename checks for test_support.have_unicode (we always
Walter Dörwald <walter@livinglogic.de>
parents:
41716
diff
changeset
|
413 else: |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
414 # File system encoding (eg. ISO-8859-* encodings) can encode |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
415 # the byte 0xff. Skip some unicode filename tests. |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
416 TESTFN_UNENCODEABLE = None |
|
26000
83d21ea9457d
Fix SF # 631066, running regrtest in user mode fails
Neal Norwitz <nnorwitz@gmail.com>
parents:
25982
diff
changeset
|
417 |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
418 # Save the initial cwd |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
419 SAVEDCWD = os.getcwd() |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
420 |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
421 @contextlib.contextmanager |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
422 def temp_cwd(name='tempcwd', quiet=False): |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
423 """ |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
424 Context manager that creates a temporary directory and set it as CWD. |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
425 |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
426 The new CWD is created in the current directory and it's named *name*. |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
427 If *quiet* is False (default) and it's not possible to create or change |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
428 the CWD, an error is raised. If it's True, only a warning is raised |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
429 and the original CWD is used. |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
430 """ |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
431 saved_dir = os.getcwd() |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
432 is_temporary = False |
|
26000
83d21ea9457d
Fix SF # 631066, running regrtest in user mode fails
Neal Norwitz <nnorwitz@gmail.com>
parents:
25982
diff
changeset
|
433 try: |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
434 os.mkdir(name) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
435 os.chdir(name) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
436 is_temporary = True |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
437 except OSError: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
438 if not quiet: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
439 raise |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
440 warnings.warn('tests may fail, unable to change the CWD to ' + name, |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
441 RuntimeWarning, stacklevel=3) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
442 try: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
443 yield os.getcwd() |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
444 finally: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
445 os.chdir(saved_dir) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
446 if is_temporary: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
447 rmtree(name) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
448 |
|
17036
ad741745cb6c
Oops. A RISCOS patch I forgot to check in.
Guido van Rossum <guido@python.org>
parents:
16723
diff
changeset
|
449 |
| 60648 | 450 @contextlib.contextmanager |
| 451 def temp_umask(umask): | |
| 452 """Context manager that temporarily sets the process umask.""" | |
| 453 oldmask = os.umask(umask) | |
| 454 try: | |
| 455 yield | |
| 456 finally: | |
| 457 os.umask(oldmask) | |
| 458 | |
| 459 | |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59588
diff
changeset
|
460 def findfile(file, here=__file__, subdir=None): |
|
28968
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
461 """Try to find a file on sys.path and the working directory. If it is not |
|
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
462 found the argument passed to the function is returned (this does not |
|
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
463 necessarily signal failure; could still be the legitimate path).""" |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
464 if os.path.isabs(file): |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
465 return file |
|
59601
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59588
diff
changeset
|
466 if subdir is not None: |
|
7a18c2762886
Merged revisions 78838-78839,78917,78919,78934,78937 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59588
diff
changeset
|
467 file = os.path.join(subdir, file) |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
468 path = sys.path |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
469 path = [os.path.dirname(here)] + path |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
470 for dn in path: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
471 fn = os.path.join(dn, file) |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
472 if os.path.exists(fn): return fn |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
473 return file |
|
15957
c1a8deb15f0e
This patch removes all uses of "assert" in the regression test suite
Marc-André Lemburg <mal@egenix.com>
parents:
15540
diff
changeset
|
474 |
|
17815
d6df8d371b67
Get rid of the superstitious "~" in dict hashing's "i = (~hash) & mask".
Tim Peters <tim.peters@gmail.com>
parents:
17213
diff
changeset
|
475 def sortdict(dict): |
|
d6df8d371b67
Get rid of the superstitious "~" in dict hashing's "i = (~hash) & mask".
Tim Peters <tim.peters@gmail.com>
parents:
17213
diff
changeset
|
476 "Like repr(dict), but in sorted order." |
|
40809
f340cb045bf9
- PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone;
Guido van Rossum <guido@python.org>
parents:
40775
diff
changeset
|
477 items = sorted(dict.items()) |
|
17815
d6df8d371b67
Get rid of the superstitious "~" in dict hashing's "i = (~hash) & mask".
Tim Peters <tim.peters@gmail.com>
parents:
17213
diff
changeset
|
478 reprpairs = ["%r: %r" % pair for pair in items] |
|
d6df8d371b67
Get rid of the superstitious "~" in dict hashing's "i = (~hash) & mask".
Tim Peters <tim.peters@gmail.com>
parents:
17213
diff
changeset
|
479 withcommas = ", ".join(reprpairs) |
|
d6df8d371b67
Get rid of the superstitious "~" in dict hashing's "i = (~hash) & mask".
Tim Peters <tim.peters@gmail.com>
parents:
17213
diff
changeset
|
480 return "{%s}" % withcommas |
|
d6df8d371b67
Get rid of the superstitious "~" in dict hashing's "i = (~hash) & mask".
Tim Peters <tim.peters@gmail.com>
parents:
17213
diff
changeset
|
481 |
|
50915
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
482 def make_bad_fd(): |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
483 """ |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
484 Create an invalid file descriptor by opening and closing a file and return |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
485 its fd. |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
486 """ |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
487 file = open(TESTFN, "wb") |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
488 try: |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
489 return file.fileno() |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
490 finally: |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
491 file.close() |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
492 unlink(TESTFN) |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
493 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39644
diff
changeset
|
494 def check_syntax_error(testcase, statement): |
|
52389
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
495 testcase.assertRaises(SyntaxError, compile, statement, |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
496 '<test string>', 'exec') |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
497 |
|
43089
2e3c02c625de
Explicitly use UTF-8 as the encoding for the normalization file.
Martin v. Löwis <martin@v.loewis.de>
parents:
42954
diff
changeset
|
498 def open_urlresource(url, *args, **kw): |
|
48334
5a416a6417d3
Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
47322
diff
changeset
|
499 import urllib.request, urllib.parse |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
500 |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
501 check = kw.pop('check', None) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
502 |
|
48334
5a416a6417d3
Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
47322
diff
changeset
|
503 filename = urllib.parse.urlparse(url)[2].split('/')[-1] # '/': it's URL! |
|
35998
96d1fa36964d
Patch #1276356: Implement new resource "urlfetch" for regrtest.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
34707
diff
changeset
|
504 |
|
55303
1c57debf97bc
Merged revisions 73930-73932,73937-73939,73945,73951,73954,73962-73963,73970 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
55010
diff
changeset
|
505 fn = os.path.join(os.path.dirname(__file__), "data", filename) |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
506 |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
507 def check_valid_file(fn): |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
508 f = open(fn, *args, **kw) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
509 if check is None: |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
510 return f |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
511 elif check(f): |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
512 f.seek(0) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
513 return f |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
514 f.close() |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
515 |
|
55303
1c57debf97bc
Merged revisions 73930-73932,73937-73939,73945,73951,73954,73962-73963,73970 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
55010
diff
changeset
|
516 if os.path.exists(fn): |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
517 f = check_valid_file(fn) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
518 if f is not None: |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
519 return f |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
520 unlink(fn) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
521 |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
522 # Verify the requirement before downloading the file |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
523 requires('urlfetch') |
|
35998
96d1fa36964d
Patch #1276356: Implement new resource "urlfetch" for regrtest.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
34707
diff
changeset
|
524 |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
525 print('\tfetching %s ...' % url, file=get_original_stdout()) |
|
57055
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
526 f = urllib.request.urlopen(url, timeout=15) |
|
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
527 try: |
|
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
528 with open(fn, "wb") as out: |
|
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
529 s = f.read() |
|
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
530 while s: |
|
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
531 out.write(s) |
|
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
532 s = f.read() |
|
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
533 finally: |
|
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
534 f.close() |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
535 |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
536 f = check_valid_file(fn) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
537 if f is not None: |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
538 return f |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
539 raise TestFailed('invalid resource "%s"' % fn) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
540 |
|
40742
f1701ba2452b
Merged revisions 53538-53622 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40587
diff
changeset
|
541 |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
542 class WarningsRecorder(object): |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
543 """Convenience wrapper for the warnings list returned on |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
544 entry to the warnings.catch_warnings() context manager. |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
545 """ |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
546 def __init__(self, warnings_list): |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
547 self._warnings = warnings_list |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
548 self._last = 0 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
549 |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
550 def __getattr__(self, attr): |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
551 if len(self._warnings) > self._last: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
552 return getattr(self._warnings[-1], attr) |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
553 elif attr in warnings.WarningMessage._WARNING_DETAILS: |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
554 return None |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
555 raise AttributeError("%r has no attribute %r" % (self, attr)) |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
556 |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
557 @property |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
558 def warnings(self): |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
559 return self._warnings[self._last:] |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
560 |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
561 def reset(self): |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
562 self._last = len(self._warnings) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
563 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
564 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
565 def _filterwarnings(filters, quiet=False): |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
566 """Catch the warnings, then check if all the expected |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
567 warnings have been raised and re-raise unexpected warnings. |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
568 If 'quiet' is True, only re-raise the unexpected warnings. |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
569 """ |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
570 # Clear the warning registry of the calling module |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
571 # in order to re-raise the warnings. |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
572 frame = sys._getframe(2) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
573 registry = frame.f_globals.get('__warningregistry__') |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
574 if registry: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
575 registry.clear() |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
576 with warnings.catch_warnings(record=True) as w: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
577 # Set filter "always" to record all warnings. Because |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
578 # test_warnings swap the module, we need to look up in |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
579 # the sys.modules dictionary. |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
580 sys.modules['warnings'].simplefilter("always") |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
581 yield WarningsRecorder(w) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
582 # Filter the recorded warnings |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
583 reraise = [warning.message for warning in w] |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
584 missing = [] |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
585 for msg, cat in filters: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
586 seen = False |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
587 for exc in reraise[:]: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
588 message = str(exc) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
589 # Filter out the matching messages |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
590 if (re.match(msg, message, re.I) and |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
591 issubclass(exc.__class__, cat)): |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
592 seen = True |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
593 reraise.remove(exc) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
594 if not seen and not quiet: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
595 # This filter caught nothing |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
596 missing.append((msg, cat.__name__)) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
597 if reraise: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
598 raise AssertionError("unhandled warning %r" % reraise[0]) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
599 if missing: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
600 raise AssertionError("filter (%r, %s) did not catch any warning" % |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
601 missing[0]) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
602 |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
603 |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
604 @contextlib.contextmanager |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
605 def check_warnings(*filters, **kwargs): |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
606 """Context manager to silence warnings. |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
607 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
608 Accept 2-tuples as positional arguments: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
609 ("message regexp", WarningCategory) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
610 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
611 Optional argument: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
612 - if 'quiet' is True, it does not fail if a filter catches nothing |
|
59684
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
613 (default True without argument, |
|
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
614 default False if some filters are defined) |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
615 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
616 Without argument, it defaults to: |
|
59684
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
617 check_warnings(("", Warning), quiet=True) |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
618 """ |
|
59684
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
619 quiet = kwargs.get('quiet') |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
620 if not filters: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
621 filters = (("", Warning),) |
|
59684
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
622 # Preserve backward compatibility |
|
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
623 if quiet is None: |
|
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
624 quiet = True |
|
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
625 return _filterwarnings(filters, quiet) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
626 |
|
47067
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
627 |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
628 class CleanImport(object): |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
629 """Context manager to force import to return a new module reference. |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
630 |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
631 This is useful for testing module-level behaviours, such as |
|
48455
b5cf0cb0c7ce
Make test.test_support.catch_warnings more robust as discussed on python-dev. Also add explicit tests for it to test_warnings. (forward port of r64910 from trunk)
Nick Coghlan <ncoghlan@gmail.com>
parents:
48334
diff
changeset
|
632 the emission of a DeprecationWarning on import. |
|
47067
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
633 |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
634 Use like this: |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
635 |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
636 with CleanImport("foo"): |
|
58684
fba1c78f104e
Merged revisions 77956-77957 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents:
58476
diff
changeset
|
637 importlib.import_module("foo") # new reference |
|
47067
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
638 """ |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
639 |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
640 def __init__(self, *module_names): |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
641 self.original_modules = sys.modules.copy() |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
642 for module_name in module_names: |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
643 if module_name in sys.modules: |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
644 module = sys.modules[module_name] |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
645 # It is possible that module_name is just an alias for |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
646 # another module (e.g. stub for modules renamed in 3.x). |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
647 # In that case, we also need delete the real module to clear |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
648 # the import cache. |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
649 if module.__name__ != module_name: |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
650 del sys.modules[module.__name__] |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
651 del sys.modules[module_name] |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
652 |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
653 def __enter__(self): |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
654 return self |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
655 |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
656 def __exit__(self, *ignore_exc): |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
657 sys.modules.update(self.original_modules) |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
658 |
|
960ade856078
Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
47066
diff
changeset
|
659 |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
660 class EnvironmentVarGuard(collections.MutableMapping): |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
661 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
662 """Class to help protect the environment variable properly. Can be used as |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
663 a context manager.""" |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
664 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
665 def __init__(self): |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
666 self._environ = os.environ |
|
53387
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
667 self._changed = {} |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
668 |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
669 def __getitem__(self, envvar): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
670 return self._environ[envvar] |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
671 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
672 def __setitem__(self, envvar, value): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
673 # Remember the initial value on the first access |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
674 if envvar not in self._changed: |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
675 self._changed[envvar] = self._environ.get(envvar) |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
676 self._environ[envvar] = value |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
677 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
678 def __delitem__(self, envvar): |
|
53387
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
679 # Remember the initial value on the first access |
|
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
680 if envvar not in self._changed: |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
681 self._changed[envvar] = self._environ.get(envvar) |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
682 if envvar in self._environ: |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
683 del self._environ[envvar] |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
684 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
685 def keys(self): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
686 return self._environ.keys() |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
687 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
688 def __iter__(self): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
689 return iter(self._environ) |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
690 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
691 def __len__(self): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
692 return len(self._environ) |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
693 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
694 def set(self, envvar, value): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
695 self[envvar] = value |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
696 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
697 def unset(self, envvar): |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
698 del self[envvar] |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
699 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
700 def __enter__(self): |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
701 return self |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
702 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
703 def __exit__(self, *ignore_exc): |
|
53387
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
704 for (k, v) in self._changed.items(): |
|
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
705 if v is None: |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
706 if k in self._environ: |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
707 del self._environ[k] |
|
53387
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
708 else: |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
709 self._environ[k] = v |
|
56592
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
710 os.environ = self._environ |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
711 |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
712 |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
713 class DirsOnSysPath(object): |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
714 """Context manager to temporarily add directories to sys.path. |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
715 |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
716 This makes a copy of sys.path, appends any directories given |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
717 as positional arguments, then reverts sys.path to the copied |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
718 settings when the context ends. |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
719 |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
720 Note that *all* sys.path modifications in the body of the |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
721 context manager, including replacement of the object, |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
722 will be reverted at the end of the block. |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
723 """ |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
724 |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
725 def __init__(self, *paths): |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
726 self.original_value = sys.path[:] |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
727 self.original_object = sys.path |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
728 sys.path.extend(paths) |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
729 |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
730 def __enter__(self): |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
731 return self |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
732 |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
733 def __exit__(self, *ignore_exc): |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
734 sys.path = self.original_object |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
735 sys.path[:] = self.original_value |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
736 |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
737 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
738 class TransientResource(object): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
739 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
740 """Raise ResourceDenied if an exception is raised while the context manager |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
741 is in effect that matches the specified exception and attributes.""" |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
742 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
743 def __init__(self, exc, **kwargs): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
744 self.exc = exc |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
745 self.attrs = kwargs |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
746 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
747 def __enter__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
748 return self |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
749 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
750 def __exit__(self, type_=None, value=None, traceback=None): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
751 """If type_ is a subclass of self.exc and value has attributes matching |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
752 self.attrs, raise ResourceDenied. Otherwise let the exception |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
753 propagate (if any).""" |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
754 if type_ is not None and issubclass(self.exc, type_): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
755 for attr, attr_value in self.attrs.items(): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
756 if not hasattr(value, attr): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
757 break |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
758 if getattr(value, attr) != attr_value: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
759 break |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
760 else: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
761 raise ResourceDenied("an optional resource is not available") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
762 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
763 |
|
54553
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54504
diff
changeset
|
764 # Context managers that raise ResourceDenied when various issues |
|
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54504
diff
changeset
|
765 # with the Internet connection manifest themselves as exceptions. |
|
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54504
diff
changeset
|
766 time_out = TransientResource(IOError, errno=errno.ETIMEDOUT) |
|
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54504
diff
changeset
|
767 socket_peer_reset = TransientResource(socket.error, errno=errno.ECONNRESET) |
|
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54504
diff
changeset
|
768 ioerror_peer_reset = TransientResource(IOError, errno=errno.ECONNRESET) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
769 |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
770 |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
771 @contextlib.contextmanager |
|
60817
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
772 def transient_internet(): |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
773 """Return a context manager that raises ResourceDenied when various issues |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
774 with the Internet connection manifest themselves as exceptions.""" |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
775 time_out = TransientResource(IOError, errno=errno.ETIMEDOUT) |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
776 socket_peer_reset = TransientResource(socket.error, errno=errno.ECONNRESET) |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
777 ioerror_peer_reset = TransientResource(IOError, errno=errno.ECONNRESET) |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
778 with time_out, socket_peer_reset, ioerror_peer_reset: |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
779 yield |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
780 |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
781 |
|
f36a0ebeb163
Merged revisions 80314-80315 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
60648
diff
changeset
|
782 @contextlib.contextmanager |
|
46262
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
783 def captured_output(stream_name): |
|
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
784 """Run the 'with' statement body using a StringIO object in place of a |
|
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
785 specific attribute on the sys module. |
|
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
786 Example use (with 'stream_name=stdout'):: |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
787 |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
788 with captured_stdout() as s: |
|
46978
55d8c35322a7
Convert a lot of print statements to print functions in docstrings,
Neal Norwitz <nnorwitz@gmail.com>
parents:
46769
diff
changeset
|
789 print("hello") |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
790 assert s.getvalue() == "hello" |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
791 """ |
|
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
792 import io |
|
46262
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
793 orig_stdout = getattr(sys, stream_name) |
|
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
794 setattr(sys, stream_name, io.StringIO()) |
|
46664
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46430
diff
changeset
|
795 try: |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46430
diff
changeset
|
796 yield getattr(sys, stream_name) |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46430
diff
changeset
|
797 finally: |
|
031dfe455585
Merged revisions 62425-62429,62434-62436,62441,62444,62446-62448,62450-62455,62463,62465-62466,62469,62474,62476-62478,62480,62485,62492,62497-62498,62500,62507,62513-62514,62516,62521,62531,62535,62545-62546,62548-62551,62553-62559,62569,62574,62577,62593,62595,62604-62606,62608,62616,62626-62627,62636,62638,62644-62645,62647-62648,62651-62653,62656,62661,62663,62680,62686-62687,62696,62699-62703,62711 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46430
diff
changeset
|
798 setattr(sys, stream_name, orig_stdout) |
|
46262
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
799 |
|
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
800 def captured_stdout(): |
|
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
801 return captured_output("stdout") |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
802 |
|
56592
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
803 def captured_stdin(): |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
804 return captured_output("stdin") |
|
098ba3a63730
Note that a number of the changes listed below were not applicable to the Py3k branch, and hence the corresponding
Nick Coghlan <ncoghlan@gmail.com>
parents:
55393
diff
changeset
|
805 |
|
52389
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
806 def gc_collect(): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
807 """Force as many objects as possible to be collected. |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
808 |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
809 In non-CPython implementations of Python, this is needed because timely |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
810 deallocation is not guaranteed by the garbage collector. (Even in CPython |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
811 this can be the case in case of reference cycles.) This means that __del__ |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
812 methods may be called later than expected and weakrefs may remain alive for |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
813 longer than expected. This function tries its best to force all garbage |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
814 objects to disappear. |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
815 """ |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
816 gc.collect() |
|
60517
b4f60df31b14
Merged revisions 79934 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59720
diff
changeset
|
817 if is_jython: |
|
b4f60df31b14
Merged revisions 79934 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59720
diff
changeset
|
818 time.sleep(0.1) |
|
52389
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
819 gc.collect() |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
820 gc.collect() |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
821 |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
822 |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
823 #======================================================================= |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
824 # Decorator for running a function in a different locale, correctly resetting |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
825 # it afterwards. |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
826 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
827 def run_with_locale(catstr, *locales): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
828 def decorator(func): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
829 def inner(*args, **kwds): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
830 try: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
831 import locale |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
832 category = getattr(locale, catstr) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
833 orig_locale = locale.setlocale(category) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
834 except AttributeError: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
835 # if the test author gives us an invalid category string |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
836 raise |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
837 except: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
838 # cannot retrieve original locale, so do nothing |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
839 locale = orig_locale = None |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
840 else: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
841 for loc in locales: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
842 try: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
843 locale.setlocale(category, loc) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
844 break |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
845 except: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
846 pass |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
847 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
848 # now run the function, resetting the locale on exceptions |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
849 try: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
850 return func(*args, **kwds) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
851 finally: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
852 if locale and orig_locale: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
853 locale.setlocale(category, orig_locale) |
|
40910
eaaee785eb86
Change all the function attributes from func_* -> __*__. This gets rid
Neal Norwitz <nnorwitz@gmail.com>
parents:
40809
diff
changeset
|
854 inner.__name__ = func.__name__ |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
855 inner.__doc__ = func.__doc__ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
856 return inner |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
857 return decorator |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
858 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
859 #======================================================================= |
| 45182 | 860 # Big-memory-test support. Separate from 'resources' because memory use |
| 861 # should be configurable. | |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
862 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
863 # Some handy shorthands. Note that these are used for byte-limits as well |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
864 # as size-limits, in the various bigmem tests |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
865 _1M = 1024*1024 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
866 _1G = 1024 * _1M |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
867 _2G = 2 * _1G |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
868 _4G = 4 * _1G |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
869 |
|
43100
4e6b4ba60c3b
Remove the simple slicing API. All slicing is now done with slice objects.
Thomas Wouters <thomas@python.org>
parents:
43089
diff
changeset
|
870 MAX_Py_ssize_t = sys.maxsize |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
871 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
872 def set_memlimit(limit): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
873 global max_memuse |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
874 global real_max_memuse |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
875 sizes = { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
876 'k': 1024, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
877 'm': _1M, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
878 'g': _1G, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
879 't': 1024*_1G, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
880 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
881 m = re.match(r'(\d+(\.\d+)?) (K|M|G|T)b?$', limit, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
882 re.IGNORECASE | re.VERBOSE) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
883 if m is None: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
884 raise ValueError('Invalid memory limit %r' % (limit,)) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
885 memlimit = int(float(m.group(1)) * sizes[m.group(3).lower()]) |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
886 real_max_memuse = memlimit |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
887 if memlimit > MAX_Py_ssize_t: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
888 memlimit = MAX_Py_ssize_t |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
889 if memlimit < _2G - 1: |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
890 raise ValueError('Memory limit %r too low to be useful' % (limit,)) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
891 max_memuse = memlimit |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
892 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
893 def bigmemtest(minsize, memuse, overhead=5*_1M): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
894 """Decorator for bigmem tests. |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
895 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
896 'minsize' is the minimum useful size for the test (in arbitrary, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
897 test-interpreted units.) 'memuse' is the number of 'bytes per size' for |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
898 the test, or a good estimate of it. 'overhead' specifies fixed overhead, |
|
46430
47d9bbe10897
Merged revisions 62260-62261,62266,62271,62277-62279,62289-62290,62293-62298,62302-62306,62308,62311,62313-62315,62319-62321 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
46370
diff
changeset
|
899 independent of the testsize, and defaults to 5Mb. |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
900 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
901 The decorator tries to guess a good value for 'size' and passes it to |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
902 the decorated test function. If minsize * memuse is more than the |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
903 allowed memory use (as defined by max_memuse), the test is skipped. |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
904 Otherwise, minsize is adjusted upward to use up to max_memuse. |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
905 """ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
906 def decorator(f): |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
907 def wrapper(self): |
|
52069
bfc2fa4c8444
Issue #3700: make test_bigmem py3k-compatible, and add bytes/bytearray tests
Antoine Pitrou <solipsis@pitrou.net>
parents:
50915
diff
changeset
|
908 # Retrieve values in case someone decided to adjust them |
|
bfc2fa4c8444
Issue #3700: make test_bigmem py3k-compatible, and add bytes/bytearray tests
Antoine Pitrou <solipsis@pitrou.net>
parents:
50915
diff
changeset
|
909 minsize = wrapper.minsize |
|
bfc2fa4c8444
Issue #3700: make test_bigmem py3k-compatible, and add bytes/bytearray tests
Antoine Pitrou <solipsis@pitrou.net>
parents:
50915
diff
changeset
|
910 memuse = wrapper.memuse |
|
bfc2fa4c8444
Issue #3700: make test_bigmem py3k-compatible, and add bytes/bytearray tests
Antoine Pitrou <solipsis@pitrou.net>
parents:
50915
diff
changeset
|
911 overhead = wrapper.overhead |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
912 if not max_memuse: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
913 # If max_memuse is 0 (the default), |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
914 # we still want to run the tests with size set to a few kb, |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
915 # to make sure they work. We still want to avoid using |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
916 # too much memory, though, but we do that noisily. |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
917 maxsize = 5147 |
|
55010
f2b65bd67df2
remove use of failIf
Benjamin Peterson <benjamin@python.org>
parents:
54967
diff
changeset
|
918 self.assertFalse(maxsize * memuse + overhead > 20 * _1M) |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
919 else: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
920 maxsize = int((max_memuse - overhead) / memuse) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
921 if maxsize < minsize: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
922 # Really ought to print 'test skipped' or something |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
923 if verbose: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
924 sys.stderr.write("Skipping %s because of memory " |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
925 "constraint\n" % (f.__name__,)) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
926 return |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
927 # Try to keep some breathing room in memory use |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
928 maxsize = max(maxsize - 50 * _1M, minsize) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
929 return f(self, maxsize) |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
930 wrapper.minsize = minsize |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
931 wrapper.memuse = memuse |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
932 wrapper.overhead = overhead |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
933 return wrapper |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
934 return decorator |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
935 |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
936 def precisionbigmemtest(size, memuse, overhead=5*_1M): |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
937 def decorator(f): |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
938 def wrapper(self): |
|
52069
bfc2fa4c8444
Issue #3700: make test_bigmem py3k-compatible, and add bytes/bytearray tests
Antoine Pitrou <solipsis@pitrou.net>
parents:
50915
diff
changeset
|
939 size = wrapper.size |
|
bfc2fa4c8444
Issue #3700: make test_bigmem py3k-compatible, and add bytes/bytearray tests
Antoine Pitrou <solipsis@pitrou.net>
parents:
50915
diff
changeset
|
940 memuse = wrapper.memuse |
|
bfc2fa4c8444
Issue #3700: make test_bigmem py3k-compatible, and add bytes/bytearray tests
Antoine Pitrou <solipsis@pitrou.net>
parents:
50915
diff
changeset
|
941 overhead = wrapper.overhead |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
942 if not real_max_memuse: |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
943 maxsize = 5147 |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
944 else: |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
945 maxsize = size |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
946 |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
947 if real_max_memuse and real_max_memuse < maxsize * memuse: |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
948 if verbose: |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
949 sys.stderr.write("Skipping %s because of memory " |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
950 "constraint\n" % (f.__name__,)) |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
951 return |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
952 |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
953 return f(self, maxsize) |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
954 wrapper.size = size |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
955 wrapper.memuse = memuse |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
956 wrapper.overhead = overhead |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
957 return wrapper |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
958 return decorator |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
959 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
960 def bigaddrspacetest(f): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
961 """Decorator for tests that fill the address space.""" |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
962 def wrapper(self): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
963 if max_memuse < MAX_Py_ssize_t: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
964 if verbose: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
965 sys.stderr.write("Skipping %s because of memory " |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
966 "constraint\n" % (f.__name__,)) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
967 else: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
968 return f(self) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
969 return wrapper |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
970 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
971 #======================================================================= |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
972 # unittest integration. |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
973 |
|
17133
d0fd60c59aef
Updated to latest PyUnit version (1.31 in PyUnit CVS); test_support.py
Steve Purcell <steve@pythonconsulting.com>
parents:
17109
diff
changeset
|
974 class BasicTestRunner: |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
975 def run(self, test): |
|
17133
d0fd60c59aef
Updated to latest PyUnit version (1.31 in PyUnit CVS); test_support.py
Steve Purcell <steve@pythonconsulting.com>
parents:
17109
diff
changeset
|
976 result = unittest.TestResult() |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
977 test(result) |
|
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
978 return result |
|
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
979 |
|
52389
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
980 def _id(obj): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
981 return obj |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
982 |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
983 def requires_resource(resource): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
984 if resource_is_enabled(resource): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
985 return _id |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
986 else: |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
987 return unittest.skip("resource {0!r} is not enabled".format(resource)) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
988 |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
989 def cpython_only(test): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
990 """ |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
991 Decorator for tests only applicable on CPython. |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
992 """ |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
993 return impl_detail(cpython=True)(test) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
994 |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
995 def impl_detail(msg=None, **guards): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
996 if check_impl_detail(**guards): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
997 return _id |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
998 if msg is None: |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
999 guardnames, default = _parse_guards(guards) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1000 if default: |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1001 msg = "implementation detail not available on {0}" |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1002 else: |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1003 msg = "implementation detail specific to {0}" |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1004 guardnames = sorted(guardnames.keys()) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1005 msg = msg.format(' or '.join(guardnames)) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1006 return unittest.skip(msg) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1007 |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1008 def _parse_guards(guards): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1009 # Returns a tuple ({platform_name: run_me}, default_value) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1010 if not guards: |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1011 return ({'cpython': True}, False) |
| 53487 | 1012 is_true = list(guards.values())[0] |
| 1013 assert list(guards.values()) == [is_true] * len(guards) # all True or all False | |
|
52389
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1014 return (guards, not is_true) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1015 |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1016 # Use the following check to guard CPython's implementation-specific tests -- |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1017 # or to run them only on the implementation(s) guarded by the arguments. |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1018 def check_impl_detail(**guards): |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1019 """This function returns True or False depending on the host platform. |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1020 Examples: |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1021 if check_impl_detail(): # only on CPython (default) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1022 if check_impl_detail(jython=True): # only on Jython |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1023 if check_impl_detail(cpython=False): # everywhere except on CPython |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1024 """ |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1025 guards, default = _parse_guards(guards) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1026 return guards.get(platform.python_implementation().lower(), default) |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1027 |
|
d4e7470bd660
Merged revisions 70554,70588-70589,70598,70605,70611-70621,70623-70624,70626-70627 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
52069
diff
changeset
|
1028 |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1029 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1030 def _run_suite(suite): |
|
19995
b07cb51d731c
run_suite(): Oops, update a docstring.
Barry Warsaw <barry@python.org>
parents:
19994
diff
changeset
|
1031 """Run tests from a unittest.TestSuite-derived class.""" |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1032 if verbose: |
|
61163
cf0361c02551
Issue #8533: revert r80694; try a different fix: regrtest uses backslashreplace
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61154
diff
changeset
|
1033 runner = unittest.TextTestRunner(sys.stdout, verbosity=2) |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1034 else: |
|
17133
d0fd60c59aef
Updated to latest PyUnit version (1.31 in PyUnit CVS); test_support.py
Steve Purcell <steve@pythonconsulting.com>
parents:
17109
diff
changeset
|
1035 runner = BasicTestRunner() |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1036 |
|
17133
d0fd60c59aef
Updated to latest PyUnit version (1.31 in PyUnit CVS); test_support.py
Steve Purcell <steve@pythonconsulting.com>
parents:
17109
diff
changeset
|
1037 result = runner.run(suite) |
|
d0fd60c59aef
Updated to latest PyUnit version (1.31 in PyUnit CVS); test_support.py
Steve Purcell <steve@pythonconsulting.com>
parents:
17109
diff
changeset
|
1038 if not result.wasSuccessful(): |
|
18635
c8e4728d2ab0
Give more useful information about a failing PyUnit-style test.
Fred Drake <fdrake@acm.org>
parents:
17817
diff
changeset
|
1039 if len(result.errors) == 1 and not result.failures: |
|
c8e4728d2ab0
Give more useful information about a failing PyUnit-style test.
Fred Drake <fdrake@acm.org>
parents:
17817
diff
changeset
|
1040 err = result.errors[0][1] |
|
c8e4728d2ab0
Give more useful information about a failing PyUnit-style test.
Fred Drake <fdrake@acm.org>
parents:
17817
diff
changeset
|
1041 elif len(result.failures) == 1 and not result.errors: |
|
c8e4728d2ab0
Give more useful information about a failing PyUnit-style test.
Fred Drake <fdrake@acm.org>
parents:
17817
diff
changeset
|
1042 err = result.failures[0][1] |
|
c8e4728d2ab0
Give more useful information about a failing PyUnit-style test.
Fred Drake <fdrake@acm.org>
parents:
17817
diff
changeset
|
1043 else: |
|
56627
5541e42e1c81
Merged revisions 75528 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
56592
diff
changeset
|
1044 err = "multiple errors occurred" |
|
5541e42e1c81
Merged revisions 75528 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
56592
diff
changeset
|
1045 if not verbose: err += "; run in verbose mode for details" |
|
19807
086ffafaed55
It appears that unittest was changed to stop hoarding raw exception data,
Tim Peters <tim.peters@gmail.com>
parents:
19768
diff
changeset
|
1046 raise TestFailed(err) |
|
19817
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1047 |
|
19994
ab6c14822de1
run_suite(): Factor this out of run_unittest() for tests that build
Barry Warsaw <barry@python.org>
parents:
19819
diff
changeset
|
1048 |
|
28917
1741af48fd9f
Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents:
28863
diff
changeset
|
1049 def run_unittest(*classes): |
|
1741af48fd9f
Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents:
28863
diff
changeset
|
1050 """Run tests from unittest.TestCase-derived classes.""" |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1051 valid_types = (unittest.TestSuite, unittest.TestCase) |
|
28863
6d852ebff36f
Factor out common boilerplate for test_support
Raymond Hettinger <python@rcn.com>
parents:
28799
diff
changeset
|
1052 suite = unittest.TestSuite() |
|
28917
1741af48fd9f
Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents:
28863
diff
changeset
|
1053 for cls in classes: |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43100
diff
changeset
|
1054 if isinstance(cls, str): |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1055 if cls in sys.modules: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1056 suite.addTest(unittest.findTestCases(sys.modules[cls])) |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1057 else: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1058 raise ValueError("str arguments must be keys in sys.modules") |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1059 elif isinstance(cls, valid_types): |
|
29880
3f214b39b4df
run_unittest() to support TestCase instances as well as classes. Helps with doctests.
Raymond Hettinger <python@rcn.com>
parents:
29142
diff
changeset
|
1060 suite.addTest(cls) |
|
3f214b39b4df
run_unittest() to support TestCase instances as well as classes. Helps with doctests.
Raymond Hettinger <python@rcn.com>
parents:
29142
diff
changeset
|
1061 else: |
|
3f214b39b4df
run_unittest() to support TestCase instances as well as classes. Helps with doctests.
Raymond Hettinger <python@rcn.com>
parents:
29142
diff
changeset
|
1062 suite.addTest(unittest.makeSuite(cls)) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1063 _run_suite(suite) |
|
28863
6d852ebff36f
Factor out common boilerplate for test_support
Raymond Hettinger <python@rcn.com>
parents:
28799
diff
changeset
|
1064 |
|
19994
ab6c14822de1
run_suite(): Factor this out of run_unittest() for tests that build
Barry Warsaw <barry@python.org>
parents:
19819
diff
changeset
|
1065 |
|
19817
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1066 #======================================================================= |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1067 # doctest driver. |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1068 |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1069 def run_doctest(module, verbosity=None): |
|
20227
92f86436b6be
SF bug [#467336] doctest failures w/ new-style classes.
Tim Peters <tim.peters@gmail.com>
parents:
20091
diff
changeset
|
1070 """Run doctest on the given module. Return (#failures, #tests). |
|
19817
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1071 |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1072 If optional argument verbosity is not specified (or is None), pass |
|
47201
9c930a32cebb
#2621 rename test.test_support to test.support
Benjamin Peterson <benjamin@python.org>
parents:
47067
diff
changeset
|
1073 support's belief about verbosity on to doctest. Else doctest's |
|
19819
53e0cae3cf6c
Repair late-night doc typos.
Tim Peters <tim.peters@gmail.com>
parents:
19817
diff
changeset
|
1074 usual behavior is used (it searches sys.argv for -v). |
|
19817
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1075 """ |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1076 |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1077 import doctest |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1078 |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1079 if verbosity is None: |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1080 verbosity = verbose |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1081 else: |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1082 verbosity = None |
|
b7396287cf65
Teach regrtest how to pass on doctest failure msgs. This is done via a
Tim Peters <tim.peters@gmail.com>
parents:
19807
diff
changeset
|
1083 |
|
20088
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1084 # Direct doctest output (normally just errors) to real stdout; doctest |
|
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1085 # output shouldn't be compared by regrtest. |
|
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1086 save_stdout = sys.stdout |
|
20091
40d4d1cd6c84
Guido points out that sys.__stdout__ is a bit bucket under IDLE. So keep
Tim Peters <tim.peters@gmail.com>
parents:
20088
diff
changeset
|
1087 sys.stdout = get_original_stdout() |
|
20088
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1088 try: |
|
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1089 f, t = doctest.testmod(module, verbose=verbosity) |
|
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1090 if f: |
|
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1091 raise TestFailed("%d of %d doctests failed" % (f, t)) |
|
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1092 finally: |
|
386fb26e0874
Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
Tim Peters <tim.peters@gmail.com>
parents:
20083
diff
changeset
|
1093 sys.stdout = save_stdout |
|
29140
e57e22aa56a4
Provide a clue that the doctests have run.
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
1094 if verbose: |
| 45182 | 1095 print('doctest (%s) ... %d tests with zero failures' % |
| 1096 (module.__name__, t)) | |
|
29140
e57e22aa56a4
Provide a clue that the doctests have run.
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
1097 return f, t |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1098 |
|
57214
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1099 |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1100 #======================================================================= |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1101 # Support for saving and restoring the imported modules. |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1102 |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1103 def modules_setup(): |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1104 return sys.modules.copy(), |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1105 |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1106 def modules_cleanup(oldmodules): |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1107 # Encoders/decoders are registered permanently within the internal |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1108 # codec cache. If we destroy the corresponding modules their |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1109 # globals will be set to None which will trip up the cached functions. |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1110 encodings = [(k, v) for k, v in sys.modules.items() |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1111 if k.startswith('encodings.')] |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1112 sys.modules.clear() |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1113 sys.modules.update(encodings) |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1114 sys.modules.update(oldmodules) |
|
685527ae437d
Issue #6551: test_zipimport could import and then destroy some modules of
Antoine Pitrou <solipsis@pitrou.net>
parents:
57055
diff
changeset
|
1115 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1116 #======================================================================= |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1117 # Threading support to prevent reporting refleaks when running regrtest.py -R |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1118 |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1119 # NOTE: we use thread._count() rather than threading.enumerate() (or the |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1120 # moral equivalent thereof) because a threading.Thread object is still alive |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1121 # until its __bootstrap() method has returned, even after it has been |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1122 # unregistered from the threading module. |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1123 # thread._count(), on the other hand, only gets decremented *after* the |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1124 # __bootstrap() method has returned, which gives us reliable reference counts |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1125 # at the end of a test run. |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1126 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1127 def threading_setup(): |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1128 if _thread: |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1129 return _thread._count(), |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1130 else: |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1131 return 1, |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1132 |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1133 def threading_cleanup(nb_threads): |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1134 if not _thread: |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1135 return |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1136 _MAX_COUNT = 10 |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1137 for count in range(_MAX_COUNT): |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1138 n = _thread._count() |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1139 if n == nb_threads: |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1140 break |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1141 time.sleep(0.1) |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1142 # XXX print a warning in case of failure? |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1143 |
|
54501
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1144 def reap_threads(func): |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1145 """Use this function when threads are being used. This will |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1146 ensure that the threads are cleaned up even when the test fails. |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1147 If threading is unavailable this function does nothing. |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1148 """ |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1149 if not _thread: |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1150 return func |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1151 |
|
54501
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1152 @functools.wraps(func) |
|
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1153 def decorator(*args): |
|
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1154 key = threading_setup() |
|
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1155 try: |
|
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1156 return func(*args) |
|
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1157 finally: |
|
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1158 threading_cleanup(*key) |
|
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1159 return decorator |
|
ced380b40004
Merged revisions 72506,72525-72526,72551,72558,72616,72654-72655,72689,72745,72750,72802,72812,72822,72824,72826-72827,72833,72876,72890,72923,72946,73026,73042,73045,73047,73065,73068-73069 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
53646
diff
changeset
|
1160 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1161 def reap_children(): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1162 """Use this function at the end of test_main() whenever sub-processes |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1163 are started. This will help ensure that no extra children (zombies) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1164 stick around to hog resources and create problems when looking |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1165 for refleaks. |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1166 """ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1167 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1168 # Reap all our dead child processes so we don't leave zombies around. |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1169 # These hog resources and might be causing some of the buildbots to die. |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1170 if hasattr(os, 'waitpid'): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1171 any_process = -1 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1172 while True: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1173 try: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1174 # This will raise an exception on Windows. That's ok. |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1175 pid, status = os.waitpid(any_process, os.WNOHANG) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1176 if pid == 0: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1177 break |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1178 except: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1179 break |
|
59654
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1180 |
|
62874
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1181 try: |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1182 from .symlink_support import enable_symlink_privilege |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1183 except: |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1184 enable_symlink_privilege = lambda: True |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1185 |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1186 def can_symlink(): |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1187 """It's no longer sufficient to test for the presence of symlink in the |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1188 os module - on Windows XP and earlier, os.symlink exists but a |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1189 NotImplementedError is thrown. |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1190 """ |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1191 has_symlink = hasattr(os, 'symlink') |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1192 is_old_windows = sys.platform == "win32" and sys.getwindowsversion().major < 6 |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1193 has_privilege = False if is_old_windows else enable_symlink_privilege() |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1194 return has_symlink and (not is_old_windows) and has_privilege |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1195 |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1196 def skip_unless_symlink(test): |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1197 """Skip decorator for tests that require functional symlink""" |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1198 selector = can_symlink() |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1199 msg = "Requires functional symlink implementation" |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1200 return [unittest.skip(msg)(test), test][selector] |
|
730b728e5aef
Implement #1578269. Patch by Jason R. Coombs.
Brian Curtin <brian.curtin@gmail.com>
parents:
61226
diff
changeset
|
1201 |
|
59654
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1202 @contextlib.contextmanager |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1203 def swap_attr(obj, attr, new_val): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1204 """Temporary swap out an attribute with a new object. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1205 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1206 Usage: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1207 with swap_attr(obj, "attr", 5): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1208 ... |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1209 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1210 This will set obj.attr to 5 for the duration of the with: block, |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1211 restoring the old value at the end of the block. If `attr` doesn't |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1212 exist on `obj`, it will be created and then deleted at the end of the |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1213 block. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1214 """ |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1215 if hasattr(obj, attr): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1216 real_val = getattr(obj, attr) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1217 setattr(obj, attr, new_val) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1218 try: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1219 yield |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1220 finally: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1221 setattr(obj, attr, real_val) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1222 else: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1223 setattr(obj, attr, new_val) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1224 try: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1225 yield |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1226 finally: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1227 delattr(obj, attr) |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1228 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1229 @contextlib.contextmanager |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1230 def swap_item(obj, item, new_val): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1231 """Temporary swap out an item with a new object. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1232 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1233 Usage: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1234 with swap_item(obj, "item", 5): |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1235 ... |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1236 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1237 This will set obj["item"] to 5 for the duration of the with: block, |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1238 restoring the old value at the end of the block. If `item` doesn't |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1239 exist on `obj`, it will be created and then deleted at the end of the |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1240 block. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1241 """ |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1242 if item in obj: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1243 real_val = obj[item] |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1244 obj[item] = new_val |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1245 try: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1246 yield |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1247 finally: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1248 obj[item] = real_val |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1249 else: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1250 obj[item] = new_val |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1251 try: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1252 yield |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1253 finally: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1254 del obj[item] |
|
63727
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1255 |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1256 def strip_python_stderr(stderr): |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1257 """Strip the stderr of a Python process from potential debug output |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1258 emitted by the interpreter. |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1259 |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1260 This will typically be run on the result of the communicate() method |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1261 of a subprocess.Popen object. |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1262 """ |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1263 stderr = re.sub(br"\[\d+ refs\]\r?\n?$", b"", stderr).strip() |
|
5931112eabe7
Factor out stripping of interpreter debug output in test.support.strip_python_stderr()
Antoine Pitrou <solipsis@pitrou.net>
parents:
62998
diff
changeset
|
1264 return stderr |
