handle skipping controllers and confirmation in client/server calls

This commit is contained in:
Michael Hudson-Doyle 2020-09-23 14:54:55 +12:00
parent 9cb66cdc71
commit a78cd1a021
2 changed files with 18 additions and 1 deletions

View File

@ -318,6 +318,11 @@ class Subiquity(TuiApplication):
self.server_updated = headers['x-updated']
elif self.server_updated != headers['x-updated']:
self.restart(remove_last_screen=False)
status = response.headers.get('x-status')
if status == 'skip':
raise Skip
elif status == 'confirm':
raise Confirm
if headers.get('x-error-report') is not None:
ref = from_json(ErrorReportRef, headers['x-error-report'])
raise Abort(ref)

View File

@ -21,7 +21,10 @@ from aiohttp import web
from subiquitycore.core import Application
from subiquity.common.api.server import bind
from subiquity.common.api.server import (
bind,
controller_for_request,
)
from subiquity.common.apidef import API
from subiquity.common.errorreport import (
ErrorReportKind,
@ -32,6 +35,7 @@ from subiquity.common.types import (
ApplicationState,
ErrorReportRef,
)
from subiquity.server.controller import SubiquityController
from subiquity.server.errors import ErrorController
@ -83,6 +87,14 @@ class SubiquityServer(Application):
updated = 'yes'
else:
updated = 'no'
controller = await controller_for_request(request)
if isinstance(controller, SubiquityController):
if not controller.interactive():
return web.Response(
headers={'x-status': 'skip', 'x-updated': updated})
elif self.base_model.needs_confirmation(controller.model_name):
return web.Response(
headers={'x-status': 'confirm', 'x-updated': updated})
resp = await handler(request)
resp.headers['x-updated'] = updated
if resp.get('exception'):