diff --git a/subiquity/controllers/__init__.py b/subiquity/controllers/__init__.py index 9bc03222..6937175e 100644 --- a/subiquity/controllers/__init__.py +++ b/subiquity/controllers/__init__.py @@ -14,13 +14,8 @@ # along with this program. If not, see . import logging -import asyncio import urwid import urwid.curses_display -if urwid.version.VERSION >= (1, 3, 0): - from urwid import AsyncioEventLoop -else: - from subiquity.loop_shim import AsyncioEventLoop from subiquity.routes import Routes from subiquity.palette import STYLES, STYLES_MONO @@ -51,17 +46,15 @@ class BaseController: try: self.loop.draw_screen() except AssertionError as e: - log.critical(e) + log.critical("Redraw screen error: {}".format(e)) def set_alarm_in(self, interval, cb): self.loop.set_alarm_in(interval, cb) return def update(self, *args, **kwds): - route = Routes.current_idx() - if route == 0: - self.begin() - self.set_alarm_in(1, self.update) + """ Update loop """ + pass def exit(self): raise urwid.ExitMainLoop() @@ -96,23 +89,18 @@ class BaseController: else: additional_opts['screen'].set_terminal_properties(colors=256) additional_opts['screen'].reset_default_terminal_palette() - additional_opts['event_loop'] = AsyncioEventLoop( - loop=asyncio.get_event_loop()) self.loop = urwid.MainLoop( self.ui, palette, **additional_opts) try: - if self.opts.run_on_serial: - self.loop.screen.start() - - self.begin() + self.set_alarm_in(0.05, self.begin) self.loop.run() except: log.exception("Exception in controller.run():") raise - def begin(self): + def begin(self, *args, **kwargs): """ Initializes the first controller for installation """ Routes.reset() initial_controller = Routes.first() diff --git a/subiquity/loop_shim.py b/subiquity/loop_shim.py deleted file mode 100644 index 4ba3370f..00000000 --- a/subiquity/loop_shim.py +++ /dev/null @@ -1,131 +0,0 @@ -# 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 . - -import logging -from urwid.main_loop import ExitMainLoop - -log = logging.getLogger('subiquity.loop_shim') - - -class AsyncioEventLoop(object): - """ - Event loop based on the standard library ``asyncio`` module. - ``asyncio`` is new in Python 3.4, but also exists as a backport on PyPI for - Python 3.3. The ``trollius`` package is available for older Pythons with - slightly different syntax, but also works with this loop. - """ - _we_started_event_loop = False - - _idle_emulation_delay = 1.0 / 256 # a short time (in seconds) - - def __init__(self, **kwargs): - log.debug("Running the AsyncioEventLoop shim because current " - "version of urwid < 1.3.0") - if 'loop' in kwargs: - self._loop = kwargs.pop('loop') - else: - import asyncio - self._loop = asyncio.get_event_loop() - - def alarm(self, seconds, callback): - """ - Call callback() a given time from now. No parameters are - passed to callback. - Returns a handle that may be passed to remove_alarm() - seconds -- time in seconds to wait before calling callback - callback -- function to call from event loop - """ - return self._loop.call_later(seconds, callback) - - def remove_alarm(self, handle): - """ - Remove an alarm. - Returns True if the alarm exists, False otherwise - """ - existed = not handle._cancelled - handle.cancel() - return existed - - def watch_file(self, fd, callback): - """ - Call callback() when fd has some data to read. No parameters - are passed to callback. - Returns a handle that may be passed to remove_watch_file() - fd -- file descriptor to watch for input - callback -- function to call when input is available - """ - self._loop.add_reader(fd, callback) - return fd - - def remove_watch_file(self, handle): - """ - Remove an input file. - Returns True if the input file exists, False otherwise - """ - return self._loop.remove_reader(handle) - - def enter_idle(self, callback): - """ - Add a callback for entering idle. - Returns a handle that may be passed to remove_idle() - """ - # XXX there's no such thing as "idle" in most event loops; this fakes - # it the same way as Twisted, by scheduling the callback to be called - # repeatedly - mutable_handle = [None] - - def faux_idle_callback(): - callback() - mutable_handle[0] = self._loop.call_later( - self._idle_emulation_delay, faux_idle_callback) - - mutable_handle[0] = self._loop.call_later( - self._idle_emulation_delay, faux_idle_callback) - - return mutable_handle - - def remove_enter_idle(self, handle): - """ - Remove an idle callback. - Returns True if the handle was removed. - """ - # `handle` is just a list containing the current actual handle - return self.remove_alarm(handle[0]) - - _exc_info = None - - def _exception_handler(self, loop, context): - exc = context.get('exception') - if exc: - loop.stop() - if not isinstance(exc, ExitMainLoop): - # Store the exc_info so we can re-raise after the loop stops - import sys - self._exc_info = sys.exc_info() - else: - loop.default_exception_handler(context) - - def run(self): - """ - Start the event loop. Exit the loop when any callback raises - an exception. If ExitMainLoop is raised, exit cleanly. - """ - self._loop.set_exception_handler(self._exception_handler) - self._loop.run_forever() - if self._exc_info: - raise Exception(self._exc_info[0], - self._exc_info[1], - self._exc_info[2]) - self._exc_info = None diff --git a/subiquity/ui/anchors.py b/subiquity/ui/anchors.py index 785fd5e4..7acd5bd1 100644 --- a/subiquity/ui/anchors.py +++ b/subiquity/ui/anchors.py @@ -27,7 +27,7 @@ class Header(WidgetWrap): :returns: Header() """ - def __init__(self, title="Ubuntu Server Installer", excerpt=""): + def __init__(self, title="", excerpt=""): title_widget = Padding.center_79(Color.body(Text(title))) excerpt_widget = Padding.center_79(Color.body(Text(excerpt))) pile = Pile([Text(""), @@ -58,10 +58,6 @@ class Body(WidgetWrap): def __init__(self): text = [ Padding.line_break(""), - Padding.center_79( - Text("Welcome to the Ubuntu Server Installation", - align="center")), - Padding.line_break("") ] w = (SimpleList(text)) super().__init__(w)