# HG changeset patch # User Goffi # Date 1570529426 -7200 # Node ID 8b36e5c3f28fa102c5c14bdcb5740e164416814b # Parent 60a63723ecea63c0d9dd800fa192e042a4c0fcf9 misc: don't import memory in launch script: launch script was importing a method from memory (fixLocalDir), but memory is importing twisted.internet.reactor which can result to a ReactorAlreadyInstalledError. This patch fixes it by moving fixLocalDir to tools/config. The launch script is now using /usr/bin/env. diff -r 60a63723ecea -r 8b36e5c3f28f bin/sat --- a/bin/sat Mon Oct 07 17:29:28 2019 +0200 +++ b/bin/sat Tue Oct 08 12:10:26 2019 +0200 @@ -26,9 +26,9 @@ } #We use python to parse config files -eval `"$PYTHON" << PYTHONEND +eval `/usr/bin/env "$PYTHON" << PYTHONEND from sat.core.constants import Const as C -from sat.memory.memory import fixLocalDir +from sat.tools.config import fixLocalDir from configparser import ConfigParser from os.path import expanduser, join import sys @@ -100,4 +100,4 @@ mkdir $log_dir fi -exec $PYTHON $TWISTD $MAIN_OPTIONS $ADDITIONAL_OPTIONS $APP_NAME_FILE +exec /usr/bin/env $PYTHON $TWISTD $MAIN_OPTIONS $ADDITIONAL_OPTIONS $APP_NAME_FILE diff -r 60a63723ecea -r 8b36e5c3f28f sat/memory/memory.py --- a/sat/memory/memory.py Mon Oct 07 17:29:28 2019 +0200 +++ b/sat/memory/memory.py Tue Oct 08 12:10:26 2019 +0200 @@ -26,7 +26,6 @@ import os.path import copy from collections import namedtuple -from configparser import ConfigParser, NoOptionError, NoSectionError from uuid import uuid4 from twisted.python import failure from twisted.internet import defer, reactor, error @@ -221,36 +220,6 @@ ) -# XXX: tmp update code, will be removed in the future -# When you remove this, please add the default value for -# 'local_dir' in sat.core.constants.Const.DEFAULT_CONFIG -def fixLocalDir(silent=True): - """Retro-compatibility with the previous local_dir default value. - - @param silent (boolean): toggle logging output (must be True when called from sat.sh) - """ - user_config = ConfigParser() - try: - user_config.read(C.CONFIG_FILES) - except: - pass # file is readable but its structure if wrong - try: - current_value = user_config.get("DEFAULT", "local_dir") - except (NoOptionError, NoSectionError): - current_value = "" - if current_value: - return # nothing to do - old_default = "~/.sat" - 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)" - ) - ) - tools_config.fixConfigOption("", "local_dir", old_default, silent) - - class Memory(object): """This class manage all the persistent information""" @@ -266,7 +235,8 @@ self.subscriptions = {} self.auth_sessions = PasswordSessions() # remember the authenticated profiles self.disco = Discovery(host) - fixLocalDir(False) # XXX: tmp update code, will be removed in the future + # XXX: tmp update code, will be removed in the future + tools_config.fixLocalDir(False) self.config = tools_config.parseMainConf() database_file = os.path.expanduser( os.path.join(self.getConfig("", "local_dir"), C.SAVEFILE_DATABASE) diff -r 60a63723ecea -r 8b36e5c3f28f sat/tools/config.py --- a/sat/tools/config.py Mon Oct 07 17:29:28 2019 +0200 +++ b/sat/tools/config.py Tue Oct 08 12:10:26 2019 +0200 @@ -70,6 +70,35 @@ config_file=target_file)) +# XXX: tmp update code, will be removed in the future +# When you remove this, please add the default value for +# 'local_dir' in sat.core.constants.Const.DEFAULT_CONFIG +def fixLocalDir(silent=True): + """Retro-compatibility with the previous local_dir default value. + + @param silent (boolean): toggle logging output (must be True when called from sat.sh) + """ + user_config = ConfigParser() + try: + user_config.read(C.CONFIG_FILES) + except: + pass # file is readable but its structure if wrong + try: + current_value = user_config.get("DEFAULT", "local_dir") + except (NoOptionError, NoSectionError): + current_value = "" + if current_value: + return # nothing to do + old_default = "~/.sat" + 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, silent) + + def parseMainConf(): """look for main .ini configuration file, and parse it""" config = ConfigParser(defaults=C.DEFAULT_CONFIG) diff -r 60a63723ecea -r 8b36e5c3f28f setup.py --- a/setup.py Mon Oct 07 17:29:28 2019 +0200 +++ b/setup.py Tue Oct 08 12:10:26 2019 +0200 @@ -70,8 +70,10 @@ rev=version.node[1:], distance=version.distance) - return {'version_scheme': version_scheme, - 'local_scheme': local_scheme} + return { + 'version_scheme': version_scheme, + 'local_scheme': local_scheme + } setup( diff -r 60a63723ecea -r 8b36e5c3f28f twisted/plugins/sat_plugin.py --- a/twisted/plugins/sat_plugin.py Mon Oct 07 17:29:28 2019 +0200 +++ b/twisted/plugins/sat_plugin.py Tue Oct 08 12:10:26 2019 +0200 @@ -17,16 +17,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from twisted.internet import defer -if defer.Deferred.debug: - # if we are in debug mode, we want to use ipdb instead of pdb - try: - import ipdb - import pdb - pdb.set_trace = ipdb.set_trace - pdb.post_mortem = ipdb.post_mortem - except ImportError: - pass from zope.interface import implementer from twisted.python import usage @@ -56,9 +46,22 @@ description = _("%s XMPP client backend") % C.APP_NAME_FULL options = Options + def setDebugger(self): + from twisted.internet import defer + if defer.Deferred.debug: + # if we are in debug mode, we want to use ipdb instead of pdb + try: + import ipdb + import pdb + pdb.set_trace = ipdb.set_trace + pdb.post_mortem = ipdb.post_mortem + except ImportError: + pass + def makeService(self, options): from twisted.internet import gireactor gireactor.install() + self.setDebugger() # XXX: SAT must be imported after log configuration, because it write stuff to logs initialise(options.parent) from sat.core.sat_main import SAT