X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fconfig.py;h=2a11d3bdc9ea36c23d64d172ef4c73d2f910a28f;hp=d481dcd31e358a850e585996b0b8850b6201d964;hb=0d9977c739e5e448af4b49332bd6df1aa9edafc3;hpb=29fd0be6b9d79af8d3d87c1001a220e0441833ed diff --git a/rainbowstream/config.py b/rainbowstream/config.py index d481dcd..2a11d3b 100644 --- a/rainbowstream/config.py +++ b/rainbowstream/config.py @@ -4,12 +4,16 @@ import os import os.path from collections import OrderedDict -# Regular expression for comments +# Regular expression for comments in config file comment_re = re.compile( '(^)?[^\S\n]*/(?:\*(.*?)\*/[^\S\n]*|/[^\n]*)($)?', re.DOTALL | re.MULTILINE ) +# Config dictionary +c = {} + + def fixup(adict, k, v): """ Fix up a key in json format @@ -17,7 +21,7 @@ def fixup(adict, k, v): for key in adict.keys(): if key == k: adict[key] = v - elif type(adict[key]) is dict: + elif isinstance(adict[key], dict): fixup(adict[key], k, v) @@ -38,12 +42,13 @@ def get_all_config(): """ Get all config """ - path = os.environ.get( - 'HOME', - os.environ.get( - 'USERPROFILE', - '')) + os.sep + '.rainbow_config.json' - return load_config(path) + 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 def get_default_config(key): @@ -52,7 +57,10 @@ def get_default_config(key): """ path = os.path.dirname( __file__) + '/colorset/config' - data = load_config(path) + try: + data = load_config(path) + except: + raise Exception('No such config key.') return data[key] @@ -63,28 +71,56 @@ def get_config(key): return c[key] -def set_config(key,value): +def set_config(key, value): """ Set a config key with specific value """ # Modify value if value.isdigit(): value = int(value) - if 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' + path = os.path.expanduser("~") + os.sep + '.rainbow_config.json' + data = {} + try: + data = load_config(path) + except: + pass + # Update global config + c[key] = value + # 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' data = load_config(path) - fixup(data, key, value) + # 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) + json.dump(data, out, indent=4) os.system('chmod 777 ' + path) @@ -92,11 +128,7 @@ def reload_config(): """ Reload 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: @@ -105,38 +137,37 @@ def reload_config(): print('It seems that ~/.rainbow_config.json has wrong format :(') -# Config dictionary -c = {} +def init_config(): + """ + Init configuration + """ + # Load the initial config + config = os.path.dirname( + __file__) + '/colorset/config' + try: + data = load_config(config) + for d in data: + c[d] = data[d] + except: + pass + # Load user's config + 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: + pass + # Load default theme + theme_file = os.path.dirname( + __file__) + '/colorset/' + c['THEME'] + '.json' + try: + data = load_config(theme_file) + for d in data: + c[d] = data[d] + except: + pass + -# Load the initial config -config = os.path.dirname( - __file__) + '/colorset/config' -try: - data = load_config(config) - for d in data: - c[d] = data[d] -except: - pass - -# Load user's config -rainbow_config = os.environ.get( - 'HOME', - os.environ.get( - 'USERPROFILE', - '')) + 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 :(') - -# Load default theme -theme_file = os.path.dirname( - __file__) + '/colorset/' + c['THEME'] + '.json' -try: - data = load_config(theme_file) - for d in data: - c[d] = data[d] -except: - pass +# Init config +init_config()