split welcome controller into locale (server) and welcome (client)

This commit is contained in:
Michael Hudson-Doyle 2020-10-09 21:25:24 +13:00
parent 3c30e14313
commit 3367b41cf1
10 changed files with 73 additions and 40 deletions

View File

@ -3,6 +3,7 @@ subiquity/client/client.py
subiquity/client/controller.py
subiquity/client/controllers/__init__.py
subiquity/client/controllers/progress.py
subiquity/client/controllers/welcome.py
subiquity/client/__init__.py
subiquity/client/keycodes.py
subiquity/cmd/common.py
@ -45,7 +46,6 @@ subiquity/controllers/ssh.py
subiquity/controllers/tests/__init__.py
subiquity/controllers/tests/test_filesystem.py
subiquity/controllers/userdata.py
subiquity/controllers/welcome.py
subiquity/controllers/zdev.py
subiquitycore/async_helpers.py
subiquitycore/contextlib38.py
@ -124,6 +124,7 @@ subiquity/models/tests/test_subiquity.py
subiquity/server/controller.py
subiquity/server/controllers/__init__.py
subiquity/server/controllers/install.py
subiquity/server/controllers/locale.py
subiquity/server/dryrun.py
subiquity/server/errors.py
subiquity/server/__init__.py

View File

@ -90,6 +90,7 @@ class SubiquityClient(TuiApplication):
return SubiquityUI(self, self.help_menu)
controllers = [
"Welcome",
"Progress",
]

View File

@ -14,7 +14,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from .progress import ProgressController
from .welcome import WelcomeController
__all__ = [
'ProgressController',
'WelcomeController',
]

View File

@ -0,0 +1,48 @@
# Copyright 2015 Canonical, Ltd.
#
# 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 <http://www.gnu.org/licenses/>.
import logging
from subiquity.client.controller import SubiquityTuiController
from subiquity.ui.views.welcome import WelcomeView
log = logging.getLogger('subiquity.client.controllers.welcome')
class WelcomeController(SubiquityTuiController):
endpoint_name = 'locale'
async def make_ui(self):
language = await self.endpoint.GET()
serial = self.app.opts.run_on_serial
if serial:
ips = await self.app.client.network.global_addresses.GET()
else:
ips = None
return WelcomeView(self, language, serial, ips)
def run_answers(self):
if 'lang' in self.answers:
self.done(self.answers['lang'])
def done(self, code):
log.debug("WelcomeController.done %s next_screen", code)
self.signal.emit_signal('l10n:language-selected', code)
self.app.next_screen(self.endpoint.POST(code))
def cancel(self):
# Can't go back from here!
pass

View File

@ -15,7 +15,7 @@
from typing import List, Optional
from subiquity.common.api.defs import api
from subiquity.common.api.defs import api, simple_endpoint
from subiquity.common.types import (
ApplicationState,
ApplicationStatus,
@ -28,6 +28,7 @@ from subiquity.common.types import (
@api
class API:
"""The API offered by the subiquity installer process."""
locale = simple_endpoint(str)
class meta:
class status:

View File

@ -30,7 +30,6 @@ from .reporting import ReportingController
from .snaplist import SnapListController
from .ssh import SSHController
from .userdata import UserdataController
from .welcome import WelcomeController
from .zdev import ZdevController
__all__ = [
@ -52,6 +51,5 @@ __all__ = [
'SnapListController',
'SSHController',
'UserdataController',
'WelcomeController',
'ZdevController',
]

View File

@ -14,7 +14,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from .install import InstallController
from .locale import LocaleController
__all__ = [
'InstallController',
'LocaleController',
]

View File

@ -16,15 +16,16 @@
import logging
import os
from subiquity.controller import SubiquityTuiController
from subiquity.ui.views.welcome import get_languages, WelcomeView
from subiquity.ui.views.help import get_global_addresses
from subiquity.common.apidef import API
from subiquity.server.controller import SubiquityController
log = logging.getLogger('subiquity.controllers.welcome')
log = logging.getLogger('subiquity.server.controllers.locale')
class WelcomeController(SubiquityTuiController):
class LocaleController(SubiquityController):
endpoint = API.locale
autoinstall_key = model_name = "locale"
autoinstall_schema = {'type': 'string'}
@ -40,37 +41,8 @@ class WelcomeController(SubiquityTuiController):
lang = os.environ.get("LANG")
if lang is not None and lang.endswith(".UTF-8"):
lang = lang.rsplit('.', 1)[0]
for code, name in get_languages():
if code == lang:
self.model.switch_language(code)
break
else:
self.model.selected_language = lang
def make_ui(self):
language = self.model.selected_language
serial = self.app.opts.run_on_serial
if serial:
ips = get_global_addresses(self.app)
else:
ips = None
return WelcomeView(self, language, serial, ips)
def run_answers(self):
if 'lang' in self.answers:
self.done(self.answers['lang'])
def done(self, code):
log.debug("WelcomeController.done %s next_screen", code)
self.signal.emit_signal('l10n:language-selected', code)
self.model.switch_language(code)
self.configured()
self.app.next_screen()
def cancel(self):
# Can't go back from here!
pass
def serialize(self):
return self.model.selected_language
@ -79,3 +51,10 @@ class WelcomeController(SubiquityTuiController):
def make_autoinstall(self):
return self.model.selected_language
async def GET(self) -> str:
return self.model.selected_language
async def POST(self, data: str):
self.model.switch_language(data)
self.configured()

View File

@ -112,6 +112,7 @@ class SubiquityServer(Application):
project = "subiquity"
from subiquity.server import controllers as controllers_mod
controllers = [
"Locale",
"Install",
]

View File

@ -4,7 +4,7 @@ import urwid
from subiquitycore.testing import view_helpers
from subiquity.controllers.welcome import WelcomeController
from subiquity.client.controllers.welcome import WelcomeController
from subiquity.ui.views.welcome import WelcomeView