]> granicus.if.org Git - python/commitdiff
Removed uses of dict.has_key() from distutils, and uses of
authorGuido van Rossum <guido@python.org>
Thu, 21 Feb 2008 18:18:37 +0000 (18:18 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 21 Feb 2008 18:18:37 +0000 (18:18 +0000)
callable() from copy_reg.py, so the interpreter now starts up
without warnings when '-3' is given.  More work like this needs to
be done in the rest of the stdlib.

17 files changed:
Lib/UserDict.py
Lib/copy_reg.py
Lib/distutils/archive_util.py
Lib/distutils/ccompiler.py
Lib/distutils/command/build_ext.py
Lib/distutils/command/install.py
Lib/distutils/command/register.py
Lib/distutils/command/upload.py
Lib/distutils/core.py
Lib/distutils/dir_util.py
Lib/distutils/dist.py
Lib/distutils/fancy_getopt.py
Lib/distutils/msvccompiler.py
Lib/distutils/sysconfig.py
Lib/distutils/text_file.py
Lib/distutils/util.py
Misc/NEWS

index 5e97817f061ec1bdef90a3709b0f06e182d681a8..a786ae0cc81396289feeb217036a1d57af79b9b7 100644 (file)
@@ -55,7 +55,7 @@ class UserDict:
         if len(kwargs):
             self.data.update(kwargs)
     def get(self, key, failobj=None):
-        if not self.has_key(key):
+        if key not in self:
             return failobj
         return self[key]
     def setdefault(self, key, failobj=None):
index 0dd94cfc88913379934b046e0430921831c47964..db1715092c5dcd0eb1e1a22c0957ee04851b6076 100644 (file)
@@ -15,7 +15,7 @@ def pickle(ob_type, pickle_function, constructor_ob=None):
     if type(ob_type) is _ClassType:
         raise TypeError("copy_reg is not intended for use with classes")
 
-    if not callable(pickle_function):
+    if not hasattr(pickle_function, '__call__'):
         raise TypeError("reduction functions must be callable")
     dispatch_table[ob_type] = pickle_function
 
@@ -25,7 +25,7 @@ def pickle(ob_type, pickle_function, constructor_ob=None):
         constructor(constructor_ob)
 
 def constructor(object):
-    if not callable(object):
+    if not hasattr(object, '__call__'):
         raise TypeError("constructors must be callable")
 
 # Example: provide pickling support for complex numbers.
index 6aa5e635d7164370fb0d8d425d92f6ad61c34d8a..a9c6a5b488f2f9a28a5bf4beddfc090b62be690e 100644 (file)
@@ -124,7 +124,7 @@ ARCHIVE_FORMATS = {
 
 def check_archive_formats (formats):
     for format in formats:
-        if not ARCHIVE_FORMATS.has_key(format):
+        if format not in ARCHIVE_FORMATS:
             return format
     else:
         return None
index 1349abeb65fd7e242f669ae0078117248c86f23f..0ed9a40a35e29fd888846c91026abb065d882a4f 100644 (file)
@@ -159,7 +159,7 @@ class CCompiler:
         # basically the same things with Unix C compilers.
 
         for key in args.keys():
-            if not self.executables.has_key(key):
+            if key not in self.executables:
                 raise ValueError, \
                       "unknown executable '%s' for class %s" % \
                       (key, self.__class__.__name__)
index 29d5668c611a2b75e070686a365bcc8aee7b8c3e..3042fe0223443da4150e87e81b9cafc7a7c25221 100644 (file)
@@ -362,7 +362,7 @@ class build_ext (Command):
 
             # Medium-easy stuff: same syntax/semantics, different names.
             ext.runtime_library_dirs = build_info.get('rpath')
-            if build_info.has_key('def_file'):
+            if 'def_file' in build_info:
                 log.warn("'def_file' element of build info dict "
                          "no longer supported")
 
index 453151d08b5305971364c5a930f5e893c5eadd50..c62121023d3a973ae08043332884c286620105f6 100644 (file)
@@ -352,7 +352,7 @@ class install (Command):
                 opt_name = opt[0]
                 if opt_name[-1] == "=":
                     opt_name = opt_name[0:-1]
-                if self.negative_opt.has_key(opt_name):
+                if opt_name in self.negative_opt:
                     opt_name = string.translate(self.negative_opt[opt_name],
                                                 longopt_xlate)
                     val = not getattr(self, opt_name)
index 200e61e24094aefa8f04a52f613fa14708a7621e..d1a9100de45cd4cd641a7814965d2e9771c24216 100644 (file)
@@ -120,7 +120,7 @@ class register(Command):
         # see if we can short-cut and get the username/password from the
         # config
         config = None
-        if os.environ.has_key('HOME'):
+        if 'HOME' in os.environ:
             rc = os.path.join(os.environ['HOME'], '.pypirc')
             if os.path.exists(rc):
                 print 'Using PyPI login from %s'%rc
@@ -163,7 +163,7 @@ Your selection [default 1]: ''',
             print 'Server response (%s): %s'%(code, result)
 
             # possibly save the login
-            if os.environ.has_key('HOME') and config is None and code == 200:
+            if 'HOME' in os.environ and config is None and code == 200:
                 rc = os.path.join(os.environ['HOME'], '.pypirc')
                 print 'I can store your PyPI login so future submissions will be faster.'
                 print '(the login will be stored in %s)'%rc
index 7461e5f4534ac278904ac72ed1b492548afbf8c3..301a1595908682e4c65ca8b3f4eeee7fa1673700 100644 (file)
@@ -46,7 +46,7 @@ class upload(Command):
             raise DistutilsOptionError(
                 "Must use --sign for --identity to have meaning"
             )
-        if os.environ.has_key('HOME'):
+        if 'HOME' in os.environ:
             rc = os.path.join(os.environ['HOME'], '.pypirc')
             if os.path.exists(rc):
                 self.announce('Using PyPI login from %s' % rc)
index c9c6f037a73f0792cde31166ba5366e23a146c68..c40dd0a7aa37e81bef2ae438587eaf5323f0f281 100644 (file)
@@ -101,9 +101,9 @@ def setup (**attrs):
     else:
         klass = Distribution
 
-    if not attrs.has_key('script_name'):
+    if 'script_name' not in attrs:
         attrs['script_name'] = os.path.basename(sys.argv[0])
-    if not attrs.has_key('script_args'):
+    if 'script_args' not in attrs:
         attrs['script_args'] = sys.argv[1:]
 
     # Create the Distribution instance, using the remaining arguments
@@ -111,7 +111,7 @@ def setup (**attrs):
     try:
         _setup_distribution = dist = klass(attrs)
     except DistutilsSetupError, msg:
-        if attrs.has_key('name'):
+        if 'name' in attrs:
             raise SystemExit, "error in %s setup command: %s" % \
                   (attrs['name'], msg)
         else:
index 43994db3ffd7708bd3a9a9f9ae9894653ad516be..77f253255fc7223cb6757301faa8bca7f900824e 100644 (file)
@@ -207,7 +207,7 @@ def remove_tree (directory, verbose=0, dry_run=0):
             apply(cmd[0], (cmd[1],))
             # remove dir from cache if it's already there
             abspath = os.path.abspath(cmd[1])
-            if _path_created.has_key(abspath):
+            if abspath in _path_created:
                 del _path_created[abspath]
         except (IOError, OSError), exc:
             log.warn(grok_environment_error(
index ff49886d97fabdfa2afa67a023ddb6322af89fb9..d098cb9713bacf5baa52474fecacc3a0dd379572 100644 (file)
@@ -239,7 +239,7 @@ Common commands: (see '--help-commands' for more)
                     for (opt, val) in cmd_options.items():
                         opt_dict[opt] = ("setup script", val)
 
-            if attrs.has_key('licence'):
+            if 'licence' in attrs:
                 attrs['license'] = attrs['licence']
                 del attrs['licence']
                 msg = "'licence' distribution option is deprecated; use 'license'"
@@ -343,7 +343,7 @@ Common commands: (see '--help-commands' for more)
             user_filename = "pydistutils.cfg"
 
         # And look for the user config file
-        if os.environ.has_key('HOME'):
+        if 'HOME' in os.environ:
             user_file = os.path.join(os.environ.get('HOME'), user_filename)
             if os.path.isfile(user_file):
                 files.append(user_file)
@@ -388,7 +388,7 @@ Common commands: (see '--help-commands' for more)
         # If there was a "global" section in the config file, use it
         # to set Distribution options.
 
-        if self.command_options.has_key('global'):
+        if 'global' in self.command_options:
             for (opt, (src, val)) in self.command_options['global'].items():
                 alias = self.negative_opt.get(opt)
                 try:
@@ -907,7 +907,7 @@ Common commands: (see '--help-commands' for more)
 
             try:
                 is_string = type(value) is StringType
-                if neg_opt.has_key(option) and is_string:
+                if option in neg_opt and is_string:
                     setattr(command_obj, neg_opt[option], not strtobool(value))
                 elif option in bool_opts and is_string:
                     setattr(command_obj, option, strtobool(value))
index 218ed73f9871bc561cf88ae9ac0fd084870a041f..31cf0c5c3b9c4e0564df9e2eb2046009b5bbb53f 100644 (file)
@@ -97,7 +97,7 @@ class FancyGetopt:
         self._build_index()
 
     def add_option (self, long_option, short_option=None, help_string=None):
-        if self.option_index.has_key(long_option):
+        if long_option in self.option_index:
             raise DistutilsGetoptError, \
                   "option conflict: already an option '%s'" % long_option
         else:
@@ -109,7 +109,7 @@ class FancyGetopt:
     def has_option (self, long_option):
         """Return true if the option table for this parser has an
         option with long name 'long_option'."""
-        return self.option_index.has_key(long_option)
+        return long_option in self.option_index
 
     def get_attr_name (self, long_option):
         """Translate long option name 'long_option' to the form it
@@ -121,11 +121,11 @@ class FancyGetopt:
     def _check_alias_dict (self, aliases, what):
         assert type(aliases) is DictionaryType
         for (alias, opt) in aliases.items():
-            if not self.option_index.has_key(alias):
+            if alias not in self.option_index:
                 raise DistutilsGetoptError, \
                       ("invalid %s '%s': "
                        "option '%s' not defined") % (what, alias, alias)
-            if not self.option_index.has_key(opt):
+            if opt not in self.option_index:
                 raise DistutilsGetoptError, \
                       ("invalid %s '%s': "
                        "aliased option '%s' not defined") % (what, alias, opt)
index fa123462ecb2ce2100245eb79ca0fc3df7579568..f3acb53477e5a0035e4ff564d182dbbf2b018fd5 100644 (file)
@@ -252,7 +252,7 @@ class MSVCCompiler (CCompiler) :
 
     def initialize(self):
         self.__paths = []
-        if os.environ.has_key("DISTUTILS_USE_SDK") and os.environ.has_key("MSSdk") and self.find_exe("cl.exe"):
+        if "DISTUTILS_USE_SDK" in os.environ and "MSSdk" in os.environ and self.find_exe("cl.exe"):
             # Assume that the SDK set up everything alright; don't try to be
             # smarter
             self.cc = "cl.exe"
index 1aaaa28fbfd43e0afffa6ad9c23bef3e4cad2ebb..506cf385b602dc4e025a37cf6607479817f228cb 100644 (file)
@@ -161,22 +161,22 @@ def customize_compiler(compiler):
             get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
                             'CCSHARED', 'LDSHARED', 'SO')
 
-        if os.environ.has_key('CC'):
+        if 'CC' in os.environ:
             cc = os.environ['CC']
-        if os.environ.has_key('CXX'):
+        if 'CXX' in os.environ:
             cxx = os.environ['CXX']
-        if os.environ.has_key('LDSHARED'):
+        if 'LDSHARED' in os.environ:
             ldshared = os.environ['LDSHARED']
-        if os.environ.has_key('CPP'):
+        if 'CPP' in os.environ:
             cpp = os.environ['CPP']
         else:
             cpp = cc + " -E"           # not always
-        if os.environ.has_key('LDFLAGS'):
+        if 'LDFLAGS' in os.environ:
             ldshared = ldshared + ' ' + os.environ['LDFLAGS']
-        if os.environ.has_key('CFLAGS'):
+        if 'CFLAGS' in os.environ:
             cflags = opt + ' ' + os.environ['CFLAGS']
             ldshared = ldshared + ' ' + os.environ['CFLAGS']
-        if os.environ.has_key('CPPFLAGS'):
+        if 'CPPFLAGS' in os.environ:
             cpp = cpp + ' ' + os.environ['CPPFLAGS']
             cflags = cflags + ' ' + os.environ['CPPFLAGS']
             ldshared = ldshared + ' ' + os.environ['CPPFLAGS']
@@ -291,12 +291,12 @@ def parse_makefile(fn, g=None):
             if m:
                 n = m.group(1)
                 found = True
-                if done.has_key(n):
+                if n in done:
                     item = str(done[n])
-                elif notdone.has_key(n):
+                elif n in notdone:
                     # get it on a subsequent round
                     found = False
-                elif os.environ.has_key(n):
+                elif n in os.environ:
                     # do it like make: fall back to environment
                     item = os.environ[n]
                 else:
@@ -380,7 +380,7 @@ def _init_posix():
     # MACOSX_DEPLOYMENT_TARGET: configure bases some choices on it so
     # it needs to be compatible.
     # If it isn't set we set it to the configure-time value
-    if sys.platform == 'darwin' and g.has_key('MACOSX_DEPLOYMENT_TARGET'):
+    if sys.platform == 'darwin' and 'MACOSX_DEPLOYMENT_TARGET' in g:
         cfg_target = g['MACOSX_DEPLOYMENT_TARGET']
         cur_target = os.getenv('MACOSX_DEPLOYMENT_TARGET', '')
         if cur_target == '':
index 67efd65e36d80f859b37659ae586a24a6af4b820..ff2878de1b6b59c53845fd8f3a54ba09da19cf8a 100644 (file)
@@ -89,7 +89,7 @@ class TextFile:
         # set values for all options -- either from client option hash
         # or fallback to default_options
         for opt in self.default_options.keys():
-            if options.has_key (opt):
+            if opt in options:
                 setattr (self, opt, options[opt])
 
             else:
@@ -97,7 +97,7 @@ class TextFile:
 
         # sanity check client option hash
         for opt in options.keys():
-            if not self.default_options.has_key (opt):
+            if opt not in self.default_options:
                 raise KeyError, "invalid TextFile option '%s'" % opt
 
         if file is None:
index 8979634e4b7ee9d50a529987e012dee754cd1593..deb9a0a0f1a551d664e2357522a523d17f1c0810 100644 (file)
@@ -219,11 +219,11 @@ def check_environ ():
     if _environ_checked:
         return
 
-    if os.name == 'posix' and not os.environ.has_key('HOME'):
+    if os.name == 'posix' and 'HOME' not in os.environ:
         import pwd
         os.environ['HOME'] = pwd.getpwuid(os.getuid())[5]
 
-    if not os.environ.has_key('PLAT'):
+    if 'PLAT' not in os.environ:
         os.environ['PLAT'] = get_platform()
 
     _environ_checked = 1
@@ -241,7 +241,7 @@ def subst_vars (s, local_vars):
     check_environ()
     def _subst (match, local_vars=local_vars):
         var_name = match.group(1)
-        if local_vars.has_key(var_name):
+        if var_name in local_vars:
             return str(local_vars[var_name])
         else:
             return os.environ[var_name]
index 970e2303bf9ae170b91f81d2fd843611b450dafe..ca4a415da0801c703029d9d8d0651194102a1867 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -423,6 +423,11 @@ Core and builtins
 Library
 -------
 
+- Removed uses of dict.has_key() from distutils, and uses of
+  callable() from copy_reg.py, so the interpreter now starts up
+  without warnings when '-3' is given.  More work like this needs to
+  be done in the rest of the stdlib.
+
 - Issue #1916. Added isgenerator() and isgeneratorfunction() to inspect.py.
 
 - #1224: Fixed bad url parsing when path begins with double slash.