summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2013-10-25 19:45:42 (GMT)
committerBrett Cannon <brett@python.org>2013-10-25 19:45:42 (GMT)
commit502834cf3c6add73507b709b2f65d5118ec3a735 (patch)
tree28c093fd03b976fb1e4b9d4e4f61d6d81bc168ec
parenta20800d1d93bf83c131523f14271a34641f1f588 (diff)
parent3b2f0f045903ba9f24d92c053bd6d0fc8561973f (diff)
downloadcpython-502834cf3c6add73507b709b2f65d5118ec3a735.zip
cpython-502834cf3c6add73507b709b2f65d5118ec3a735.tar.gz
cpython-502834cf3c6add73507b709b2f65d5118ec3a735.tar.bz2
merge
-rw-r--r--Doc/library/site.rst3
-rw-r--r--Doc/whatsnew/3.4.rst3
-rw-r--r--Lib/site.py5
-rw-r--r--Lib/sre_compile.py28
-rw-r--r--Lib/test/test_re.py22
-rw-r--r--Misc/NEWS3
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__":
diff --git a/Misc/NEWS b/Misc/NEWS
index 5f6ccad..be64bee 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.