diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2013-06-04 23:42:20 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2013-06-04 23:50:37 (GMT) |
commit | 7aa45464388ee79355cb6e54730b3c8c6e8b571d (patch) | |
tree | 9cfc2d3db76aa767e0a538f8bd886a0ed4b9cb71 | |
parent | 719d5e0204531ba9fe6b71da08a26ba96e068d1a (diff) |
Read config files from directories
-rwxr-xr-x | sugar-network | 1 | ||||
-rwxr-xr-x | sugar-network-client | 1 | ||||
-rwxr-xr-x | sugar-network-node | 4 | ||||
-rw-r--r-- | sugar_network/toolkit/options.py | 36 | ||||
-rw-r--r-- | tests/__init__.py | 8 | ||||
-rw-r--r-- | tests/units/toolkit/__main__.py | 1 | ||||
-rwxr-xr-x | tests/units/toolkit/options.py | 30 |
7 files changed, 59 insertions, 22 deletions
diff --git a/sugar-network b/sugar-network index 82d7b8f..bd0a6d6 100755 --- a/sugar-network +++ b/sugar-network @@ -280,6 +280,7 @@ app = Application( 'for details.', config_files=[ '/etc/sweets.conf', + '/etc/sweets.d', '~/.config/sweets/config', client.profile_path('sweets.conf'), ], diff --git a/sugar-network-client b/sugar-network-client index 0d1d8f8..eba2494 100755 --- a/sugar-network-client +++ b/sugar-network-client @@ -207,6 +207,7 @@ app = Application( 'for details.', config_files=[ '/etc/sweets.conf', + '/etc/sweets.d', '~/.config/sweets/config', client.profile_path('sweets.conf'), ]) diff --git a/sugar-network-node b/sugar-network-node index f078814..c319672 100755 --- a/sugar-network-node +++ b/sugar-network-node @@ -150,7 +150,9 @@ app = Application( epilog='See http://wiki.sugarlabs.org/go/Sugar_Network ' 'for details.', config_files=[ - '/etc/sugar-network/config', + '/etc/sugar-network/config', # Deprecated + '/etc/sugar-network.conf', + '/etc/sugar-network.d', '~/.config/sugar-network/config', ]) app.start() diff --git a/sugar_network/toolkit/options.py b/sugar_network/toolkit/options.py index 8860c30..8c86fa0 100644 --- a/sugar_network/toolkit/options.py +++ b/sugar_network/toolkit/options.py @@ -15,8 +15,9 @@ """Command-line options parsing utilities.""" +import os import sys -from os.path import exists, expanduser +from os.path import exists, expanduser, isdir, join class Option(object): @@ -38,7 +39,7 @@ class Option(object): config_files = [] _config = None - _config_files_to_save = [] + _config_to_save = None def __init__(self, description=None, default=None, short_option=None, type_cast=None, type_repr=None, action=None, name=None): @@ -198,16 +199,6 @@ class Option(object): return options, args @staticmethod - def bind(parser, config_files=None, notice=None): - # DEPRECATED - Option._bind(parser, config_files, notice) - - @staticmethod - def merge(options, config_files=None): - # DEPRECATED - Option._merge(options, config_files) - - @staticmethod def export(): """Current configuration in human readable form. @@ -236,9 +227,9 @@ class Option(object): @staticmethod def save(path=None): if not path: - if not Option._config_files_to_save: + if not Option._config_to_save: raise RuntimeError('No configure files to save') - path = Option._config_files_to_save[-1] + path = Option._config_to_save with file(path, 'w') as f: f.write('\n'.join(Option.export())) @@ -324,12 +315,17 @@ class Option(object): for config in config_files or []: if isinstance(config, ConfigParser): configs.append(config) - else: - config = expanduser(config) - if exists(config): - Option.config_files.append(config) - configs[0].read(config) - Option._config_files_to_save.append(config) + continue + config = expanduser(config) + if isdir(config): + for path in sorted(os.listdir(config)): + path = join(config, path) + Option.config_files.append(path) + configs[0].read(path) + elif exists(config): + Option.config_files.append(config) + configs[0].read(config) + Option._config_to_save = config for prop in Option.items.values(): if hasattr(options, prop.attr_name) and \ diff --git a/tests/__init__.py b/tests/__init__.py index 2bef872..928aa69 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -15,7 +15,7 @@ from os.path import dirname, join, exists, abspath, isfile from M2Crypto import DSA from gevent import monkey -from sugar_network.toolkit import coroutine, http, mountpoints, util +from sugar_network.toolkit import coroutine, http, mountpoints, util, Option from sugar_network.db.router import Router from sugar_network.client import journal, IPCRouter, commands from sugar_network.client.commands import ClientCommands @@ -73,6 +73,12 @@ class Test(unittest.TestCase): shutil.copy(join(root, 'data', 'owner.key'), join(profile_dir, 'owner.key')) shutil.copy(join(root, 'data', 'owner.key.pub'), profile_dir) + Option.unsorted_items = [] + Option.items = {} + Option.sections = {} + Option.config_files = [] + Option._config = None + Option._config_to_save = None db.index_flush_timeout.value = 0 db.index_flush_threshold.value = 1 node.find_limit.value = 1024 diff --git a/tests/units/toolkit/__main__.py b/tests/units/toolkit/__main__.py index 3d5c944..f3ca1ad 100644 --- a/tests/units/toolkit/__main__.py +++ b/tests/units/toolkit/__main__.py @@ -7,6 +7,7 @@ from lsb_release import * from mountpoints import * from rrd import * from util import * +from options import * if __name__ == '__main__': tests.main() diff --git a/tests/units/toolkit/options.py b/tests/units/toolkit/options.py new file mode 100755 index 0000000..804240f --- /dev/null +++ b/tests/units/toolkit/options.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +# sugar-lint: disable + +from __init__ import tests + +from sugar_network.toolkit import Option + + +class OptionsTest(tests.Test): + + def test_LoadDirs(self): + self.touch( + ('d/1', ['[section]', 'p1=1', 'p2=2']), + ('d/2', ['[section]', 'p2=22', 'p3=33']), + ) + + p1 = Option(name='p1') + p2 = Option(name='p2') + p3 = Option(name='p3') + + Option.seek('section', [p1, p2, p3]) + Option.load(['d']) + + self.assertEqual('1', p1.value) + self.assertEqual('22', p2.value) + self.assertEqual('33', p3.value) + + +if __name__ == '__main__': + tests.main() |