Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-06-04 23:42:20 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-06-04 23:50:37 (GMT)
commit7aa45464388ee79355cb6e54730b3c8c6e8b571d (patch)
tree9cfc2d3db76aa767e0a538f8bd886a0ed4b9cb71
parent719d5e0204531ba9fe6b71da08a26ba96e068d1a (diff)
Read config files from directories
-rwxr-xr-xsugar-network1
-rwxr-xr-xsugar-network-client1
-rwxr-xr-xsugar-network-node4
-rw-r--r--sugar_network/toolkit/options.py36
-rw-r--r--tests/__init__.py8
-rw-r--r--tests/units/toolkit/__main__.py1
-rwxr-xr-xtests/units/toolkit/options.py30
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()