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(a)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")
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.se...
Your idea sounds good. But it's not feasible. We still need get the
value from config and then construct the dict for set_defaults.