X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fconfig.py;h=9cc2310af1209112296ee9506db7e196a48fe60d;hp=860646d78ca29f62375fac264246733a2b699b15;hb=2a857ef419adf7fa8e7866189df76ee111166a20;hpb=d95839b6c08e4ebf2a1704bb5d4bcd3dfe95e3ef diff --git a/rainbowstream/config.py b/rainbowstream/config.py index 860646d..9cc2310 100644 --- a/rainbowstream/config.py +++ b/rainbowstream/config.py @@ -2,7 +2,6 @@ import json import re import os import os.path -from io import open from collections import OrderedDict # Regular expression for comments in config file @@ -30,7 +29,7 @@ def load_config(filepath): """ Load config from filepath """ - with open(filepath, encoding='utf-8') as f: + with open(filepath) as f: content = ''.join(f.readlines()) match = comment_re.search(content) while match: @@ -43,26 +42,28 @@ def get_all_config(): """ Get all config """ - path = os.path.expanduser("~") + os.sep + '.rainbow_config.json' - data = load_config(path) - # Hard to set from prompt - data.pop('ONLY_LIST', None) - data.pop('IGNORE_LIST', None) - data.pop('FORMAT', None) - return data + try: + path = os.path.expanduser("~") + os.sep + '.rainbow_config.json' + data = load_config(path) + # Hard to set from prompt + data.pop('ONLY_LIST', None) + data.pop('IGNORE_LIST', None) + data.pop('FORMAT', None) + return data + except: + return [] def get_default_config(key): """ Get default value of a config key """ - path = os.path.dirname( - __file__) + '/colorset/config' try: + path = os.path.dirname(__file__) + '/colorset/config' data = load_config(path) + return data[key] except: - raise Exception('No such config key.') - return data[key] + raise Exception('This config key does not exist in default.') def get_config(key): @@ -83,22 +84,22 @@ def set_config(key, value): value = True elif value.lower() == 'false': value = False - # Fix up + # Update global config + c[key] = value + # Load current user config path = os.path.expanduser("~") + os.sep + '.rainbow_config.json' data = {} try: data = load_config(path) except: - pass - # Update global config - c[key] = value + return # Update config file if key in data: fixup(data, key, value) else: data[key] = value # Save - with open(path, 'w', encoding='utf-8') as out: + with open(path, 'w') as out: json.dump(data, out, indent=4) os.system('chmod 777 ' + path) @@ -108,7 +109,10 @@ def delete_config(key): Delete a config key """ path = os.path.expanduser("~") + os.sep + '.rainbow_config.json' - data = load_config(path) + try: + data = load_config(path) + except: + raise Exception('Config file is messed up.') # Drop key if key in data and key in c: data.pop(key) @@ -120,7 +124,7 @@ def delete_config(key): else: raise Exception('No such config key.') # Save - with open(path, 'w', encoding='utf-8') as out: + with open(path, 'w') as out: json.dump(data, out, indent=4) os.system('chmod 777 ' + path) @@ -129,13 +133,14 @@ def reload_config(): """ Reload config """ - rainbow_config = os.path.expanduser("~") + os.sep + '.rainbow_config.json' try: + rainbow_config = os.path.expanduser("~") + \ + os.sep + '.rainbow_config.json' data = load_config(rainbow_config) for d in data: c[d] = data[d] except: - print('It seems that ~/.rainbow_config.json has wrong format :(') + raise Exception('Can not reload config file with wrong format.') def init_config(): @@ -143,8 +148,8 @@ def init_config(): Init configuration """ # Load the initial config - config = os.path.dirname( - __file__) + '/colorset/config' + config = os.path.dirname(__file__) + \ + '/colorset/config' try: data = load_config(config) for d in data: @@ -157,11 +162,11 @@ def init_config(): data = load_config(rainbow_config) for d in data: c[d] = data[d] - except: - pass + except ValueError as e: + c['USER_JSON_ERROR'] = str(e) # Load default theme - theme_file = os.path.dirname( - __file__) + '/colorset/' + c['THEME'] + '.json' + theme_file = os.path.dirname(__file__) + \ + '/colorset/' + c['THEME'] + '.json' try: data = load_config(theme_file) for d in data: