summaryrefslogtreecommitdiffstats
path: root/Lib/imp.py
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2012-07-13 17:57:03 (GMT)
committerBrett Cannon <brett@python.org>2012-07-13 17:57:03 (GMT)
commita6473f9cfd13358b003b8353cd722ca19352817c (patch)
tree3533968bc996698be3bd30eb80ecb5b6dea05f85 /Lib/imp.py
parentd104eef118bda30725ac087e06252a5a3525e2df (diff)
downloadcpython-a6473f9cfd13358b003b8353cd722ca19352817c.zip
cpython-a6473f9cfd13358b003b8353cd722ca19352817c.tar.gz
cpython-a6473f9cfd13358b003b8353cd722ca19352817c.tar.bz2
Issues #15169, #14599: Make PyImport_ExecCodeModuleWithPathnames() use
Lib/imp.py for imp.source_from_cache() instead of its own C version. Also change PyImport_ExecCodeModuleObject() to not infer the source path from the bytecode path like PyImport_ExecCodeModuleWithPathnames() does. This makes the function less magical. This also has the side-effect of removing all uses of MAXPATHLEN in Python/import.c which can cause failures on really long filenames.
Diffstat (limited to 'Lib/imp.py')
-rw-r--r--Lib/imp.py25
1 files changed, 1 insertions, 24 deletions
diff --git a/Lib/imp.py b/Lib/imp.py
index 58d1c97..419f631 100644
--- a/Lib/imp.py
+++ b/Lib/imp.py
@@ -13,7 +13,7 @@ from _imp import (lock_held, acquire_lock, release_lock,
# Directly exposed by this module
from importlib._bootstrap import new_module
-from importlib._bootstrap import cache_from_source
+from importlib._bootstrap import cache_from_source, source_from_cache
from importlib import _bootstrap
@@ -58,29 +58,6 @@ def get_suffixes():
return extensions + source + bytecode
-def source_from_cache(path):
- """Given the path to a .pyc./.pyo file, return the path to its .py file.
-
- The .pyc/.pyo file does not need to exist; this simply returns the path to
- the .py file calculated to correspond to the .pyc/.pyo file. If path does
- not conform to PEP 3147 format, ValueError will be raised. If
- sys.implementation.cache_tag is None then NotImplementedError is raised.
-
- """
- if sys.implementation.cache_tag is None:
- raise NotImplementedError('sys.implementation.cache_tag is None')
- head, pycache_filename = os.path.split(path)
- head, pycache = os.path.split(head)
- if pycache != _bootstrap._PYCACHE:
- raise ValueError('{} not bottom-level directory in '
- '{!r}'.format(_bootstrap._PYCACHE, path))
- if pycache_filename.count('.') != 2:
- raise ValueError('expected only 2 dots in '
- '{!r}'.format(pycache_filename))
- base_filename = pycache_filename.partition('.')[0]
- return os.path.join(head, base_filename + machinery.SOURCE_SUFFIXES[0])
-
-
class NullImporter:
"""Null import object."""