diff options
author | Brett Cannon <brett@python.org> | 2013-10-25 19:45:42 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2013-10-25 19:45:42 (GMT) |
commit | 502834cf3c6add73507b709b2f65d5118ec3a735 (patch) | |
tree | 28c093fd03b976fb1e4b9d4e4f61d6d81bc168ec | |
parent | a20800d1d93bf83c131523f14271a34641f1f588 (diff) | |
parent | 3b2f0f045903ba9f24d92c053bd6d0fc8561973f (diff) | |
download | cpython-502834cf3c6add73507b709b2f65d5118ec3a735.zip cpython-502834cf3c6add73507b709b2f65d5118ec3a735.tar.gz cpython-502834cf3c6add73507b709b2f65d5118ec3a735.tar.bz2 |
merge
-rw-r--r-- | Doc/library/site.rst | 3 | ||||
-rw-r--r-- | Doc/whatsnew/3.4.rst | 3 | ||||
-rw-r--r-- | Lib/site.py | 5 | ||||
-rw-r--r-- | Lib/sre_compile.py | 28 | ||||
-rw-r--r-- | Lib/test/test_re.py | 22 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
6 files changed, 54 insertions, 10 deletions
diff --git a/Doc/library/site.rst b/Doc/library/site.rst index 2175c3e..d93e938 100644 --- a/Doc/library/site.rst +++ b/Doc/library/site.rst @@ -38,6 +38,9 @@ Unix and Macintosh). For each of the distinct head-tail combinations, it sees if it refers to an existing directory, and if so, adds it to ``sys.path`` and also inspects the newly added path for configuration files. +.. deprecated:: 3.4 + Support for the "site-python" directory will be removed in 3.5. + If a file named "pyvenv.cfg" exists one directory above sys.executable, sys.prefix and sys.exec_prefix are set to that directory and it is also checked for site-packages and site-python (sys.base_prefix and diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst index 392af3b..6e261d5 100644 --- a/Doc/whatsnew/3.4.rst +++ b/Doc/whatsnew/3.4.rst @@ -685,7 +685,8 @@ Deprecated functions and types of the C API Deprecated features ------------------- -* No feature deprecations are planned for Python 3.4. +* The site module adding a "site-python" directory to sys.path, if it + exists, is deprecated (:issue:`19375`). Porting to Python 3.4 diff --git a/Lib/site.py b/Lib/site.py index bb329b4..b0d8268 100644 --- a/Lib/site.py +++ b/Lib/site.py @@ -326,6 +326,11 @@ def addsitepackages(known_paths, prefixes=None): """Add site-packages (and possibly site-python) to sys.path""" for sitedir in getsitepackages(prefixes): if os.path.isdir(sitedir): + if "site-python" in sitedir: + import warnings + warnings.warn('"site-python" directories will not be ' + 'supported in 3.5 anymore', + DeprecationWarning) addsitedir(sitedir, known_paths) return known_paths diff --git a/Lib/sre_compile.py b/Lib/sre_compile.py index e08ec66..e194aaa 100644 --- a/Lib/sre_compile.py +++ b/Lib/sre_compile.py @@ -353,6 +353,27 @@ def _simple(av): lo, hi = av[2].getwidth() return lo == hi == 1 and av[2][0][0] != SUBPATTERN +def _generate_overlap_table(prefix): + """ + Generate an overlap table for the following prefix. + An overlap table is a table of the same size as the prefix which + informs about the potential self-overlap for each index in the prefix: + - if overlap[i] == 0, prefix[i:] can't overlap prefix[0:...] + - if overlap[i] == k with 0 < k <= i, prefix[i-k+1:i+1] overlaps with + prefix[0:k] + """ + table = [0] * len(prefix) + for i in range(1, len(prefix)): + idx = table[i - 1] + while prefix[i] != prefix[idx]: + if idx == 0: + table[i] = 0 + break + idx = table[idx - 1] + else: + table[i] = idx + 1 + return table + def _compile_info(code, pattern, flags): # internal: compile an info block. in the current version, # this contains min/max pattern width, and an optional literal @@ -449,12 +470,7 @@ def _compile_info(code, pattern, flags): emit(prefix_skip) # skip code.extend(prefix) # generate overlap table - table = [-1] + ([0]*len(prefix)) - for i in range(len(prefix)): - table[i+1] = table[i]+1 - while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]: - table[i+1] = table[table[i+1]-1]+1 - code.extend(table[1:]) # don't store first entry + code.extend(_generate_overlap_table(prefix)) elif charset: _compile_charset(charset, flags, code) code[skip] = len(code) - skip diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index 5e68585..9ee077d 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -3,10 +3,12 @@ from test.support import verbose, run_unittest, gc_collect, bigmemtest, _2G, \ import io import re from re import Scanner +import sre_compile import sre_constants import sys import string import traceback +import unittest from weakref import proxy # Misc tests from Tim Peters' re.doc @@ -15,8 +17,6 @@ from weakref import proxy # what you're doing. Some of these tests were carefully modeled to # cover most of the code. -import unittest - class S(str): def __getitem__(self, index): return S(super().__getitem__(index)) @@ -1140,6 +1140,22 @@ class ReTests(unittest.TestCase): self.assertEqual(m.group(1), "") self.assertEqual(m.group(2), "y") + +class ImplementationTest(unittest.TestCase): + """ + Test implementation details of the re module. + """ + + def test_overlap_table(self): + f = sre_compile._generate_overlap_table + self.assertEqual(f(""), []) + self.assertEqual(f("a"), [0]) + self.assertEqual(f("abcd"), [0, 0, 0, 0]) + self.assertEqual(f("aaaa"), [0, 1, 2, 3]) + self.assertEqual(f("ababba"), [0, 0, 1, 2, 0, 1]) + self.assertEqual(f("abcabdac"), [0, 0, 0, 1, 2, 0, 1, 0]) + + def run_re_tests(): from test.re_tests import tests, SUCCEED, FAIL, SYNTAX_ERROR if verbose: @@ -1269,7 +1285,7 @@ def run_re_tests(): def test_main(): - run_unittest(ReTests) + run_unittest(__name__) run_re_tests() if __name__ == "__main__": @@ -27,6 +27,9 @@ Core and Builtins Library ------- +- Issue #19375: The site module adding a "site-python" directory to sys.path, + if it exists, is now deprecated. + - Issue #19379: Lazily import linecache in the warnings module, to make startup with warnings faster until a warning gets printed. |