From 67b3887bc8ab87d7a35c88070e4ef419b06b5af0 Mon Sep 17 00:00:00 2001 From: onyx-and-iris Date: Sun, 22 Feb 2026 14:33:48 +0000 Subject: [PATCH] should we get a ValueError when requesting a lottery object allow it to bubble up. patch bump --- pdm.lock | 43 +++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 4 ++-- src/lottery_tui/tui.py | 36 +++++++++++++++++++++++------------ 3 files changed, 68 insertions(+), 15 deletions(-) diff --git a/pdm.lock b/pdm.lock index 0f3fcc2..84e558d 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,11 +5,23 @@ groups = ["default"] strategy = ["inherit_metadata"] lock_version = "4.5.0" -content_hash = "sha256:842afa14523f463c1a73e53c7aeb6d697673d95a2db9adbf935807b1fe5d021a" +content_hash = "sha256:6cd4ed6668a18d93170023df0e7cf183ac36d04df220f4dcb4c091eb6623b65f" [[metadata.targets]] requires_python = "==3.13.*" +[[package]] +name = "colorama" +version = "0.4.6" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +summary = "Cross-platform colored terminal text." +groups = ["default"] +marker = "sys_platform == \"win32\" and python_version == \"3.13\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + [[package]] name = "linkify-it-py" version = "2.0.3" @@ -25,6 +37,23 @@ files = [ {file = "linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79"}, ] +[[package]] +name = "loguru" +version = "0.7.3" +requires_python = "<4.0,>=3.5" +summary = "Python logging made (stupidly) simple" +groups = ["default"] +marker = "python_version == \"3.13\"" +dependencies = [ + "aiocontextvars>=0.2.0; python_version < \"3.7\"", + "colorama>=0.3.4; sys_platform == \"win32\"", + "win32-setctime>=1.0.0; sys_platform == \"win32\"", +] +files = [ + {file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"}, + {file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"}, +] + [[package]] name = "markdown-it-py" version = "4.0.0" @@ -167,3 +196,15 @@ files = [ {file = "uc-micro-py-1.0.3.tar.gz", hash = "sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a"}, {file = "uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5"}, ] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +requires_python = ">=3.5" +summary = "A small Python utility to set file creation time on Windows" +groups = ["default"] +marker = "sys_platform == \"win32\" and python_version == \"3.13\"" +files = [ + {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, + {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, +] diff --git a/pyproject.toml b/pyproject.toml index 5a05055..5a0afac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,9 @@ [project] name = "lottery-tui" -version = "0.2.3" +version = "0.2.4" description = "A terminal user interface for lottery games." authors = [{ name = "onyx-and-iris", email = "code@onyxandiris.online" }] -dependencies = ["textual>=8.0.0"] +dependencies = ["textual>=8.0.0", "loguru>=0.7.3"] requires-python = ">=3.10" readme = "README.md" license = { text = "MIT" } diff --git a/src/lottery_tui/tui.py b/src/lottery_tui/tui.py index fd57168..3d1ed88 100644 --- a/src/lottery_tui/tui.py +++ b/src/lottery_tui/tui.py @@ -1,3 +1,5 @@ +from loguru import logger +from rich.text import Text from textual.app import App, ComposeResult from textual.containers import Container from textual.widgets import Button, Label, Select, Static @@ -37,21 +39,31 @@ class LotteryTUI(App): def on_button_pressed(self, event): """Handle button press events.""" if event.button.id == 'draw-button': - if self.query_one('#lottery-select').is_blank(): - self.query_one('#result-label').update( - 'Please select a lottery before drawing.' - ) - return + self._draw_button_handler() - selected_lottery = self.query_one('#lottery-select').value + def _draw_button_handler(self): + """Handle the draw button press.""" + if self.query_one('#lottery-select').is_blank(): + self._update_result_label( + Text('Please select a lottery before drawing.', style='bold #ff8c42') + ) + return - try: - lottery_obj = request_lottery_obj(selected_lottery) - result = lottery_obj.draw() - except ValueError as e: - self.query_one('#result-label').update(str(e)) + selected_lottery = self.query_one('#lottery-select').value - self.query_one('#result-label').update(str(result)) + try: + lottery_obj = request_lottery_obj(selected_lottery) + except ValueError: + ERR_MSG = f'Invalid lottery selection: {selected_lottery}' + logger.exception(ERR_MSG) + raise + + result = lottery_obj.draw() + self._update_result_label(str(result)) + + def _update_result_label(self, message: str): + """Update the result label with a new message.""" + self.query_one('#result-label').update(message) def main():