make SubiquityModel objects easier to construct
So I can write a unittest more easily. This involves shuffling around how locale changes are done but as my new design document says the "controller also manages the relationship between the outside world and the model and views" this does make things more consistent.
This commit is contained in:
parent
03bf8d4b0a
commit
bdf33a2adf
|
@ -28,7 +28,7 @@ class ConsoleConf(Application):
|
|||
|
||||
project = "console_conf"
|
||||
|
||||
model_class = ConsoleConfModel
|
||||
make_model = ConsoleConfModel
|
||||
|
||||
controllers = [
|
||||
"Welcome",
|
||||
|
|
|
@ -14,9 +14,13 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
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):
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue