Commit 1fae78f7 authored by Gary Poster's avatar Gary Poster

simplify resulting code a bit more and try again to remove warnings

parent 7e825d61
...@@ -1063,7 +1063,8 @@ def _generate_scripts(reqs, working_set, dest, path, scripts, relative_paths, ...@@ -1063,7 +1063,8 @@ def _generate_scripts(reqs, working_set, dest, path, scripts, relative_paths,
return generated return generated
def _relative_path_and_setup(sname, path, def _relative_path_and_setup(sname, path,
relative_paths=False, indent_level=1): relative_paths=False, indent_level=1,
omit_os_import=False):
"""Return a string of code of paths and of setup if appropriate. """Return a string of code of paths and of setup if appropriate.
- sname is the full path to the script name to be created. - sname is the full path to the script name to be created.
...@@ -1080,8 +1081,10 @@ def _relative_path_and_setup(sname, path, ...@@ -1080,8 +1081,10 @@ def _relative_path_and_setup(sname, path,
[_relativitize(os.path.normcase(path_item), sname, relative_paths) [_relativitize(os.path.normcase(path_item), sname, relative_paths)
for path_item in path], indent_level=indent_level) for path_item in path], indent_level=indent_level)
rpsetup = relative_paths_setup rpsetup = relative_paths_setup
if not omit_os_import:
rpsetup = '\n\nimport os\n' + rpsetup
for i in range(_relative_depth(relative_paths, sname)): for i in range(_relative_depth(relative_paths, sname)):
rpsetup += "base = os.path.dirname(base)\n" rpsetup += "\nbase = os.path.dirname(base)"
else: else:
spath = _format_paths((repr(p) for p in path), spath = _format_paths((repr(p) for p in path),
indent_level=indent_level) indent_level=indent_level)
...@@ -1143,11 +1146,8 @@ def _relativitize(path, script, relative_paths): ...@@ -1143,11 +1146,8 @@ def _relativitize(path, script, relative_paths):
return repr(path) return repr(path)
relative_paths_setup = """ relative_paths_setup = """
import os
join = os.path.join join = os.path.join
base = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) base = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))"""
"""
def _write_script(full_name, contents, logged_type): def _write_script(full_name, contents, logged_type):
"""Write contents of script in full_name, logging the action. """Write contents of script in full_name, logging the action.
...@@ -1214,8 +1214,8 @@ sys.path[0:0] = [ ...@@ -1214,8 +1214,8 @@ sys.path[0:0] = [
''' '''
script_template = script_header + '''\ script_template = script_header + '''\
%(relative_paths_setup)s %(relative_paths_setup)s
import sys import sys
sys.path[0:0] = [ sys.path[0:0] = [
%(path)s, %(path)s,
...@@ -1240,8 +1240,8 @@ def _pyscript(path, dest, executable, rsetup): ...@@ -1240,8 +1240,8 @@ def _pyscript(path, dest, executable, rsetup):
return _write_script(dest, contents, 'interpreter') return _write_script(dest, contents, 'interpreter')
py_script_template = script_header + '''\ py_script_template = script_header + '''\
%(relative_paths_setup)s %(relative_paths_setup)s
import sys import sys
sys.path[0:0] = [ sys.path[0:0] = [
...@@ -1384,29 +1384,32 @@ def _generate_site(dest, working_set, executable, extra_paths=(), ...@@ -1384,29 +1384,32 @@ def _generate_site(dest, working_set, executable, extra_paths=(),
""" """
path = _get_path(working_set, extra_paths) path = _get_path(working_set, extra_paths)
site_path = os.path.join(dest, 'site.py') site_path = os.path.join(dest, 'site.py')
path_string, rpsetup = _relative_path_and_setup( egg_path_string, preamble = _relative_path_and_setup(
site_path, path, relative_paths, indent_level=2) site_path, path, relative_paths, indent_level=2, omit_os_import=True)
if rpsetup: if preamble:
rpsetup = '\n'.join( preamble = '\n'.join(
[(line and ' %s' % (line,) or line) [(line and ' %s' % (line,) or line)
for line in rpsetup.split('\n')]) for line in preamble.split('\n')])
namespace_setup = '' original_path_setup = ''
addsitedir = addsitedir_snippet
if add_site_packages: if add_site_packages:
stdlib, site_paths = _get_system_paths(executable) stdlib, site_paths = _get_system_paths(executable)
path_string = ''.join([ original_path_setup = original_path_snippet % (
path_string, _format_paths((repr(p) for p in site_paths), 2),)
(",\n"
" # These are the underlying Python's site-packages.\n"
" "),
_format_paths((repr(p) for p in site_paths), 2)])
distribution = working_set.find( distribution = working_set.find(
pkg_resources.Requirement.parse('setuptools')) pkg_resources.Requirement.parse('setuptools'))
if distribution is not None: if distribution is not None:
# We need to worry about namespace packages. # We need to worry about namespace packages.
namespace_setup = namespace_add_site_packages_setup % ( if relative_paths:
distribution.location,) location = _relativitize(
addsitedir = addsitedir_namespace_add_site_packages_snippet distribution.location,
os.path.normcase(os.path.abspath(site_path)),
relative_paths)
else:
location = repr(distribution.location)
preamble += namespace_add_site_packages_setup % (location,)
original_path_setup = (
addsitedir_namespace_originalpackages_snippet +
original_path_setup)
addsitepackages_marker = 'def addsitepackages(' addsitepackages_marker = 'def addsitepackages('
enableusersite_marker = 'ENABLE_USER_SITE = ' enableusersite_marker = 'ENABLE_USER_SITE = '
successful_rewrite = False successful_rewrite = False
...@@ -1420,7 +1423,7 @@ def _generate_site(dest, working_set, executable, extra_paths=(), ...@@ -1420,7 +1423,7 @@ def _generate_site(dest, working_set, executable, extra_paths=(),
site.write('False # buildout does not support user sites.\n') site.write('False # buildout does not support user sites.\n')
elif line.startswith(addsitepackages_marker): elif line.startswith(addsitepackages_marker):
site.write(addsitepackages_script % ( site.write(addsitepackages_script % (
namespace_setup, rpsetup, path_string, addsitedir)) preamble, egg_path_string, original_path_setup))
site.write(line[len(addsitepackages_marker):]) site.write(line[len(addsitepackages_marker):])
successful_rewrite = True successful_rewrite = True
else: else:
...@@ -1433,49 +1436,41 @@ def _generate_site(dest, working_set, executable, extra_paths=(), ...@@ -1433,49 +1436,41 @@ def _generate_site(dest, working_set, executable, extra_paths=(),
return site_path return site_path
namespace_add_site_packages_setup = ''' namespace_add_site_packages_setup = '''
setuptools_path = %r setuptools_path = %s
sys.path.append(setuptools_path) sys.path.append(setuptools_path)
known_paths.add(setuptools_path) known_paths.add(os.path.normcase(setuptools_path))
import pkg_resources''' import pkg_resources'''
addsitedir_snippet = ''' addsitedir_namespace_originalpackages_snippet = '''
for path in paths: for dist in pkg_resources.find_distributions(sitedir, True):
addsitedir(path, known_paths)''' pkg_resources.fixup_namespace_packages(dist.location)
if dist.has_metadata('namespace_packages.txt'):
for namespace in dist.get_metadata_lines(
'namespace_packages.txt'):
pkg_resources.declare_namespace(namespace)'''
addsitedir_namespace_add_site_packages_snippet = ''' original_path_snippet = '''
dotpth = os.extsep + "pth" original_paths = [
for path in paths: %s
# This duplicates addsitedir except for adding the pkg_resources call. ]
sitedir, sitedircase = makepath(path) for path in original_paths:
if not sitedircase in known_paths and os.path.exists(sitedir): addsitedir(path, known_paths)'''
sys.path.append(sitedir)
pkg_resources.working_set.add_entry(sitedir)
known_paths.add(sitedircase)
try:
names = os.listdir(sitedir)
except os.error:
continue
names = [name for name in names if name.endswith(dotpth)]
names.sort()
for name in names:
addpackage(sitedir, name, known_paths)'''
addsitepackages_script = '''\ addsitepackages_script = '''\
def addsitepackages(known_paths): def addsitepackages(known_paths):
"""Add site packages. """Add site packages, as determined by zc.buildout.
This function is written by buildout. See original_addsitepackages, See original_addsitepackages, below, for the original version."""%s
below, for the original version."""%s buildout_paths = [
%s paths = [
# Eggs.
%s %s
]%s ]
global addsitepackages for path in buildout_paths:
addsitepackages = original_addsitepackages sitedir, sitedircase = makepath(path)
if not sitedircase in known_paths and os.path.exists(sitedir):
sys.path.append(sitedir)
known_paths.add(sitedircase)%s
return known_paths return known_paths
buildout_addsitepackages = addsitepackages
def original_addsitepackages(''' def original_addsitepackages('''
def _generate_interpreter(name, dest, executable, site_py_dest, def _generate_interpreter(name, dest, executable, site_py_dest,
...@@ -1483,7 +1478,9 @@ def _generate_interpreter(name, dest, executable, site_py_dest, ...@@ -1483,7 +1478,9 @@ def _generate_interpreter(name, dest, executable, site_py_dest,
"""Write an interpreter script, using the site.py approach.""" """Write an interpreter script, using the site.py approach."""
full_name = os.path.join(dest, name) full_name = os.path.join(dest, name)
site_py_dest_string, rpsetup = _relative_path_and_setup( site_py_dest_string, rpsetup = _relative_path_and_setup(
full_name, [site_py_dest], relative_paths) full_name, [site_py_dest], relative_paths, omit_os_import=True)
if rpsetup:
rpsetup += "\n"
if sys.platform == 'win32': if sys.platform == 'win32':
windows_import = '\nimport subprocess' windows_import = '\nimport subprocess'
# os.exec* is a mess on Windows, particularly if the path # os.exec* is a mess on Windows, particularly if the path
...@@ -1534,12 +1531,10 @@ def _generate_interpreter(name, dest, executable, site_py_dest, ...@@ -1534,12 +1531,10 @@ def _generate_interpreter(name, dest, executable, site_py_dest,
) )
return _write_script(full_name, contents, 'interpreter') return _write_script(full_name, contents, 'interpreter')
interpreter_template = script_header + '''\ interpreter_template = script_header + '''
%(relative_paths_setup)s
import os import os
import sys%(windows_import)s import sys%(windows_import)s
%(relative_paths_setup)s
argv = [sys.executable] + sys.argv[1:] argv = [sys.executable] + sys.argv[1:]
environ = os.environ.copy() environ = os.environ.copy()
path = %(site_dest)s path = %(site_dest)s
......
This diff is collapsed.
...@@ -310,6 +310,16 @@ def buildoutSetUp(test): ...@@ -310,6 +310,16 @@ def buildoutSetUp(test):
old_wd = os.getcwd() old_wd = os.getcwd()
os.chdir(buildout) os.chdir(buildout)
make_buildout() make_buildout()
# Normally we don't process .pth files in extra-paths. We want to
# in this case so that we can test with setuptools system installs
# (--single-version-externally-managed), which use .pth files.
initialization = (
('import sys\n'
'import site\n'
'known_paths = set(sys.path)\n'
'site_packages_dir = %r\n'
'site.addsitedir(site_packages_dir, known_paths)\n'
) % (site_packages_dir,)) + initialization
initialization = '\n'.join( initialization = '\n'.join(
' ' + line for line in initialization.split('\n')) ' ' + line for line in initialization.split('\n'))
install_develop( install_develop(
......
...@@ -273,11 +273,11 @@ into the sitecustomize. ...@@ -273,11 +273,11 @@ into the sitecustomize.
Generated interpreter '/sample-buildout/bin/py'. Generated interpreter '/sample-buildout/bin/py'.
>>> cat(sample_buildout, 'parts', 'py', 'sitecustomize.py') >>> cat(sample_buildout, 'parts', 'py', 'sitecustomize.py')
... # doctest: +NORMALIZE_WHITESPACE ... # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
<BLANKLINE> <BLANKLINE>
# The following is from # The following is from
# /executable_buildout/parts/py/sitecustomize.py # /executable_buildout/parts/py/sitecustomize.py
<BLANKLINE> ...
import os import os
os.environ['zc.buildout'] = 'foo bar baz shazam' os.environ['zc.buildout'] = 'foo bar baz shazam'
......
...@@ -175,14 +175,14 @@ custom Python. ...@@ -175,14 +175,14 @@ custom Python.
Generated interpreter '/sample-buildout/bin/py'. Generated interpreter '/sample-buildout/bin/py'.
>>> cat(sample_buildout, 'parts', 'py', 'sitecustomize.py') >>> cat(sample_buildout, 'parts', 'py', 'sitecustomize.py')
... # doctest: +NORMALIZE_WHITESPACE ... # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
<BLANKLINE> <BLANKLINE>
import os import os
os.environ['zc.recipe.egg'] = 'baLOOba' os.environ['zc.recipe.egg'] = 'baLOOba'
<BLANKLINE> <BLANKLINE>
# The following is from # The following is from
# /executable_buildout/parts/py/sitecustomize.py # /executable_buildout/parts/py/sitecustomize.py
<BLANKLINE> ...
import os import os
os.environ['zc.buildout'] = 'foo bar baz shazam' os.environ['zc.buildout'] = 'foo bar baz shazam'
...@@ -227,15 +227,11 @@ Let's look at the site.py that was generated: ...@@ -227,15 +227,11 @@ Let's look at the site.py that was generated:
#... #...
def addsitepackages(known_paths): def addsitepackages(known_paths):
"..." "..."
<BLANKLINE>
import os
<BLANKLINE>
join = os.path.join join = os.path.join
base = os.path.dirname(os.path.abspath(os.path.realpath(__file__))) base = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))
base = os.path.dirname(base) base = os.path.dirname(base)
base = os.path.dirname(base) base = os.path.dirname(base)
paths = [ buildout_paths = [
# Eggs.
'/foo/bar', '/foo/bar',
join(base, 'spam') join(base, 'spam')
]... ]...
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment