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-10-10 22:05:17 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-10-10 22:05:17 (GMT)
commit4a2bad22575bc7a5af9eaf5fb2adb0095542ceab (patch)
treee39550497de5a691f3d3c6d45c82346fde115a39
parentb5a046dcce410a2f41fa0be8e4a58d5da6d3c2b3 (diff)
Save config only for changed properties
-rw-r--r--sugar_network/toolkit/options.py29
1 files changed, 17 insertions, 12 deletions
diff --git a/sugar_network/toolkit/options.py b/sugar_network/toolkit/options.py
index 04cf1f3..78dd8ea 100644
--- a/sugar_network/toolkit/options.py
+++ b/sugar_network/toolkit/options.py
@@ -18,7 +18,8 @@
import os
import re
import sys
-from os.path import exists, expanduser, isdir, join
+from ConfigParser import ConfigParser
+from os.path import exists, expanduser, isdir, join, dirname
# TODO Replace by ','
@@ -43,6 +44,7 @@ class Option(object):
_parser = None
_config_to_save = None
+ _orig_config = {}
def __init__(self, description=None, default=None, short_option=None,
type_cast=None, type_repr=None, action=None, name=None):
@@ -231,25 +233,27 @@ class Option(object):
@staticmethod
def save(path=None):
- from cStringIO import StringIO
from sugar_network.toolkit import new_file
- if Option._parser is None:
- raise RuntimeError('No configure files to save')
if not path:
if not Option._config_to_save:
raise RuntimeError('No configure files to save')
path = Option._config_to_save
+ parser = ConfigParser()
+ if exists(path):
+ parser.read(path)
+
for prop in Option.items.values():
- if not Option._parser.has_section(prop.section):
- Option._parser.add_section(prop.section)
- Option._parser.set(prop.section, prop.name, prop)
- result = StringIO()
- Option._parser.write(result)
+ if Option._orig_config.get(prop.name) == prop.value:
+ continue
+ if not parser.has_section(prop.section):
+ parser.add_section(prop.section)
+ parser.set(prop.section, prop.name, prop)
+ Option._orig_config[prop.name] = prop.value
with new_file(path) as f:
- f.write(result.getvalue())
+ parser.write(f)
@staticmethod
def bool_cast(x):
@@ -319,11 +323,11 @@ class Option(object):
@staticmethod
def _load(options, config_files):
- from ConfigParser import ConfigParser
Option._parser = ConfigParser()
def load_config(path):
- if Option._config_to_save is None and os.access(path, os.W_OK):
+ if Option._config_to_save is None and \
+ os.access(dirname(path), os.W_OK):
Option._config_to_save = path
if not exists(path):
return
@@ -347,6 +351,7 @@ class Option(object):
prop.value = getattr(options, prop.attr_name)
elif Option._parser.has_option(prop.section, prop.name):
prop.value = Option._parser.get(prop.section, prop.name)
+ Option._orig_config[prop.name] = prop.value
def _get_frame(frame_no):