]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
remove old gflags config code
authorMark McClain <mark.mcclain@dreamhost.com>
Tue, 14 Aug 2012 02:35:21 +0000 (22:35 -0400)
committerMark McClain <mark.mcclain@dreamhost.com>
Tue, 14 Aug 2012 02:35:21 +0000 (22:35 -0400)
blueprint remove-gflags

This code removes the old gflag based configuration tools.  There was
no code out of the unit tests that were using it.

Change-Id: Id3f2e9bcfc5abcfd29ef683684f56c69c058bdc8

quantum/common/config.py
quantum/common/flags.py [deleted file]
quantum/common/utils.py
quantum/tests/unit/__init__.py
quantum/tests/unit/declare_flags.py [deleted file]
quantum/tests/unit/runtime_flags.py [deleted file]
quantum/tests/unit/test_flags.py [deleted file]
tools/pip-requires

index 7fe6e02d9dfea20dc5ccf9fa233c0d26310fa7c7..ba28af7195098886a8be03b4a808aaae88187d12 100644 (file)
@@ -47,6 +47,7 @@ core_opts = [
     cfg.BoolOpt('allow_bulk', default=True),
     cfg.IntOpt('max_dns_nameservers', default=5),
     cfg.IntOpt('max_subnet_host_routes', default=20),
+    cfg.StrOpt('state_path', default='.'),
 ]
 
 # Register the configuration options
