diff --git a/console_conf/core.py b/console_conf/core.py index 3db4ce5b..8897fcc0 100644 --- a/console_conf/core.py +++ b/console_conf/core.py @@ -28,7 +28,7 @@ class ConsoleConf(Application): project = "console_conf" - model_class = ConsoleConfModel + make_model = ConsoleConfModel controllers = [ "Welcome", diff --git a/subiquity/controllers/welcome.py b/subiquity/controllers/welcome.py index eaa55c31..7862864c 100644 --- a/subiquity/controllers/welcome.py +++ b/subiquity/controllers/welcome.py @@ -14,9 +14,13 @@ # along with this program. If not, see . import logging +import os + from subiquitycore.controller import BaseController + from subiquity.ui.views import WelcomeView + log = logging.getLogger('subiquity.controllers.welcome') @@ -28,15 +32,24 @@ class WelcomeController(BaseController): self.answers = self.all_answers.get("Welcome", {}) log.debug("Welcome: answers=%s", self.answers) + def start(self): + lang = os.environ.get("LANG") + if lang.endswith(".UTF-8"): + lang = lang.rsplit('.', 1)[0] + for code, name in self.model.supported_languages: + if code == lang: + self.model.switch_language(code) + def default(self): view = WelcomeView(self.model, self) self.ui.set_body(view) if 'lang' in self.answers: - self.model.switch_language(self.answers['lang']) - self.done() + self.done(self.answers['lang']) - def done(self): - log.debug("WelcomeController.done next-screen") + def done(self, code): + log.debug("WelcomeController.done %s next-screen") + self.signal.emit_signal('l10n:language-selected', code) + self.model.switch_language(code) self.signal.emit_signal('next-screen') def cancel(self): diff --git a/subiquity/core.py b/subiquity/core.py index 5f0d4edd..a3bb5b7f 100644 --- a/subiquity/core.py +++ b/subiquity/core.py @@ -36,7 +36,11 @@ class Subiquity(Application): project = "subiquity" - model_class = SubiquityModel + def make_model(self, common): + root = '/' + if common['opts'].dry_run: + root = os.path.abspath('.subiquity') + return SubiquityModel(root, common['opts'].sources) controllers = [ "Welcome", diff --git a/subiquity/models/locale.py b/subiquity/models/locale.py index efe157d5..57c17824 100644 --- a/subiquity/models/locale.py +++ b/subiquity/models/locale.py @@ -15,9 +15,10 @@ import gettext import logging -import os + from subiquitycore import i18n + log = logging.getLogger('subiquity.models.locale') @@ -48,15 +49,6 @@ class LocaleModel(object): ] selected_language = None - def __init__(self, signal): - self.signal = signal - lang = os.environ.get("LANG") - if lang.endswith(".UTF-8"): - lang = lang.rsplit('.', 1)[0] - for code, name in self.supported_languages: - if code == lang: - self.switch_language(code) - def get_languages(self): languages = [] for code, name in self.supported_languages: @@ -70,7 +62,6 @@ class LocaleModel(object): def switch_language(self, code): self.selected_language = code - self.signal.emit_signal('l10n:language-selected', code) i18n.switch_language(code) def __repr__(self): diff --git a/subiquity/models/subiquity.py b/subiquity/models/subiquity.py index 05f8fc66..d4766f5f 100644 --- a/subiquity/models/subiquity.py +++ b/subiquity/models/subiquity.py @@ -68,18 +68,16 @@ class SubiquityModel: target = '/target' - def __init__(self, common): - self.root = '/' - self.opts = common['opts'] - if self.opts.dry_run: - self.root = os.path.abspath(".subiquity") - self.target = self.root + def __init__(self, root, sources=()): + self.root = root + if root != '/': + self.target = root - self.locale = LocaleModel(common['signal']) + self.locale = LocaleModel() self.keyboard = KeyboardModel(self.root) self.installpath = InstallpathModel( target=self.target, - sources=common['opts'].sources) + sources=sources) self.network = NetworkModel(support_wlan=False) self.proxy = ProxyModel() self.mirror = MirrorModel() @@ -101,7 +99,7 @@ class SubiquityModel: def get_target_groups(self): command = ['chroot', self.target, 'getent', 'group'] - if self.opts.dry_run: + if self.root != '/': del command[:2] cp = run_command(command, check=True) groups = set() diff --git a/subiquity/ui/views/tests/test_welcome.py b/subiquity/ui/views/tests/test_welcome.py index db4c3450..adc28059 100644 --- a/subiquity/ui/views/tests/test_welcome.py +++ b/subiquity/ui/views/tests/test_welcome.py @@ -24,8 +24,7 @@ class WelcomeViewTests(unittest.TestCase): view = self.make_view_with_languages([('code', 'native')]) but = view_helpers.find_button_matching(view, "^native$") view_helpers.click(but) - view.model.switch_language.assert_called_once_with("code") - view.controller.done.assert_called_once_with() + view.controller.done.assert_called_once_with('code') def test_initial_focus(self): # The initial focus for the view is the button for the first diff --git a/subiquity/ui/views/welcome.py b/subiquity/ui/views/welcome.py index bf10462f..67d2a599 100644 --- a/subiquity/ui/views/welcome.py +++ b/subiquity/ui/views/welcome.py @@ -56,6 +56,5 @@ class WelcomeView(BaseView): return lb def confirm(self, sender, code): - self.model.switch_language(code) - log.debug('calling installpath') - self.controller.done() + log.debug('WelcomeController %s', code) + self.controller.done(code) diff --git a/subiquitycore/core.py b/subiquitycore/core.py index b8ed3652..f095174a 100644 --- a/subiquitycore/core.py +++ b/subiquitycore/core.py @@ -477,7 +477,7 @@ class Application: log.debug("Running event loop: {}".format( self.common['loop'].event_loop)) - self.common['base_model'] = self.model_class(self.common) + self.common['base_model'] = self.make_model(self.common) try: if self.common['opts'].scripts: self.run_scripts(self.common['opts'].scripts) diff --git a/subiquitycore/i18n.py b/subiquitycore/i18n.py index b9740423..ed4f6643 100644 --- a/subiquitycore/i18n.py +++ b/subiquitycore/i18n.py @@ -29,6 +29,7 @@ syslog.syslog('Final localedir is ' + localedir) def switch_language(code='en_US'): + syslog.syslog('switch_language ' + code) fake_trans = os.environ.get("FAKE_TRANSLATE", "0") if code != 'en_US' and fake_trans == "mangle": def my_gettext(message):