copy any missing parts of config from .example
This commit is contained in:
parent
8f91adc513
commit
bf8b826bbc
|
@ -82,6 +82,11 @@ def get_exec_path():
|
||||||
|
|
||||||
def get_config(file_name, fallback = True):
|
def get_config(file_name, fallback = True):
|
||||||
"""Looks in cwd and in self.default_config_path for a config file."""
|
"""Looks in cwd and in self.default_config_path for a config file."""
|
||||||
|
|
||||||
|
# look for example file even if not used here, path is returned to caller
|
||||||
|
config_found,example_found,example_copy = False,False,False
|
||||||
|
config_path, example_path = None,None
|
||||||
|
|
||||||
exec_dir = get_exec_path()
|
exec_dir = get_exec_path()
|
||||||
if file_name == 'logging.conf' and not hasattr(sys, "frozen"):
|
if file_name == 'logging.conf' and not hasattr(sys, "frozen"):
|
||||||
config_path = os.path.join(exec_dir, 'pyfpdb', file_name)
|
config_path = os.path.join(exec_dir, 'pyfpdb', file_name)
|
||||||
|
@ -89,17 +94,13 @@ def get_config(file_name, fallback = True):
|
||||||
config_path = os.path.join(exec_dir, file_name)
|
config_path = os.path.join(exec_dir, file_name)
|
||||||
# print "config_path=", config_path
|
# print "config_path=", config_path
|
||||||
if os.path.exists(config_path): # there is a file in the cwd
|
if os.path.exists(config_path): # there is a file in the cwd
|
||||||
return (config_path,False) # so we use it
|
config_found = True # so we use it
|
||||||
else: # no file in the cwd, look where it should be in the first place
|
else: # no file in the cwd, look where it should be in the first place
|
||||||
default_dir = get_default_config_path()
|
default_dir = get_default_config_path()
|
||||||
config_path = os.path.join(default_dir, file_name)
|
config_path = os.path.join(default_dir, file_name)
|
||||||
# print "config path 2=", config_path
|
# print "config path 2=", config_path
|
||||||
if os.path.exists(config_path):
|
if os.path.exists(config_path):
|
||||||
return (config_path,False)
|
config_found = True
|
||||||
|
|
||||||
# No file found
|
|
||||||
if not fallback:
|
|
||||||
return (False,False)
|
|
||||||
|
|
||||||
# Example configuration for debian package
|
# Example configuration for debian package
|
||||||
if os.name == 'posix':
|
if os.name == 'posix':
|
||||||
|
@ -108,38 +109,43 @@ def get_config(file_name, fallback = True):
|
||||||
# the config directory for us so there's no need to check it
|
# the config directory for us so there's no need to check it
|
||||||
# again
|
# again
|
||||||
example_path = '/usr/share/python-fpdb/' + file_name + '.example'
|
example_path = '/usr/share/python-fpdb/' + file_name + '.example'
|
||||||
try:
|
if not config_found and fallback:
|
||||||
shutil.copyfile(example_path, config_path)
|
try:
|
||||||
msg = _("Config file has been created at %s.\n") % config_path
|
shutil.copyfile(example_path, config_path)
|
||||||
logging.info(msg)
|
example_copy = True
|
||||||
return (config_path,False)
|
msg = _("Config file has been created at %s.\n") % config_path
|
||||||
except IOError:
|
logging.info(msg)
|
||||||
pass
|
except IOError:
|
||||||
|
pass
|
||||||
|
|
||||||
# OK, fall back to the .example file, should be in the start dir
|
# OK, fall back to the .example file, should be in the start dir
|
||||||
if os.path.exists(file_name + ".example"):
|
elif os.path.exists(file_name + ".example"):
|
||||||
try:
|
try:
|
||||||
print ""
|
print ""
|
||||||
|
example_path = file_name + ".example"
|
||||||
check_dir(default_dir)
|
check_dir(default_dir)
|
||||||
shutil.copyfile(file_name + ".example", config_path)
|
if not config_found and fallback:
|
||||||
msg = _("No %s found\n in %s\n or %s\n") % (file_name, exec_dir, default_dir) \
|
shutil.copyfile(example_path, config_path)
|
||||||
+ _("Config file has been created at %s.\n") % config_path
|
example_copy = True
|
||||||
print msg
|
msg = _("No %s found\n in %s\n or %s\n") % (file_name, exec_dir, default_dir) \
|
||||||
logging.info(msg)
|
+ _("Config file has been created at %s.\n") % config_path
|
||||||
file_name = config_path
|
print msg
|
||||||
|
logging.info(msg)
|
||||||
except:
|
except:
|
||||||
print _("Error copying .example file, cannot fall back. Exiting.\n")
|
print _("Error copying .example file, cannot fall back. Exiting.\n")
|
||||||
sys.stderr.write(_("Error copying .example file, cannot fall back. Exiting.\n"))
|
sys.stderr.write(_("Error copying .example file, cannot fall back. Exiting.\n"))
|
||||||
sys.stderr.write( str(sys.exc_info()) )
|
sys.stderr.write( str(sys.exc_info()) )
|
||||||
sys.exit()
|
sys.exit()
|
||||||
else:
|
elif fallback:
|
||||||
print _("No %s found, cannot fall back. Exiting.\n") % file_name
|
print _("No %s found, cannot fall back. Exiting.\n") % file_name
|
||||||
sys.stderr.write(_("No %s found, cannot fall back. Exiting.\n") % file_name)
|
sys.stderr.write(_("No %s found, cannot fall back. Exiting.\n") % file_name)
|
||||||
sys.exit()
|
sys.exit()
|
||||||
return (file_name,True)
|
|
||||||
|
#print "get_config: returning "+str( (config_path,example_copy,example_path) )
|
||||||
|
return (config_path,example_copy,example_path)
|
||||||
|
|
||||||
def get_logger(file_name, config = "config", fallback = False, log_dir=None, log_file=None):
|
def get_logger(file_name, config = "config", fallback = False, log_dir=None, log_file=None):
|
||||||
(conf_file,copied) = get_config(file_name, fallback = fallback)
|
(conf_file,copied,example_file) = get_config(file_name, fallback = fallback)
|
||||||
|
|
||||||
if log_dir is None:
|
if log_dir is None:
|
||||||
log_dir = os.path.join(get_exec_path(), u'log')
|
log_dir = os.path.join(get_exec_path(), u'log')
|
||||||
|
@ -674,7 +680,7 @@ class Config:
|
||||||
sys.stderr.write(_("Configuration file %s not found. Using defaults.") % (file))
|
sys.stderr.write(_("Configuration file %s not found. Using defaults.") % (file))
|
||||||
file = None
|
file = None
|
||||||
|
|
||||||
if file is None: (file,self.example_copy) = get_config("HUD_config.xml", True)
|
if file is None: (file,self.example_copy,example_file) = get_config("HUD_config.xml", True)
|
||||||
|
|
||||||
self.file = file
|
self.file = file
|
||||||
self.dir_self = get_exec_path()
|
self.dir_self = get_exec_path()
|
||||||
|
@ -685,27 +691,6 @@ class Config:
|
||||||
self.log_file = os.path.join(self.dir_log, u'fpdb-log.txt')
|
self.log_file = os.path.join(self.dir_log, u'fpdb-log.txt')
|
||||||
log = get_logger("logging.conf", "config", log_dir=self.dir_log)
|
log = get_logger("logging.conf", "config", log_dir=self.dir_log)
|
||||||
|
|
||||||
# Parse even if there was no real config file found and we are using the example
|
|
||||||
# If using the example, we'll edit it later
|
|
||||||
log.info(_("Reading configuration file %s") % file)
|
|
||||||
print _("\nReading configuration file %s\n") % file
|
|
||||||
try:
|
|
||||||
doc = xml.dom.minidom.parse(file)
|
|
||||||
self.file_error = None
|
|
||||||
except:
|
|
||||||
log.error(_("Error parsing %s. See error log file.") % (file))
|
|
||||||
traceback.print_exc(file=sys.stderr)
|
|
||||||
self.file_error = sys.exc_info()[1]
|
|
||||||
# we could add a parameter to decide whether to return or read a line and exit?
|
|
||||||
return
|
|
||||||
#print "press enter to continue"
|
|
||||||
#sys.stdin.readline()
|
|
||||||
#sys.exit()
|
|
||||||
#ExpatError: not well-formed (invalid token): line 511, column 4
|
|
||||||
#sys.exc_info = (<class 'xml.parsers.expat.ExpatError'>, ExpatError('not well-formed (invalid token): line 511,
|
|
||||||
# column 4',), <traceback object at 0x024503A0>)
|
|
||||||
|
|
||||||
self.doc = doc
|
|
||||||
self.supported_sites = {}
|
self.supported_sites = {}
|
||||||
self.supported_games = {}
|
self.supported_games = {}
|
||||||
self.supported_databases = {} # databaseName --> Database instance
|
self.supported_databases = {} # databaseName --> Database instance
|
||||||
|
@ -717,6 +702,32 @@ class Config:
|
||||||
self.emails = {}
|
self.emails = {}
|
||||||
self.gui_cash_stats = GUICashStats()
|
self.gui_cash_stats = GUICashStats()
|
||||||
|
|
||||||
|
added,n = 1,0 # use n to prevent infinite loop if add_missing_elements() fails somehow
|
||||||
|
while added > 0 and n < 2:
|
||||||
|
n = n + 1
|
||||||
|
log.info(_("Reading configuration file %s") % file)
|
||||||
|
print _("\nReading configuration file %s\n") % file
|
||||||
|
try:
|
||||||
|
doc = xml.dom.minidom.parse(file)
|
||||||
|
self.doc = doc
|
||||||
|
self.file_error = None
|
||||||
|
except:
|
||||||
|
log.error(_("Error parsing %s. See error log file.") % (file))
|
||||||
|
traceback.print_exc(file=sys.stderr)
|
||||||
|
self.file_error = sys.exc_info()[1]
|
||||||
|
# we could add a parameter to decide whether to return or read a line and exit?
|
||||||
|
return
|
||||||
|
#print "press enter to continue"
|
||||||
|
#sys.stdin.readline()
|
||||||
|
#sys.exit()
|
||||||
|
#ExpatError: not well-formed (invalid token): line 511, column 4
|
||||||
|
#sys.exc_info = (<class 'xml.parsers.expat.ExpatError'>, ExpatError('not well-formed (invalid token): line 511,
|
||||||
|
# column 4',), <traceback object at 0x024503A0>)
|
||||||
|
|
||||||
|
if not self.example_copy and example_file is not None:
|
||||||
|
# reads example file and adds missing elements into current config
|
||||||
|
added = self.add_missing_elements(doc, example_file)
|
||||||
|
|
||||||
if doc.getElementsByTagName("general") == []:
|
if doc.getElementsByTagName("general") == []:
|
||||||
self.general.get_defaults()
|
self.general.get_defaults()
|
||||||
for gen_node in doc.getElementsByTagName("general"):
|
for gen_node in doc.getElementsByTagName("general"):
|
||||||
|
@ -792,7 +803,7 @@ class Config:
|
||||||
self.set_db_parameters(db_name = 'fpdb', db_ip = df_parms['db-host'],
|
self.set_db_parameters(db_name = 'fpdb', db_ip = df_parms['db-host'],
|
||||||
db_user = df_parms['db-user'],
|
db_user = df_parms['db-user'],
|
||||||
db_pass = df_parms['db-password'])
|
db_pass = df_parms['db-password'])
|
||||||
self.save(file=os.path.join(self.default_config_path, "HUD_config.xml"))
|
self.save(file=os.path.join(self.dir_config, "HUD_config.xml"))
|
||||||
|
|
||||||
if doc.getElementsByTagName("raw_hands") == []:
|
if doc.getElementsByTagName("raw_hands") == []:
|
||||||
self.raw_hands = RawHands()
|
self.raw_hands = RawHands()
|
||||||
|
@ -807,6 +818,40 @@ class Config:
|
||||||
print ""
|
print ""
|
||||||
#end def __init__
|
#end def __init__
|
||||||
|
|
||||||
|
def add_missing_elements(self, doc, example_file):
|
||||||
|
""" Look through example config file and add any elements that are not in the config
|
||||||
|
May need to add some 'enabled' attributes to turn things off - can't just delete a
|
||||||
|
config section now because this will add it back in"""
|
||||||
|
|
||||||
|
nodes_added = 0
|
||||||
|
|
||||||
|
try:
|
||||||
|
example_doc = xml.dom.minidom.parse(example_file)
|
||||||
|
except:
|
||||||
|
log.error(_("Error parsing example file %s. See error log file.") % (example_file))
|
||||||
|
return nodes_added
|
||||||
|
|
||||||
|
for cnode in doc.getElementsByTagName("FreePokerToolsConfig"):
|
||||||
|
for example_cnode in example_doc.childNodes:
|
||||||
|
if example_cnode.localName == "FreePokerToolsConfig":
|
||||||
|
for e in example_cnode.childNodes:
|
||||||
|
#print "nodetype", e.nodeType, "name", e.localName, "found", len(doc.getElementsByTagName(e.localName))
|
||||||
|
if e.nodeType == e.ELEMENT_NODE and doc.getElementsByTagName(e.localName) == []:
|
||||||
|
new = doc.importNode(e, True) # True means do deep copy
|
||||||
|
t_node = self.doc.createTextNode(" ")
|
||||||
|
cnode.appendChild(t_node)
|
||||||
|
cnode.appendChild(new)
|
||||||
|
t_node = self.doc.createTextNode("\r\n\r\n")
|
||||||
|
cnode.appendChild(t_node)
|
||||||
|
print "... adding missing config section: " + e.localName
|
||||||
|
nodes_added = nodes_added + 1
|
||||||
|
|
||||||
|
if nodes_added > 0:
|
||||||
|
print "Added %d missing config sections\n" % nodes_added
|
||||||
|
self.save()
|
||||||
|
|
||||||
|
return nodes_added
|
||||||
|
|
||||||
def set_hhArchiveBase(self, path):
|
def set_hhArchiveBase(self, path):
|
||||||
self.imp.node.setAttribute("hhArchiveBase", path)
|
self.imp.node.setAttribute("hhArchiveBase", path)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user