diff --git a/quantum/common/flags.py b/quantum/common/flags.py
deleted file mode 100644 (file)
index d9816cd..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2011 Citrix Systems, Inc.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-"""Command-line flag library.
-
-Wraps gflags.
-Global flags should be defined here, the rest are defined where they're used.
-
-"""
-import getopt
-import gflags
-import os
-import string
-import sys
-
-
-class FlagValues(gflags.FlagValues):
-    """Extension of gflags.FlagValues that allows undefined and runtime flags.
-
-    Unknown flags will be ignored when parsing the command line, but the
-    command line will be kept so that it can be replayed if new flags are
-    defined after the initial parsing.
-
-    """
-
-    def __init__(self, extra_context=None):
-        gflags.FlagValues.__init__(self)
-        self.__dict__['__dirty'] = []
-        self.__dict__['__was_already_parsed'] = False
-        self.__dict__['__stored_argv'] = []
-        self.__dict__['__extra_context'] = extra_context
-
-    def __call__(self, argv):
-        # We're doing some hacky stuff here so that we don't have to copy
-        # out all the code of the original verbatim and then tweak a few lines.
-        # We're hijacking the output of getopt so we can still return the
-        # leftover args at the end
-        sneaky_unparsed_args = {"value": None}
-        original_argv = list(argv)
-
-        if self.IsGnuGetOpt():
-            orig_getopt = getattr(getopt, 'gnu_getopt')
-            orig_name = 'gnu_getopt'
-        else:
-            orig_getopt = getattr(getopt, 'getopt')
-            orig_name = 'getopt'
-
-        def _sneaky(*args, **kw):
-            optlist, unparsed_args = orig_getopt(*args, **kw)
-            sneaky_unparsed_args['value'] = unparsed_args
-            return optlist, unparsed_args
-
-        try:
-            setattr(getopt, orig_name, _sneaky)
-            args = gflags.FlagValues.__call__(self, argv)
-        except gflags.UnrecognizedFlagError:
-            # Undefined args were found, for now we don't care so just
-            # act like everything went well
-            # (these three lines are copied pretty much verbatim from the end
-            # of the __call__ function we are wrapping)
-            unparsed_args = sneaky_unparsed_args['value']
-            if unparsed_args:
-                if self.IsGnuGetOpt():
-                    args = argv[:1] + unparsed_args
-                else:
-                    args = argv[:1] + original_argv[-len(unparsed_args):]
-            else:
-                args = argv[:1]
-        finally:
-            setattr(getopt, orig_name, orig_getopt)
-
-        # Store the arguments for later, we'll need them for new flags
-        # added at runtime
-        self.__dict__['__stored_argv'] = original_argv
-        self.__dict__['__was_already_parsed'] = True
-        self.ClearDirty()
-        return args
-
-    def Reset(self):
-        gflags.FlagValues.Reset(self)
-        self.__dict__['__dirty'] = []
-        self.__dict__['__was_already_parsed'] = False
-        self.__dict__['__stored_argv'] = []
-
-    def SetDirty(self, name):
-        """Mark a flag as dirty so that accessing it will case a reparse."""
-        self.__dict__['__dirty'].append(name)
-
-    def IsDirty(self, name):
-        return name in self.__dict__['__dirty']
-
-    def ClearDirty(self):
-        self.__dict__['__is_dirty'] = []
-
-    def WasAlreadyParsed(self):
-        return self.__dict__['__was_already_parsed']
-
-    def ParseNewFlags(self):
-        if '__stored_argv' not in self.__dict__:
-            return
-        new_flags = FlagValues(self)
-        for k in self.__dict__['__dirty']:
-            new_flags[k] = gflags.FlagValues.__getitem__(self, k)
-
-        new_flags(self.__dict__['__stored_argv'])
-        for k in self.__dict__['__dirty']:
-            setattr(self, k, getattr(new_flags, k))
-        self.ClearDirty()
-
-    def __setitem__(self, name, flag):
-        gflags.FlagValues.__setitem__(self, name, flag)
-        if self.WasAlreadyParsed():
-            self.SetDirty(name)
-
-    def __getitem__(self, name):
-        if self.IsDirty(name):
-            self.ParseNewFlags()
-        return gflags.FlagValues.__getitem__(self, name)
-
-    def __getattr__(self, name):
-        if self.IsDirty(name):
-            self.ParseNewFlags()
-        val = gflags.FlagValues.__getattr__(self, name)
-        if type(val) is str:
-            tmpl = string.Template(val)
-            context = [self, self.__dict__['__extra_context']]
-            return tmpl.substitute(StrWrapper(context))
-        return val
-
-
-class StrWrapper(object):
-    """Wrapper around FlagValues objects.
-
-    Wraps FlagValues objects for string.Template so that we're
-    sure to return strings.
-
-    """
-    def __init__(self, context_objs):
-        self.context_objs = context_objs
-
-    def __getitem__(self, name):
-        for context in self.context_objs:
-            val = getattr(context, name, False)
-            if val:
-                return str(val)
-        raise KeyError(name)
-
-
-# Copied from gflags with small mods to get the naming correct.
-# Originally gflags checks for the first module that is not gflags that is
-# in the call chain, we want to check for the first module that is not gflags
-# and not this module.
-def _GetCallingModule():
-    """Returns the name of the module that's calling into this module.
-
-    We generally use this function to get the name of the module calling a
-    DEFINE_foo... function.
-
-    """
-    # Walk down the stack to find the first globals dict that's not ours.
-    for depth in range(1, sys.getrecursionlimit()):
-        if not sys._getframe(depth).f_globals is globals():
-            module_name = __GetModuleName(sys._getframe(depth).f_globals)
-            if module_name == 'gflags':
-                continue
-            if module_name is not None:
-                return module_name
-    raise AssertionError("No module was found")
-
-
-# Copied from gflags because it is a private function
-def __GetModuleName(globals_dict):
-    """Given a globals dict, returns the name of the module that defines it.
-
-    Args:
-    globals_dict: A dictionary that should correspond to an environment
-      providing the values of the globals.
-
-    Returns:
-    A string (the name of the module) or None (if the module could not
-    be identified.
-
-    """
-    for name, module in sys.modules.iteritems():
-        if getattr(module, '__dict__', None) is globals_dict:
-            if name == '__main__':
-                return sys.argv[0]
-            return name
-    return None
-
-
-def _wrapper(func):
-    def _wrapped(*args, **kw):
-        kw.setdefault('flag_values', FLAGS)
-        func(*args, **kw)
-    _wrapped.func_name = func.func_name
-    return _wrapped
-
-
-FLAGS = FlagValues()
-gflags.FLAGS = FLAGS
-gflags._GetCallingModule = _GetCallingModule
-
-
-DEFINE = _wrapper(gflags.DEFINE)
-DEFINE_string = _wrapper(gflags.DEFINE_string)
-DEFINE_integer = _wrapper(gflags.DEFINE_integer)
-DEFINE_bool = _wrapper(gflags.DEFINE_bool)
-DEFINE_boolean = _wrapper(gflags.DEFINE_boolean)
-DEFINE_float = _wrapper(gflags.DEFINE_float)
-DEFINE_enum = _wrapper(gflags.DEFINE_enum)
-DEFINE_list = _wrapper(gflags.DEFINE_list)
-DEFINE_spaceseplist = _wrapper(gflags.DEFINE_spaceseplist)
-DEFINE_multistring = _wrapper(gflags.DEFINE_multistring)
-DEFINE_multi_int = _wrapper(gflags.DEFINE_multi_int)
-DEFINE_flag = _wrapper(gflags.DEFINE_flag)
-HelpFlag = gflags.HelpFlag
-HelpshortFlag = gflags.HelpshortFlag
-HelpXMLFlag = gflags.HelpXMLFlag
-
-
-def DECLARE(name, module_string, flag_values=FLAGS):
-    if module_string not in sys.modules:
-        __import__(module_string, globals(), locals())
-    if name not in flag_values:
-        raise gflags.UnrecognizedFlag(
-            "%s not defined by %s" % (name, module_string))
-
-
-# __GLOBAL FLAGS ONLY__
-# Define any app-specific flags in their own files, docs at:
-# http://code.google.com/p/python-gflags/source/browse/trunk/gflags.py#a9
-
-DEFINE_string('state_path', os.path.join(os.path.dirname(__file__), '../../'),
-              "Top-level directory for maintaining quantum's state")
index bc2f920253b9f7a7b0d86f6d5093588cc75e79a9..1a03d86aae715cd6d41309cdcd5af1292ec9f50d 100644 (file)
@@ -29,12 +29,10 @@ import subprocess
 import uuid
 
 from quantum.common import exceptions as exception
