X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=lib%2Fsimple_config.py;h=0824c04e4d9d6d0f285da21c32df901f0ea068cc;hb=99a31b0c6a30bad2cb2b8c27a748a1f25a89c107;hp=b70e5c96e85ecd2c47e5e32a92f91970265be97f;hpb=221fa5848f0348bd02586c86a50feb9916c7cea2;p=electrum-nvc.git diff --git a/lib/simple_config.py b/lib/simple_config.py index b70e5c9..0824c04 100644 --- a/lib/simple_config.py +++ b/lib/simple_config.py @@ -35,7 +35,7 @@ class SimpleConfig(object): read_user_config_function=None, read_user_dir_function=None): # This is the holder of actual options for the current user. - self.current_options = {} + self.read_only_options = {} # This lock needs to be acquired for updating and reading the config in # a thread-safe way. self.lock = threading.RLock() @@ -65,26 +65,23 @@ class SimpleConfig(object): # system conf system_config = read_system_config_function() self.system_config_keys = system_config.keys() - self.current_options.update(system_config) + self.read_only_options.update(system_config) # update the current options with the command line options last (to # override both others). - self.current_options.update(options) + self.read_only_options.update(options) # init path self.init_path() # user config. self.user_config = read_user_config_function(self.path) - # The user config is overwritten by the current config! - self.user_config.update(self.current_options) - self.current_options = self.user_config set_config(self) # Make a singleton instance of 'self' def init_path(self): # Read electrum path in the command line configuration - self.path = self.current_options.get('electrum_path') + self.path = self.read_only_options.get('electrum_path') # If not set, use the user's default data directory. if self.path is None: @@ -104,7 +101,6 @@ class SimpleConfig(object): with self.lock: self.user_config[key] = value - self.current_options[key] = value if save: self.save_user_config() @@ -113,7 +109,9 @@ class SimpleConfig(object): def get(self, key, default=None): out = None with self.lock: - out = self.current_options.get(key, default) + out = self.read_only_options.get(key) + if not out: + out = self.user_config.get(key, default) return out def is_modifiable(self, key): @@ -135,10 +133,10 @@ class SimpleConfig(object): import stat os.chmod(path, stat.S_IREAD | stat.S_IWRITE) -def read_system_config(): +def read_system_config(path=SYSTEM_CONFIG_PATH): """Parse and return the system config settings in /etc/electrum.conf.""" result = {} - if os.path.exists(SYSTEM_CONFIG_PATH): + if os.path.exists(path): try: import ConfigParser except ImportError: @@ -146,30 +144,33 @@ def read_system_config(): return p = ConfigParser.ConfigParser() - p.read(SYSTEM_CONFIG_PATH) - result = {} try: + p.read(path) for k, v in p.items('client'): result[k] = v - except ConfigParser.NoSectionError: + except (ConfigParser.NoSectionError, ConfigParser.MissingSectionHeaderError): pass + return result def read_user_config(path): """Parse and store the user config settings in electrum.conf into user_config[].""" - if not path: return + if not path: return {} # Return a dict, since we will call update() on it. config_path = os.path.join(path, "config") + result = {} if os.path.exists(config_path): try: + with open(config_path, "r") as f: data = f.read() - except IOError: - return - try: - d = ast.literal_eval( data ) #parse raw data from reading wallet file + result = ast.literal_eval( data ) #parse raw data from reading wallet file + except Exception: print_msg("Error: Cannot read config file.") - return + result = {} - return d + if not type(result) is dict: + return {} + + return result