From c264884c0c2996009f543550ee604316ad3930be Mon Sep 17 00:00:00 2001 From: Michael Hudson-Doyle Date: Mon, 12 Oct 2020 12:27:57 +1300 Subject: [PATCH] move proxy controller to new world --- po/POTFILES.in | 3 +- subiquity/client/client.py | 1 + subiquity/client/controllers/__init__.py | 2 + subiquity/client/controllers/proxy.py | 41 +++++++++++++++++++++ subiquity/common/apidef.py | 1 + subiquity/controllers/__init__.py | 2 - subiquity/server/controllers/__init__.py | 2 + subiquity/{ => server}/controllers/proxy.py | 37 +++++++------------ subiquity/server/server.py | 1 + 9 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 subiquity/client/controllers/proxy.py rename subiquity/{ => server}/controllers/proxy.py (68%) diff --git a/po/POTFILES.in b/po/POTFILES.in index 8928e048..2815ed1e 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -5,6 +5,7 @@ subiquity/client/controllers/__init__.py subiquity/client/controllers/keyboard.py subiquity/client/controllers/network.py subiquity/client/controllers/progress.py +subiquity/client/controllers/proxy.py subiquity/client/controllers/refresh.py subiquity/client/controllers/welcome.py subiquity/client/controllers/zdev.py @@ -36,7 +37,6 @@ subiquity/controllers/filesystem.py subiquity/controllers/identity.py subiquity/controllers/__init__.py subiquity/controllers/mirror.py -subiquity/controllers/proxy.py subiquity/controllers/reboot.py subiquity/controllers/snaplist.py subiquity/controllers/ssh.py @@ -124,6 +124,7 @@ subiquity/server/controllers/keyboard.py subiquity/server/controllers/locale.py subiquity/server/controllers/network.py subiquity/server/controllers/package.py +subiquity/server/controllers/proxy.py subiquity/server/controllers/refresh.py subiquity/server/controllers/reporting.py subiquity/server/controllers/userdata.py diff --git a/subiquity/client/client.py b/subiquity/client/client.py index f0077e2a..6c2ec317 100644 --- a/subiquity/client/client.py +++ b/subiquity/client/client.py @@ -95,6 +95,7 @@ class SubiquityClient(TuiApplication): "Keyboard", "Zdev", "Network", + "Proxy", "Progress", ] diff --git a/subiquity/client/controllers/__init__.py b/subiquity/client/controllers/__init__.py index b735f127..90ebbb2b 100644 --- a/subiquity/client/controllers/__init__.py +++ b/subiquity/client/controllers/__init__.py @@ -16,6 +16,7 @@ from .keyboard import KeyboardController from .network import NetworkController from .progress import ProgressController +from .proxy import ProxyController from .refresh import RefreshController from .welcome import WelcomeController from .zdev import ZdevController @@ -24,6 +25,7 @@ __all__ = [ 'KeyboardController', 'NetworkController', 'ProgressController', + 'ProxyController', 'RefreshController', 'WelcomeController', 'ZdevController', diff --git a/subiquity/client/controllers/proxy.py b/subiquity/client/controllers/proxy.py new file mode 100644 index 00000000..0223b04a --- /dev/null +++ b/subiquity/client/controllers/proxy.py @@ -0,0 +1,41 @@ +# Copyright 2018 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 . + +import logging + +from subiquity.client.controller import SubiquityTuiController +from subiquity.ui.views.proxy import ProxyView + +log = logging.getLogger('subiquity.client.controllers.proxy') + + +class ProxyController(SubiquityTuiController): + + endpoint_name = 'proxy' + + async def make_ui(self): + proxy = await self.endpoint.GET() + return ProxyView(self, proxy) + + def run_answers(self): + if 'proxy' in self.answers: + self.done(self.answers['proxy']) + + def cancel(self): + self.app.prev_screen() + + def done(self, proxy): + log.debug("ProxyController.done next_screen proxy=%s", proxy) + self.app.next_screen(self.endpoint.POST(proxy)) diff --git a/subiquity/common/apidef.py b/subiquity/common/apidef.py index 119a31c7..ea387d9c 100644 --- a/subiquity/common/apidef.py +++ b/subiquity/common/apidef.py @@ -40,6 +40,7 @@ class API: """The API offered by the subiquity installer process.""" locale = simple_endpoint(str) keyboard = simple_endpoint(KeyboardSetting) + proxy = simple_endpoint(str) class meta: class status: diff --git a/subiquity/controllers/__init__.py b/subiquity/controllers/__init__.py index 98ce9e2c..323decc6 100644 --- a/subiquity/controllers/__init__.py +++ b/subiquity/controllers/__init__.py @@ -17,7 +17,6 @@ from ..controller import RepeatedController from .filesystem import FilesystemController from .identity import IdentityController from .mirror import MirrorController -from .proxy import ProxyController from .reboot import RebootController from .snaplist import SnapListController from .ssh import SSHController @@ -26,7 +25,6 @@ __all__ = [ 'FilesystemController', 'IdentityController', 'MirrorController', - 'ProxyController', 'RebootController', 'RepeatedController', 'SnapListController', diff --git a/subiquity/server/controllers/__init__.py b/subiquity/server/controllers/__init__.py index 637e3ce0..4077233c 100644 --- a/subiquity/server/controllers/__init__.py +++ b/subiquity/server/controllers/__init__.py @@ -20,6 +20,7 @@ from .keyboard import KeyboardController from .locale import LocaleController from .network import NetworkController from .package import PackageController +from .proxy import ProxyController from .refresh import RefreshController from .reporting import ReportingController from .userdata import UserdataController @@ -35,6 +36,7 @@ __all__ = [ 'LocaleController', 'NetworkController', 'PackageController', + 'ProxyController', 'RefreshController', 'ReportingController', 'UserdataController', diff --git a/subiquity/controllers/proxy.py b/subiquity/server/controllers/proxy.py similarity index 68% rename from subiquity/controllers/proxy.py rename to subiquity/server/controllers/proxy.py index a61524c8..5e61a913 100644 --- a/subiquity/controllers/proxy.py +++ b/subiquity/server/controllers/proxy.py @@ -18,13 +18,15 @@ import os from subiquitycore.context import with_context -from subiquity.controller import SubiquityTuiController -from subiquity.ui.views.proxy import ProxyView +from subiquity.common.apidef import API +from subiquity.server.controller import SubiquityController -log = logging.getLogger('subiquity.controllers.proxy') +log = logging.getLogger('subiquity.server.controllers.proxy') -class ProxyController(SubiquityTuiController): +class ProxyController(SubiquityController): + + endpoint = API.proxy autoinstall_key = model_name = "proxy" autoinstall_schema = { @@ -48,30 +50,19 @@ class ProxyController(SubiquityTuiController): # by everything; don't have a way to do that today. pass - def make_ui(self): - return ProxyView(self, self.model.proxy) - - def run_answers(self): - if 'proxy' in self.answers: - self.done(self.answers['proxy']) - - def cancel(self): - self.app.prev_screen() - def serialize(self): return self.model.proxy def deserialize(self, data): self.model.proxy = data - def done(self, proxy): - log.debug("ProxyController.done next_screen proxy=%s", proxy) - if proxy != self.model.proxy: - self.model.proxy = proxy - os.environ['http_proxy'] = os.environ['https_proxy'] = proxy - self.signal.emit_signal('network-proxy-set') - self.configured() - self.app.next_screen() - def make_autoinstall(self): return self.model.proxy + + async def GET(self) -> str: + return self.model.proxy + + async def POST(self, data: str): + self.model.proxy = data + self.signal.emit_signal('network-proxy-set') + self.configured() diff --git a/subiquity/server/server.py b/subiquity/server/server.py index 179ccc32..55213331 100644 --- a/subiquity/server/server.py +++ b/subiquity/server/server.py @@ -123,6 +123,7 @@ class SubiquityServer(Application): "Keyboard", "Zdev", "Network", + "Proxy", "Install", "Late", ]