-from quantum.common import flags
+from quantum.openstack.common import cfg
 from quantum.openstack.common.exception import ProcessExecutionError
 
-
 TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
-FLAGS = flags.FLAGS
 
 
 def boolize(subject):
@@ -98,37 +96,6 @@ def read_cached_file(filename, cache_info, reload_func=None):
     return cache_info['data']
 
 
-class LazyPluggable(object):
-    """A pluggable backend loaded lazily based on some value."""
-
-    def __init__(self, pivot, **backends):
-        self.__backends = backends
-        self.__pivot = pivot
-        self.__backend = None
-
-    def __get_backend(self):
-        if not self.__backend:
-            backend_name = self.__pivot.value
-            if backend_name not in self.__backends:
-                raise exception.Error('Invalid backend: %s' % backend_name)
-
-            backend = self.__backends[backend_name]
-            if isinstance(backend, tuple):
-                name = backend[0]
-                fromlist = backend[1]
-            else:
-                name = backend
-                fromlist = backend
-
-            self.__backend = __import__(name, None, None, fromlist)
-            logging.info('backend %s', self.__backend)
-        return self.__backend
-
-    def __getattr__(self, key):
-        backend = self.__get_backend()
-        return getattr(backend, key)
-
-
 def find_config_file(options, config_file):
     """
     Return the first config file found.
@@ -150,8 +117,8 @@ def find_config_file(options, config_file):
                         fix_path(os.path.join('~', '.quantum-venv', 'etc',
                                               'quantum')),
                         fix_path('~'),
-                        os.path.join(FLAGS.state_path, 'etc'),
-                        os.path.join(FLAGS.state_path, 'etc', 'quantum'),
+                        os.path.join(cfg.CONF.state_path, 'etc'),
+                        os.path.join(cfg.CONF.state_path, 'etc', 'quantum'),
                         fix_path(os.path.join('~', '.local',
                                               'etc', 'quantum')),
                         '/usr/etc/quantum',
index cc3a43a338cf5775daea321192aca0103d5e27ad..84bd5069f0008ba2dfacdd3d6e88b05c191f6981 100644 (file)
@@ -24,13 +24,12 @@ import unittest
 
 setattr(__builtin__, '_', lambda x: x)
 
-from quantum.common import flags
+from quantum.openstack.common import cfg
 
 
-FLAGS = flags.FLAGS
 reldir = os.path.join(os.path.dirname(__file__), '..', '..', '..')
 absdir = os.path.abspath(reldir)
-FLAGS.state_path = absdir
+cfg.CONF.state_path = absdir
 
 
 class BaseTest(unittest.TestCase):
diff --git a/quantum/tests/unit/declare_flags.py b/quantum/tests/unit/declare_flags.py
deleted file mode 100644 (file)
index fc109c3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from quantum.common import flags
-
-FLAGS = flags.FLAGS
-
-flags.DEFINE_integer('answer', 42, 'test flag')
diff --git a/quantum/tests/unit/runtime_flags.py b/quantum/tests/unit/runtime_flags.py
deleted file mode 100644 (file)
index a16783e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-from quantum.common import flags
-
-
-FLAGS = flags.FLAGS
-
-flags.DEFINE_integer('runtime_answer', 54, 'test flag')
diff --git a/quantum/tests/unit/test_flags.py b/quantum/tests/unit/test_flags.py
deleted file mode 100644 (file)
index 7768564..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-# Copyright 2011 Red Hat, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-import os
-import tempfile
-import unittest
-
-import gflags
-
-from quantum.common import flags
-
-
-FLAGS = flags.FLAGS
-flags.DEFINE_string('flags_unittest', 'foo', 'for testing purposes only')
-
-
-class FlagsTestCase(unittest.TestCase):
-
-    def flags(self, **kw):
-        """Override flag variables for a test."""
-        for k, v in kw.iteritems():
-            setattr(FLAGS, k, v)
-
-    def reset_flags(self):
-        """Resets all flag variables for the test.
-
-        Runs after each test.
-
-        """
-        FLAGS.Reset()
-        for k, v in self._original_flags.iteritems():
-            setattr(FLAGS, k, v)
-
-    def setUp(self):
-        super(FlagsTestCase, self).setUp()
-        self.FLAGS = flags.FlagValues()
-        self.global_FLAGS = flags.FLAGS
-        self._original_flags = FLAGS.FlagValuesDict()
-
-    def test_define(self):
-        self.assert_('string' not in self.FLAGS)
-        self.assert_('int' not in self.FLAGS)
-        self.assert_('false' not in self.FLAGS)
-        self.assert_('true' not in self.FLAGS)
-
-        flags.DEFINE_string('string', 'default', 'desc',
-                            flag_values=self.FLAGS)
-        flags.DEFINE_integer('int', 1, 'desc', flag_values=self.FLAGS)
-        flags.DEFINE_bool('false', False, 'desc', flag_values=self.FLAGS)
-        flags.DEFINE_bool('true', True, 'desc', flag_values=self.FLAGS)
-
-        self.assert_(self.FLAGS['string'])
-        self.assert_(self.FLAGS['int'])
-        self.assert_(self.FLAGS['false'])
-        self.assert_(self.FLAGS['true'])
-        self.assertEqual(self.FLAGS.string, 'default')
-        self.assertEqual(self.FLAGS.int, 1)
-        self.assertEqual(self.FLAGS.false, False)
-        self.assertEqual(self.FLAGS.true, True)
-
-        argv = ['flags_test',
-                '--string', 'foo',
-                '--int', '2',
-                '--false',
-                '--notrue']
-
-        self.FLAGS(argv)
-        self.assertEqual(self.FLAGS.string, 'foo')
-        self.assertEqual(self.FLAGS.int, 2)
-        self.assertEqual(self.FLAGS.false, True)
-        self.assertEqual(self.FLAGS.true, False)
-
-    def test_define_float(self):
-        flags.DEFINE_float('float', 6.66, 'desc', flag_values=self.FLAGS)
-        self.assertEqual(self.FLAGS.float, 6.66)
-
-    def test_define_multistring(self):
-        flags.DEFINE_multistring('multi', [], 'desc', flag_values=self.FLAGS)
-
-        argv = ['flags_test', '--multi', 'foo', '--multi', 'bar']
-        self.FLAGS(argv)
-
-        self.assertEqual(self.FLAGS.multi, ['foo', 'bar'])
-
-    def test_define_list(self):
-        flags.DEFINE_list('list', ['foo'], 'desc', flag_values=self.FLAGS)
-
-        self.assert_(self.FLAGS['list'])
-        self.assertEqual(self.FLAGS.list, ['foo'])
-
-        argv = ['flags_test', '--list=a,b,c,d']
-        self.FLAGS(argv)
-
-        self.assertEqual(self.FLAGS.list, ['a', 'b', 'c', 'd'])
-
-    def test_error(self):
-        flags.DEFINE_integer('error', 1, 'desc', flag_values=self.FLAGS)
-
-        self.assertEqual(self.FLAGS.error, 1)
-
-        argv = ['flags_test', '--error=foo']
-        self.assertRaises(gflags.IllegalFlagValue, self.FLAGS, argv)
-
-    def test_declare(self):
-        self.assert_('answer' not in self.global_FLAGS)
-        flags.DECLARE('answer', 'quantum.tests.unit.declare_flags')
-        self.assert_('answer' in self.global_FLAGS)
-        self.assertEqual(self.global_FLAGS.answer, 42)
-
-        # Make sure we don't overwrite anything
-        self.global_FLAGS.answer = 256
-        self.assertEqual(self.global_FLAGS.answer, 256)
-        flags.DECLARE('answer', 'quantum.tests.unit.declare_flags')
-        self.assertEqual(self.global_FLAGS.answer, 256)
-
-    def test_getopt_non_interspersed_args(self):
-        self.assert_('runtime_answer' not in self.global_FLAGS)
-
-        argv = ['flags_test', 'extra_arg', '--runtime_answer=60']
-        args = self.global_FLAGS(argv)
-        self.assertEqual(len(args), 3)
-        self.assertEqual(argv, args)
-
-    def test_runtime_and_unknown_flags(self):
-        self.assert_('runtime_answer' not in self.global_FLAGS)
-
-        argv = ['flags_test', '--runtime_answer=60', 'extra_arg']
-        args = self.global_FLAGS(argv)
-        self.assertEqual(len(args), 2)
-        self.assertEqual(args[1], 'extra_arg')
-
-        self.assert_('runtime_answer' not in self.global_FLAGS)
-
-        import quantum.tests.unit.runtime_flags
-
-        self.assert_('runtime_answer' in self.global_FLAGS)
-        self.assertEqual(self.global_FLAGS.runtime_answer, 60)
-
-    def test_flag_overrides(self):
-        self.assertEqual(FLAGS.flags_unittest, 'foo')
-        self.flags(flags_unittest='bar')
-        self.assertEqual(FLAGS.flags_unittest, 'bar')
-        self.assertEqual(FLAGS['flags_unittest'].value, 'bar')
-        self.assertEqual(FLAGS.FlagValuesDict()['flags_unittest'], 'bar')
-        self.reset_flags()
-        self.assertEqual(FLAGS.flags_unittest, 'foo')
-        self.assertEqual(FLAGS['flags_unittest'].value, 'foo')
-        self.assertEqual(FLAGS.FlagValuesDict()['flags_unittest'], 'foo')
-
-    def test_flagfile(self):
-        flags.DEFINE_string('string', 'default', 'desc',
-                            flag_values=self.FLAGS)
-        flags.DEFINE_integer('int', 1, 'desc', flag_values=self.FLAGS)
-        flags.DEFINE_bool('false', False, 'desc', flag_values=self.FLAGS)
-        flags.DEFINE_bool('true', True, 'desc', flag_values=self.FLAGS)
-
-        (fd, path) = tempfile.mkstemp(prefix='nova', suffix='.flags')
-
-        try:
-            os.write(fd, '--string=foo\n--int=2\n--false\n--notrue\n')
-            os.close(fd)
-
-            self.FLAGS(['flags_test', '--flagfile=' + path])
-
-            self.assertEqual(self.FLAGS.string, 'foo')
-            self.assertEqual(self.FLAGS.int, 2)
-            self.assertEqual(self.FLAGS.false, True)
-            self.assertEqual(self.FLAGS.true, False)
-        finally:
-            os.remove(path)
-
-    def test_defaults(self):
-        flags.DEFINE_string('foo', 'bar', 'help', flag_values=self.FLAGS)
-        self.assertEqual(self.FLAGS.foo, 'bar')
-
-        self.FLAGS['foo'].SetDefault('blaa')
-        self.assertEqual(self.FLAGS.foo, 'blaa')
-
-    def test_templated_values(self):
-        flags.DEFINE_string('foo', 'foo', 'help', flag_values=self.FLAGS)
-        flags.DEFINE_string('bar', 'bar', 'help', flag_values=self.FLAGS)
-        flags.DEFINE_string('blaa', '$foo$bar', 'help', flag_values=self.FLAGS)
-        self.assertEqual(self.FLAGS.blaa, 'foobar')
index 44165790103bc71538f347002b70779139f8e2a7..7b204b734a550bd4d169a1779c939b6aed4c66f5 100644 (file)
@@ -6,7 +6,6 @@ httplib2
 iso8601>=0.1.4
 lxml
 netaddr
-python-gflags==1.3
 python-quantumclient>=0.1,<0.2
 pyudev
 sqlalchemy>0.6.4