diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-12-22 16:16:57 -0700 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-12-22 16:16:57 -0700 |
commit | 014cca57ad31f0ff9230923c8b7fdb1b59157dae (patch) | |
tree | ee95b629ed165fc57a4bab3a373ef02d398772f0 | |
parent | c070d390e92df0c9cc6b6070e6c94bd3a130ff65 (diff) | |
download | freeipa-014cca57ad31f0ff9230923c8b7fdb1b59157dae.tar.gz freeipa-014cca57ad31f0ff9230923c8b7fdb1b59157dae.tar.xz freeipa-014cca57ad31f0ff9230923c8b7fdb1b59157dae.zip |
The Env.__setitem__() implied conversion is now case sensitive; Env.__setitem__() now also accepts None as a value
-rw-r--r-- | ipalib/config.py | 24 | ||||
-rw-r--r-- | ipalib/constants.py | 37 | ||||
-rw-r--r-- | tests/test_ipalib/test_config.py | 16 |
3 files changed, 41 insertions, 36 deletions
diff --git a/ipalib/config.py b/ipalib/config.py index 8a23cde6..8ff45dd9 100644 --- a/ipalib/config.py +++ b/ipalib/config.py @@ -26,11 +26,11 @@ methods, such as DNS. """ from ConfigParser import RawConfigParser, ParsingError -import types +from types import NoneType import os from os import path import sys -import constants +from constants import CONFIG_SECTION, TYPE_ERROR, OVERRIDE_ERROR @@ -143,7 +143,6 @@ class Env(object): """ Merge values from ``conf_file`` into this `Env`. """ - section = constants.CONFIG_SECTION if not path.isfile(conf_file): return parser = RawConfigParser() @@ -151,9 +150,9 @@ class Env(object): parser.read(conf_file) except ParsingError: return - if not parser.has_section(section): - parser.add_section(section) - items = parser.items(section) + if not parser.has_section(CONFIG_SECTION): + parser.add_section(CONFIG_SECTION) + items = parser.items(CONFIG_SECTION) if len(items) == 0: return i = 0 @@ -211,13 +210,16 @@ class Env(object): ) if isinstance(value, basestring): value = str(value.strip()) - if value.lower() == 'true': - value = True - elif value.lower() == 'false': - value = False + m = { + 'True': True, + 'False': False, + 'None': None, + } + if value in m: + value = m[value] elif value.isdigit(): value = int(value) - assert type(value) in (str, int, bool) + assert type(value) in (str, int, bool, type(NoneType)) object.__setattr__(self, key, value) self.__d[key] = value diff --git a/ipalib/constants.py b/ipalib/constants.py index 45c9f278..ef7de44c 100644 --- a/ipalib/constants.py +++ b/ipalib/constants.py @@ -32,7 +32,7 @@ TYPE_ERROR = '%s: need a %r; got %r (which is a %r)' CALLABLE_ERROR = '%s: need a callable; got %r (which is a %r)' # Standard format for StandardError message when overriding an attribute: -OVERRIDE_ERROR = 'cannot override %s existing value %r with %r' +OVERRIDE_ERROR = 'cannot override %s value %r with %r' # Used for a tab (or indentation level) when formatting for CLI: CLI_TAB = ' ' # Two spaces @@ -112,28 +112,31 @@ DEFAULT_CONFIG = ( # will have filled in all the keys below by the time DEFAULT_CONFIG # is merged in, so the values below are never actually used. They are # listed both to provide a big picture and also so DEFAULT_CONFIG contains - # the keys that should be present after Env._finalize_core() is called. + # at least all the keys that should be present after Env._finalize_core() + # is called. # - # The values are all None so if for some reason any of these keys were - # set from the values here, an exception will be raised. + # Each environment variable below is sent to ``object``, which just happens + # to be an invalid value for an environment variable, so if for some reason + # any of these keys were set from the values here, an exception will be + # raised. # Set in Env.__init__(): - ('ipalib', None), # The directory containing ipalib/__init__.py - ('site_packages', None), # The directory contaning ipalib - ('script', None), # sys.argv[0] - ('bin', None), # The directory containing script - ('home', None), # The home directory of user underwhich process is running - ('dot_ipa', None), # ~/.ipa directory + ('ipalib', object), # The directory containing ipalib/__init__.py + ('site_packages', object), # The directory contaning ipalib + ('script', object), # sys.argv[0] + ('bin', object), # The directory containing script + ('home', object), # The home directory of user underwhich process is running + ('dot_ipa', object), # ~/.ipa directory # Set in Env._bootstrap(): - ('in_tree', None), # Whether or not running in-tree (bool) - ('context', None), # Name of context, default is 'default' - ('conf', None), # Path to config file - ('conf_default', None), # Path to common default config file - ('conf_dir', None), # Directory containing config files + ('in_tree', object), # Whether or not running in-tree (bool) + ('context', object), # Name of context, default is 'default' + ('conf', object), # Path to config file + ('conf_default', object), # Path to common default config file + ('conf_dir', object), # Directory containing config files # Set in Env._finalize_core(): - ('in_server', None), # Whether or not running in-server (bool) - ('log', None), # Path to log file + ('in_server', object), # Whether or not running in-server (bool) + ('log', object), # Path to log file ) diff --git a/tests/test_ipalib/test_config.py b/tests/test_ipalib/test_config.py index 6c70aeb9..f92445f8 100644 --- a/tests/test_ipalib/test_config.py +++ b/tests/test_ipalib/test_config.py @@ -89,8 +89,8 @@ key3 = var3 config_good = """ [global] -yes = tRUE -no = fALse +yes = True +no = False number = 42 """ @@ -157,7 +157,7 @@ class test_Env(ClassChecker): assert o.conf_default == o.conf # Test overriding values created by _bootstrap() - (o, home) = self.bootstrap(in_tree='true', context='server') + (o, home) = self.bootstrap(in_tree='True', context='server') assert o.in_tree is True assert o.context == 'server' assert o.conf == home.join('.ipa', 'server.conf') @@ -243,7 +243,7 @@ class test_Env(ClassChecker): assert o.log == home.join('.ipa', 'log', 'cli.log') # Check **defaults can't set in_server nor log: - (o, home) = self.bootstrap(in_server='tRUE') + (o, home) = self.bootstrap(in_server='True') o._finalize_core(in_server=False) assert o.in_server is True (o, home) = self.bootstrap(log='/some/silly/log') @@ -271,9 +271,9 @@ class test_Env(ClassChecker): (o, home) = self.finalize_core(**defaults) assert list(o) == sorted(defaults) for (key, value) in defaults.items(): - if value is None: + if value is object: continue - assert o[key] is value + assert o[key] is value, value def test_finalize(self): """ @@ -418,9 +418,9 @@ class test_Env(ClassChecker): assert str(e) == \ 'locked: cannot set Env.%s to %r' % (name, value) o = self.cls() - setvar(o, 'yes', ' true ') + setvar(o, 'yes', ' True ') assert o.yes is True - setvar(o, 'no', ' false ') + setvar(o, 'no', ' False ') assert o.no is False setvar(o, 'msg', u' Hello, world! ') assert o.msg == 'Hello, world!' |