[Python-checkins] r73801 - python/trunk/Lib/distutils/command/build_py.py
tarek.ziade
python-checkins at python.org
Fri Jul 3 11:01:07 CEST 2009
Author: tarek.ziade
Date: Fri Jul 3 11:01:07 2009
New Revision: 73801
Log:
cleaned up distutils.command.build_py
Modified:
python/trunk/Lib/distutils/command/build_py.py
Modified: python/trunk/Lib/distutils/command/build_py.py
==============================================================================
--- python/trunk/Lib/distutils/command/build_py.py (original)
+++ python/trunk/Lib/distutils/command/build_py.py Fri Jul 3 11:01:07 2009
@@ -4,16 +4,15 @@
__revision__ = "$Id$"
-import string, os
-from types import *
+import os
from glob import glob
from distutils.core import Command
-from distutils.errors import *
+from distutils.errors import DistutilsOptionError, DistutilsFileError
from distutils.util import convert_path
from distutils import log
-class build_py (Command):
+class build_py(Command):
description = "\"build\" pure Python modules (copy to build directory)"
@@ -30,8 +29,7 @@
boolean_options = ['compile', 'force']
negative_opt = {'no-compile' : 'compile'}
-
- def initialize_options (self):
+ def initialize_options(self):
self.build_lib = None
self.py_modules = None
self.package = None
@@ -41,7 +39,7 @@
self.optimize = 0
self.force = None
- def finalize_options (self):
+ def finalize_options(self):
self.set_undefined_options('build',
('build_lib', 'build_lib'),
('force', 'force'))
@@ -59,15 +57,14 @@
# Ick, copied straight from install_lib.py (fancy_getopt needs a
# type system! Hell, *everything* needs a type system!!!)
- if type(self.optimize) is not IntType:
+ if not isinstance(self.optimize, int):
try:
self.optimize = int(self.optimize)
assert 0 <= self.optimize <= 2
except (ValueError, AssertionError):
- raise DistutilsOptionError, "optimize must be 0, 1, or 2"
-
- def run (self):
+ raise DistutilsOptionError("optimize must be 0, 1, or 2")
+ def run(self):
# XXX copy_file by default preserves atime and mtime. IMHO this is
# the right thing to do, but perhaps it should be an option -- in
# particular, a site administrator might want installed files to
@@ -97,9 +94,7 @@
self.byte_compile(self.get_outputs(include_bytecode=0))
- # run ()
-
- def get_data_files (self):
+ def get_data_files(self):
"""Generate list of '(package,src_dir,build_dir,filenames)' tuples"""
data = []
if not self.packages:
@@ -123,7 +118,7 @@
data.append((package, src_dir, build_dir, filenames))
return data
- def find_data_files (self, package, src_dir):
+ def find_data_files(self, package, src_dir):
"""Return filenames for package's data files in 'src_dir'"""
globs = (self.package_data.get('', [])
+ self.package_data.get(package, []))
@@ -135,7 +130,7 @@
files.extend([fn for fn in filelist if fn not in files])
return files
- def build_package_data (self):
+ def build_package_data(self):
"""Copy data files into build directory"""
lastdir = None
for package, src_dir, build_dir, filenames in self.data_files:
@@ -145,23 +140,23 @@
self.copy_file(os.path.join(src_dir, filename), target,
preserve_mode=False)
- def get_package_dir (self, package):
+ def get_package_dir(self, package):
"""Return the directory, relative to the top of the source
distribution, where package 'package' should be found
(at least according to the 'package_dir' option, if any)."""
- path = string.split(package, '.')
+ path = package.split('.')
if not self.package_dir:
if path:
- return apply(os.path.join, path)
+ return os.path.join(*path)
else:
return ''
else:
tail = []
while path:
try:
- pdir = self.package_dir[string.join(path, '.')]
+ pdir = self.package_dir['.'.join(path)]
except KeyError:
tail.insert(0, path[-1])
del path[-1]
@@ -181,27 +176,23 @@
tail.insert(0, pdir)
if tail:
- return apply(os.path.join, tail)
+ return os.path.join(*tail)
else:
return ''
- # get_package_dir ()
-
-
- def check_package (self, package, package_dir):
-
+ def check_package(self, package, package_dir):
# Empty dir name means current directory, which we can probably
# assume exists. Also, os.path.exists and isdir don't know about
# my "empty string means current dir" convention, so we have to
# circumvent them.
if package_dir != "":
if not os.path.exists(package_dir):
- raise DistutilsFileError, \
- "package directory '%s' does not exist" % package_dir
+ raise DistutilsFileError(
+ "package directory '%s' does not exist" % package_dir)
if not os.path.isdir(package_dir):
- raise DistutilsFileError, \
- ("supposed package directory '%s' exists, " +
- "but is not a directory") % package_dir
+ raise DistutilsFileError(
+ "supposed package directory '%s' exists, "
+ "but is not a directory" % package_dir)
# Require __init__.py for all but the "root package"
if package:
@@ -216,20 +207,14 @@
# __init__.py doesn't exist -- so don't return the filename.
return None
- # check_package ()
-
-
- def check_module (self, module, module_file):
+ def check_module(self, module, module_file):
if not os.path.isfile(module_file):
log.warn("file %s (for module %s) not found", module_file, module)
- return 0
+ return False
else:
- return 1
+ return True
- # check_module ()
-
-
- def find_package_modules (self, package, package_dir):
+ def find_package_modules(self, package, package_dir):
self.check_package(package, package_dir)
module_files = glob(os.path.join(package_dir, "*.py"))
modules = []
@@ -244,8 +229,7 @@
self.debug_print("excluding %s" % setup_script)
return modules
-
- def find_modules (self):
+ def find_modules(self):
"""Finds individually-specified Python modules, ie. those listed by
module name in 'self.py_modules'. Returns a list of tuples (package,
module_base, filename): 'package' is a tuple of the path through
@@ -254,7 +238,6 @@
".py" file (relative to the distribution root) that implements the
module.
"""
-
# Map package names to tuples of useful info about the package:
# (package_dir, checked)
# package_dir - the directory where we'll find source files for
@@ -270,10 +253,9 @@
# just the "package" for a toplevel is empty (either an empty
# string or empty list, depending on context). Differences:
# - don't check for __init__.py in directory for empty package
-
for module in self.py_modules:
- path = string.split(module, '.')
- package = string.join(path[0:-1], '.')
+ path = module.split('.')
+ package = '.'.join(path[0:-1])
module_base = path[-1]
try:
@@ -299,16 +281,12 @@
return modules
- # find_modules ()
-
-
- def find_all_modules (self):
+ def find_all_modules(self):
"""Compute the list of all modules that will be built, whether
they are specified one-module-at-a-time ('self.py_modules') or
by whole packages ('self.packages'). Return a list of tuples
(package, module, module_file), just like 'find_modules()' and
'find_package_modules()' do."""
-
modules = []
if self.py_modules:
modules.extend(self.find_modules())
@@ -317,32 +295,20 @@
package_dir = self.get_package_dir(package)
m = self.find_package_modules(package, package_dir)
modules.extend(m)
-
return modules
- # find_all_modules ()
-
-
- def get_source_files (self):
-
- modules = self.find_all_modules()
- filenames = []
- for module in modules:
- filenames.append(module[-1])
+ def get_source_files(self):
+ return [module[-1] for module in self.find_all_modules()]
- return filenames
-
-
- def get_module_outfile (self, build_dir, package, module):
+ def get_module_outfile(self, build_dir, package, module):
outfile_path = [build_dir] + list(package) + [module + ".py"]
return os.path.join(*outfile_path)
-
- def get_outputs (self, include_bytecode=1):
+ def get_outputs(self, include_bytecode=1):
modules = self.find_all_modules()
outputs = []
for (package, module, module_file) in modules:
- package = string.split(package, '.')
+ package = package.split('.')
filename = self.get_module_outfile(self.build_lib, package, module)
outputs.append(filename)
if include_bytecode:
@@ -359,13 +325,12 @@
return outputs
-
- def build_module (self, module, module_file, package):
- if type(package) is StringType:
- package = string.split(package, '.')
- elif type(package) not in (ListType, TupleType):
- raise TypeError, \
- "'package' must be a string (dot-separated), list, or tuple"
+ def build_module(self, module, module_file, package):
+ if isinstance(package, str):
+ package = package.split('.')
+ elif not isinstance(package, (list, tuple)):
+ raise TypeError(
+ "'package' must be a string (dot-separated), list, or tuple")
# Now put the module source file into the "build" area -- this is
# easy, we just copy it somewhere under self.build_lib (the build
@@ -375,9 +340,7 @@
self.mkpath(dir)
return self.copy_file(module_file, outfile, preserve_mode=0)
-
- def build_modules (self):
-
+ def build_modules(self):
modules = self.find_modules()
for (package, module, module_file) in modules:
@@ -387,11 +350,7 @@
# under self.build_lib.)
self.build_module(module, module_file, package)
- # build_modules ()
-
-
- def build_packages (self):
-
+ def build_packages(self):
for package in self.packages:
# Get list of (package, module, module_file) tuples based on
@@ -412,10 +371,7 @@
assert package == package_
self.build_module(module, module_file, package)
- # build_packages ()
-
-
- def byte_compile (self, files):
+ def byte_compile(self, files):
from distutils.util import byte_compile
prefix = self.build_lib
if prefix[-1] != os.sep:
@@ -431,5 +387,3 @@
if self.optimize > 0:
byte_compile(files, optimize=self.optimize,
force=self.force, prefix=prefix, dry_run=self.dry_run)
-
-# class build_py
More information about the Python-checkins
mailing list