diff --git a/.efrocachemap b/.efrocachemap index 45711364..5be4a959 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -4008,26 +4008,26 @@ "assets/src/ba_data/python/ba/_generated/__init__.py": "https://files.ballistica.net/cache/ba1/ee/e8/cad05aa531c7faf7ff7b96db7f6e", "assets/src/ba_data/python/ba/_generated/enums.py": "https://files.ballistica.net/cache/ba1/1c/77/ac670a5118abdf8a7687af0e159b", "ballisticacore-windows/Generic/BallisticaCore.ico": "https://files.ballistica.net/cache/ba1/89/c0/e32c7d2a35dc9aef57cc73b0911a", - "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/76/00/aadc5cc5fa6a1b47535571f53e0c", - "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/8a/c5/e18feec0e01cef4f4e95fb0808ec", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/de/73/3238fef727dbe8e13fc01bacccdf", - "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e3/16/33500fbc1be37a7ab0beb9ea1353", - "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/23/75/f18db49e8bf625a4d140cfddc0eb", - "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/13/92/649fec7372f2cc6513d81df7ac03", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ba/aa/8a853018d236f1f8c70bfd6d830a", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/2e/36/908f74e219d570e16ce72520b0f9", - "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/75/0a/6bdecafd1f0a1d4613697e1ad71d", - "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/d1/55/18e339d10407ec858fee58fc9d5a", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6b/d6/68df4d180d1eb83119a8a1d2cde3", - "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b6/51/3f2217d1f0640ec63e7499641001", - "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/6a/0e/b42051f6e252b278279d2bf0ce65", - "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/8f/8d/2dcdfbc13d984ea6c62ef5e07600", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/63/32/555ad0de811a0af52f704f215309", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/60/39/8589f26d7619a11c53f452d4a808", - "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/99/a4/2e40eb7af11d25d889af56fa73dc", - "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/a5/b1/34cd5f68321e318a18d3bf2a6651", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/ec/8b/b08ad5030780c2554291c5ddf7b4", - "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/96/ae/28d1c19d92db131315fa2d42d772", + "build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c5/08/f608b52f5d884782374aa6578ed3", + "build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/cb/cc/b74d5615a34e41f2dea0a6788a95", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d2/b3/8a50c3dbfba9adbda587b6eed182", + "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/58/49/359da0ec2144ae8b67ca245fa6fd", + "build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/14/06/b0a2ab347e8b4b4efe6536049c4a", + "build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/04/2c/7813a927c280305cfe6aa56dfd99", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/82/ab/c3d7d1dc70b375c6e2680a9bd7b2", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1c/46/3ac0c7f5d50d5f6a266b72966bbf", + "build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/50/da/7146aafb6221668e17070029edae", + "build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/f1/7b/8abca0c95379e4ab0692fa3f994f", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ff/c5/5a5b4f20e9787463e370fd53c2de", + "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/0c/56/2a9a92ea5e3a16ca39f1fc04546b", + "build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/78/63/f5d1347b7afbb15a2a0813f6ab7b", + "build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/57/6c/76fa56be35a356fa1c119ade0f75", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b0/4b/3d528c6331f6b370f11b913fea00", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e3/50/a4c6df16326044ce3f42e16289de", + "build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/84/b3/0ea2e8a870fa211e3789b2de56fe", + "build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/7c/f7/a74ada4fb39f57721a4049973b39", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/c4/1d/9c65921602aadc94be03fb3444d8", + "build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/b1/75/c098de6f3660aaa48fa5341e3d44", "build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e9/02/eb6c1b076dd366fcdbb69c0aa85a", "build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ff/2b/5e85ad35d9305d60adbdc53dbb6e", "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/5b/fb/074697e51ab8a28604788be2b3bb", @@ -4044,14 +4044,14 @@ "build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/62/fc/bbf70a63d29d536d8511474309c6", "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d2/c1/ed8083e560d9466547d1da458118", "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/10/8a/534c2c99f6d314631046f0f2afc2", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/3f/7b/669a2a9f4785ca31c1dec187a2a5", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/36/7e/5c0a226564142afded25c4b75999", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/c1/af/624497502e114de73ebac45a9fd4", - "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/3c/be/2245d4a6302fd98af97362f2af64", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/0f/6d/ffd0a160ce991e724552a4bde26d", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/0c/d5/172d21269794aa7809fd1c63eec5", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/b2/d9/f3333d9e169a62ae8e1bfc12c1d9", - "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/d2/e7/ff5143a503539e10470b2e96e3aa", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/91/b8/9163c5da07e10422148cab48149c", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/b9/06/a4f144e5f74ca1a4ea10327edfeb", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/9a/5c/d4623488a53931b97b79dfc32d06", + "build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/b5/4c/f3abc65a6c0de4f07c12bda8d13b", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/06/11/a6827d90020d2c59bdee5e8e7fa2", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/c5/8e/64cd86adca08a9f5f15478fd4080", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/5e/70/104fae0f9f53d4f0dfa1b98596e0", + "build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/81/d6/f0b5f88b8c15fa1ac8cc0de99594", "src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/23/ce/68396b1b7ec6d2f8425902148140", "src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/2d/4f/f4fe67827f36cd59cd5193333a02", "src/ballistica/generated/python_embedded/bootstrap_monolithic.inc": "https://files.ballistica.net/cache/ba1/ef/c1/aa5f1aa10af89f5c0b1e616355fd" diff --git a/CHANGELOG.md b/CHANGELOG.md index e9b96780..b5c57c7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ -### 1.7.17 (build 20982, api 7, 2022-12-22) -- V2 accounts now show a 'Unlink Legacy (V1) Accounts' button in account settings if they have any old v1 links present. This can be used to clear out old links to replace them with V2 links which work correctly with V2 accounts. +### 1.7.17 (build 20983, api 7, 2023-01-09) +- V2 accounts now show a 'Unlink Legacy (V1) Accounts' button in account settings if they have any old V1 links present. This can be used to clear out old links to replace them with V2 links which work correctly with V2 accounts. - `ba.internal.dump_tracebacks()` is now `ba.internal.dump_app_state()` and `ba.internal.log_dumped_tracebacks()` is now `ba.internal.log_dumped_app_state()`. This reflects the fact that these calls may be expanded to include other app state in the future (C++ layer thread states, etc.). - Added `ba.app.health_monitor` which will dump app state if the logic thread ever stops responding for 5+ seconds while the app is running (to help diagnose deadlock situations). - Various extra logging and bug fixes related to V2 accounts and master server communication (trying to get this stuff working as smoothly as possible now that it is feature-complete). diff --git a/assets/src/ba_data/python/ba/_bootstrap.py b/assets/src/ba_data/python/ba/_bootstrap.py index 13a6a30b..d150c6e8 100644 --- a/assets/src/ba_data/python/ba/_bootstrap.py +++ b/assets/src/ba_data/python/ba/_bootstrap.py @@ -47,7 +47,7 @@ def bootstrap() -> None: # Give a soft warning if we're being used with a different binary # version than we expect. - expected_build = 20982 + expected_build = 20983 running_build: int = env['build_number'] if running_build != expected_build: print( 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 ee3a2cd5..a2483364 100644 --- a/assets/src/ba_data/python/bastd/ui/playlist/editgame.py +++ b/assets/src/ba_data/python/bastd/ui/playlist/editgame.py @@ -473,7 +473,6 @@ class PlaylistEditGameWindow(ba.Window): # Ok now wire up the column. try: - # pylint: disable=unsubscriptable-object prev_widgets: list[ba.Widget] | None = None for cwdg in widget_column: if prev_widgets is not None: 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 45d603f8..1bc8da43 100644 --- a/assets/src/ba_data/python/bastd/ui/store/browser.py +++ b/assets/src/ba_data/python/bastd/ui/store/browser.py @@ -1155,7 +1155,6 @@ class StoreBrowserWindow(ba.Window): # Wire this button to the equivalent in the # previous row. if prev_row_buttons is not None: - # pylint: disable=unsubscriptable-object if len(prev_row_buttons) > col: ba.widget( edit=btn, diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index ef2e8f52..91d4ccb4 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -32,7 +32,7 @@ namespace ballistica { // These are set automatically via script; don't modify them here. -const int kAppBuildNumber = 20982; +const int kAppBuildNumber = 20983; const char* kAppVersion = "1.7.17"; // Our standalone globals. diff --git a/tools/batools/build.py b/tools/batools/build.py index c31586f5..dd8e6ace 100644 --- a/tools/batools/build.py +++ b/tools/batools/build.py @@ -40,22 +40,22 @@ class PyRequirement: # as manually-installed bits, pip itself must have some way to allow for # that, right?... PY_REQUIREMENTS = [ - PyRequirement(modulename='pylint', minversion=[2, 14, 5]), - PyRequirement(modulename='mypy', minversion=[0, 971]), + PyRequirement(modulename='pylint', minversion=[2, 15, 9]), + PyRequirement(modulename='mypy', minversion=[0, 991]), PyRequirement(modulename='cpplint', minversion=[1, 6, 1]), - PyRequirement(modulename='pytest', minversion=[7, 1, 2]), + PyRequirement(modulename='pytest', minversion=[7, 2, 0]), PyRequirement(modulename='pytz'), PyRequirement(modulename='ansiwrap'), PyRequirement(modulename='yaml', pipname='PyYAML'), PyRequirement(modulename='requests'), PyRequirement(modulename='pdoc'), - PyRequirement(pipname='black', minversion=[22, 10, 0]), - PyRequirement(pipname='typing_extensions', minversion=[4, 3, 0]), + PyRequirement(pipname='black', minversion=[22, 12, 0]), + PyRequirement(pipname='typing_extensions', minversion=[4, 4, 0]), PyRequirement(pipname='types-filelock', minversion=[3, 2, 7]), - PyRequirement(pipname='types-requests', minversion=[2, 28, 9]), + PyRequirement(pipname='types-requests', minversion=[2, 28, 11, 7]), PyRequirement(pipname='types-pytz', minversion=[2022, 2, 1, 0]), - PyRequirement(pipname='types-PyYAML', minversion=[6, 0, 11]), - PyRequirement(pipname='certifi', minversion=[2022, 6, 15]), + PyRequirement(pipname='types-PyYAML', minversion=[6, 0, 12, 2]), + PyRequirement(pipname='certifi', minversion=[2022, 12, 7]), PyRequirement(pipname='types-certifi', minversion=[2021, 10, 8, 3]), ] diff --git a/tools/efro/message/_receiver.py b/tools/efro/message/_receiver.py index e4c92447..7881b82e 100644 --- a/tools/efro/message/_receiver.py +++ b/tools/efro/message/_receiver.py @@ -316,6 +316,7 @@ class MessageReceiver: """ assert not self.is_async, "can't call sync handler on async receiver" msg_decoded: Message | None = None + msgtype: type[Message] | None = None try: msg_decoded = self._decode_incoming_message(bound_obj, msg) msgtype = type(msg_decoded) @@ -335,7 +336,14 @@ class MessageReceiver: bound_obj, msg_decoded, exc ) if dolog: - logging.exception('Error in efro.message handling.') + if msgtype is not None: + logging.exception( + 'Error handling %s.%s message.', + msgtype.__module__, + msgtype.__qualname__, + ) + else: + logging.exception('Error in efro.message handling.') return rstr async def handle_raw_message_async( diff --git a/tools/efrotools/pylintplugins.py b/tools/efrotools/pylintplugins.py index 325ca9ef..5583c61e 100644 --- a/tools/efrotools/pylintplugins.py +++ b/tools/efrotools/pylintplugins.py @@ -45,6 +45,10 @@ def ignore_type_check_filter(if_node: nc.NodeNG) -> nc.NodeNG: and isinstance(if_node.parent, astroid.Module) ): + # Special case: filelock contains a use-case that breaks us. + if if_node.parent.name == 'filelock': + return if_node + module_node = if_node.parent # Remove any locals getting defined under this if statement. @@ -177,7 +181,7 @@ def var_annotations_filter(node: nc.NodeNG) -> nc.NodeNG: # Future behavior: # Annotated assigns under functions are not evaluated. # Class and module vars are normally not either. However we - # do evaluate if we come across an 'ioprepped' dataclass + # *do* evaluate if we come across an 'ioprepped' dataclass # decorator. (the 'ioprepped' decorator explicitly evaluates # dataclass annotations). @@ -230,7 +234,8 @@ def var_annotations_filter(node: nc.NodeNG) -> nc.NodeNG: break fnode = fnode.parent - # If this annotation won't be eval'ed, replace it with a dummy string. + # If this annotation won't be eval'ed, replace its annotation with + # a dummy value. if not willeval: dummyval = astroid.Const(parent=node, value='dummyval') node.annotation = dummyval