Mercurial > cpython-lru_cache-weakref
annotate Lib/test/support.py @ 79691:05c8928362ee
Merge __next__ method link fixes with 3.3.
| author | Ezio Melotti <ezio.melotti@gmail.com> |
|---|---|
| date | Fri, 12 Oct 2012 13:46:37 +0300 |
| parents | 332b93ce7bf9 |
| children | 6017f09ead53 67d69f943b7f |
| 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 |
|
68112
7f8da10bfcef
Fix imports from collections.abc
Raymond Hettinger <python@rcn.com>
parents:
68094
diff
changeset
|
18 import collections.abc |
|
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 |
|
65725
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
23 import sysconfig |
|
71612
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
24 import fnmatch |
|
66816
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
25 import logging.handlers |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
26 import struct |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
27 import tempfile |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
28 import _testcapi |
|
65725
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
29 |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
30 try: |
|
71365
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
31 import _thread, threading |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
32 except ImportError: |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
33 _thread = None |
|
71365
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
34 threading = None |
|
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
35 try: |
|
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
36 import multiprocessing.process |
|
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
37 except ImportError: |
|
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
38 multiprocessing = None |
|
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
39 |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
40 try: |
|
70208
cfa2feb39c1f
Skip tests that require zlib in the packaging tests. Also add a requires_zlib decorator to test.support.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70098
diff
changeset
|
41 import zlib |
|
cfa2feb39c1f
Skip tests that require zlib in the packaging tests. Also add a requires_zlib decorator to test.support.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70098
diff
changeset
|
42 except ImportError: |
|
cfa2feb39c1f
Skip tests that require zlib in the packaging tests. Also add a requires_zlib decorator to test.support.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70098
diff
changeset
|
43 zlib = None |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
44 |
|
76682
028e8e0b03e8
Issue #14371: Support bzip2 in zipfile module.
Martin v. Löwis <martin@v.loewis.de>
parents:
76652
diff
changeset
|
45 try: |
|
028e8e0b03e8
Issue #14371: Support bzip2 in zipfile module.
Martin v. Löwis <martin@v.loewis.de>
parents:
76652
diff
changeset
|
46 import bz2 |
|
028e8e0b03e8
Issue #14371: Support bzip2 in zipfile module.
Martin v. Löwis <martin@v.loewis.de>
parents:
76652
diff
changeset
|
47 except ImportError: |
|
028e8e0b03e8
Issue #14371: Support bzip2 in zipfile module.
Martin v. Löwis <martin@v.loewis.de>
parents:
76652
diff
changeset
|
48 bz2 = None |
|
028e8e0b03e8
Issue #14371: Support bzip2 in zipfile module.
Martin v. Löwis <martin@v.loewis.de>
parents:
76652
diff
changeset
|
49 |
|
76895
fccdcd83708a
Issue #14366: Support lzma compression in zip files.
Martin v. Löwis <martin@v.loewis.de>
parents:
76883
diff
changeset
|
50 try: |
|
fccdcd83708a
Issue #14366: Support lzma compression in zip files.
Martin v. Löwis <martin@v.loewis.de>
parents:
76883
diff
changeset
|
51 import lzma |
|
fccdcd83708a
Issue #14366: Support lzma compression in zip files.
Martin v. Löwis <martin@v.loewis.de>
parents:
76883
diff
changeset
|
52 except ImportError: |
|
fccdcd83708a
Issue #14366: Support lzma compression in zip files.
Martin v. Löwis <martin@v.loewis.de>
parents:
76883
diff
changeset
|
53 lzma = None |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
54 |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
55 __all__ = [ |
|
77113
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
56 "Error", "TestFailed", "ResourceDenied", "import_module", "verbose", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
57 "use_resources", "max_memuse", "record_original_stdout", |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
58 "get_original_stdout", "unload", "unlink", "rmtree", "forget", |
|
72618
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
59 "is_resource_enabled", "requires", "requires_freebsd_version", |
|
77113
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
60 "requires_linux_version", "requires_mac_ver", "find_unused_port", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
61 "bind_port", "IPV6_ENABLED", "is_jython", "TESTFN", "HOST", "SAVEDCWD", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
62 "temp_cwd", "findfile", "create_empty_file", "sortdict", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
63 "check_syntax_error", "open_urlresource", "check_warnings", "CleanImport", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
64 "EnvironmentVarGuard", "TransientResource", "captured_stdout", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
65 "captured_stdin", "captured_stderr", "time_out", "socket_peer_reset", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
66 "ioerror_peer_reset", "run_with_locale", 'temp_umask', |
|
69672
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
67 "transient_internet", "set_memlimit", "bigmemtest", "bigaddrspacetest", |
|
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
68 "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup", |
|
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
69 "threading_cleanup", "reap_children", "cpython_only", "check_impl_detail", |
|
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
70 "get_attribute", "swap_item", "swap_attr", "requires_IEEE_754", |
| 69943 | 71 "TestHandler", "Matcher", "can_symlink", "skip_unless_symlink", |
|
77113
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
72 "skip_unless_xattr", "import_fresh_module", "requires_zlib", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
73 "PIPE_MAX_SIZE", "failfast", "anticipate_failure", "run_with_tz", |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
74 "requires_bz2", "requires_lzma" |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
75 ] |
|
47317
ba8015e23487
Merged revisions 63698 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
47201
diff
changeset
|
76 |
|
13682
7de18f04f85a
Restore TestSkipped exception; appears to have disappeared in last checkin.
Fred Drake <fdrake@acm.org>
parents:
13647
diff
changeset
|
77 class Error(Exception): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
78 """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
|
79 |
|
7de18f04f85a
Restore TestSkipped exception; appears to have disappeared in last checkin.
Fred Drake <fdrake@acm.org>
parents:
13647
diff
changeset
|
80 class TestFailed(Error): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
81 """Test failed.""" |
| 653 | 82 |
|
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
|
83 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
|
84 """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
|
85 |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
86 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
|
87 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
|
88 and unexpected skips. |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
89 """ |
|
974f196abb87
test_support.requires(): Instead of raising TestSkipped, raise a new
Fred Drake <fdrake@acm.org>
parents:
26527
diff
changeset
|
90 |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
91 @contextlib.contextmanager |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
92 def _ignore_deprecated_imports(ignore=True): |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
93 """Context manager to suppress package and module deprecation |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
94 warnings when importing them. |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
95 |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
96 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
|
97 if ignore: |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
98 with warnings.catch_warnings(): |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
99 warnings.filterwarnings("ignore", ".+ (module|package)", |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
100 DeprecationWarning) |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
101 yield |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
102 else: |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
103 yield |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
104 |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
105 |
|
46769
5d15a8bcc445
Merged revisions 62873,62887,62892-62896,62904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
106 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
|
107 """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
|
108 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
|
109 |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
110 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
|
111 will be suppressed.""" |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
112 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
|
113 try: |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
114 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
|
115 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
|
116 raise unittest.SkipTest(str(msg)) |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
117 |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
118 |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
119 def _save_and_remove_module(name, orig_modules): |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
120 """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
|
121 |
|
69955
3ab1eb027856
#11910: change import_fresh_module to return None when one of the "fresh" modules can not be imported.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69942
diff
changeset
|
122 Raise ImportError if the module can't be imported.""" |
|
70081
9b7bfe86f04d
Change import_fresh_module to work with packages.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69955
diff
changeset
|
123 # try to import the module and raise an error if it can't be imported |
|
9b7bfe86f04d
Change import_fresh_module to work with packages.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69955
diff
changeset
|
124 if name not in sys.modules: |
|
69955
3ab1eb027856
#11910: change import_fresh_module to return None when one of the "fresh" modules can not be imported.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69942
diff
changeset
|
125 __import__(name) |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
126 del sys.modules[name] |
|
70081
9b7bfe86f04d
Change import_fresh_module to work with packages.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69955
diff
changeset
|
127 for modname in list(sys.modules): |
|
9b7bfe86f04d
Change import_fresh_module to work with packages.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69955
diff
changeset
|
128 if modname == name or modname.startswith(name + '.'): |
|
9b7bfe86f04d
Change import_fresh_module to work with packages.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69955
diff
changeset
|
129 orig_modules[modname] = sys.modules[modname] |
|
9b7bfe86f04d
Change import_fresh_module to work with packages.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69955
diff
changeset
|
130 del sys.modules[modname] |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
131 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
132 def _save_and_block_module(name, orig_modules): |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
133 """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
|
134 |
|
69955
3ab1eb027856
#11910: change import_fresh_module to return None when one of the "fresh" modules can not be imported.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69942
diff
changeset
|
135 Return True if the module was in sys.modules, False otherwise.""" |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
136 saved = True |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
137 try: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
138 orig_modules[name] = sys.modules[name] |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
139 except KeyError: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
140 saved = False |
|
62999
daea978a48ae
Merged revisions 82850 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
61581
diff
changeset
|
141 sys.modules[name] = None |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
142 return saved |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
143 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
144 |
|
72400
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
145 def anticipate_failure(condition): |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
146 """Decorator to mark a test that is known to be broken in some cases |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
147 |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
148 Any use of this decorator should have a comment identifying the |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
149 associated tracker issue. |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
150 """ |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
151 if condition: |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
152 return unittest.expectedFailure |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
153 return lambda f: f |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
154 |
|
a4e4facad164
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
Nick Coghlan <ncoghlan@gmail.com>
parents:
72137
diff
changeset
|
155 |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
156 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
|
157 """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
|
158 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
|
159 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
|
160 |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
161 Modules named in fresh are also imported anew if needed by the import. |
|
69955
3ab1eb027856
#11910: change import_fresh_module to return None when one of the "fresh" modules can not be imported.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69942
diff
changeset
|
162 If one of these modules can't be imported, None is returned. |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
163 |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
164 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
|
165 takes place. |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
166 |
|
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
167 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
|
168 will be suppressed.""" |
|
70085
c2853a54b29e
#5723: Improve json tests to be executed with and without accelerations.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70081
diff
changeset
|
169 # NOTE: test_heapq, test_json and test_warnings include extra sanity checks |
|
c2853a54b29e
#5723: Improve json tests to be executed with and without accelerations.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70081
diff
changeset
|
170 # to make sure that this utility function is working as expected |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
171 with _ignore_deprecated_imports(deprecated): |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
172 # 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
|
173 # 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
|
174 orig_modules = {} |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
175 names_to_remove = [] |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
176 _save_and_remove_module(name, orig_modules) |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
177 try: |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
178 for fresh_name in fresh: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
179 _save_and_remove_module(fresh_name, orig_modules) |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
180 for blocked_name in blocked: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
181 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
|
182 names_to_remove.append(blocked_name) |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
183 fresh_module = importlib.import_module(name) |
|
69955
3ab1eb027856
#11910: change import_fresh_module to return None when one of the "fresh" modules can not be imported.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69942
diff
changeset
|
184 except ImportError: |
|
3ab1eb027856
#11910: change import_fresh_module to return None when one of the "fresh" modules can not be imported.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
69942
diff
changeset
|
185 fresh_module = None |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
186 finally: |
|
53317
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
187 for orig_name, module in orig_modules.items(): |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
188 sys.modules[orig_name] = module |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
189 for name_to_remove in names_to_remove: |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
190 del sys.modules[name_to_remove] |
|
b5df094d8941
Merged revisions 71799 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
53051
diff
changeset
|
191 return fresh_module |
|
53051
f652fe1649ed
Merged revisions 71465 via svnmerge from
Nick Coghlan <ncoghlan@gmail.com>
parents:
52625
diff
changeset
|
192 |
|
46769
5d15a8bcc445
Merged revisions 62873,62887,62892-62896,62904 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
46664
diff
changeset
|
193 |
|
52625
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
194 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
|
195 """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
|
196 try: |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
197 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
|
198 except AttributeError: |
|
72733
472ee6ed7949
Update skip message printed by test.support.get_attribute.
Éric Araujo <merwok@netwok.org>
parents:
72647
diff
changeset
|
199 raise unittest.SkipTest("object %r has no attribute %r" % (obj, name)) |
|
52625
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
200 else: |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
201 return attribute |
|
f84340886936
Merged revisions 70734,70775,70856,70874,70876-70877 via svnmerge
R. David Murray <rdmurray@bitdance.com>
parents:
52389
diff
changeset
|
202 |
|
19416
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
203 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
|
204 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
|
205 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
|
206 # small sizes, to make sure they work.) |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
207 real_max_memuse = 0 |
|
71487
9f847dfba217
Issue #12624: It is now possible to fail after the first failure when
Antoine Pitrou <solipsis@pitrou.net>
parents:
71365
diff
changeset
|
208 failfast = False |
|
71612
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
209 match_tests = None |
|
4791
a2fd80eed27f
Add verbose flag for regression test to clear.
Guido van Rossum <guido@python.org>
parents:
1197
diff
changeset
|
210 |
|
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
|
211 # _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
|
212 # 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
|
213 # 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
|
214 _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
|
215 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
|
216 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
|
217 _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
|
218 |
|
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
|
219 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
|
220 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
|
221 |
| 653 | 222 def unload(name): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
223 try: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
224 del sys.modules[name] |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
225 except KeyError: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
226 pass |
| 653 | 227 |
|
78551
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
228 if sys.platform.startswith("win"): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
229 def _waitfor(func, pathname, waitall=False): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
230 # Peform the operation |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
231 func(pathname) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
232 # Now setup the wait loop |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
233 if waitall: |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
234 dirname = pathname |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
235 else: |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
236 dirname, name = os.path.split(pathname) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
237 dirname = dirname or '.' |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
238 # Check for `pathname` to be removed from the filesystem. |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
239 # The exponential backoff of the timeout amounts to a total |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
240 # of ~1 second after which the deletion is probably an error |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
241 # anyway. |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
242 # Testing on a i7@4.3GHz shows that usually only 1 iteration is |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
243 # required when contention occurs. |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
244 timeout = 0.001 |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
245 while timeout < 1.0: |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
246 # Note we are only testing for the existance of the file(s) in |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
247 # the contents of the directory regardless of any security or |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
248 # access rights. If we have made it this far, we have sufficient |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
249 # permissions to do that much using Python's equivalent of the |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
250 # Windows API FindFirstFile. |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
251 # Other Windows APIs can fail or give incorrect results when |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
252 # dealing with files that are pending deletion. |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
253 L = os.listdir(dirname) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
254 if not (L if waitall else name in L): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
255 return |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
256 # Increase the timeout and try again |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
257 time.sleep(timeout) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
258 timeout *= 2 |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
259 warnings.warn('tests may fail, delete still pending for ' + pathname, |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
260 RuntimeWarning, stacklevel=4) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
261 |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
262 def _unlink(filename): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
263 _waitfor(os.unlink, filename) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
264 |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
265 def _rmdir(dirname): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
266 _waitfor(os.rmdir, dirname) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
267 |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
268 def _rmtree(path): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
269 def _rmtree_inner(path): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
270 for name in os.listdir(path): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
271 fullname = os.path.join(path, name) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
272 if os.path.isdir(fullname): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
273 _waitfor(_rmtree_inner, fullname, waitall=True) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
274 os.rmdir(fullname) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
275 else: |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
276 os.unlink(fullname) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
277 _waitfor(_rmtree_inner, path, waitall=True) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
278 _waitfor(os.rmdir, path) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
279 else: |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
280 _unlink = os.unlink |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
281 _rmdir = os.rmdir |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
282 _rmtree = shutil.rmtree |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
283 |
|
36382
99d491faa65c
Convenience function to remove a possibly non-existant file
Neal Norwitz <nnorwitz@gmail.com>
parents:
35998
diff
changeset
|
284 def unlink(filename): |
|
99d491faa65c
Convenience function to remove a possibly non-existant file
Neal Norwitz <nnorwitz@gmail.com>
parents:
35998
diff
changeset
|
285 try: |
|
78551
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
286 _unlink(filename) |
| 60648 | 287 except OSError as error: |
| 288 # 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
|
289 if error.errno not in (errno.ENOENT, errno.ENOTDIR): |
| 60648 | 290 raise |
|
36382
99d491faa65c
Convenience function to remove a possibly non-existant file
Neal Norwitz <nnorwitz@gmail.com>
parents:
35998
diff
changeset
|
291 |
|
78551
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
292 def rmdir(dirname): |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
293 try: |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
294 _rmdir(dirname) |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
295 except OSError as error: |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
296 # The directory need not exist. |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
297 if error.errno != errno.ENOENT: |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
298 raise |
|
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
299 |
|
45514
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
300 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
|
301 try: |
|
78551
fcad4566910b
Fix #15496. Add directory removal helpers to make Windows tests more reliable. Patch by Jeremy Kloth
Brian Curtin <brian@python.org>
parents:
78315
diff
changeset
|
302 _rmtree(path) |
| 60648 | 303 except OSError as error: |
|
72137
b5a5bd429580
Remove misleading comment and code.
Antoine Pitrou <solipsis@pitrou.net>
parents:
72120
diff
changeset
|
304 if error.errno != errno.ENOENT: |
|
45514
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
305 raise |
|
fce5af5ce16a
Merged revisions 61038,61042-61045,61047,61049-61053,61055-61057 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
45471
diff
changeset
|
306 |
| 60648 | 307 def make_legacy_pyc(source): |
| 308 """Move a PEP 3147 pyc/pyo file to its legacy pyc/pyo location. | |
| 309 | |
| 310 The choice of .pyc or .pyo extension is done based on the __debug__ flag | |
| 311 value. | |
| 312 | |
| 313 :param source: The file system path to the source file. The source file | |
| 314 does not need to exist, however the PEP 3147 pyc file must exist. | |
| 315 :return: The file system path to the legacy pyc file. | |
| 316 """ | |
| 317 pyc_file = imp.cache_from_source(source) | |
| 318 up_one = os.path.dirname(os.path.abspath(source)) | |
| 319 legacy_pyc = os.path.join(up_one, source + ('c' if __debug__ else 'o')) | |
| 320 os.rename(pyc_file, legacy_pyc) | |
| 321 return legacy_pyc | |
| 322 | |
| 653 | 323 def forget(modname): |
| 60648 | 324 """'Forget' a module was ever imported. |
| 325 | |
| 326 This removes the module from sys.modules and deletes any PEP 3147 or | |
| 327 legacy .pyc and .pyo files. | |
| 328 """ | |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
329 unload(modname) |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
330 for dirname in sys.path: |
| 60648 | 331 source = os.path.join(dirname, modname + '.py') |
| 332 # It doesn't matter if they exist or not, unlink all possible | |
| 333 # combinations of PEP 3147 and legacy pyc and pyo files. | |
| 334 unlink(source + 'c') | |
| 335 unlink(source + 'o') | |
| 336 unlink(imp.cache_from_source(source, debug_override=True)) | |
| 337 unlink(imp.cache_from_source(source, debug_override=False)) | |
| 653 | 338 |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
339 # On some platforms, should not run gui test even if it is allowed |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
340 # in `use_resources'. |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
341 if sys.platform.startswith('win'): |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
342 import ctypes |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
343 import ctypes.wintypes |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
344 def _is_gui_available(): |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
345 UOI_FLAGS = 1 |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
346 WSF_VISIBLE = 0x0001 |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
347 class USEROBJECTFLAGS(ctypes.Structure): |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
348 _fields_ = [("fInherit", ctypes.wintypes.BOOL), |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
349 ("fReserved", ctypes.wintypes.BOOL), |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
350 ("dwFlags", ctypes.wintypes.DWORD)] |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
351 dll = ctypes.windll.user32 |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
352 h = dll.GetProcessWindowStation() |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
353 if not h: |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
354 raise ctypes.WinError() |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
355 uof = USEROBJECTFLAGS() |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
356 needed = ctypes.wintypes.DWORD() |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
357 res = dll.GetUserObjectInformationW(h, |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
358 UOI_FLAGS, |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
359 ctypes.byref(uof), |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
360 ctypes.sizeof(uof), |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
361 ctypes.byref(needed)) |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
362 if not res: |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
363 raise ctypes.WinError() |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
364 return bool(uof.dwFlags & WSF_VISIBLE) |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
365 else: |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
366 def _is_gui_available(): |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
367 return True |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
368 |
|
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
|
369 def is_resource_enabled(resource): |
|
28968
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
370 """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
|
371 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
|
372 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
|
373 |
|
19416
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
374 def requires(resource, msg=None): |
|
28968
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
375 """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
|
376 |
|
b174d0927f0e
'forget' now also deletes any proper .pyo files.
Brett Cannon <bcannon@gmail.com>
parents:
28917
diff
changeset
|
377 If the caller's module is __main__ then automatically return True. The |
| 60648 | 378 possibility of False being returned occurs when regrtest.py is |
| 379 executing. | |
| 380 """ | |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
381 if resource == 'gui' and not _is_gui_available(): |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
382 raise unittest.SkipTest("Cannot use the 'gui' resource") |
|
28799
46d26afa8b95
if the test is run directly (__name__ == "__main__") don't actually require
Skip Montanaro <skip@pobox.com>
parents:
28174
diff
changeset
|
383 # 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
|
384 # 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
|
385 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
|
386 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
|
387 if not is_resource_enabled(resource): |
|
19416
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
388 if msg is None: |
|
71343
cdb0ae616d58
Always use repr for regrtest resources names
Éric Araujo <merwok@netwok.org>
parents:
71331
diff
changeset
|
389 msg = "Use of the %r 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
|
390 raise ResourceDenied(msg) |
|
19416
a6ce2d16d739
use_large_resources => use_resources
Barry Warsaw <barry@python.org>
parents:
19343
diff
changeset
|
391 |
|
72618
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
392 def _requires_unix_version(sysname, min_version): |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
393 """Decorator raising SkipTest if the OS is `sysname` and the version is less |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
394 than `min_version`. |
|
70612
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
395 |
|
72618
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
396 For example, @_requires_unix_version('FreeBSD', (7, 2)) raises SkipTest if |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
397 the FreeBSD version is less than 7.2. |
|
70612
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
398 """ |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
399 def decorator(func): |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
400 @functools.wraps(func) |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
401 def wrapper(*args, **kw): |
|
72618
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
402 if platform.system() == sysname: |
|
70612
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
403 version_txt = platform.release().split('-', 1)[0] |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
404 try: |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
405 version = tuple(map(int, version_txt.split('.'))) |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
406 except ValueError: |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
407 pass |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
408 else: |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
409 if version < min_version: |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
410 min_version_txt = '.'.join(map(str, min_version)) |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
411 raise unittest.SkipTest( |
|
72618
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
412 "%s version %s or higher required, not %s" |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
413 % (sysname, min_version_txt, version_txt)) |
|
70612
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
414 return wrapper |
|
277bbe6cae53
Issue #12196: Make test.support's requires_linux_version a decorator.
Charles-François Natali <neologix@free.fr>
parents:
70576
diff
changeset
|
415 return decorator |
|
70324
d585a6d548a3
Issue #12158: Move linux_version() from test_socket to test.support
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70208
diff
changeset
|
416 |
|
72618
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
417 def requires_freebsd_version(*min_version): |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
418 """Decorator raising SkipTest if the OS is FreeBSD and the FreeBSD version is |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
419 less than `min_version`. |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
420 |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
421 For example, @requires_freebsd_version(7, 2) raises SkipTest if the FreeBSD |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
422 version is less than 7.2. |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
423 """ |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
424 return _requires_unix_version('FreeBSD', min_version) |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
425 |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
426 def requires_linux_version(*min_version): |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
427 """Decorator raising SkipTest if the OS is Linux and the Linux version is |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
428 less than `min_version`. |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
429 |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
430 For example, @requires_linux_version(2, 6, 32) raises SkipTest if the Linux |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
431 version is less than 2.6.32. |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
432 """ |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
433 return _requires_unix_version('Linux', min_version) |
|
3b1859f80e6d
Introduce support.requires_freebsd_version decorator.
Charles-François Natali <neologix@free.fr>
parents:
72400
diff
changeset
|
434 |
|
70575
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
435 def requires_mac_ver(*min_version): |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
436 """Decorator raising SkipTest if the OS is Mac OS X and the OS X |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
437 version if less than min_version. |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
438 |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
439 For example, @requires_mac_ver(10, 5) raises SkipTest if the OS X version |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
440 is lesser than 10.5. |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
441 """ |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
442 def decorator(func): |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
443 @functools.wraps(func) |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
444 def wrapper(*args, **kw): |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
445 if sys.platform == 'darwin': |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
446 version_txt = platform.mac_ver()[0] |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
447 try: |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
448 version = tuple(map(int, version_txt.split('.'))) |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
449 except ValueError: |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
450 pass |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
451 else: |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
452 if version < min_version: |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
453 min_version_txt = '.'.join(map(str, min_version)) |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
454 raise unittest.SkipTest( |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
455 "Mac OS X %s or higher required, not %s" |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
456 % (min_version_txt, version_txt)) |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
457 return func(*args, **kw) |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
458 wrapper.min_version = min_version |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
459 return wrapper |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
460 return decorator |
|
22457ac2c2df
Close #12230: Mac OS X Tiger (10.4) has a kernel bug: sometimes, the file
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70097
diff
changeset
|
461 |
|
70574
35212b113730
test.support: add requires_mac_ver() function
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70474
diff
changeset
|
462 |
|
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
|
463 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
|
464 |
|
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
|
465 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
|
466 """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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 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
|
472 |
|
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
|
473 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
|
474 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
|
475 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
|
476 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
|
477 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
|
478 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
|
479 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
|
480 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
|
481 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
|
482 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
|
483 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
|
484 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
|
485 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
|
486 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
|
487 |
|
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
|
488 (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
|
489 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
|
490 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
|
491 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
|
492 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
|
493 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
|
494 |
|
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
|
495 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
|
496 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
|
497 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
|
498 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
|
499 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
|
500 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
|
501 |
|
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
|
502 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
|
503 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
|
504 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
|
505 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
|
506 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
|
507 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
|
508 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
|
509 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
|
510 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
|
511 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
|
512 |
|
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
|
513 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
|
514 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
|
515 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
|
516 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
|
517 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
|
518 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
|
519 """ |
|
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
|
520 |
|
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
|
521 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
|
522 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
|
523 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
|
524 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
|
525 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
|
526 |
|
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
|
527 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
|
528 """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
|
529 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
|
530 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
|
531 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
|
532 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
|
533 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
|
534 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
|
535 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
|
536 |
|
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
|
537 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
|
538 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
|
539 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
|
540 """ |
|
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
|
541 |
|
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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 "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
|
547 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
|
548 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
|
549 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
|
550 "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
|
551 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
|
552 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
|
553 |
|
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
|
554 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
|
555 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
|
556 return port |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
557 |
|
69672
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
558 def _is_ipv6_enabled(): |
|
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
559 """Check whether IPv6 is enabled on this host.""" |
|
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
560 if socket.has_ipv6: |
|
77978
c9299edf1f67
#15277: Fix a resource leak in support.py when IPv6 is disabled.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
77597
diff
changeset
|
561 sock = None |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
562 try: |
|
69672
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
563 sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) |
|
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
564 sock.bind(('::1', 0)) |
|
77978
c9299edf1f67
#15277: Fix a resource leak in support.py when IPv6 is disabled.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
77597
diff
changeset
|
565 return True |
|
69672
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
566 except (socket.error, socket.gaierror): |
|
15305
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
567 pass |
|
77978
c9299edf1f67
#15277: Fix a resource leak in support.py when IPv6 is disabled.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
77597
diff
changeset
|
568 finally: |
|
c9299edf1f67
#15277: Fix a resource leak in support.py when IPv6 is disabled.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
77597
diff
changeset
|
569 if sock: |
|
c9299edf1f67
#15277: Fix a resource leak in support.py when IPv6 is disabled.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
77597
diff
changeset
|
570 sock.close() |
|
69672
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
571 return False |
|
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
572 |
|
0518f32cb747
Issue #11811: Factor out detection of IPv6 support on the current host
Antoine Pitrou <solipsis@pitrou.net>
parents:
68921
diff
changeset
|
573 IPV6_ENABLED = _is_ipv6_enabled() |
|
1197
675a02820d66
* os.py: _exit doesn't exist in all variations of posix
Guido van Rossum <guido@python.org>
parents:
653
diff
changeset
|
574 |
|
70474
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70324
diff
changeset
|
575 |
|
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70324
diff
changeset
|
576 # A constant likely larger than the underlying OS pipe buffer size. |
|
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70324
diff
changeset
|
577 # Windows limit seems to be around 512B, and most Unix kernels have a 64K pipe |
|
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70324
diff
changeset
|
578 # buffer size: take 1M to be sure. |
|
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70324
diff
changeset
|
579 PIPE_MAX_SIZE = 1024 * 1024 |
|
866d959dea8e
Issue #12196: Add PIPE_MAX_SIZE to test.support, constant larger than the
Charles-François Natali <neologix@free.fr>
parents:
70324
diff
changeset
|
580 |
|
1197
675a02820d66
* os.py: _exit doesn't exist in all variations of posix
Guido van Rossum <guido@python.org>
parents:
653
diff
changeset
|
581 |
|
66706
ae3fa781eef2
Issue #10624: Move requires_IEEE_754 into test.support. I'll fix up other uses of it shortly.
Eric Smith <eric@trueblade.com>
parents:
66606
diff
changeset
|
582 # decorator for skipping tests on non-IEEE 754 platforms |
|
ae3fa781eef2
Issue #10624: Move requires_IEEE_754 into test.support. I'll fix up other uses of it shortly.
Eric Smith <eric@trueblade.com>
parents:
66606
diff
changeset
|
583 requires_IEEE_754 = unittest.skipUnless( |
|
ae3fa781eef2
Issue #10624: Move requires_IEEE_754 into test.support. I'll fix up other uses of it shortly.
Eric Smith <eric@trueblade.com>
parents:
66606
diff
changeset
|
584 float.__getformat__("double").startswith("IEEE"), |
|
ae3fa781eef2
Issue #10624: Move requires_IEEE_754 into test.support. I'll fix up other uses of it shortly.
Eric Smith <eric@trueblade.com>
parents:
66606
diff
changeset
|
585 "test requires IEEE 754 doubles") |
|
ae3fa781eef2
Issue #10624: Move requires_IEEE_754 into test.support. I'll fix up other uses of it shortly.
Eric Smith <eric@trueblade.com>
parents:
66606
diff
changeset
|
586 |
|
70208
cfa2feb39c1f
Skip tests that require zlib in the packaging tests. Also add a requires_zlib decorator to test.support.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70098
diff
changeset
|
587 requires_zlib = unittest.skipUnless(zlib, 'requires zlib') |
|
cfa2feb39c1f
Skip tests that require zlib in the packaging tests. Also add a requires_zlib decorator to test.support.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70098
diff
changeset
|
588 |
|
76682
028e8e0b03e8
Issue #14371: Support bzip2 in zipfile module.
Martin v. Löwis <martin@v.loewis.de>
parents:
76652
diff
changeset
|
589 requires_bz2 = unittest.skipUnless(bz2, 'requires bz2') |
|
028e8e0b03e8
Issue #14371: Support bzip2 in zipfile module.
Martin v. Löwis <martin@v.loewis.de>
parents:
76652
diff
changeset
|
590 |
|
76895
fccdcd83708a
Issue #14366: Support lzma compression in zip files.
Martin v. Löwis <martin@v.loewis.de>
parents:
76883
diff
changeset
|
591 requires_lzma = unittest.skipUnless(lzma, 'requires lzma') |
|
fccdcd83708a
Issue #14366: Support lzma compression in zip files.
Martin v. Löwis <martin@v.loewis.de>
parents:
76883
diff
changeset
|
592 |
|
25982
e1bf4604c0a5
Patch #631972: Adds an is_jython flag.
Finn Bock <bckfnn@worldonline.dk>
parents:
24442
diff
changeset
|
593 is_jython = sys.platform.startswith('java') |
|
e1bf4604c0a5
Patch #631972: Adds an is_jython flag.
Finn Bock <bckfnn@worldonline.dk>
parents:
24442
diff
changeset
|
594 |
|
17213
4d6ee7f2bee6
In Jython, `@' is not allowed in module names. Extend the TESTFN test
Barry Warsaw <barry@python.org>
parents:
17171
diff
changeset
|
595 # 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
|
596 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
|
597 # 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
|
598 TESTFN = '$test' |
|
29066
90342f395721
Patch #734231: Update RiscOS support. In particular, correct
Martin v. Löwis <martin@v.loewis.de>
parents:
28968
diff
changeset
|
599 else: |
|
17213
4d6ee7f2bee6
In Jython, `@' is not allowed in module names. Extend the TESTFN test
Barry Warsaw <barry@python.org>
parents:
17171
diff
changeset
|
600 TESTFN = '@test' |
|
41993
0d81a656412a
Rename checks for test_support.have_unicode (we always
Walter Dörwald <walter@livinglogic.de>
parents:
41716
diff
changeset
|
601 |
|
54967
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
602 # 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
|
603 # module name. |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
604 TESTFN = "{}_{}_tmp".format(TESTFN, os.getpid()) |
|
54967
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
605 |
|
61226
d49f1310e23f
Fix error handling removing files in test.support.unlink
Michael Foord <fuzzyman@voidspace.org.uk>
parents:
61163
diff
changeset
|
606 |
|
64139
0ed76c7b9847
Improve PEP 383 tests (in test_os)
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64110
diff
changeset
|
607 # TESTFN_UNICODE is a non-ascii filename |
|
0ed76c7b9847
Improve PEP 383 tests (in test_os)
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64110
diff
changeset
|
608 TESTFN_UNICODE = TESTFN + "-\xe0\xf2\u0258\u0141\u011f" |
|
64149
df961064f811
Decompose TESTFN_UNICODE on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64139
diff
changeset
|
609 if sys.platform == 'darwin': |
|
df961064f811
Decompose TESTFN_UNICODE on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64139
diff
changeset
|
610 # In Mac OS X's VFS API file names are, by definition, canonically |
|
df961064f811
Decompose TESTFN_UNICODE on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64139
diff
changeset
|
611 # decomposed Unicode, encoded using UTF-8. See QA1173: |
|
df961064f811
Decompose TESTFN_UNICODE on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64139
diff
changeset
|
612 # http://developer.apple.com/mac/library/qa/qa2001/qa1173.html |
|
df961064f811
Decompose TESTFN_UNICODE on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64139
diff
changeset
|
613 import unicodedata |
|
df961064f811
Decompose TESTFN_UNICODE on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64139
diff
changeset
|
614 TESTFN_UNICODE = unicodedata.normalize('NFD', TESTFN_UNICODE) |
|
54967
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
615 TESTFN_ENCODING = sys.getfilesystemencoding() |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
616 |
|
63960
291c9afab12c
Fix a typo: TESTFN_UNENCODEABLE => TESTFN_UNENCODABLE
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63948
diff
changeset
|
617 # TESTFN_UNENCODABLE is a filename (str type) that should *not* be able to be |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
618 # 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
|
619 # cannot generate such filename. |
|
64050
673c4e8a01c4
Fix TESTFN_UNENCODABLE of test.support on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64008
diff
changeset
|
620 TESTFN_UNENCODABLE = None |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
621 if os.name in ('nt', 'ce'): |
|
64050
673c4e8a01c4
Fix TESTFN_UNENCODABLE of test.support on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64008
diff
changeset
|
622 # skip win32s (0) or Windows 9x/ME (1) |
|
673c4e8a01c4
Fix TESTFN_UNENCODABLE of test.support on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64008
diff
changeset
|
623 if sys.getwindowsversion().platform >= 2: |
|
64603
c20de96a435a
Merged revisions 84666 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64541
diff
changeset
|
624 # Different kinds of characters from various languages to minimize the |
|
c20de96a435a
Merged revisions 84666 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64541
diff
changeset
|
625 # probability that the whole name is encodable to MBCS (issue #9819) |
|
c20de96a435a
Merged revisions 84666 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64541
diff
changeset
|
626 TESTFN_UNENCODABLE = TESTFN + "-\u5171\u0141\u2661\u0363\uDC80" |
|
41993
0d81a656412a
Rename checks for test_support.have_unicode (we always
Walter Dörwald <walter@livinglogic.de>
parents:
41716
diff
changeset
|
627 try: |
|
63960
291c9afab12c
Fix a typo: TESTFN_UNENCODEABLE => TESTFN_UNENCODABLE
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63948
diff
changeset
|
628 TESTFN_UNENCODABLE.encode(TESTFN_ENCODING) |
|
41993
0d81a656412a
Rename checks for test_support.have_unicode (we always
Walter Dörwald <walter@livinglogic.de>
parents:
41716
diff
changeset
|
629 except UnicodeEncodeError: |
|
0d81a656412a
Rename checks for test_support.have_unicode (we always
Walter Dörwald <walter@livinglogic.de>
parents:
41716
diff
changeset
|
630 pass |
|
26139
144d9d48b96c
Don't try to convert the test filename to Unicode with -U.
Martin v. Löwis <martin@v.loewis.de>
parents:
26128
diff
changeset
|
631 else: |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
632 print('WARNING: The filename %r CAN be encoded by the filesystem encoding (%s). ' |
| 45182 | 633 'Unicode filename tests may not be effective' |
|
63960
291c9afab12c
Fix a typo: TESTFN_UNENCODEABLE => TESTFN_UNENCODABLE
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63948
diff
changeset
|
634 % (TESTFN_UNENCODABLE, TESTFN_ENCODING)) |
|
291c9afab12c
Fix a typo: TESTFN_UNENCODEABLE => TESTFN_UNENCODABLE
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63948
diff
changeset
|
635 TESTFN_UNENCODABLE = None |
|
64050
673c4e8a01c4
Fix TESTFN_UNENCODABLE of test.support on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64008
diff
changeset
|
636 # Mac OS X denies unencodable filenames (invalid utf-8) |
|
64008
c68f271342d0
Mac OS X denies unencodable filenames (invalid utf-8)
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63960
diff
changeset
|
637 elif sys.platform != 'darwin': |
|
54967
8f23bd1092fc
Merged revisions 73072 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54554
diff
changeset
|
638 try: |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
639 # 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
|
640 b'\xff'.decode(TESTFN_ENCODING) |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
641 except UnicodeDecodeError: |
|
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
642 # 0xff will be encoded using the surrogate character u+DCFF |
|
63960
291c9afab12c
Fix a typo: TESTFN_UNENCODEABLE => TESTFN_UNENCODABLE
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63948
diff
changeset
|
643 TESTFN_UNENCODABLE = TESTFN \ |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
644 + 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
|
645 else: |
|
63944
87b2da840252
Set TESTFN_UNENCODEABLE on non-Windows OSes
Victor Stinner <victor.stinner@haypocalc.com>
parents:
63727
diff
changeset
|
646 # 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
|
647 # the byte 0xff. Skip some unicode filename tests. |
|
64050
673c4e8a01c4
Fix TESTFN_UNENCODABLE of test.support on Mac OS X
Victor Stinner <victor.stinner@haypocalc.com>
parents:
64008
diff
changeset
|
648 pass |
|
26000
83d21ea9457d
Fix SF # 631066, running regrtest in user mode fails
Neal Norwitz <nnorwitz@gmail.com>
parents:
25982
diff
changeset
|
649 |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
650 # Save the initial cwd |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
651 SAVEDCWD = os.getcwd() |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
652 |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
653 @contextlib.contextmanager |
|
64110
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
654 def temp_cwd(name='tempcwd', quiet=False, path=None): |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
655 """ |
|
64110
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
656 Context manager that temporarily changes the CWD. |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
657 |
|
64110
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
658 An existing path may be provided as *path*, in which case this |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
659 function makes no changes to the file system. |
|
61581
2369d4f189e4
test/support.py: remove TESTFN if it is a directory
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60818
diff
changeset
|
660 |
|
64110
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
661 Otherwise, the new CWD is created in the current directory and it's |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
662 named *name*. If *quiet* is False (default) and it's not possible to |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
663 create or change the CWD, an error is raised. If it's True, only a |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
664 warning is raised and the original CWD is used. |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
665 """ |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
666 saved_dir = os.getcwd() |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
667 is_temporary = False |
|
64110
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
668 if path is None: |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
669 path = name |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
670 try: |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
671 os.mkdir(name) |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
672 is_temporary = True |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
673 except OSError: |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
674 if not quiet: |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
675 raise |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
676 warnings.warn('tests may fail, unable to create temp CWD ' + name, |
|
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
677 RuntimeWarning, stacklevel=3) |
|
26000
83d21ea9457d
Fix SF # 631066, running regrtest in user mode fails
Neal Norwitz <nnorwitz@gmail.com>
parents:
25982
diff
changeset
|
678 try: |
|
64110
212a16f906a6
Issue #8202: Set sys.argv[0] to -m rather than -c while searching for the module to execute. Also updates all the cmd_line_script tests to validate the setting of sys.path[0] and the current working directory
Nick Coghlan <ncoghlan@gmail.com>
parents:
64050
diff
changeset
|
679 os.chdir(path) |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
680 except OSError: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
681 if not quiet: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
682 raise |
|
79086
0b60dcabf7e6
#15304: fix wrong warning message in test.support.temp_cwd().
Ezio Melotti <ezio.melotti@gmail.com>
parents:
78551
diff
changeset
|
683 warnings.warn('tests may fail, unable to change the CWD to ' + path, |
|
58931
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
684 RuntimeWarning, stacklevel=3) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
685 try: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
686 yield os.getcwd() |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
687 finally: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
688 os.chdir(saved_dir) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
689 if is_temporary: |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
690 rmtree(name) |
|
4c0be37b46b0
Merged revisions 78136 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
58684
diff
changeset
|
691 |
|
17036
ad741745cb6c
Oops. A RISCOS patch I forgot to check in.
Guido van Rossum <guido@python.org>
parents:
16723
diff
changeset
|
692 |
|
71465
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
693 if hasattr(os, "umask"): |
|
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
694 @contextlib.contextmanager |
|
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
695 def temp_umask(umask): |
|
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
696 """Context manager that temporarily sets the process umask.""" |
|
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
697 oldmask = os.umask(umask) |
|
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
698 try: |
|
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
699 yield |
|
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
700 finally: |
|
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
701 os.umask(oldmask) |
| 60648 | 702 |
|
17036
ad741745cb6c
Oops. A RISCOS patch I forgot to check in.
Guido van Rossum <guido@python.org>
parents:
16723
diff
changeset
|
703 |
|
63005
ef67e7481244
Partial port of r78919 from trunk: add subdir argument to the findfile helper
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62999
diff
changeset
|
704 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
|
705 """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
|
706 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
|
707 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
|
708 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
|
709 return file |
|
63005
ef67e7481244
Partial port of r78919 from trunk: add subdir argument to the findfile helper
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62999
diff
changeset
|
710 if subdir is not None: |
|
ef67e7481244
Partial port of r78919 from trunk: add subdir argument to the findfile helper
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62999
diff
changeset
|
711 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
|
712 path = sys.path |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
713 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
|
714 for dn in path: |
|
07f24261c6e6
Make reindent.py happy (convert everything to 4-space indents!).
Fred Drake <fdrake@acm.org>
parents:
13682
diff
changeset
|
715 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
|
716 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
|
717 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
|
718 |
|
71103
0c49260e85a0
Issue #12451: Add support.create_empty_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71073
diff
changeset
|
719 def create_empty_file(filename): |
|
0c49260e85a0
Issue #12451: Add support.create_empty_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71073
diff
changeset
|
720 """Create an empty file. If the file already exists, truncate it.""" |
|
0c49260e85a0
Issue #12451: Add support.create_empty_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71073
diff
changeset
|
721 fd = os.open(filename, os.O_WRONLY | os.O_CREAT | os.O_TRUNC) |
|
0c49260e85a0
Issue #12451: Add support.create_empty_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71073
diff
changeset
|
722 os.close(fd) |
|
0c49260e85a0
Issue #12451: Add support.create_empty_file()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71073
diff
changeset
|
723 |
|
17815
d6df8d371b67
Get rid of the superstitious "~" in dict hashing's "i = (~hash) & mask".
Tim Peters <tim.peters@gmail.com>
parents:
17213
diff
changeset
|
724 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
|
725 "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
|
726 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
|
727 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
|
728 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
|
729 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
|
730 |
|
50915
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
731 def make_bad_fd(): |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
732 """ |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
733 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
|
734 its fd. |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
735 """ |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
736 file = open(TESTFN, "wb") |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
737 try: |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
738 return file.fileno() |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
739 finally: |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
740 file.close() |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
741 unlink(TESTFN) |
|
af36ba123c1d
Merged revisions 68782 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
49533
diff
changeset
|
742 |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39644
diff
changeset
|
743 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
|
744 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
|
745 '<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
|
746 |
|
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
|
747 def open_urlresource(url, *args, **kw): |
|
48334
5a416a6417d3
Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
47322
diff
changeset
|
748 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
|
749 |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
750 check = kw.pop('check', None) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
751 |
|
48334
5a416a6417d3
Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
47322
diff
changeset
|
752 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
|
753 |
|
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
|
754 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
|
755 |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
756 def check_valid_file(fn): |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
757 f = open(fn, *args, **kw) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
758 if check is None: |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
759 return f |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
760 elif check(f): |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
761 f.seek(0) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
762 return f |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
763 f.close() |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
764 |
|
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
|
765 if os.path.exists(fn): |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
766 f = check_valid_file(fn) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
767 if f is not None: |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
768 return f |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
769 unlink(fn) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
770 |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
771 # 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
|
772 requires('urlfetch') |
|
35998
96d1fa36964d
Patch #1276356: Implement new resource "urlfetch" for regrtest.
Hye-Shik Chang <hyeshik@gmail.com>
parents:
34707
diff
changeset
|
773 |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
774 print('\tfetching %s ...' % url, file=get_original_stdout()) |
|
57056
b591fc8721f2
Merged revisions 76040 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56949
diff
changeset
|
775 f = urllib.request.urlopen(url, timeout=15) |
|
b591fc8721f2
Merged revisions 76040 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56949
diff
changeset
|
776 try: |
|
57055
fd0542716a80
Merged revisions 76037 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56981
diff
changeset
|
777 with open(fn, "wb") as out: |
|
57056
b591fc8721f2
Merged revisions 76040 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56949
diff
changeset
|
778 s = f.read() |
|
b591fc8721f2
Merged revisions 76040 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56949
diff
changeset
|
779 while s: |
|
b591fc8721f2
Merged revisions 76040 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56949
diff
changeset
|
780 out.write(s) |
|
b591fc8721f2
Merged revisions 76040 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56949
diff
changeset
|
781 s = f.read() |
|
b591fc8721f2
Merged revisions 76040 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56949
diff
changeset
|
782 finally: |
|
b591fc8721f2
Merged revisions 76040 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56949
diff
changeset
|
783 f.close() |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
784 |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
785 f = check_valid_file(fn) |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
786 if f is not None: |
|
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
787 return f |
|
71343
cdb0ae616d58
Always use repr for regrtest resources names
Éric Araujo <merwok@netwok.org>
parents:
71331
diff
changeset
|
788 raise TestFailed('invalid resource %r' % fn) |
|
59720
8a28be45c242
Merged revisions 78982,78986 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59684
diff
changeset
|
789 |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
790 |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
791 class WarningsRecorder(object): |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
792 """Convenience wrapper for the warnings list returned on |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
793 entry to the warnings.catch_warnings() context manager. |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
794 """ |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
795 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
|
796 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
|
797 self._last = 0 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
798 |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
799 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
|
800 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
|
801 return getattr(self._warnings[-1], attr) |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
802 elif attr in warnings.WarningMessage._WARNING_DETAILS: |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
803 return None |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
804 raise AttributeError("%r has no attribute %r" % (self, attr)) |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
805 |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
806 @property |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
807 def warnings(self): |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
808 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
|
809 |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
810 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
|
811 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
|
812 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
813 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
814 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
|
815 """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
|
816 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
|
817 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
|
818 """ |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
819 # 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
|
820 # 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
|
821 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
|
822 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
|
823 if registry: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
824 registry.clear() |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
825 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
|
826 # 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
|
827 # 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
|
828 # 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
|
829 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
|
830 yield WarningsRecorder(w) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
831 # Filter the recorded warnings |
|
65712
cf1d27321c78
Make check_warnings error messages more informative
Antoine Pitrou <solipsis@pitrou.net>
parents:
65316
diff
changeset
|
832 reraise = list(w) |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
833 missing = [] |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
834 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
|
835 seen = False |
|
65712
cf1d27321c78
Make check_warnings error messages more informative
Antoine Pitrou <solipsis@pitrou.net>
parents:
65316
diff
changeset
|
836 for w in reraise[:]: |
|
cf1d27321c78
Make check_warnings error messages more informative
Antoine Pitrou <solipsis@pitrou.net>
parents:
65316
diff
changeset
|
837 warning = w.message |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
838 # Filter out the matching messages |
|
65712
cf1d27321c78
Make check_warnings error messages more informative
Antoine Pitrou <solipsis@pitrou.net>
parents:
65316
diff
changeset
|
839 if (re.match(msg, str(warning), re.I) and |
|
cf1d27321c78
Make check_warnings error messages more informative
Antoine Pitrou <solipsis@pitrou.net>
parents:
65316
diff
changeset
|
840 issubclass(warning.__class__, cat)): |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
841 seen = True |
|
65712
cf1d27321c78
Make check_warnings error messages more informative
Antoine Pitrou <solipsis@pitrou.net>
parents:
65316
diff
changeset
|
842 reraise.remove(w) |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
843 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
|
844 # 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
|
845 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
|
846 if reraise: |
|
65712
cf1d27321c78
Make check_warnings error messages more informative
Antoine Pitrou <solipsis@pitrou.net>
parents:
65316
diff
changeset
|
847 raise AssertionError("unhandled warning %s" % reraise[0]) |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
848 if missing: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
849 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
|
850 missing[0]) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
851 |
|
49533
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
852 |
|
ca72271c624c
forward port r66386
Benjamin Peterson <benjamin@python.org>
parents:
48952
diff
changeset
|
853 @contextlib.contextmanager |
|
59588
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
854 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
|
855 """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
|
856 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
857 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
|
858 ("message regexp", WarningCategory) |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
859 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
860 Optional argument: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
861 - 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
|
862 (default True without argument, |
|
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
863 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
|
864 |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
865 Without argument, it defaults to: |
|
59684
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
866 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
|
867 """ |
|
59684
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
868 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
|
869 if not filters: |
|
6774e8c6c39f
Only the parts which are relevant for 3.x branch.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
58931
diff
changeset
|
870 filters = (("", Warning),) |
|
59684
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
871 # Preserve backward compatibility |
|
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
872 if quiet is None: |
|
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
873 quiet = True |
|
485fe20dab12
Merged revisions 79049 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59654
diff
changeset
|
874 return _filterwarnings(filters, quiet) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
875 |
|
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
|
876 |
|
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
|
877 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
|
878 """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
|
879 |
|
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
|
880 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
|
881 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
|
882 |
|
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
|
883 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
|
884 |
|
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
|
885 with CleanImport("foo"): |
|
58684
fba1c78f104e
Merged revisions 77956-77957 via svnmerge from
Brett Cannon <bcannon@gmail.com>
parents:
58476
diff
changeset
|
886 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
|
887 """ |
|
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
|
888 |
|
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
|
889 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
|
890 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
|
891 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
|
892 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
|
893 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
|
894 # 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
|
895 # 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
|
896 # 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
|
897 # 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
|
898 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
|
899 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
|
900 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
|
901 |
|
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
|
902 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
|
903 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
|
904 |
|
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
|
905 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
|
906 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
|
907 |
|
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
|
908 |
|
68112
7f8da10bfcef
Fix imports from collections.abc
Raymond Hettinger <python@rcn.com>
parents:
68094
diff
changeset
|
909 class EnvironmentVarGuard(collections.abc.MutableMapping): |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
910 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
911 """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
|
912 a context manager.""" |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
913 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
914 def __init__(self): |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
915 self._environ = os.environ |
|
53387
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
916 self._changed = {} |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
917 |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
918 def __getitem__(self, envvar): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
919 return self._environ[envvar] |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
920 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
921 def __setitem__(self, envvar, value): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
922 # 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
|
923 if envvar not in self._changed: |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
924 self._changed[envvar] = self._environ.get(envvar) |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
925 self._environ[envvar] = value |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
926 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
927 def __delitem__(self, envvar): |
|
53387
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
928 # 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
|
929 if envvar not in self._changed: |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
930 self._changed[envvar] = self._environ.get(envvar) |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
931 if envvar in self._environ: |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
932 del self._environ[envvar] |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
933 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
934 def keys(self): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
935 return self._environ.keys() |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
936 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
937 def __iter__(self): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
938 return iter(self._environ) |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
939 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
940 def __len__(self): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
941 return len(self._environ) |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
942 |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
943 def set(self, envvar, value): |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
944 self[envvar] = value |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
945 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
946 def unset(self, envvar): |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
947 del self[envvar] |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
948 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
949 def __enter__(self): |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
950 return self |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
951 |
|
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
952 def __exit__(self, *ignore_exc): |
|
53387
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
953 for (k, v) in self._changed.items(): |
|
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
954 if v is None: |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
955 if k in self._environ: |
|
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
956 del self._environ[k] |
|
53387
d35337f65015
Merged revisions 71875 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53317
diff
changeset
|
957 else: |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
958 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
|
959 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
|
960 |
|
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
|
961 |
|
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
|
962 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
|
963 """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
|
964 |
|
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
|
965 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
|
966 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
|
967 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
|
968 |
|
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
|
969 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
|
970 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
|
971 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
|
972 """ |
|
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
|
973 |
|
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
|
974 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
|
975 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
|
976 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
|
977 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
|
978 |
|
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
|
979 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
|
980 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
|
981 |
|
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
|
982 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
|
983 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
|
984 sys.path[:] = self.original_value |
|
53646
5c55b9c80846
Merged revisions 72167 via svnmerge from
Walter Dörwald <walter@livinglogic.de>
parents:
53487
diff
changeset
|
985 |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
986 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
987 class TransientResource(object): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
988 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
989 """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
|
990 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
|
991 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
992 def __init__(self, exc, **kwargs): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
993 self.exc = exc |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
994 self.attrs = kwargs |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
995 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
996 def __enter__(self): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
997 return self |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
998 |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
999 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
|
1000 """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
|
1001 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
|
1002 propagate (if any).""" |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1003 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
|
1004 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
|
1005 if not hasattr(value, attr): |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1006 break |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1007 if getattr(value, attr) != attr_value: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1008 break |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1009 else: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1010 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
|
1011 |
|
54553
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54504
diff
changeset
|
1012 # 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
|
1013 # with the Internet connection manifest themselves as exceptions. |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1014 # XXX deprecate these and use transient_internet() instead |
|
54553
287887198e2f
Use new form of with-statement instead of contextlib.nested().
Raymond Hettinger <python@rcn.com>
parents:
54504
diff
changeset
|
1015 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
|
1016 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
|
1017 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
|
1018 |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1019 |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
1020 @contextlib.contextmanager |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1021 def transient_internet(resource_name, *, timeout=30.0, errnos=()): |
|
60818
a0b8af1be560
Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58492
diff
changeset
|
1022 """Return a context manager that raises ResourceDenied when various issues |
|
a0b8af1be560
Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58492
diff
changeset
|
1023 with the Internet connection manifest themselves as exceptions.""" |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1024 default_errnos = [ |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1025 ('ECONNREFUSED', 111), |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1026 ('ECONNRESET', 104), |
|
67467
abe201dfd3dc
Merged revisions 87861,87863 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67311
diff
changeset
|
1027 ('EHOSTUNREACH', 113), |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1028 ('ENETUNREACH', 101), |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1029 ('ETIMEDOUT', 110), |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1030 ] |
|
64541
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1031 default_gai_errnos = [ |
|
71269
ef4b40eb52cc
Skip network tests when getaddrinfo() returns EAI_AGAIN, meaning a temporary
Antoine Pitrou <solipsis@pitrou.net>
parents:
71072
diff
changeset
|
1032 ('EAI_AGAIN', -3), |
|
73919
c998c6f5464b
Issue #13453: Catch EAI_FAIL in support.transient_internet.
Charles-François Natali <neologix@free.fr>
parents:
72642
diff
changeset
|
1033 ('EAI_FAIL', -4), |
|
64541
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1034 ('EAI_NONAME', -2), |
|
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1035 ('EAI_NODATA', -5), |
|
69676
89ebde7cd8ea
Add WSANO_DATA to possible errors triggered by getaddrinfo (Windows)
Antoine Pitrou <solipsis@pitrou.net>
parents:
68545
diff
changeset
|
1036 # Encountered when trying to resolve IPv6-only hostnames |
|
89ebde7cd8ea
Add WSANO_DATA to possible errors triggered by getaddrinfo (Windows)
Antoine Pitrou <solipsis@pitrou.net>
parents:
68545
diff
changeset
|
1037 ('WSANO_DATA', 11004), |
|
64541
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1038 ] |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1039 |
|
71343
cdb0ae616d58
Always use repr for regrtest resources names
Éric Araujo <merwok@netwok.org>
parents:
71331
diff
changeset
|
1040 denied = ResourceDenied("Resource %r is not available" % resource_name) |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1041 captured_errnos = errnos |
|
64541
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1042 gai_errnos = [] |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1043 if not captured_errnos: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1044 captured_errnos = [getattr(errno, name, num) |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1045 for (name, num) in default_errnos] |
|
64541
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1046 gai_errnos = [getattr(socket, name, num) |
|
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1047 for (name, num) in default_gai_errnos] |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1048 |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1049 def filter_error(err): |
|
64541
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1050 n = getattr(err, 'errno', None) |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1051 if (isinstance(err, socket.timeout) or |
|
64541
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1052 (isinstance(err, socket.gaierror) and n in gai_errnos) or |
|
4c64e688f665
Merged revisions 84604 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64536
diff
changeset
|
1053 n in captured_errnos): |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1054 if not verbose: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1055 sys.stderr.write(denied.args[0] + "\n") |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1056 raise denied from err |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1057 |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1058 old_timeout = socket.getdefaulttimeout() |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1059 try: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1060 if timeout is not None: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1061 socket.setdefaulttimeout(timeout) |
|
60818
a0b8af1be560
Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58492
diff
changeset
|
1062 yield |
|
64536
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1063 except IOError as err: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1064 # urllib can wrap original socket errors multiple times (!), we must |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1065 # unwrap to get at the original error. |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1066 while True: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1067 a = err.args |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1068 if len(a) >= 1 and isinstance(a[0], IOError): |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1069 err = a[0] |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1070 # The error can also be wrapped as args[1]: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1071 # except socket.error as msg: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1072 # raise IOError('socket error', msg).with_traceback(sys.exc_info()[2]) |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1073 elif len(a) >= 2 and isinstance(a[1], IOError): |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1074 err = a[1] |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1075 else: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1076 break |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1077 filter_error(err) |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1078 raise |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1079 # XXX should we catch generic exceptions and look for their |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1080 # __cause__ or __context__? |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1081 finally: |
|
2400f55ea312
Merged revisions 84597-84599 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
63005
diff
changeset
|
1082 socket.setdefaulttimeout(old_timeout) |
|
60818
a0b8af1be560
Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58492
diff
changeset
|
1083 |
|
a0b8af1be560
Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58492
diff
changeset
|
1084 |
|
a0b8af1be560
Merged revisions 80317 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
58492
diff
changeset
|
1085 @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
|
1086 def captured_output(stream_name): |
|
70097
b2bcddfb8b18
Update __all__ and docstring.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70090
diff
changeset
|
1087 """Return a context manager used by captured_stdout/stdin/stderr |
|
70089
c2126d89c29b
#7960: fix docstrings for captured_output and captured_stdout.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70085
diff
changeset
|
1088 that temporarily replaces the sys stream *stream_name* with a StringIO.""" |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
1089 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
|
1090 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
|
1091 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
|
1092 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
|
1093 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
|
1094 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
|
1095 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
|
1096 |
|
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
1097 def captured_stdout(): |
|
70089
c2126d89c29b
#7960: fix docstrings for captured_output and captured_stdout.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70085
diff
changeset
|
1098 """Capture the output of sys.stdout: |
|
c2126d89c29b
#7960: fix docstrings for captured_output and captured_stdout.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70085
diff
changeset
|
1099 |
|
c2126d89c29b
#7960: fix docstrings for captured_output and captured_stdout.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70085
diff
changeset
|
1100 with captured_stdout() as s: |
|
c2126d89c29b
#7960: fix docstrings for captured_output and captured_stdout.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70085
diff
changeset
|
1101 print("hello") |
|
c2126d89c29b
#7960: fix docstrings for captured_output and captured_stdout.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70085
diff
changeset
|
1102 self.assertEqual(s.getvalue(), "hello") |
|
c2126d89c29b
#7960: fix docstrings for captured_output and captured_stdout.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70085
diff
changeset
|
1103 """ |
|
46262
f547ebf02843
Merged revisions 62090-62091,62096,62100,62102,62110-62114 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
45515
diff
changeset
|
1104 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
|
1105 |
|
66843
612dd5f2aab3
Issue #10188 (partial resolution): tidy up some behaviour in the new tempfile.TemporaryDirectory context manager
Nick Coghlan <ncoghlan@gmail.com>
parents:
66817
diff
changeset
|
1106 def captured_stderr(): |
|
612dd5f2aab3
Issue #10188 (partial resolution): tidy up some behaviour in the new tempfile.TemporaryDirectory context manager
Nick Coghlan <ncoghlan@gmail.com>
parents:
66817
diff
changeset
|
1107 return captured_output("stderr") |
|
612dd5f2aab3
Issue #10188 (partial resolution): tidy up some behaviour in the new tempfile.TemporaryDirectory context manager
Nick Coghlan <ncoghlan@gmail.com>
parents:
66817
diff
changeset
|
1108 |
|
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
|
1109 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
|
1110 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
|
1111 |
|
70097
b2bcddfb8b18
Update __all__ and docstring.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
70090
diff
changeset
|
1112 |
|
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
|
1113 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
|
1114 """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
|
1115 |
|
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
|
1116 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
|
1117 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
|
1118 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
|
1119 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
|
1120 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
|
1121 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
|
1122 """ |
|
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
|
1123 gc.collect() |
|
60517
b4f60df31b14
Merged revisions 79934 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59720
diff
changeset
|
1124 if is_jython: |
|
b4f60df31b14
Merged revisions 79934 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
59720
diff
changeset
|
1125 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
|
1126 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
|
1127 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
|
1128 |
|
71331
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1129 @contextlib.contextmanager |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1130 def disable_gc(): |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1131 have_gc = gc.isenabled() |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1132 gc.disable() |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1133 try: |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1134 yield |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1135 finally: |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1136 if have_gc: |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1137 gc.enable() |
|
527a52d682f6
add a contextmanager to disable the gc
Benjamin Peterson <benjamin@python.org>
parents:
71270
diff
changeset
|
1138 |
|
42954
27f0289b6835
Merge the trunk changes in. Breaks socket.ssl for now.
Thomas Wouters <thomas@python.org>
parents:
42632
diff
changeset
|
1139 |
|
65725
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
1140 def python_is_optimized(): |
|
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
1141 """Find if Python was built with optimizations.""" |
|
65805
b4819838eb5b
PY_CFLAGS doesn't exist under Windows
Antoine Pitrou <solipsis@pitrou.net>
parents:
65725
diff
changeset
|
1142 cflags = sysconfig.get_config_var('PY_CFLAGS') or '' |
|
65725
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
1143 final_opt = "" |
|
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
1144 for opt in cflags.split(): |
|
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
1145 if opt.startswith('-O'): |
|
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
1146 final_opt = opt |
|
71465
be558ad15789
Issue #11049: adding some tests to test.support
Eli Bendersky <eliben@gmail.com>
parents:
71368
diff
changeset
|
1147 return final_opt != '' and final_opt != '-O0' |
|
65725
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
1148 |
|
765d421d943c
make gdb skip expected
Benjamin Peterson <benjamin@python.org>
parents:
65712
diff
changeset
|
1149 |
| 78316 | 1150 _header = 'nP' |
| 1151 _align = '0n' | |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1152 if hasattr(sys, "gettotalrefcount"): |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1153 _header = '2P' + _header |
| 78316 | 1154 _align = '0P' |
| 1155 _vheader = _header + 'n' | |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1156 |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1157 def calcobjsize(fmt): |
| 78316 | 1158 return struct.calcsize(_header + fmt + _align) |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1159 |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1160 def calcvobjsize(fmt): |
| 78316 | 1161 return struct.calcsize(_vheader + fmt + _align) |
|
78315
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1162 |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1163 |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1164 _TPFLAGS_HAVE_GC = 1<<14 |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1165 _TPFLAGS_HEAPTYPE = 1<<9 |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1166 |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1167 def check_sizeof(test, o, size): |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1168 result = sys.getsizeof(o) |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1169 # add GC header size |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1170 if ((type(o) == type) and (o.__flags__ & _TPFLAGS_HEAPTYPE) or\ |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1171 ((type(o) != type) and (type(o).__flags__ & _TPFLAGS_HAVE_GC))): |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1172 size += _testcapi.SIZEOF_PYGC_HEAD |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1173 msg = 'wrong size for %s: got %d, expected %d' \ |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1174 % (type(o), result, size) |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1175 test.assertEqual(result, size, msg) |
|
efade142ef01
Issue #15467: Move helpers for __sizeof__ tests into test_support.
Martin v. Löwis <martin@v.loewis.de>
parents:
76651
diff
changeset
|
1176 |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1177 #======================================================================= |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1178 # 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
|
1179 # 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
|
1180 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1181 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
|
1182 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
|
1183 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
|
1184 try: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1185 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
|
1186 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
|
1187 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
|
1188 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
|
1189 # 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
|
1190 raise |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1191 except: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1192 # 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
|
1193 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
|
1194 else: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1195 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
|
1196 try: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1197 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
|
1198 break |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1199 except: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1200 pass |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1201 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1202 # 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
|
1203 try: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1204 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
|
1205 finally: |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1206 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
|
1207 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
|
1208 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
|
1209 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
|
1210 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
|
1211 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
|
1212 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1213 #======================================================================= |
|
76644
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1214 # Decorator for running a function in a specific timezone, correctly |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1215 # resetting it afterwards. |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1216 |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1217 def run_with_tz(tz): |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1218 def decorator(func): |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1219 def inner(*args, **kwds): |
|
76651
f23222d734bd
fixed test_imaplib failure on Win
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
76644
diff
changeset
|
1220 try: |
|
f23222d734bd
fixed test_imaplib failure on Win
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
76644
diff
changeset
|
1221 tzset = time.tzset |
|
f23222d734bd
fixed test_imaplib failure on Win
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
76644
diff
changeset
|
1222 except AttributeError: |
|
f23222d734bd
fixed test_imaplib failure on Win
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
76644
diff
changeset
|
1223 raise unittest.SkipTest("tzset required") |
|
76644
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1224 if 'TZ' in os.environ: |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1225 orig_tz = os.environ['TZ'] |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1226 else: |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1227 orig_tz = None |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1228 os.environ['TZ'] = tz |
|
76651
f23222d734bd
fixed test_imaplib failure on Win
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
76644
diff
changeset
|
1229 tzset() |
|
76644
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1230 |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1231 # now run the function, resetting the tz on exceptions |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1232 try: |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1233 return func(*args, **kwds) |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1234 finally: |
|
79626
332b93ce7bf9
compare singletons by identity not equality (closes #16712)
Benjamin Peterson <benjamin@python.org>
parents:
79087
diff
changeset
|
1235 if orig_tz is None: |
|
76644
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1236 del os.environ['TZ'] |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1237 else: |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1238 os.environ['TZ'] = orig_tz |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1239 time.tzset() |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1240 |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1241 inner.__name__ = func.__name__ |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1242 inner.__doc__ = func.__doc__ |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1243 return inner |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1244 return decorator |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1245 |
|
90b9781ccb5f
Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
75093
diff
changeset
|
1246 #======================================================================= |
| 45182 | 1247 # Big-memory-test support. Separate from 'resources' because memory use |
| 1248 # 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
|
1249 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1250 # 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
|
1251 # 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
|
1252 _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
|
1253 _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
|
1254 _2G = 2 * _1G |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1255 _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
|
1256 |
|
43100
4e6b4ba60c3b
Remove the simple slicing API. All slicing is now done with slice objects.
Thomas Wouters <thomas@python.org>
parents:
43089
diff
changeset
|
1257 MAX_Py_ssize_t = sys.maxsize |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1258 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1259 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
|
1260 global max_memuse |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1261 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
|
1262 sizes = { |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1263 '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
|
1264 '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
|
1265 '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
|
1266 '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
|
1267 } |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1268 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
|
1269 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
|
1270 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
|
1271 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
|
1272 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
|
1273 real_max_memuse = memlimit |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1274 if memlimit > MAX_Py_ssize_t: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1275 memlimit = MAX_Py_ssize_t |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1276 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
|
1277 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
|
1278 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
|
1279 |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1280 class _MemoryWatchdog: |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1281 """An object which periodically watches the process' memory consumption |
|
72642
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1282 and prints it out. |
|
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1283 """ |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1284 |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1285 def __init__(self): |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1286 self.procfile = '/proc/{pid}/statm'.format(pid=os.getpid()) |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1287 self.started = False |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1288 |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1289 def start(self): |
|
72642
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1290 try: |
|
75911
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1291 f = open(self.procfile, 'r') |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1292 except OSError as e: |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1293 warnings.warn('/proc not available for stats: {}'.format(e), |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1294 RuntimeWarning) |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1295 sys.stderr.flush() |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1296 return |
|
75911
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1297 |
|
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1298 watchdog_script = findfile("memory_watchdog.py") |
|
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1299 self.mem_watchdog = subprocess.Popen([sys.executable, watchdog_script], |
|
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1300 stdin=f, stderr=subprocess.DEVNULL) |
|
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1301 f.close() |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1302 self.started = True |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1303 |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1304 def stop(self): |
|
75911
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1305 if self.started: |
|
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1306 self.mem_watchdog.terminate() |
|
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1307 self.mem_watchdog.wait() |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1308 |
|
72642
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1309 |
|
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1310 def bigmemtest(size, memuse, dry_run=True): |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1311 """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
|
1312 |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1313 '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
|
1314 test-interpreted units.) 'memuse' is the number of 'bytes per size' for |
|
67594
4430e4d63594
Merged revisions 87968,87971-87975 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67467
diff
changeset
|
1315 the test, or a good estimate of it. |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1316 |
|
72642
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1317 if 'dry_run' is False, it means the test doesn't support dummy runs |
|
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1318 when -M is not specified. |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1319 """ |
|
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1320 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
|
1321 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
|
1322 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
|
1323 memuse = wrapper.memuse |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1324 if not real_max_memuse: |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1325 maxsize = 5147 |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1326 else: |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1327 maxsize = size |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1328 |
|
72119
babc90f3cbf4
Issue #11564: Avoid crashes when trying to pickle huge objects or containers
Antoine Pitrou <solipsis@pitrou.net>
parents:
71612
diff
changeset
|
1329 if ((real_max_memuse or not dry_run) |
|
babc90f3cbf4
Issue #11564: Avoid crashes when trying to pickle huge objects or containers
Antoine Pitrou <solipsis@pitrou.net>
parents:
71612
diff
changeset
|
1330 and real_max_memuse < maxsize * memuse): |
|
babc90f3cbf4
Issue #11564: Avoid crashes when trying to pickle huge objects or containers
Antoine Pitrou <solipsis@pitrou.net>
parents:
71612
diff
changeset
|
1331 raise unittest.SkipTest( |
|
babc90f3cbf4
Issue #11564: Avoid crashes when trying to pickle huge objects or containers
Antoine Pitrou <solipsis@pitrou.net>
parents:
71612
diff
changeset
|
1332 "not enough memory: %.1fG minimum needed" |
|
babc90f3cbf4
Issue #11564: Avoid crashes when trying to pickle huge objects or containers
Antoine Pitrou <solipsis@pitrou.net>
parents:
71612
diff
changeset
|
1333 % (size * memuse / (1024 ** 3))) |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1334 |
|
75911
53a2488605e3
Issue #14154: Reimplement the bigmem test memory watchdog as a subprocess.
Charles-François Natali <neologix@free.fr>
parents:
75850
diff
changeset
|
1335 if real_max_memuse and verbose: |
|
72642
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1336 print() |
|
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1337 print(" ... expected peak memory use: {peak:.1f}G" |
|
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1338 .format(peak=size * memuse / (1024 ** 3))) |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1339 watchdog = _MemoryWatchdog() |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1340 watchdog.start() |
|
72642
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1341 else: |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1342 watchdog = None |
|
72642
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1343 |
|
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1344 try: |
|
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1345 return f(self, maxsize) |
|
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1346 finally: |
|
72645
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1347 if watchdog: |
|
8eaa4c3f8633
Use the faulthandler module's infrastructure to write a GIL-less
Antoine Pitrou <solipsis@pitrou.net>
parents:
72643
diff
changeset
|
1348 watchdog.stop() |
|
72642
bf39434dd506
Start fixing test_bigmem:
Antoine Pitrou <solipsis@pitrou.net>
parents:
72119
diff
changeset
|
1349 |
|
48850
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1350 wrapper.size = size |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1351 wrapper.memuse = memuse |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1352 return wrapper |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1353 return decorator |
|
afb9808b0f30
Closes release blocker #3627.
Neal Norwitz <nnorwitz@gmail.com>
parents:
48455
diff
changeset
|
1354 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1355 def bigaddrspacetest(f): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1356 """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
|
1357 def wrapper(self): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1358 if max_memuse < MAX_Py_ssize_t: |
|
67594
4430e4d63594
Merged revisions 87968,87971-87975 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67467
diff
changeset
|
1359 if MAX_Py_ssize_t >= 2**63 - 1 and max_memuse >= 2**31: |
|
4430e4d63594
Merged revisions 87968,87971-87975 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67467
diff
changeset
|
1360 raise unittest.SkipTest( |
|
4430e4d63594
Merged revisions 87968,87971-87975 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67467
diff
changeset
|
1361 "not enough memory: try a 32-bit build instead") |
|
4430e4d63594
Merged revisions 87968,87971-87975 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67467
diff
changeset
|
1362 else: |
|
4430e4d63594
Merged revisions 87968,87971-87975 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67467
diff
changeset
|
1363 raise unittest.SkipTest( |
|
4430e4d63594
Merged revisions 87968,87971-87975 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67467
diff
changeset
|
1364 "not enough memory: %.1fG minimum needed" |
|
4430e4d63594
Merged revisions 87968,87971-87975 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67467
diff
changeset
|
1365 % (MAX_Py_ssize_t / (1024 ** 3))) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1366 else: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1367 return f(self) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1368 return wrapper |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1369 |
|
38453
29ae5e0fc348
Much-needed merge (using svnmerge.py this time) of trunk changes into p3yk.
Thomas Wouters <thomas@python.org>
parents:
36382
diff
changeset
|
1370 #======================================================================= |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1371 # 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
|
1372 |
|
17133
d0fd60c59aef
Updated to latest PyUnit version (1.31 in PyUnit CVS); test_support.py
Steve Purcell <steve@pythonconsulting.com>
parents:
17109
diff
changeset
|
1373 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
|
1374 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
|
1375 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
|
1376 test(result) |
|
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1377 return result |
|
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1378 |
|
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
|
1379 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
|
1380 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
|
1381 |
|
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
|
1382 def requires_resource(resource): |
|
68054
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
1383 if resource == 'gui' and not _is_gui_available(): |
|
f8a77fd675f5
Merged revisions 88460,88464,88466,88486,88511,88652 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
67594
diff
changeset
|
1384 return unittest.skip("resource 'gui' is not available") |
|
65317
b83f0a667e7c
Merged revisions 85482 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
64605
diff
changeset
|
1385 if is_resource_enabled(resource): |
|
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
|
1386 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
|
1387 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
|
1388 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
|
1389 |
|
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
|
1390 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
|
1391 """ |
|
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
|
1392 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
|
1393 """ |
|
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
|
1394 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
|
1395 |
|
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
|
1396 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
|
1397 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
|
1398 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
|
1399 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
|
1400 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
|
1401 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
|
1402 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
|
1403 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
|
1404 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
|
1405 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
|
1406 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
|
1407 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
|
1408 |
|
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
|
1409 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
|
1410 # 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
|
1411 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
|
1412 return ({'cpython': True}, False) |
| 53487 | 1413 is_true = list(guards.values())[0] |
| 1414 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
|
1415 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
|
1416 |
|
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
|
1417 # 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
|
1418 # 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
|
1419 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
|
1420 """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
|
1421 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
|
1422 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
|
1423 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
|
1424 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
|
1425 """ |
|
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
|
1426 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
|
1427 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
|
1428 |
|
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
|
1429 |
|
68080
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1430 def no_tracing(func): |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1431 """Decorator to temporarily turn off tracing for the duration of a test.""" |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1432 if not hasattr(sys, 'gettrace'): |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1433 return func |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1434 else: |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1435 @functools.wraps(func) |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1436 def wrapper(*args, **kwargs): |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1437 original_trace = sys.gettrace() |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1438 try: |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1439 sys.settrace(None) |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1440 return func(*args, **kwargs) |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1441 finally: |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1442 sys.settrace(original_trace) |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1443 return wrapper |
|
614e32900ef7
Issue #10990: Prevent tests from clobbering a set trace function.
Brett Cannon <bcannon@gmail.com>
parents:
67569
diff
changeset
|
1444 |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1445 |
|
68094
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1446 def refcount_test(test): |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1447 """Decorator for tests which involve reference counting. |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1448 |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1449 To start, the decorator does not run the test if is not run by CPython. |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1450 After that, any trace function is unset during the test to prevent |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1451 unexpected refcounts caused by the trace function. |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1452 |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1453 """ |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1454 return no_tracing(cpython_only(test)) |
|
7f85fbc16cae
Issue #10992: make tests pass when run under coverage.
Brett Cannon <bcannon@gmail.com>
parents:
68080
diff
changeset
|
1455 |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1456 |
|
71612
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1457 def _filter_suite(suite, pred): |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1458 """Recursively filter test cases in a suite based on a predicate.""" |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1459 newtests = [] |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1460 for test in suite._tests: |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1461 if isinstance(test, unittest.TestSuite): |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1462 _filter_suite(test, pred) |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1463 newtests.append(test) |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1464 else: |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1465 if pred(test): |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1466 newtests.append(test) |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1467 suite._tests = newtests |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1468 |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1469 def _run_suite(suite): |
|
19995
b07cb51d731c
run_suite(): Oops, update a docstring.
Barry Warsaw <barry@python.org>
parents:
19994
diff
changeset
|
1470 """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
|
1471 if verbose: |
|
71487
9f847dfba217
Issue #12624: It is now possible to fail after the first failure when
Antoine Pitrou <solipsis@pitrou.net>
parents:
71365
diff
changeset
|
1472 runner = unittest.TextTestRunner(sys.stdout, verbosity=2, |
|
9f847dfba217
Issue #12624: It is now possible to fail after the first failure when
Antoine Pitrou <solipsis@pitrou.net>
parents:
71365
diff
changeset
|
1473 failfast=failfast) |
|
17109
7eb8b240dd6c
Just import sys at the top instead of inside lots of functions.
Fred Drake <fdrake@acm.org>
parents:
17036
diff
changeset
|
1474 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
|
1475 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
|
1476 |
|
17133
d0fd60c59aef
Updated to latest PyUnit version (1.31 in PyUnit CVS); test_support.py
Steve Purcell <steve@pythonconsulting.com>
parents:
17109
diff
changeset
|
1477 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
|
1478 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
|
1479 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
|
1480 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
|
1481 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
|
1482 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
|
1483 else: |
|
56949
a795529b09c9
Merged revisions 75525,75530,75922 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
55594
diff
changeset
|
1484 err = "multiple errors occurred" |
|
a795529b09c9
Merged revisions 75525,75530,75922 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
55594
diff
changeset
|
1485 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
|
1486 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
|
1487 |
|
19994
ab6c14822de1
run_suite(): Factor this out of run_unittest() for tests that build
Barry Warsaw <barry@python.org>
parents:
19819
diff
changeset
|
1488 |
|
28917
1741af48fd9f
Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents:
28863
diff
changeset
|
1489 def run_unittest(*classes): |
|
1741af48fd9f
Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents:
28863
diff
changeset
|
1490 """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
|
1491 valid_types = (unittest.TestSuite, unittest.TestCase) |
|
28863
6d852ebff36f
Factor out common boilerplate for test_support
Raymond Hettinger <python@rcn.com>
parents:
28799
diff
changeset
|
1492 suite = unittest.TestSuite() |
|
28917
1741af48fd9f
Combine the functionality of test_support.run_unittest()
Walter Dörwald <walter@livinglogic.de>
parents:
28863
diff
changeset
|
1493 for cls in classes: |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43100
diff
changeset
|
1494 if isinstance(cls, str): |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1495 if cls in sys.modules: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1496 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
|
1497 else: |
|
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1498 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
|
1499 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
|
1500 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
|
1501 else: |
|
3f214b39b4df
run_unittest() to support TestCase instances as well as classes. Helps with doctests.
Raymond Hettinger <python@rcn.com>
parents:
29142
diff
changeset
|
1502 suite.addTest(unittest.makeSuite(cls)) |
|
71612
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1503 def case_pred(test): |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1504 if match_tests is None: |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1505 return True |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1506 for name in test.id().split("."): |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1507 if fnmatch.fnmatchcase(name, match_tests): |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1508 return True |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1509 return False |
|
5d7a2bd9a3d1
Issue #12626: In regrtest, allow to filter tests using a glob filter
Antoine Pitrou <solipsis@pitrou.net>
parents:
71487
diff
changeset
|
1510 _filter_suite(suite, case_pred) |
|
41554
06145fbc7ab9
Merged revisions 53952-54987 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40910
diff
changeset
|
1511 _run_suite(suite) |
|
28863
6d852ebff36f
Factor out common boilerplate for test_support
Raymond Hettinger <python@rcn.com>
parents:
28799
diff
changeset
|
1512 |
|
19994
ab6c14822de1
run_suite(): Factor this out of run_unittest() for tests that build
Barry Warsaw <barry@python.org>
parents:
19819
diff
changeset
|
1513 |
|
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
|
1514 #======================================================================= |
|
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
|
1515 # 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
|
1516 |
|
75850
7355550d5357
Issue #7652: Integrate the decimal floating point libmpdec library to speed
Stefan Krah <skrah@bytereef.org>
parents:
75295
diff
changeset
|
1517 def run_doctest(module, verbosity=None, optionflags=0): |
|
20227
92f86436b6be
SF bug [#467336] doctest failures w/ new-style classes.
Tim Peters <tim.peters@gmail.com>
parents:
20091
diff
changeset
|
1518 """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
|
1519 |
|
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
|
1520 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
|
1521 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
|
1522 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
|
1523 """ |
|
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
|
1524 |
|
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
|
1525 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
|
1526 |
|
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
|
1527 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
|
1528 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
|
1529 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
|
1530 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
|
1531 |
|
75850
7355550d5357
Issue #7652: Integrate the decimal floating point libmpdec library to speed
Stefan Krah <skrah@bytereef.org>
parents:
75295
diff
changeset
|
1532 f, t = doctest.testmod(module, verbose=verbosity, optionflags=optionflags) |
|
71072
d8ba59de860a
Issue #12400: test.support.run_doctest() doesn't change sys.stdout anymore
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70814
diff
changeset
|
1533 if f: |
|
d8ba59de860a
Issue #12400: test.support.run_doctest() doesn't change sys.stdout anymore
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70814
diff
changeset
|
1534 raise TestFailed("%d of %d doctests failed" % (f, t)) |
|
29140
e57e22aa56a4
Provide a clue that the doctests have run.
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
1535 if verbose: |
| 45182 | 1536 print('doctest (%s) ... %d tests with zero failures' % |
| 1537 (module.__name__, t)) | |
|
29140
e57e22aa56a4
Provide a clue that the doctests have run.
Raymond Hettinger <python@rcn.com>
parents:
29066
diff
changeset
|
1538 return f, t |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1539 |
|
57215
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1540 |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1541 #======================================================================= |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1542 # Support for saving and restoring the imported modules. |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1543 |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1544 def modules_setup(): |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1545 return sys.modules.copy(), |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1546 |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1547 def modules_cleanup(oldmodules): |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1548 # Encoders/decoders are registered permanently within the internal |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1549 # codec cache. If we destroy the corresponding modules their |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1550 # globals will be set to None which will trip up the cached functions. |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1551 encodings = [(k, v) for k, v in sys.modules.items() |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1552 if k.startswith('encodings.')] |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1553 sys.modules.clear() |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1554 sys.modules.update(encodings) |
|
67527
db8d15933121
Issue 10556: test_zipimport_support implicitly imports too many modules (including _ssl) to safely clobber sys.modules after each test
Nick Coghlan <ncoghlan@gmail.com>
parents:
67466
diff
changeset
|
1555 # XXX: This kind of problem can affect more than just encodings. In particular |
| 67528 | 1556 # extension modules (such as _ssl) don't cope with reloading properly. |
|
67527
db8d15933121
Issue 10556: test_zipimport_support implicitly imports too many modules (including _ssl) to safely clobber sys.modules after each test
Nick Coghlan <ncoghlan@gmail.com>
parents:
67466
diff
changeset
|
1557 # Really, test modules should be cleaning out the test specific modules they |
|
db8d15933121
Issue 10556: test_zipimport_support implicitly imports too many modules (including _ssl) to safely clobber sys.modules after each test
Nick Coghlan <ncoghlan@gmail.com>
parents:
67466
diff
changeset
|
1558 # know they added (ala test_runpy) rather than relying on this function (as |
|
db8d15933121
Issue 10556: test_zipimport_support implicitly imports too many modules (including _ssl) to safely clobber sys.modules after each test
Nick Coghlan <ncoghlan@gmail.com>
parents:
67466
diff
changeset
|
1559 # test_importhooks and test_pkg do currently). |
|
db8d15933121
Issue 10556: test_zipimport_support implicitly imports too many modules (including _ssl) to safely clobber sys.modules after each test
Nick Coghlan <ncoghlan@gmail.com>
parents:
67466
diff
changeset
|
1560 # Implicitly imported *real* modules should be left alone (see issue 10556). |
|
57215
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1561 sys.modules.update(oldmodules) |
|
357e39700489
Merged revisions 76240 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
57056
diff
changeset
|
1562 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1563 #======================================================================= |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1564 # 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
|
1565 |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1566 # 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
|
1567 # 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
|
1568 # 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
|
1569 # unregistered from the threading module. |
|
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1570 # 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
|
1571 # __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
|
1572 # at the end of a test run. |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1573 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1574 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
|
1575 if _thread: |
|
71365
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
1576 return _thread._count(), threading._dangling.copy() |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1577 else: |
|
71365
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
1578 return 1, () |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1579 |
|
71365
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
1580 def threading_cleanup(*original_values): |
|
61073
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1581 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
|
1582 return |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1583 _MAX_COUNT = 10 |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1584 for count in range(_MAX_COUNT): |
|
71365
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
1585 values = _thread._count(), threading._dangling |
|
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
1586 if values == original_values: |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1587 break |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1588 time.sleep(0.1) |
|
71365
6a221b6b81ee
Try harder to reap dangling threads in test.support.reap_threads().
Antoine Pitrou <solipsis@pitrou.net>
parents:
71269
diff
changeset
|
1589 gc_collect() |
|
56981
6cf84e5a6dd7
Merged revisions 75958 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
56627
diff
changeset
|
1590 # 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
|
1591 |
|
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
|
1592 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
|
1593 """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
|
1594 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
|
1595 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
|
1596 """ |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1597 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
|
1598 return func |
|
493bb4585e38
Merged revisions 80552-80556,80564-80566,80568-80571 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60817
diff
changeset
|
1599 |
|
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
|
1600 @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
|
1601 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
|
1602 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
|
1603 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
|
1604 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
|
1605 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
|
1606 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
|
1607 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
|
1608 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1609 def reap_children(): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1610 """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
|
1611 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
|
1612 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
|
1613 for refleaks. |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1614 """ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1615 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1616 # 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
|
1617 # 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
|
1618 if hasattr(os, 'waitpid'): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1619 any_process = -1 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1620 while True: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1621 try: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1622 # 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
|
1623 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
|
1624 if pid == 0: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1625 break |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1626 except: |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1627 break |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1628 |
|
59654
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1629 @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
|
1630 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
|
1631 """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
|
1632 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1633 Usage: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1634 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
|
1635 ... |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1636 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1637 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
|
1638 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
|
1639 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
|
1640 block. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1641 """ |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1642 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
|
1643 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
|
1644 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
|
1645 try: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1646 yield |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1647 finally: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1648 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
|
1649 else: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1650 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
|
1651 try: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1652 yield |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1653 finally: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1654 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
|
1655 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1656 @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
|
1657 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
|
1658 """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
|
1659 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1660 Usage: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1661 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
|
1662 ... |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1663 |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1664 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
|
1665 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
|
1666 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
|
1667 block. |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1668 """ |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1669 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
|
1670 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
|
1671 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
|
1672 try: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1673 yield |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1674 finally: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1675 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
|
1676 else: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1677 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
|
1678 try: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1679 yield |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1680 finally: |
|
aa632943b8bd
Add some tests for ways users can change or shadow globals and builtins.
Collin Winter <collinw@gmail.com>
parents:
59601
diff
changeset
|
1681 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
|
1682 |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1683 def strip_python_stderr(stderr): |
|
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1684 """Strip the stderr of a Python process from potential debug output |
|
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1685 emitted by the interpreter. |
|
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1686 |
|
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1687 This will typically be run on the result of the communicate() method |
|
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1688 of a subprocess.Popen object. |
|
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1689 """ |
|
77428
d31e83497c5a
Issue #13841: Make child processes exit using sys.exit() on Windows
Richard Oudkerk <shibturn@gmail.com>
parents:
77113
diff
changeset
|
1690 stderr = re.sub(br"\[\d+ refs\]\r?\n?", b"", stderr).strip() |
|
67311
e9a51d463579
Merged revisions 87695 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
65317
diff
changeset
|
1691 return stderr |
|
68544
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1692 |
|
65304
995c33e2263b
Inherit interpreter flags in parallel testing
Antoine Pitrou <solipsis@pitrou.net>
parents:
65278
diff
changeset
|
1693 def args_from_interpreter_flags(): |
|
995c33e2263b
Inherit interpreter flags in parallel testing
Antoine Pitrou <solipsis@pitrou.net>
parents:
65278
diff
changeset
|
1694 """Return a list of command-line arguments reproducing the current |
|
68531
07f5ec8fc014
Add warnings support to test.support.args_from_interpreter_flags().
Brett Cannon <brett@python.org>
parents:
68258
diff
changeset
|
1695 settings in sys.flags and sys.warnoptions.""" |
|
77036
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
77035
diff
changeset
|
1696 return subprocess._args_from_interpreter_flags() |
|
66816
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1697 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1698 #============================================================ |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1699 # Support for assertions about logging. |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1700 #============================================================ |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1701 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1702 class TestHandler(logging.handlers.BufferingHandler): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1703 def __init__(self, matcher): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1704 # BufferingHandler takes a "capacity" argument |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1705 # so as to know when to flush. As we're overriding |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1706 # shouldFlush anyway, we can set a capacity of zero. |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1707 # You can call flush() manually to clear out the |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1708 # buffer. |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1709 logging.handlers.BufferingHandler.__init__(self, 0) |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1710 self.matcher = matcher |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1711 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1712 def shouldFlush(self): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1713 return False |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1714 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1715 def emit(self, record): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1716 self.format(record) |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1717 self.buffer.append(record.__dict__) |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1718 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1719 def matches(self, **kwargs): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1720 """ |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1721 Look for a saved dict whose keys/values match the supplied arguments. |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1722 """ |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1723 result = False |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1724 for d in self.buffer: |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1725 if self.matcher.matches(d, **kwargs): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1726 result = True |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1727 break |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1728 return result |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1729 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1730 class Matcher(object): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1731 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1732 _partial_matches = ('msg', 'message') |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1733 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1734 def matches(self, d, **kwargs): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1735 """ |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1736 Try to match a single dict with the supplied arguments. |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1737 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1738 Keys whose values are strings and which are in self._partial_matches |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1739 will be checked for partial (i.e. substring) matches. You can extend |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1740 this scheme to (for example) do regular expression matching, etc. |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1741 """ |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1742 result = True |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1743 for k in kwargs: |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1744 v = kwargs[k] |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1745 dv = d.get(k) |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1746 if not self.match_value(k, dv, v): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1747 result = False |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1748 break |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1749 return result |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1750 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1751 def match_value(self, k, dv, v): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1752 """ |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1753 Try to match a single stored value (dv) with a supplied value (v). |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1754 """ |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1755 if type(v) != type(dv): |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1756 result = False |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1757 elif type(dv) is not str or k not in self._partial_matches: |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1758 result = (v == dv) |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1759 else: |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1760 result = dv.find(v) >= 0 |
|
9cb2ecbb1f0c
test.support: Added TestHandler and Matcher classes for better support of assertions about logging.
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
66717
diff
changeset
|
1761 return result |
|
67183
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1762 |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1763 |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1764 _can_symlink = None |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1765 def can_symlink(): |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1766 global _can_symlink |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1767 if _can_symlink is not None: |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1768 return _can_symlink |
|
70698
3ac7f71696a1
test.support: can_symlink() removes the temporary symbolic link
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70575
diff
changeset
|
1769 symlink_path = TESTFN + "can_symlink" |
|
67183
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1770 try: |
|
70698
3ac7f71696a1
test.support: can_symlink() removes the temporary symbolic link
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70575
diff
changeset
|
1771 os.symlink(TESTFN, symlink_path) |
|
67183
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1772 can = True |
|
70811
1a3e8db28d49
Fix #12084. os.stat on Windows wasn't working properly with relative symlinks.
Brian Curtin <brian@python.org>
parents:
70575
diff
changeset
|
1773 except (OSError, NotImplementedError, AttributeError): |
|
67183
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1774 can = False |
|
70698
3ac7f71696a1
test.support: can_symlink() removes the temporary symbolic link
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70575
diff
changeset
|
1775 else: |
|
3ac7f71696a1
test.support: can_symlink() removes the temporary symbolic link
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70575
diff
changeset
|
1776 os.remove(symlink_path) |
|
67183
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1777 _can_symlink = can |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1778 return can |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1779 |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1780 def skip_unless_symlink(test): |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1781 """Skip decorator for tests that require functional symlink""" |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1782 ok = can_symlink() |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1783 msg = "Requires functional symlink implementation" |
|
5aa433a277f9
Fix #9333. The symlink function is always available now, raising OSError
Brian Curtin <brian.curtin@gmail.com>
parents:
66843
diff
changeset
|
1784 return test if ok else unittest.skip(msg)(test) |
| 68545 | 1785 |
|
76883
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1786 _can_xattr = None |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1787 def can_xattr(): |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1788 global _can_xattr |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1789 if _can_xattr is not None: |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1790 return _can_xattr |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1791 if not hasattr(os, "setxattr"): |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1792 can = False |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1793 else: |
|
77113
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
1794 tmp_fp, tmp_name = tempfile.mkstemp() |
|
76883
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1795 try: |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1796 with open(TESTFN, "wb") as fp: |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1797 try: |
|
77113
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
1798 # TESTFN & tempfile may use different file systems with |
|
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
1799 # different capabilities |
|
77597
27f9c26fdd8b
Issue #14626: Large refactoring of functions / parameters in the os module.
Larry Hastings <larry@hastings.org>
parents:
77428
diff
changeset
|
1800 os.setxattr(tmp_fp, b"user.test", b"") |
|
27f9c26fdd8b
Issue #14626: Large refactoring of functions / parameters in the os module.
Larry Hastings <larry@hastings.org>
parents:
77428
diff
changeset
|
1801 os.setxattr(fp.fileno(), b"user.test", b"") |
|
76883
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1802 # Kernels < 2.6.39 don't respect setxattr flags. |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1803 kernel_version = platform.release() |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1804 m = re.match("2.6.(\d{1,2})", kernel_version) |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1805 can = m is None or int(m.group(1)) >= 39 |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1806 except OSError: |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1807 can = False |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1808 finally: |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1809 unlink(TESTFN) |
|
77113
ab94ed2a8012
#14885: Make support.skip_unless_xattr check also tempfile
Hynek Schlawack <hs@ox.cx>
parents:
77036
diff
changeset
|
1810 unlink(tmp_name) |
|
76883
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1811 _can_xattr = can |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1812 return can |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1813 |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1814 def skip_unless_xattr(test): |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1815 """Skip decorator for tests that require functional extended attributes""" |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1816 ok = can_xattr() |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1817 msg = "no non-broken extended attribute support" |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1818 return test if ok else unittest.skip(msg)(test) |
|
85824b819bcb
Issue #14082: shutil.copy2() now copies extended attributes, if possible.
Antoine Pitrou <solipsis@pitrou.net>
parents:
76682
diff
changeset
|
1819 |
|
68544
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1820 def patch(test_instance, object_to_patch, attr_name, new_value): |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1821 """Override 'object_to_patch'.'attr_name' with 'new_value'. |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1822 |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1823 Also, add a cleanup procedure to 'test_instance' to restore |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1824 'object_to_patch' value for 'attr_name'. |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1825 The 'attr_name' should be a valid attribute for 'object_to_patch'. |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1826 |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1827 """ |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1828 # check that 'attr_name' is a real attribute for 'object_to_patch' |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1829 # will raise AttributeError if it does not exist |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1830 getattr(object_to_patch, attr_name) |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1831 |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1832 # keep a copy of the old value |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1833 attr_is_local = False |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1834 try: |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1835 old_value = object_to_patch.__dict__[attr_name] |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1836 except (AttributeError, KeyError): |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1837 old_value = getattr(object_to_patch, attr_name, None) |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1838 else: |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1839 attr_is_local = True |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1840 |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1841 # restore the value when the test is done |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1842 def cleanup(): |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1843 if attr_is_local: |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1844 setattr(object_to_patch, attr_name, old_value) |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1845 else: |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1846 delattr(object_to_patch, attr_name) |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1847 |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1848 test_instance.addCleanup(cleanup) |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1849 |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1850 # actually override the attribute |
|
6b33aa811821
On behalf of Tarek: Issue #11501: disutils.archive_utils.make_zipfile no
Antoine Pitrou <solipsis@pitrou.net>
parents:
68054
diff
changeset
|
1851 setattr(object_to_patch, attr_name, new_value) |
