diff --git a/devdeck_core/controls/deck_control.py b/devdeck_core/controls/deck_control.py index 9d54f70..4bc634a 100644 --- a/devdeck_core/controls/deck_control.py +++ b/devdeck_core/controls/deck_control.py @@ -11,7 +11,7 @@ class DeckControlContextBlock(Exception): class DeckContextManager: - def __init__(self, deck_context, key_no): + def __init__(self, deck_context, key_no: int): self.deck_context = deck_context self.key_no = key_no @@ -23,7 +23,7 @@ def __enter__(self): else: return ControlContext(self.deck_context, self.key_no) - def trace(self, frame, event, arg): + def trace(self, frame, event, arg) -> DeckControlContextBlock: raise DeckControlContextBlock() def __exit__(self, type, value, traceback): @@ -40,25 +40,25 @@ def __init__(self, key_no, **kwargs): self.settings = kwargs self.validate_settings() - def set_deck_context(self, deck_context): + async def set_deck_context(self, deck_context): self.__deck_context = deck_context - def clear_deck_context(self): + async def clear_deck_context(self): self.__deck_context = None - def deck_context(self): + def deck_context(self) -> DeckContextManager: return DeckContextManager(self.__deck_context, self.__key_no) - def dispose(self): + async def dispose(self): pass - def initialize(self): + async def initialize(self): pass - def pressed(self): + async def pressed(self): pass - def released(self): + async def released(self): pass def settings_schema(self): diff --git a/devdeck_core/decks/deck_controller.py b/devdeck_core/decks/deck_controller.py index 9dd2bb7..2a1bd65 100644 --- a/devdeck_core/decks/deck_controller.py +++ b/devdeck_core/decks/deck_controller.py @@ -11,10 +11,10 @@ def __init__(self, key_no, **kwargs): super().__init__(key_no, **kwargs) self.deck_controls() - def clear_deck_context(self): + async def clear_deck_context(self): for key_no, control in self.controls.items(): - control.clear_deck_context() - super().clear_deck_context() + await control.clear_deck_context() + await super().clear_deck_context() def dispose(self): for key_no, control in self.controls.items(): @@ -26,40 +26,41 @@ def register_control(self, key_no, control_class, **settings): def deck_controls(self): pass - def render(self, deck_context): + async def render(self, deck_context): self.__logger.info("Rendering deck: %s", type(self).__name__) self.__deck_context = deck_context deck_context.reset_deck() for key_no, control in self.controls.items(): - control.set_deck_context(deck_context) + await control.set_deck_context(deck_context) try: - control.initialize() + await control.initialize() except Exception as ex: self.__logger.error("Key %s (%s) initialize() raised an unhandled exception: %s", key_no, type(self).__name__, str(ex)) + self.__logger.info("Rendering complete: %s", type(self).__name__) - def pressed(self, key_no): + async def pressed(self, key_no: int): if key_no not in self.controls: return if issubclass(type(self.controls[key_no]), DeckController): return self.__logger.info("Key %s pressed on %s", key_no, type(self).__name__) try: - self.controls[key_no].pressed() + await self.controls[key_no].pressed() except Exception as ex: self.__logger.error("Key %s (%s) pressed() raised an unhandled exception: %s", key_no, type(self).__name__, str(ex)) - def released(self, key_no): + async def released(self, key_no: int): if key_no not in self.controls: return if issubclass(type(self.controls[key_no]), DeckController): - self.__deck_context.set_active_deck(self.controls[key_no]) + await self.__deck_context.set_active_deck(self.controls[key_no]) return self.__logger.info("Key %s released on %s", key_no, type(self).__name__) try: - self.controls[key_no].released() + await self.controls[key_no].released() except Exception as ex: self.__logger.error("Key %s (%s) released() raised an unhandled exception: %s", key_no, type(self).__name__, str(ex)) - self.__deck_context.pop_active_deck() + await self.__deck_context.pop_active_deck() diff --git a/devdeck_core/renderer.py b/devdeck_core/renderer.py index b889c4f..5c8029f 100644 --- a/devdeck_core/renderer.py +++ b/devdeck_core/renderer.py @@ -29,16 +29,16 @@ def background_color(self, color): draw = ImageDraw.Draw(self.img) draw.rectangle((0, 0, self.img.width, self.img.height), fill=color) - def badge_count(self, count): + def badge_count(self, count) -> BadgeCountRenderer: return BadgeCountRenderer(self, count) - def emoji(self, emoji_name): + def emoji(self, emoji_name) -> EmojiRenderer: return EmojiRenderer(self, emoji_name) - def image(self, filename): + def image(self, filename) -> ImageRenderer: return ImageRenderer(self, filename) - def text(self, text): + def text(self, text) -> TextRenderer: return TextRenderer(self, text) def colorize(self, color): diff --git a/devdeck_core/rendering/badge_count_renderer.py b/devdeck_core/rendering/badge_count_renderer.py index 7f5916d..0741e46 100644 --- a/devdeck_core/rendering/badge_count_renderer.py +++ b/devdeck_core/rendering/badge_count_renderer.py @@ -4,7 +4,7 @@ class BadgeCountRenderer: - def __init__(self, renderer, count): + def __init__(self, renderer, count: int): self.renderer = renderer self.text = str(count) self.font_filename = os.path.abspath(os.path.join(os.path.dirname(__file__), "../assets", 'Roboto-Regular.ttf')) @@ -13,7 +13,7 @@ def __init__(self, renderer, count): self.circle_size = 192 self.corner_offset = 30 - def font_size(self, size): + def font_size(self, size: int): self._font_size = size return self diff --git a/devdeck_core/rendering/emoji_renderer.py b/devdeck_core/rendering/emoji_renderer.py index 0a9b036..25c15f0 100644 --- a/devdeck_core/rendering/emoji_renderer.py +++ b/devdeck_core/rendering/emoji_renderer.py @@ -6,7 +6,7 @@ class EmojiRenderer: - def __init__(self, renderer, emoji_name): + def __init__(self, renderer, emoji_name: str): self.renderer = renderer self.emoji_name = emoji_name.replace(':', '') self.center_vertical = None @@ -22,11 +22,11 @@ def y(self, y): self._y = y return self - def center_vertically(self, offset=0): + def center_vertically(self, offset: int = 0): self.center_vertical = offset return self - def center_horizontally(self, offset=0): + def center_horizontally(self, offset: int = 0): self.center_horizontal = offset return self diff --git a/devdeck_core/rendering/image_renderer.py b/devdeck_core/rendering/image_renderer.py index abb8368..6200691 100644 --- a/devdeck_core/rendering/image_renderer.py +++ b/devdeck_core/rendering/image_renderer.py @@ -2,7 +2,7 @@ class ImageRenderer: - def __init__(self, renderer, filename): + def __init__(self, renderer, filename: str): self.renderer = renderer self.filename = filename self._x = 0 @@ -12,27 +12,27 @@ def __init__(self, renderer, filename): self.center_vertical = None self.center_horizontal = None - def x(self, x): + def x(self, x: int): self._x = x return self - def y(self, y): + def y(self, y: int): self._y = y return self - def center_vertically(self, offset=0): + def center_vertically(self, offset: int = 0): self.center_vertical = offset return self - def center_horizontally(self, offset=0): + def center_horizontally(self, offset: int = 0): self.center_horizontal = offset return self - def height(self, h): + def height(self, h: int): self._height = h return self - def width(self, w): + def width(self, w: int): self._width = w return self diff --git a/devdeck_core/rendering/text_renderer.py b/devdeck_core/rendering/text_renderer.py index f3dc8e6..2847e58 100644 --- a/devdeck_core/rendering/text_renderer.py +++ b/devdeck_core/rendering/text_renderer.py @@ -4,7 +4,7 @@ class TextRenderer: - def __init__(self, renderer, text): + def __init__(self, renderer, text: str): self.renderer = renderer self.text = text self.font_filename = os.path.abspath(os.path.join(os.path.dirname(__file__), "../assets", 'Roboto-Regular.ttf')) @@ -24,23 +24,23 @@ def y(self, y): self._y = y return self - def center_vertically(self, offset=0): + def center_vertically(self, offset: int = 0): self.center_vertical = offset return self - def center_horizontally(self, offset=0): + def center_horizontally(self, offset: int = 0): self.center_horizontal = offset return self - def font_size(self, size): + def font_size(self, size: int): self._font_size = size return self - def color(self, color): + def color(self, color: str): self.fill = color return self - def text_align(self, align): + def text_align(self, align: str): self.align = align return self