From 976cf18247bb4ecb287d72ca8b08b5816ef267c2 Mon Sep 17 00:00:00 2001 From: Roman Trapeznikov Date: Thu, 21 May 2020 19:20:29 +0300 Subject: [PATCH] Exceptions typing in bastd ui --- .../python/bastd/ui/account/settings.py | 6 ++--- .../ba_data/python/bastd/ui/colorpicker.py | 4 +-- .../ba_data/python/bastd/ui/coop/browser.py | 2 +- assets/src/ba_data/python/bastd/ui/gather.py | 9 +++---- .../src/ba_data/python/bastd/ui/mainmenu.py | 27 +++++++++---------- assets/src/ba_data/python/bastd/ui/play.py | 2 +- .../python/bastd/ui/playlist/__init__.py | 2 +- .../python/bastd/ui/playlist/browser.py | 2 +- .../python/bastd/ui/playlist/editgame.py | 10 +++---- .../ba_data/python/bastd/ui/playoptions.py | 2 +- assets/src/ba_data/python/bastd/ui/popup.py | 6 ++--- .../ba_data/python/bastd/ui/profile/edit.py | 2 +- .../src/ba_data/python/bastd/ui/purchase.py | 2 +- .../python/bastd/ui/settings/advanced.py | 4 +-- .../python/bastd/ui/settings/allsettings.py | 2 +- .../ba_data/python/bastd/ui/settings/audio.py | 2 +- .../python/bastd/ui/settings/testing.py | 2 +- .../python/bastd/ui/soundtrack/browser.py | 2 +- .../ba_data/python/bastd/ui/store/browser.py | 2 +- .../python/bastd/ui/tournamententry.py | 2 +- assets/src/ba_data/python/bastd/ui/watch.py | 2 +- 21 files changed, 45 insertions(+), 49 deletions(-) diff --git a/assets/src/ba_data/python/bastd/ui/account/settings.py b/assets/src/ba_data/python/bastd/ui/account/settings.py index 3bbd23f9..c20a8d28 100644 --- a/assets/src/ba_data/python/bastd/ui/account/settings.py +++ b/assets/src/ba_data/python/bastd/ui/account/settings.py @@ -627,8 +627,8 @@ class AccountSettingsWindow(ba.Window): elif account_type == 'Game Circle': account_type_name = ba.Lstr(resource='gameCircleText') else: - raise Exception("unknown account type: '" + str(account_type) + - "'") + raise ValueError("unknown account type: '" + str(account_type) + + "'") self._game_service_button = btn = ba.buttonwidget( parent=self._subcontainer, position=((self._sub_width - button_width) * 0.5, v), @@ -1105,7 +1105,7 @@ class AccountSettingsWindow(ba.Window): elif sel == self._scrollwidget: sel_name = 'Scroll' else: - raise Exception('unrecognized selection') + raise ValueError('unrecognized selection') ba.app.window_states[self.__class__.__name__] = sel_name except Exception: ba.print_exception('exception saving state for', self.__class__) diff --git a/assets/src/ba_data/python/bastd/ui/colorpicker.py b/assets/src/ba_data/python/bastd/ui/colorpicker.py index eb070aaf..c9133de0 100644 --- a/assets/src/ba_data/python/bastd/ui/colorpicker.py +++ b/assets/src/ba_data/python/bastd/ui/colorpicker.py @@ -50,7 +50,7 @@ class ColorPicker(popup.PopupWindow): c_raw = get_player_colors() if len(c_raw) != 16: - raise Exception('expected 16 player colors') + raise ValueError('expected 16 player colors') self.colors = [c_raw[0:4], c_raw[4:8], c_raw[8:12], c_raw[12:16]] if scale is None: @@ -189,7 +189,7 @@ class ColorPickerExact(popup.PopupWindow): from ba.internal import get_player_colors c_raw = get_player_colors() if len(c_raw) != 16: - raise Exception('expected 16 player colors') + raise ValueError('expected 16 player colors') self.colors = [c_raw[0:4], c_raw[4:8], c_raw[8:12], c_raw[12:16]] if scale is None: diff --git a/assets/src/ba_data/python/bastd/ui/coop/browser.py b/assets/src/ba_data/python/bastd/ui/coop/browser.py index bc5b7d7a..8bf89822 100644 --- a/assets/src/ba_data/python/bastd/ui/coop/browser.py +++ b/assets/src/ba_data/python/bastd/ui/coop/browser.py @@ -1555,7 +1555,7 @@ class CoopBrowserWindow(ba.Window): elif sel == self._scrollwidget: sel_name = 'Scroll' else: - raise Exception('unrecognized selection') + raise ValueError('unrecognized selection') ba.app.window_states[self.__class__.__name__] = { 'sel_name': sel_name } diff --git a/assets/src/ba_data/python/bastd/ui/gather.py b/assets/src/ba_data/python/bastd/ui/gather.py index 1ba440bc..288f3f62 100644 --- a/assets/src/ba_data/python/bastd/ui/gather.py +++ b/assets/src/ba_data/python/bastd/ui/gather.py @@ -807,11 +807,8 @@ class GatherWindow(ba.Window): color=(1, 0, 0)) ba.playsound(ba.getsound('error')) return - try: - port = int(cast(str, ba.textwidget(query=port_textwidget))) - if port > 65535 or port < 0: - raise Exception() - except Exception: + port = int(cast(str, ba.textwidget(query=port_textwidget))) + if port > 65535 or port < 0: ba.screenmessage( ba.Lstr(resource='internal.invalidPortErrorText'), color=(1, 0, 0)) @@ -1958,7 +1955,7 @@ class GatherWindow(ba.Window): elif sel == self._tab_container: sel_name = 'TabContainer' else: - raise Exception('unrecognized selection: ' + str(sel)) + raise ValueError(f'unrecognized selection: \'{sel}\'') ba.app.window_states[self.__class__.__name__] = { 'sel_name': sel_name, 'tab': self._current_tab, diff --git a/assets/src/ba_data/python/bastd/ui/mainmenu.py b/assets/src/ba_data/python/bastd/ui/mainmenu.py index c3d9fd54..163c0542 100644 --- a/assets/src/ba_data/python/bastd/ui/mainmenu.py +++ b/assets/src/ba_data/python/bastd/ui/mainmenu.py @@ -49,7 +49,7 @@ class MainMenuWindow(ba.Window): super().__init__(root_widget=ba.containerwidget( transition=transition, toolbar_visibility='menu_minimal_no_back' if self. - _in_game else 'menu_minimal_no_back')) + _in_game else 'menu_minimal_no_back')) self._is_kiosk = ba.app.kiosk_mode self._tdelay = 0.0 @@ -95,7 +95,7 @@ class MainMenuWindow(ba.Window): _ba.get_local_active_input_devices_count() if (((app.on_tv or app.platform == 'mac') and ba.app.config.get('launchCount', 0) <= 1) - or force_test): + or force_test): def _check_show_bs_remote_window() -> None: try: @@ -131,7 +131,7 @@ class MainMenuWindow(ba.Window): store_char_tex = self._get_store_char_tex() account_state_num = _ba.get_account_state_num() if (account_state_num != self._account_state_num - or store_char_tex != self._store_char_tex): + or store_char_tex != self._store_char_tex): self._store_char_tex = store_char_tex self._account_state_num = account_state_num account_state = self._account_state = (_ba.get_account_state()) @@ -294,8 +294,8 @@ class MainMenuWindow(ba.Window): size=(self._button_width, self._button_height), scale=scale, label=ba.Lstr(resource=self._r + - ('.quitText' if 'Mac' in - ba.app.user_agent_string else '.exitGameText')), + ('.quitText' if 'Mac' in + ba.app.user_agent_string else '.exitGameText')), on_activate_call=self._quit, transition_delay=self._tdelay) @@ -320,8 +320,7 @@ class MainMenuWindow(ba.Window): # If we're not in-game, have no quit button, and this is android, # we want back presses to quit our activity. if (not self._in_game and not self._have_quit_button - and ba.app.platform == 'android'): - + and ba.app.platform == 'android'): def _do_quit() -> None: confirm.QuitWindow(swish=True, back=True) @@ -671,10 +670,10 @@ class MainMenuWindow(ba.Window): custom_menu_entries = session.get_custom_menu_entries() for cme in custom_menu_entries: if (not isinstance(cme, dict) or 'label' not in cme - or not isinstance(cme['label'], (str, ba.Lstr)) - or 'call' not in cme or not callable(cme['call'])): - raise Exception('invalid custom menu entry: ' + - str(cme)) + or not isinstance(cme['label'], (str, ba.Lstr)) + or 'call' not in cme or not callable(cme['call'])): + raise ValueError('invalid custom menu entry: ' + + str(cme)) except Exception: custom_menu_entries = [] ba.print_exception('exception getting custom menu entries for', @@ -757,7 +756,7 @@ class MainMenuWindow(ba.Window): autoselect=self._use_autoselect) # Add a 'leave' button if the menu-owner has a player. if ((self._input_player or self._connected_to_remote_player) - and not self._is_kiosk): + and not self._is_kiosk): h, v, scale = positions[self._p_index] self._p_index += 1 btn = ba.buttonwidget(parent=self._root_widget, @@ -770,7 +769,7 @@ class MainMenuWindow(ba.Window): autoselect=self._use_autoselect) if (player_name != '' and player_name[0] != '<' - and player_name[-1] != '>'): + and player_name[-1] != '>'): txt = ba.Lstr(resource=self._r + '.justPlayerText', subs=[('${NAME}', player_name)]) else: @@ -866,7 +865,7 @@ class MainMenuWindow(ba.Window): # Select cancel by default; this occasionally gets called by accident # in a fit of button mashing and this will help reduce damage. confirm.ConfirmWindow(ba.Lstr(resource=self._r + - '.leavePartyConfirmText'), + '.leavePartyConfirmText'), self._leave_party, cancel_is_selected=True) diff --git a/assets/src/ba_data/python/bastd/ui/play.py b/assets/src/ba_data/python/bastd/ui/play.py index 2ca24f32..1caee865 100644 --- a/assets/src/ba_data/python/bastd/ui/play.py +++ b/assets/src/ba_data/python/bastd/ui/play.py @@ -538,7 +538,7 @@ class PlayWindow(ba.Window): elif sel == self._back_button: sel_name = 'Back' else: - raise Exception('unrecognized selected widget') + raise ValueError(f'unrecognized selection {sel}') ba.app.window_states[self.__class__.__name__] = sel_name except Exception: ba.print_exception('error saving state for', self.__class__) diff --git a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py index e232156f..aeabe2d1 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/__init__.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/__init__.py @@ -58,7 +58,7 @@ class PlaylistTypeVars: fallback_resource='freeForAllText') self.sessiontype = ba.FreeForAllSession else: - raise Exception('playlist type vars undefined for session type: ' + + raise TypeError('playlist type vars undefined for session type: ' + str(sessiontype)) self.default_list_name = ba.Lstr(resource='defaultGameListNameText', subs=[('${PLAYMODE}', play_mode_name) diff --git a/assets/src/ba_data/python/bastd/ui/playlist/browser.py b/assets/src/ba_data/python/bastd/ui/playlist/browser.py index b3138e4d..c081fe62 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/browser.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/browser.py @@ -62,7 +62,7 @@ class PlaylistBrowserWindow(ba.Window): ba.app.main_window = 'Free-for-All Game Select' ba.set_analytics_screen('FreeForAll Window') else: - raise Exception(f'invalid sessiontype: {sessiontype}') + raise TypeError(f'invalid sessiontype: {sessiontype}') self._pvars = playlist.PlaylistTypeVars(sessiontype) self._sessiontype = sessiontype diff --git a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py index 3912bfe3..cb0b84bb 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py @@ -264,19 +264,19 @@ class PlaylistEditGameWindow(ba.Window): if 'choices' in setting: for choice in setting['choices']: if len(choice) != 2: - raise Exception( + raise ValueError( "Expected 2-member tuples for 'choices'; got: " + repr(choice)) if not isinstance(choice[0], str): - raise Exception( + raise TypeError( 'First value for choice tuple must be a str; got: ' + repr(choice)) if not isinstance(choice[1], value_type): - raise Exception( + raise TypeError( 'Choice type does not match default value; choice:' + repr(choice) + '; setting:' + repr(setting)) if value_type not in (int, float): - raise Exception( + raise TypeError( 'Choice type setting must have int or float default; ' 'got: ' + repr(setting)) @@ -509,5 +509,5 @@ class PlaylistEditGameWindow(ba.Window): elif setting_type == int: ba.textwidget(edit=ctrl, text=str(int(val))) else: - raise Exception('invalid vartype: ' + str(setting_type)) + raise TypeError('invalid vartype: ' + str(setting_type)) self._settings[setting_name] = val diff --git a/assets/src/ba_data/python/bastd/ui/playoptions.py b/assets/src/ba_data/python/bastd/ui/playoptions.py index a62b56e9..3efe14c3 100644 --- a/assets/src/ba_data/python/bastd/ui/playoptions.py +++ b/assets/src/ba_data/python/bastd/ui/playoptions.py @@ -93,7 +93,7 @@ class PlayOptionsWindow(popup.PopupWindow): elif self._sessiontype is ba.DualTeamSession: plst = get_default_teams_playlist() else: - raise Exception('unrecognized session-type: ' + + raise TypeError('unrecognized session-type: ' + str(self._sessiontype)) else: try: diff --git a/assets/src/ba_data/python/bastd/ui/popup.py b/assets/src/ba_data/python/bastd/ui/popup.py index 92000b96..538b17e4 100644 --- a/assets/src/ba_data/python/bastd/ui/popup.py +++ b/assets/src/ba_data/python/bastd/ui/popup.py @@ -153,7 +153,7 @@ class PopupMenuWindow(PopupWindow): self._choices_disabled = list(choices_disabled) self._done_building = False if not choices: - raise Exception('Must pass at least one choice') + raise TypeError('Must pass at least one choice') self._width = width self._scale = scale if len(choices) > 8: @@ -302,7 +302,7 @@ class PopupMenu: current_choice = None self._choices = list(choices) if not choices: - raise Exception('no choices given') + raise TypeError('no choices given') self._choices_display = list(choices_display) self._choices_disabled = list(choices_disabled) self._width = width @@ -313,7 +313,7 @@ class PopupMenu: self._position = position self._parent = parent if not choices: - raise Exception('Must pass at least one choice') + raise TypeError('Must pass at least one choice') self._parent = parent self._button_size = button_size diff --git a/assets/src/ba_data/python/bastd/ui/profile/edit.py b/assets/src/ba_data/python/bastd/ui/profile/edit.py index 128c6fdf..53a681ff 100644 --- a/assets/src/ba_data/python/bastd/ui/profile/edit.py +++ b/assets/src/ba_data/python/bastd/ui/profile/edit.py @@ -546,7 +546,7 @@ class EditProfileWindow(ba.Window): elif picker_type == 'highlight': initial_color = self._highlight else: - raise Exception('invalid picker_type: ' + picker_type) + raise ValueError('invalid picker_type: ' + picker_type) colorpicker.ColorPicker( parent=self._root_widget, position=origin, diff --git a/assets/src/ba_data/python/bastd/ui/purchase.py b/assets/src/ba_data/python/bastd/ui/purchase.py index fdf65b67..e2dbee60 100644 --- a/assets/src/ba_data/python/bastd/ui/purchase.py +++ b/assets/src/ba_data/python/bastd/ui/purchase.py @@ -44,7 +44,7 @@ class PurchaseWindow(ba.Window): header_text = ba.Lstr(resource='unlockThisText', fallback_resource='unlockThisInTheStoreText') if len(items) != 1: - raise Exception('expected exactly 1 item') + raise ValueError('expected exactly 1 item') self._items = list(items) self._width = 580 self._height = 520 diff --git a/assets/src/ba_data/python/bastd/ui/settings/advanced.py b/assets/src/ba_data/python/bastd/ui/settings/advanced.py index 61c6dd1e..a76616b4 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/advanced.py +++ b/assets/src/ba_data/python/bastd/ui/settings/advanced.py @@ -596,11 +596,11 @@ class AdvancedSettingsWindow(ba.Window): elif sel == self._language_inform_checkbox: sel_name = 'LangInform' else: - raise Exception('unrecognized selection') + raise ValueError(f'unrecognized selection \'{sel}\'') elif sel == self._back_button: sel_name = 'Back' else: - raise Exception('unrecognized selection') + raise ValueError(f'unrecognized selection \'{sel}\'') ba.app.window_states[self.__class__.__name__] = { 'sel_name': sel_name } diff --git a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py index df29572e..2a0d5994 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/allsettings.py +++ b/assets/src/ba_data/python/bastd/ui/settings/allsettings.py @@ -252,7 +252,7 @@ class AllSettingsWindow(ba.Window): elif sel == self._back_button: sel_name = 'Back' else: - raise Exception('unrecognized selection') + raise ValueError(f'unrecognized selection \'{sel}\'') ba.app.window_states[self.__class__.__name__] = { 'sel_name': sel_name } diff --git a/assets/src/ba_data/python/bastd/ui/settings/audio.py b/assets/src/ba_data/python/bastd/ui/settings/audio.py index b5f2c424..bbe86a98 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/audio.py +++ b/assets/src/ba_data/python/bastd/ui/settings/audio.py @@ -266,7 +266,7 @@ class AudioSettingsWindow(ba.Window): elif sel == self._vr_head_relative_audio_button: sel_name = 'VRHeadRelative' else: - raise Exception('unrecognized selected widget') + raise ValueError(f'unrecognized selection \'{sel}\'') ba.app.window_states[self.__class__.__name__] = sel_name except Exception: ba.print_exception('error saving state for', self.__class__) diff --git a/assets/src/ba_data/python/bastd/ui/settings/testing.py b/assets/src/ba_data/python/bastd/ui/settings/testing.py index 1c090f07..3bdb2679 100644 --- a/assets/src/ba_data/python/bastd/ui/settings/testing.py +++ b/assets/src/ba_data/python/bastd/ui/settings/testing.py @@ -167,7 +167,7 @@ class TestingWindow(ba.Window): for entry in self._entries: if entry['name'] == name: return entry - raise Exception(f'Entry not found: {name}') + raise ba.NotFoundError(f'Entry not found: {name}') def _on_reset_press(self) -> None: for entry in self._entries: diff --git a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py index 044fd865..8340ceaa 100644 --- a/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py +++ b/assets/src/ba_data/python/bastd/ui/soundtrack/browser.py @@ -485,7 +485,7 @@ class SoundtrackBrowserWindow(ba.Window): elif sel == self._back_button: sel_name = 'Back' else: - raise Exception('unrecognized selection') + raise ValueError(f'unrecognized selection \'{sel}\'') ba.app.window_states[self.__class__.__name__] = sel_name except Exception: ba.print_exception('error saving state for', self.__class__) diff --git a/assets/src/ba_data/python/bastd/ui/store/browser.py b/assets/src/ba_data/python/bastd/ui/store/browser.py index 953aab33..e6522e7c 100644 --- a/assets/src/ba_data/python/bastd/ui/store/browser.py +++ b/assets/src/ba_data/python/bastd/ui/store/browser.py @@ -1002,7 +1002,7 @@ class StoreBrowserWindow(ba.Window): sel_name = 'Tab:' + list(self._tab_buttons.keys())[list( self._tab_buttons.values()).index(sel)] else: - raise Exception('unrecognized selection') + raise ValueError(f'unrecognized selection \'{sel}\'') ba.app.window_states[self.__class__.__name__] = { 'sel_name': sel_name, 'tab': self._current_tab diff --git a/assets/src/ba_data/python/bastd/ui/tournamententry.py b/assets/src/ba_data/python/bastd/ui/tournamententry.py index 3ecec8ff..8c2171b4 100644 --- a/assets/src/ba_data/python/bastd/ui/tournamententry.py +++ b/assets/src/ba_data/python/bastd/ui/tournamententry.py @@ -69,7 +69,7 @@ class TournamentEntryWindow(popup.PopupWindow): self._purchase_price_name = 'price.tournament_entry_1' else: if self._fee != 0: - raise Exception('invalid fee: ' + str(self._fee)) + raise ValueError('invalid fee: ' + str(self._fee)) self._purchase_name = 'tournament_entry_0' self._purchase_price_name = 'price.tournament_entry_0' diff --git a/assets/src/ba_data/python/bastd/ui/watch.py b/assets/src/ba_data/python/bastd/ui/watch.py index cc09b297..dd8baf3e 100644 --- a/assets/src/ba_data/python/bastd/ui/watch.py +++ b/assets/src/ba_data/python/bastd/ui/watch.py @@ -482,7 +482,7 @@ class WatchWindow(ba.Window): elif sel == self._tab_container: sel_name = 'TabContainer' else: - raise Exception('unrecognized selection') + raise ValueError(f'unrecognized selection {sel}') ba.app.window_states[self.__class__.__name__] = { 'sel_name': sel_name, 'tab': self._current_tab