[Kimchi-devel] [PATCH v3 1/4] Move configuration parsing to config.py

Royce Lv lvroyce at linux.vnet.ibm.com
Wed Jan 8 10:19:48 UTC 2014


On 2014年01月08日 17:42, Mark Wu wrote:
> On 01/08/2014 01:51 PM, Royce Lv wrote:
>> On 2014年01月08日 10:55, Royce Lv wrote:
>>> On 2014年01月07日 16:56, Mark Wu wrote:
>>>> The configuration is also needed for other code except starting kimchi
>>>> server. So it should be moved to a separate module, config.py. Then 
>>>> the
>>>> configuration can be accessed directly by importing config module.
>>>>
>>>> Signed-off-by: Mark Wu <wudxw at linux.vnet.ibm.com>
>>>> ---
>>>>   src/kimchi/config.py.in | 24 ++++++++++++++++++++++++
>>>>   src/kimchid.in          | 20 +-------------------
>>>>   2 files changed, 25 insertions(+), 19 deletions(-)
>>>>
>>>> diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in
>>>> index f3c408a..72308ff 100644
>>>> --- a/src/kimchi/config.py.in
>>>> +++ b/src/kimchi/config.py.in
>>>> @@ -27,6 +27,7 @@ import os
>>>>   import platform
>>>>
>>>>
>>>> +from ConfigParser import SafeConfigParser
>>>>   from glob import iglob
>>>>
>>>>
>>>> @@ -166,5 +167,28 @@ def get_plugin_tab_xml(name):
>>>>       return os.path.join(_get_plugin_ui_dir(name), 
>>>> 'config/tab-ext.xml')
>>>>
>>>>
>>>> +def _get_config():
>>>> +    config = SafeConfigParser()
>>>> +    config.add_section("server")
>>>> +    config.set("server", "host", "0.0.0.0")
>>>> +    config.set("server", "port", "8000")
>>>> +    config.set("server", "ssl_port", "8001")
>>>> +    config.set("server", "ssl_cert", "")
>>>> +    config.set("server", "ssl_key", "")
>>>> +    config.set("server", "environment", "development")
>>>> +    config.add_section("logging")
>>>> +    config.set("logging", "log_dir", get_default_log_dir())
>>>> +    config.set("logging", "log_level", DEFAULT_LOG_LEVEL)
>>>> +
>>>> +    if os.path.exists(CONFIG_FILE):
>>>> +        config.read(CONFIG_FILE)
>>>> +    return config
>>>> +
>>>> +
>>>> +CONFIG_FILE = "%s/kimchi.conf" % get_config_dir()
>>>> +DEFAULT_LOG_LEVEL = "debug"
>>>> +config = _get_config()
>>>> +
>>>> +
>>>>   if __name__ == '__main__':
>>>>       print get_prefix()
>>>> diff --git a/src/kimchid.in b/src/kimchid.in
>>>> index 7865713..548fa52 100644
>>>> --- a/src/kimchid.in
>>>> +++ b/src/kimchid.in
>>>> @@ -33,31 +33,13 @@ import kimchi.config
>>>>   if kimchi.config.without_installation():
>>>>       sys.path.append(kimchi.config.get_prefix())
>>>>
>>>> -from ConfigParser import SafeConfigParser
>>>> +from kimchi.config import config
>>>>   from optparse import OptionParser
>>>>
>>>>   ACCESS_LOG = "kimchi-access.log"
>>>>   ERROR_LOG = "kimchi-error.log"
>>>> -CONFIG_FILE = "%s/kimchi.conf" % kimchi.config.get_config_dir()
>>>> -DEFAULT_LOG_DIR = kimchi.config.get_default_log_dir()
>>>> -DEFAULT_LOG_LEVEL = "debug"
>>>>
>>>>   def main(options):
>>>> -    config = SafeConfigParser()
>>>> -    config.add_section("server")
>>>> -    config.set("server", "host", "0.0.0.0")
>>>> -    config.set("server", "port", "8000")
>>>> -    config.set("server", "ssl_port", "8001")
>>>> -    config.set("server", "ssl_cert", "")
>>>> -    config.set("server", "ssl_key", "")
>>>> -    config.set("server", "environment", "development")
>>>> -    config.add_section("logging")
>>>> -    config.set("logging", "log_dir", DEFAULT_LOG_DIR)
>>>> -    config.set("logging", "log_level", DEFAULT_LOG_LEVEL)
>>>> -
>>>> -    if os.path.exists(CONFIG_FILE):
>>>> -        config.read(CONFIG_FILE)
>>>> -
>>> Starting here:
>>>>       host = config.get("server", "host")
>>>>       port = config.get("server", "port")
>>>>       ssl_port = config.get("server", "ssl_port")
>> And don't forget to update config object if you want to use it else 
>> where, because the right configuration is processed by cmd args.In 
>> your patch it won't cause problem because you don't accepted cmd args 
>> of vnc port, but if in the future if we want to use config object, 
>> that'll cause problem.
> I think we don't need update the config object with the values passed 
> from the command lines.
> We could consider we have two kinds of configurations in the 
> config.py: one could be overrode
> by the command line options and the other doesn't have corresponding 
> option in command line.
> For the first kind,  kimchi server use the merged 'options' instead of 
> directly getting config from
> config module.  For the second case,  it's not related to server and 
> it doesn't make sense to pass
> the option from command line and pass around the option inside 
> kimchi.  The user module should
> be able to get its config directly.
>
> You could feel that it has some potential inconsistent.  I think we 
> can simply the command line options
> to resolve it.  We could remove the options which are in the config 
> and use one parameter: the path of configuration file instead.  It 
> will not cause any inconsistency.  Are you fine to resolve it in a 
> following up patch after we get agreement on this direction?
This idea is cool for me, so I think I have no complaints about this 
version  then.
>
> Thanks!
> Mark.
>
>
>
>
>>> This may be a further refactor , but seems we can use set_defaults 
>>> of optionparser to set config dict as default value of option 
>>> parser, so that the annoying dirty lines of reading every item of 
>>> config can be removed.
>>> REF: 
>>> http://docs.python.org/3.3/library/optparse.html#optparse.OptionParser.set_defaults
>>>
>>> _______________________________________________
>>> Kimchi-devel mailing list
>>> Kimchi-devel at ovirt.org
>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
>




More information about the Kimchi-devel mailing list