# HG changeset patch # User souliane # Date 1400832213 -7200 # Node ID a874a79ad0f52b58bfa0106985bf3d0e8780c066 # Parent 65fffdcb97f1e8ba726eb7d47e1cefb6f25fdd59 tools: add missing file src/tools/config.py diff -r 65fffdcb97f1 -r a874a79ad0f5 src/memory/memory.py --- a/src/memory/memory.py Fri May 23 09:59:15 2014 +0200 +++ b/src/memory/memory.py Fri May 23 10:03:33 2014 +0200 @@ -180,7 +180,7 @@ if os.path.isfile(os.path.expanduser(old_default) + '/' + C.SAVEFILE_DATABASE): if not silent: log.warning(_("A database has been found in the default local_dir for previous versions (< 0.5)")) - fixConfigOption('', 'local_dir', old_default) + fixConfigOption('', 'local_dir', old_default, silent) class Memory(object): diff -r 65fffdcb97f1 -r a874a79ad0f5 src/tools/config.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/tools/config.py Fri May 23 10:03:33 2014 +0200 @@ -0,0 +1,64 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# SAT: a jabber client +# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014 Jérôme Poisson (goffi@goffi.org) +# Copyright (C) 2013, 2014 Adrien Cossa (souliane@mailoo.org) + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. + +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +""" Configuration related useful methods """ + +from sat.core.log import getLogger +log = getLogger(__name__) + +from sat.core.constants import Const as C +from sat.core.i18n import _ + +from ConfigParser import SafeConfigParser +from xdg import BaseDirectory +import os + + +def fixConfigOption(section, option, value, silent=True): + """Force a configuration option value, writing it in the first found user + config file, eventually creating a new user config file if none is found. + + @param section (str): the config section + @param option (str): the config option + @param value (str): the new value + @param silent (boolean): toggle logging output (must be True when called from sat.sh) + """ + config = SafeConfigParser() + target_file = None + for file_ in C.CONFIG_FILES[::-1]: + # we will eventually update the existing file with the highest priority, if it's a user personal file... + if not silent: + log.debug(_("Testing file %s") % file_) + if os.path.isfile(file_): + if file_.startswith(os.path.expanduser('~')): + config.read([file_]) + target_file = file_ + break + if not target_file: + # ... otherwise we create a new config file for that user + target_file = BaseDirectory.save_config_path('sat') + '/sat.conf' + config.set(section, option, value) + with open(target_file, 'wb') as configfile: + config.write(configfile) # for the next time that user launches sat + if not silent: + if option in ('passphrase'): # list here the options storing a password + value = '******' + log.warning(_("Config auto-update: %(option)s set to %(value)s in the file %(config_file)s") % + {'option': option, 'value': value, 'config_file': target_file})