mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2024-11-29 22:23:12 -06:00
Closed #40.
This commit is contained in:
parent
6ba57e83cf
commit
f3e1dc40ea
@ -2,10 +2,12 @@
|
|||||||
from configobj import ConfigObj, ParseError
|
from configobj import ConfigObj, ParseError
|
||||||
from validate import Validator, ValidateError
|
from validate import Validator, ValidateError
|
||||||
import os
|
import os
|
||||||
|
import string
|
||||||
class ConfigLoadError(Exception): pass
|
class ConfigLoadError(Exception): pass
|
||||||
|
|
||||||
def load_config(config_path, configspec_path=None, *args, **kwargs):
|
def load_config(config_path, configspec_path=None, *args, **kwargs):
|
||||||
|
if os.path.exists(config_path):
|
||||||
|
clean_config(config_path)
|
||||||
spec = ConfigObj(configspec_path, encoding='UTF8', list_values=False, _inspec=True)
|
spec = ConfigObj(configspec_path, encoding='UTF8', list_values=False, _inspec=True)
|
||||||
try:
|
try:
|
||||||
config = ConfigObj(infile=config_path, configspec=spec, create_empty=True, encoding='UTF8', *args, **kwargs)
|
config = ConfigObj(infile=config_path, configspec=spec, create_empty=True, encoding='UTF8', *args, **kwargs)
|
||||||
@ -16,3 +18,56 @@ def load_config(config_path, configspec_path=None, *args, **kwargs):
|
|||||||
if validated == True:
|
if validated == True:
|
||||||
config.write()
|
config.write()
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
def is_blank(arg):
|
||||||
|
"Check if a line is blank."
|
||||||
|
for c in arg:
|
||||||
|
if c not in string.whitespace:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
def get_keys(path):
|
||||||
|
"Gets the keys of a configobj config file."
|
||||||
|
res=[]
|
||||||
|
fin=open(path)
|
||||||
|
for line in fin:
|
||||||
|
if not is_blank(line):
|
||||||
|
res.append(line[0:line.find('=')].strip())
|
||||||
|
fin.close()
|
||||||
|
return res
|
||||||
|
|
||||||
|
def hist(keys):
|
||||||
|
"Generates a histogram of an iterable."
|
||||||
|
res={}
|
||||||
|
for k in keys:
|
||||||
|
res[k]=res.setdefault(k,0)+1
|
||||||
|
return res
|
||||||
|
|
||||||
|
def find_problems(hist):
|
||||||
|
"Takes a histogram and returns a list of items occurring more than once."
|
||||||
|
res=[]
|
||||||
|
for k,v in hist.items():
|
||||||
|
if v>1:
|
||||||
|
res.append(k)
|
||||||
|
return res
|
||||||
|
|
||||||
|
def clean_config(path):
|
||||||
|
"Cleans a config file. If duplicate values are found, delete all of them and just use the default."
|
||||||
|
orig=[]
|
||||||
|
cleaned=[]
|
||||||
|
fin=open(path)
|
||||||
|
for line in fin:
|
||||||
|
orig.append(line)
|
||||||
|
fin.close()
|
||||||
|
for p in find_problems(hist(get_keys(path))):
|
||||||
|
for o in orig:
|
||||||
|
o.strip()
|
||||||
|
if p not in o:
|
||||||
|
cleaned.append(o)
|
||||||
|
if len(cleaned) != 0:
|
||||||
|
cam=open(path,'w')
|
||||||
|
for c in cleaned:
|
||||||
|
cam.write(c)
|
||||||
|
cam.close()
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
Loading…
Reference in New Issue
Block a user