X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fconfig.py;h=5f5b81bd18fe67f23339fe631e6e7b9b3e6b25ea;hp=4645409f9633e09b40d3e15fb985866ac1f3d60f;hb=c4e48381c062c54c6f92e72a40cd0d7b311b2ef2;hpb=531f568231af56035b61bb196b0e43fa79ff223e diff --git a/rainbowstream/config.py b/rainbowstream/config.py index 4645409..5f5b81b 100644 --- a/rainbowstream/config.py +++ b/rainbowstream/config.py @@ -6,7 +6,7 @@ from collections import OrderedDict # Regular expression for comments in config file comment_re = re.compile( - '(^)?[^\S\n]*/(?:\*(.*?)\*/[^\S\n]*|/[^\n]*)($)?', + '(^)[^\S\n]*/(?:\*(.*?)\*/[^\S\n]*|/[^\n]*)($)?', re.DOTALL | re.MULTILINE ) @@ -42,26 +42,30 @@ def get_all_config(): """ Get all config """ - path = os.environ.get( - 'HOME', - os.environ.get( - 'USERPROFILE', - '')) + os.sep + '.rainbow_config.json' - data = load_config(path) - # Hard to set from prompt - data.pop('ONLY_LIST', None) - data.pop('IGNORE_LIST', 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) + data.pop('QUOTE_FORMAT', None) + data.pop('NOTIFY_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' - data = load_config(path) - return data[key] + try: + path = os.path.dirname(__file__) + '/colorset/config' + data = load_config(path) + return data[key] + except: + raise Exception('This config key does not exist in default.') def get_config(key): @@ -78,18 +82,49 @@ def set_config(key, value): # Modify value if value.isdigit(): value = int(value) - elif value.lower() == 'True': + elif value.lower() == 'true': value = True - elif value.lower() == 'False': + elif value.lower() == 'false': value = False - # Fix up - path = os.environ.get( - 'HOME', - os.environ.get( - 'USERPROFILE', - '')) + os.sep + '.rainbow_config.json' - data = load_config(path) - fixup(data, key, value) + # 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: + return + # Update config file + if key in data: + fixup(data, key, value) + else: + data[key] = value + # Save + with open(path, 'w') as out: + json.dump(data, out, indent=4) + os.system('chmod 777 ' + path) + + +def delete_config(key): + """ + Delete a config key + """ + path = os.path.expanduser("~") + os.sep + '.rainbow_config.json' + 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) + c.pop(key) + try: + data[key] = c[key] = get_default_config(key) + except: + pass + else: + raise Exception('No such config key.') # Save with open(path, 'w') as out: json.dump(data, out, indent=4) @@ -100,17 +135,14 @@ def reload_config(): """ Reload config """ - rainbow_config = os.environ.get( - 'HOME', - os.environ.get( - 'USERPROFILE', - '')) + 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(): @@ -118,8 +150,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: @@ -127,20 +159,16 @@ def init_config(): except: pass # Load user's config - rainbow_config = os.environ.get( - 'HOME', - os.environ.get( - 'USERPROFILE', - '')) + os.sep + '.rainbow_config.json' + rainbow_config = os.path.expanduser("~") + os.sep + '.rainbow_config.json' try: data = load_config(rainbow_config) for d in data: c[d] = data[d] - except: - print('It seems that ~/.rainbow_config.json has wrong format :(') + except (IOError, 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: @@ -150,4 +178,4 @@ def init_config(): # Init config -init_config() \ No newline at end of file +init_config()