diff --git a/Lib/distutils/command/install_lib.py b/Lib/distutils/command/install_lib.py index 4c62c7133af..87e3c7aa04a 100644 --- a/Lib/distutils/command/install_lib.py +++ b/Lib/distutils/command/install_lib.py @@ -6,7 +6,6 @@ Implements the Distutils 'install_lib' command __revision__ = "$Id$" import os -from types import IntType from distutils.core import Command from distutils.errors import DistutilsOptionError @@ -17,7 +16,7 @@ if hasattr(os, 'extsep'): else: PYTHON_SOURCE_EXTENSION = ".py" -class install_lib (Command): +class install_lib(Command): description = "install all Python modules (extensions and pure Python)" @@ -51,8 +50,7 @@ class install_lib (Command): boolean_options = ['force', 'compile', 'skip-build'] negative_opt = {'no-compile' : 'compile'} - - def initialize_options (self): + def initialize_options(self): # let the 'install' command dictate our installation directory self.install_dir = None self.build_dir = None @@ -61,8 +59,7 @@ class install_lib (Command): self.optimize = None self.skip_build = None - def finalize_options (self): - + def finalize_options(self): # Get all the information we need to install pure Python modules # from the umbrella 'install' command -- build (source) directory, # install (target) directory, and whether to compile .py files. @@ -80,15 +77,14 @@ class install_lib (Command): if self.optimize is None: self.optimize = 0 - if type(self.optimize) is not IntType: + if not isinstance(self.optimize, int): try: self.optimize = int(self.optimize) - assert 0 <= self.optimize <= 2 + assert self.optimize in (0, 1, 2) except (ValueError, AssertionError): raise DistutilsOptionError, "optimize must be 0, 1, or 2" - def run (self): - + def run(self): # Make sure we have built everything we need first self.build() @@ -101,20 +97,17 @@ class install_lib (Command): if outfiles is not None and self.distribution.has_pure_modules(): self.byte_compile(outfiles) - # run () - - # -- Top-level worker functions ------------------------------------ # (called from 'run()') - def build (self): + def build(self): if not self.skip_build: if self.distribution.has_pure_modules(): self.run_command('build_py') if self.distribution.has_ext_modules(): self.run_command('build_ext') - def install (self): + def install(self): if os.path.isdir(self.build_dir): outfiles = self.copy_tree(self.build_dir, self.install_dir) else: @@ -123,7 +116,7 @@ class install_lib (Command): return return outfiles - def byte_compile (self, files): + def byte_compile(self, files): from distutils.util import byte_compile # Get the "--root" directory supplied to the "install" command, @@ -144,8 +137,7 @@ class install_lib (Command): # -- Utility methods ----------------------------------------------- - def _mutate_outputs (self, has_any, build_cmd, cmd_option, output_dir): - + def _mutate_outputs(self, has_any, build_cmd, cmd_option, output_dir): if not has_any: return [] @@ -160,9 +152,7 @@ class install_lib (Command): return outputs - # _mutate_outputs () - - def _bytecode_filenames (self, py_filenames): + def _bytecode_filenames(self, py_filenames): bytecode_files = [] for py_file in py_filenames: # Since build_py handles package data installation, the @@ -182,7 +172,7 @@ class install_lib (Command): # -- External interface -------------------------------------------- # (called by outsiders) - def get_outputs (self): + def get_outputs(self): """Return the list of files that would be installed if this command were actually run. Not affected by the "dry-run" flag or whether modules have actually been built yet. @@ -203,9 +193,7 @@ class install_lib (Command): return pure_outputs + bytecode_outputs + ext_outputs - # get_outputs () - - def get_inputs (self): + def get_inputs(self): """Get the list of files that are input to this command, ie. the files that get installed as they are named in the build tree. The files in this list correspond one-to-one to the output @@ -222,5 +210,3 @@ class install_lib (Command): inputs.extend(build_ext.get_outputs()) return inputs - -# class install_lib diff --git a/Lib/distutils/tests/test_install_lib.py b/Lib/distutils/tests/test_install_lib.py new file mode 100644 index 00000000000..69a24faf715 --- /dev/null +++ b/Lib/distutils/tests/test_install_lib.py @@ -0,0 +1,84 @@ +"""Tests for distutils.command.install_data.""" +import sys +import os +import unittest + +from distutils.command.install_lib import install_lib +from distutils.extension import Extension +from distutils.tests import support +from distutils.errors import DistutilsOptionError + +class InstallLibTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + + def test_finalize_options(self): + pkg_dir, dist = self.create_dist() + cmd = install_lib(dist) + + cmd.finalize_options() + self.assertEquals(cmd.compile, 1) + self.assertEquals(cmd.optimize, 0) + + # optimize must be 0, 1, or 2 + cmd.optimize = 'foo' + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + cmd.optimize = '4' + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + + cmd.optimize = '2' + cmd.finalize_options() + self.assertEquals(cmd.optimize, 2) + + def test_byte_compile(self): + pkg_dir, dist = self.create_dist() + cmd = install_lib(dist) + cmd.compile = cmd.optimize = 1 + + f = os.path.join(pkg_dir, 'foo.py') + self.write_file(f, '# python file') + cmd.byte_compile([f]) + self.assert_(os.path.exists(os.path.join(pkg_dir, 'foo.pyc'))) + self.assert_(os.path.exists(os.path.join(pkg_dir, 'foo.pyo'))) + + def test_get_outputs(self): + pkg_dir, dist = self.create_dist() + cmd = install_lib(dist) + + # setting up a dist environment + cmd.compile = cmd.optimize = 1 + cmd.install_dir = pkg_dir + f = os.path.join(pkg_dir, 'foo.py') + self.write_file(f, '# python file') + cmd.distribution.py_modules = [pkg_dir] + cmd.distribution.ext_modules = [Extension('foo', ['xxx'])] + cmd.distribution.packages = [pkg_dir] + cmd.distribution.script_name = 'setup.py' + + # get_output should return 4 elements + self.assertEquals(len(cmd.get_outputs()), 4) + + def test_get_inputs(self): + pkg_dir, dist = self.create_dist() + cmd = install_lib(dist) + + # setting up a dist environment + cmd.compile = cmd.optimize = 1 + cmd.install_dir = pkg_dir + f = os.path.join(pkg_dir, 'foo.py') + self.write_file(f, '# python file') + cmd.distribution.py_modules = [pkg_dir] + cmd.distribution.ext_modules = [Extension('foo', ['xxx'])] + cmd.distribution.packages = [pkg_dir] + cmd.distribution.script_name = 'setup.py' + + # get_input should return 2 elements + self.assertEquals(len(cmd.get_inputs()), 2) + + +def test_suite(): + return unittest.makeSuite(InstallLibTestCase) + +if __name__ == "__main__": + unittest.main(defaultTest="test_suite")