cleanup for latest pylint and work on messaging

This commit is contained in:
Eric Froemling 2021-08-23 09:56:14 +02:00
parent 7417ac0103
commit 39436f910c
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
43 changed files with 239 additions and 241 deletions

View File

@ -420,7 +420,7 @@
"assets/build/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/14/f1/4f2995d78fc20dd79dfb39c5d554",
"assets/build/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/57/ac/6ed0caecd25dc23688debed24c45",
"assets/build/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/32/08/38dac4a79ab2acee76a75d32a310",
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/1a/7a/d5d4fbaedd83708b8891c82c1eac",
"assets/build/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/97/0d/5879ed6101537373f87deeccf860",
"assets/build/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/0f/0e/7184059414320d32104463e41038",
"assets/build/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/e2/58/c2c5964370df118c51528dc4bfa2",
"assets/build/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/0c/40/6222070dc95b29e42b77dd105357",
@ -440,13 +440,13 @@
"assets/build/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/87/e5/a10ddd73cfb7996bbd576032db6a",
"assets/build/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/34/0f/dd2e311024ceb913b8489b823fdc",
"assets/build/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/26/8d/bf9cc8db2cc71b69e789898e1093",
"assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/02/9a/1e376aaccff29520874e1127e1c7",
"assets/build/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/4f/23/b9692ca7f9407972254fb245ffb0",
"assets/build/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/2e/17/fb3e7ed77fa54427b434b1791793",
"assets/build/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/6c/04/a528a4df9364ad4f0261cbc83f0a",
"assets/build/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/82/12/57bf144e12be229a9b70da9c45cb",
"assets/build/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/bb/67/bdf5e720897c0eb966acdbab4274",
"assets/build/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/91/1e/2846b8fab5260d1949562e7979be",
"assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/02/f9/4a1e4b16c1c0db6e1a88fb7c2b1f",
"assets/build/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/97/ec/384ca27db2fdc711514273726935",
"assets/build/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/42/8a/31ee9bf7d90ad1c7a613ab91e4f3",
"assets/build/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/50/9f/be006ba19be6a69a57837eb6dca0",
"assets/build/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/a4/d9/93b754bae8c86791f6d8d3b600e1",
@ -3936,50 +3936,50 @@
"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/72/82/86956fae909ac2fe2a1abd84a361",
"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/14/65/e76d6db4acf8d4aa4911cc9d028a",
"build/prefab/full/linux_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ef/d7/495767e5ff1cb54f8f0460333e78",
"build/prefab/full/linux_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/74/1d/fc9e33e565475daaac80da5252f0",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bf/7d/77c00ddc1c099b369ba2b8df28d9",
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1b/7c/ce10fe8508a295a677560861c586",
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/27/ce/334457db385ce15f76b33c42d382",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6b/c1/dfc5ceac182cf05b8768e7ff13db",
"build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/c0/d1/30001af821a0429937d8ffaa8e3c",
"build/prefab/full/linux_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/bf/23/321b8fe6eece0708ea3a68f6018b",
"build/prefab/full/linux_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/9c/7b/ac1a200be0f37078af0991faca3b",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f4/2b/d2610ee3521acca45dc010d96940",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/74/1d/142b429f823320491387ed97d877",
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/9e/d9/c7e3bd2adee613ca901238c26bb8",
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/86/a4/c4b4a6e6d5dda42199e4dac5184a",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b7/5a/60fdcd55840cebc736673ff32416",
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4c/6f/1af3830bdcf69fba8078b2866fd1",
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/0d/08/8c329bd71c2df09ead449bac480a",
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/3b/2f/ef7a91e2b36e29f124febca5c62a",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/20/c0/942cd20ac2265769b1a1f14f0d17",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/3f/e0/f462366cd16674ebeea4e2463d69",
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/04/36/24006cd9c69d896fa09294f1c551",
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/82/42/2f8d90b396536430bac4e8f9e1a6",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/64/bf/7f5e32cc0ccfa83fac033c7f6e3e",
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/e2/d7/2a22130c82126c06debcd2e07d9a",
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/87/8c/8844f896ae2f2e23fc7de8ebf83e",
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b6/34/c5f471383506bec47851780c51fa",
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ef/05/a7b311b98f8eb082352f89c0467b",
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1c/be/12c89e97422620f979482dee9be2",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/27/23/a0ca2d8114858f9d73e6fe1e3a49",
"build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ab/ab/7773aa505ac380b7aa17e5a01d7d",
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/50/37/b3af9d6405c1dbe08b1ab9d0c5e0",
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/62/65/86ccbcdf8ca0f1aeb97607271f7b",
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/22/74/b91237a1c27491892ac77448e684",
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/23/9b/5b5b5d663cef540a9462ef2a37d0",
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/6c/ff/1e06dd40fd61042e36e83cecdb38",
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/20/55/39ac5c3257e9767512671bf80272",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b7/0c/848465c86d4933a025e45eaa1148",
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/30/7f/419770d849f568a170d956081452",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/2d/6e/d4665bf704a16f4df850df6b3fa7",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/04/d3/7cbe365469441b408e8b1b537e97",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/6e/f3/3084e35e36e378a31efcd5322475",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/bc/68/170b706d3424ae63d087038c8132",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/ed/7e/efc93d28f9540a66998d3981d8d2",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/bb/8d/212edd7de31aa73920ddad2a6c45",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/e6/8a/df58e0d6ab23f9242b7ca806f084",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/b2/80/d6f4f629e96bc2ead3921c20e2cf",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/5f/f8/f14410dbaeffbb1e8cb1ca24a293",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/a9/7a/2ec01f037c3a5ac14cf99c0bbe74",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/90/0e/d5de3cbc4268e730ee4950096a32",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1e/15/efb752a8d30ccfc39086e9fe14c0",
"build/prefab/full/mac_arm64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/33/f3/44f878e84d481a1080fa0c607717",
"build/prefab/full/mac_arm64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/7f/b0/0e17879c0d6993a7141a1b51d7d6",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/a3/8a/80596a9cbf5d8b656419dddd3d92",
"build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/65/74/25e2b6f16b8c69c2bdb5c8b3270e",
"build/prefab/full/mac_x86_64_gui/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/5d/b4/f0cf21a3bf04befc86f77eabf4e3",
"build/prefab/full/mac_x86_64_gui/release/ballisticacore": "https://files.ballistica.net/cache/ba1/48/fc/17631bee5d1928b50db91073db46",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/76/f2/e4c5fe6f4e84f7da72d86d4bf1b3",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/49/51/168461fca007d19f0ba3cae8cf45",
"build/prefab/full/windows_x86_gui/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/30/13/847d10b164271ea17480555a6f60",
"build/prefab/full/windows_x86_gui/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/0f/f8/bbb7a81eb89a8d8080300c739d44",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/de/ae/6e8a2eef2338e0ee5ab5a9c6a5a0",
"build/prefab/full/windows_x86_server/release/dist/BallisticaCoreHeadless.exe": "https://files.ballistica.net/cache/ba1/20/2a/09bc1afad5218914c2c392c01d0e",
"build/prefab/lib/linux_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d8/d4/1d4855188cca3e68d58396b1ffcd",
"build/prefab/lib/linux_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/2f/b0/88755dcef661a87ca4cb78a7d071",
"build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/51/87/7e2bf06277db8bb5c8514d8ed4c6",
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/24/c6/1a927f22dcc2cc14b2751ce2fd2a",
"build/prefab/lib/linux_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/2e/a9/d9282a2d031f5ab788798f7f28f5",
"build/prefab/lib/linux_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/04/a8c21c315cbbaed3666a2cf52fad",
"build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3f/2e/6648547bf5291dc8c2d776f45c28",
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/95/cc/54d0df06b07982427c45cee91e0c",
"build/prefab/lib/mac_arm64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a3/a4/02ce13269b4c85643187e46f520c",
"build/prefab/lib/mac_arm64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/97/ccec012d4634e0e8e63a04b7ad1c",
"build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/73/46/f45a8c661bf08fcf9c5f47f8fd9a",
"build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/23/19/20d3ce3220d91b9f6e8f7f2ece90",
"build/prefab/lib/mac_x86_64_gui/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7f/47/740a8693d4f92b74ffcd1786c1d7",
"build/prefab/lib/mac_x86_64_gui/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/45/2c/b0fc8bcdee390b9fa5c6ab964ec4",
"build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d4/59/df59dbf3e9a6b643a3b71101bad5",
"build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e0/b3/2ca91ed3aaf0e94d2619f8affa07",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/48/d4/3834b0060398af319ac450c3a608",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/5b/89/aa3d3dcec140c43aa26db9300f4b",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/94/4b/fe9ead9348303dc8a76986e5d9f8",
"build/prefab/lib/windows/Debug_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/f9/65/367102b313ff6e5eb1008a5da08e",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.lib": "https://files.ballistica.net/cache/ba1/4f/aa/b2d7d605fb03b4bf7e7544206615",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreGenericInternal.pdb": "https://files.ballistica.net/cache/ba1/37/fa/446af85bc9f2f0e220571b4ec5f9",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.lib": "https://files.ballistica.net/cache/ba1/03/98/926496f7267a2dafd53d1e9f2f2b",
"build/prefab/lib/windows/Release_Win32/BallisticaCoreHeadlessInternal.pdb": "https://files.ballistica.net/cache/ba1/11/1e/4af5d4405d646108dacdfd8d687f",
"src/ballistica/generated/python_embedded/binding.inc": "https://files.ballistica.net/cache/ba1/fc/b5/62133319c6df8567aecfd29b1204",
"src/ballistica/generated/python_embedded/bootstrap.inc": "https://files.ballistica.net/cache/ba1/8d/96/c1516dee7d458c9065597e0aede6"
}

View File

@ -132,11 +132,9 @@
"ba_data/python/bacommon/__init__.py",
"ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/err.cpython-38.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc",
"ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc",
"ba_data/python/bacommon/assets.py",
"ba_data/python/bacommon/err.py",
"ba_data/python/bacommon/net.py",
"ba_data/python/bacommon/servermanager.py",
"ba_data/python/bastd/__init__.py",

View File

@ -637,7 +637,6 @@ $(eval $(call make-opt-pyc-target,$(element))))
SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \
build/ba_data/python/bacommon/__init__.py \
build/ba_data/python/bacommon/assets.py \
build/ba_data/python/bacommon/err.py \
build/ba_data/python/bacommon/net.py \
build/ba_data/python/bacommon/servermanager.py \
build/ba_data/python/efro/__init__.py \
@ -660,7 +659,6 @@ SCRIPT_TARGETS_PY_PUBLIC_TOOLS = \
SCRIPT_TARGETS_PYC_PUBLIC_TOOLS = \
build/ba_data/python/bacommon/__pycache__/__init__.cpython-38.opt-1.pyc \
build/ba_data/python/bacommon/__pycache__/assets.cpython-38.opt-1.pyc \
build/ba_data/python/bacommon/__pycache__/err.cpython-38.opt-1.pyc \
build/ba_data/python/bacommon/__pycache__/net.cpython-38.opt-1.pyc \
build/ba_data/python/bacommon/__pycache__/servermanager.cpython-38.opt-1.pyc \
build/ba_data/python/efro/__pycache__/__init__.cpython-38.opt-1.pyc \

View File

@ -1 +1 @@
119796669300700074719883839459258868842
206707705873020170747420069909535530879

View File

@ -18,6 +18,8 @@ NOTE: This file was autogenerated by batools.dummymodule; do not edit by hand.
# I'm sorry Pylint. I know this file saddens you. Be strong.
# pylint: disable=useless-suppression
# pylint: disable=unnecessary-pass
# pylint: disable=use-dict-literal
# pylint: disable=use-list-literal
# pylint: disable=unused-argument
# pylint: disable=missing-docstring
# pylint: disable=too-many-locals

View File

@ -107,7 +107,7 @@ def read_config() -> Tuple[AppConfig, bool]:
config_contents = ''
try:
if os.path.exists(config_file_path):
with open(config_file_path) as infile:
with open(config_file_path, encoding='utf-8') as infile:
config_contents = infile.read()
config = AppConfig(json.loads(config_contents))
else:
@ -140,7 +140,7 @@ def read_config() -> Tuple[AppConfig, bool]:
prev_path = config_file_path + '.prev'
try:
if os.path.exists(prev_path):
with open(prev_path) as infile:
with open(prev_path, encoding='utf-8') as infile:
config_contents = infile.read()
config = AppConfig(json.loads(config_contents))
else:

View File

@ -124,7 +124,7 @@ def handle_leftover_log_file() -> None:
from ba._net import master_server_post
if os.path.exists(_ba.get_log_file_path()):
with open(_ba.get_log_file_path()) as infile:
with open(_ba.get_log_file_path(), encoding='utf-8') as infile:
info = json.loads(infile.read())
infile.close()
do_send = should_submit_debug_info()

View File

@ -101,7 +101,7 @@ class AssetManager:
try:
state_path = self.state_path
if state_path.exists():
with open(self.state_path) as infile:
with open(self.state_path, encoding='utf-8') as infile:
self._state = State.from_json_str(infile.read())
return
except Exception:
@ -113,7 +113,7 @@ class AssetManager:
print('ASSET-MANAGER SAVING STATE')
try:
with open(self.state_path, 'w') as outfile:
with open(self.state_path, 'w', encoding='utf-8') as outfile:
outfile.write(self._state.to_json_str())
except Exception:
logging.exception('Error writing AssetManager state')

View File

@ -161,7 +161,8 @@ class LanguageSubsystem:
else:
switched = False
with open('ba_data/data/languages/english.json') as infile:
with open('ba_data/data/languages/english.json',
encoding='utf-8') as infile:
lenglishvalues = json.loads(infile.read())
# None implies default.
@ -173,7 +174,7 @@ class LanguageSubsystem:
else:
lmodfile = 'ba_data/data/languages/' + language.lower(
) + '.json'
with open(lmodfile) as infile:
with open(lmodfile, encoding='utf-8') as infile:
lmodvalues = json.loads(infile.read())
except Exception:
from ba import _error

View File

@ -73,7 +73,7 @@ def show_user_scripts() -> None:
usd: Optional[str] = app.python_directory_user
if usd is not None and os.path.isdir(usd):
file_name = usd + '/about_this_folder.txt'
with open(file_name, 'w') as outfile:
with open(file_name, 'w', encoding='utf-8') as outfile:
outfile.write('You can drop files in here to mod the game.'
' See settings/advanced'
' in the game for more info.')

View File

@ -15,7 +15,8 @@ if TYPE_CHECKING:
def _get_map_data(name: str) -> Dict[str, Any]:
import json
print('Would get map data', name)
with open('ba_data/data/maps/' + name + '.json') as infile:
with open('ba_data/data/maps/' + name + '.json',
encoding='utf-8') as infile:
mapdata = json.loads(infile.read())
assert isinstance(mapdata, dict)
return mapdata

View File

@ -369,9 +369,9 @@ class CoopBrowserWindow(ba.Window):
# If the number of tournaments or challenges in the data differs from
# our current arrangement, refresh with the new number.
if (((data is None and (self._tournament_button_count != 0))
or (data is not None and
(len(data) != self._tournament_button_count)))):
if ((data is None and self._tournament_button_count != 0)
or (data is not None and
(len(data) != self._tournament_button_count))):
self._tournament_button_count = len(
data) if data is not None else 0
ba.app.config['Tournament Rows'] = self._tournament_button_count

View File

@ -156,7 +156,8 @@ class CreditsListWindow(ba.Window):
freesound_names = _format_names(names, 90)
try:
with open('ba_data/data/langdata.json') as infile:
with open('ba_data/data/langdata.json',
encoding='utf-8') as infile:
translation_contributors = (json.loads(
infile.read())['translation_contributors'])
except Exception:

View File

@ -258,7 +258,8 @@ class AdvancedSettingsWindow(ba.Window):
# so we don't have to go digging through each full language.
try:
import json
with open('ba_data/data/langdata.json') as infile:
with open('ba_data/data/langdata.json',
encoding='utf-8') as infile:
lang_names_translated = (json.loads(
infile.read())['lang_names_translated'])
except Exception:

View File

@ -513,7 +513,7 @@ class ServerManagerApp:
f"Config file not found: '{self._config_path}'.")
import yaml
with open(self._config_path) as infile:
with open(self._config_path, encoding='utf-8') as infile:
user_config_raw = yaml.safe_load(infile.read())
# An empty config file will yield None, and that's ok.
@ -646,7 +646,7 @@ class ServerManagerApp:
os.makedirs(self._ba_root_path, exist_ok=True)
cfgpath = os.path.join(self._ba_root_path, 'config.json')
if os.path.exists(cfgpath):
with open(cfgpath) as infile:
with open(cfgpath, encoding='utf-8') as infile:
bincfg = json.loads(infile.read())
else:
bincfg = {}
@ -668,7 +668,7 @@ class ServerManagerApp:
del bincfg['Custom Team Colors']
bincfg['Idle Exit Minutes'] = self._config.idle_exit_minutes
with open(cfgpath, 'w') as outfile:
with open(cfgpath, 'w', encoding='utf-8') as outfile:
outfile.write(json.dumps(bincfg))
def _enqueue_server_command(self, command: ServerCommand) -> None:

View File

@ -1,5 +1,5 @@
<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->
<h4><em>last updated on 2021-08-16 for Ballistica version 1.6.5 build 20391</em></h4>
<h4><em>last updated on 2021-08-23 for Ballistica version 1.6.5 build 20391</em></h4>
<p>This page documents the Python classes and functions in the 'ba' module,
which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please <a href="mailto:support@froemling.net">let me know</a>. Happy modding!</p>
<hr>

View File

@ -217,7 +217,7 @@ class App:
if not os.path.exists(self._state_data_path):
return
try:
with open(self._state_data_path, 'r') as infile:
with open(self._state_data_path, 'r', encoding='utf-8') as infile:
self._state = StateData(**json.loads(infile.read()))
except Exception:
print(f'{Clr.RED}Error loading {TOOL_NAME} data;'
@ -226,7 +226,7 @@ class App:
def _save_state(self) -> None:
if not self._state_dir.exists():
self._state_dir.mkdir(parents=True, exist_ok=True)
with open(self._state_data_path, 'w') as outfile:
with open(self._state_data_path, 'w', encoding='utf-8') as outfile:
outfile.write(json.dumps(self._state.__dict__))
def _servercmd(self,

View File

@ -1,18 +0,0 @@
# Released under the MIT License. See LICENSE for details.
#
"""Error related functionality."""
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
pass
class RemoteError(Exception):
"""An error occurred on the other end of some connection."""
def __str__(self) -> str:
s = ''.join(str(arg) for arg in self.args)
return f'Remote Exception Follows:\n{s}'

View File

@ -15,7 +15,7 @@ if TYPE_CHECKING:
def _parse_lprop_file(local_properties_path: str) -> str:
with open(local_properties_path) as infile:
with open(local_properties_path, encoding='utf-8') as infile:
lines = infile.read().splitlines()
sdk_dir_lines = [l for l in lines if 'sdk.dir=' in l]
if len(sdk_dir_lines) != 1:
@ -68,7 +68,7 @@ def _gen_lprop_file(local_properties_path: str) -> str:
' sdk elsewhere\n'
'\n'
'sdk.dir=' + sdk_dir + '\n')
with open(local_properties_path, 'w') as outfile:
with open(local_properties_path, 'w', encoding='utf-8') as outfile:
outfile.write(config)
print('Generating local.properties file (found Android SDK at "' +
sdk_dir + '")',

View File

@ -124,7 +124,8 @@ def _get_py_targets(src: str, dst: str, py_targets: List[str],
# lives under this dir.
meta_targets: List[str] = []
for mantype in ['public', 'private']:
with open(f'src/meta/.meta_manifest_{mantype}.json') as infile:
with open(f'src/meta/.meta_manifest_{mantype}.json',
encoding='utf-8') as infile:
meta_targets += json.loads(infile.read())
meta_targets = [
t for t in meta_targets
@ -282,7 +283,7 @@ def update_assets_makefile(projroot: str, check: bool) -> None:
assert isinstance(public, bool)
fname = 'assets/Makefile'
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
original = infile.read()
lines = original.splitlines()
@ -367,7 +368,7 @@ def update_assets_makefile(projroot: str, check: bool) -> None:
f'END COMPARE ========================================')
sys.exit(255)
print(f'{Clr.SBLU}Updating: {fname}{Clr.RST}')
with open(fname, 'w') as outfile:
with open(fname, 'w', encoding='utf-8') as outfile:
outfile.write(out)
# Lastly, write a simple manifest of the things we expect to have
@ -387,7 +388,7 @@ def _write_manifest(manifest_path: str, all_targets: Set[str],
if not os.path.exists(manifest_path):
existing_manifest = None
else:
with open(manifest_path) as infile:
with open(manifest_path, encoding='utf-8') as infile:
existing_manifest = json.loads(infile.read())
manifest = sorted(t[13:] for t in all_targets)
if manifest == existing_manifest:
@ -398,5 +399,5 @@ def _write_manifest(manifest_path: str, all_targets: Set[str],
f" '{manifest_path}'.{Clr.RST}")
sys.exit(255)
print(f'{Clr.SBLU}Updating: {manifest_path}{Clr.RST}')
with open(manifest_path, 'w') as outfile:
with open(manifest_path, 'w', encoding='utf-8') as outfile:
outfile.write(json.dumps(manifest, indent=1))

View File

@ -225,7 +225,7 @@ def _write_payload_file(assets_root: str, full: bool) -> None:
# the file list.
payload_str = (str(len(file_list)) + '\n' + ('1' if full else '0') +
'\n' + payload_str)
with open(payload_path, 'w') as outfile:
with open(payload_path, 'w', encoding='utf-8') as outfile:
outfile.write(payload_str)
else:
# Remove the payload file; this will cause the game to completely
@ -400,13 +400,13 @@ def _write_if_changed(path: str,
make_executable: bool = False) -> None:
changed: bool
try:
with open(path) as infile:
with open(path, encoding='utf-8') as infile:
existing = infile.read()
changed = (contents != existing)
except FileNotFoundError:
changed = True
if changed:
with open(path, 'w') as outfile:
with open(path, 'w', encoding='utf-8') as outfile:
outfile.write(contents)
if make_executable:
subprocess.run(['chmod', '+x', path], check=True)
@ -434,7 +434,7 @@ def stage_server_file(projroot: str, mode: str, infilename: str,
elif basename == 'ballisticacore_server.py':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
with open(infilename, encoding='utf-8') as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[0] = replace_one(lines[0],
@ -444,12 +444,12 @@ def stage_server_file(projroot: str, mode: str, infilename: str,
'\n'.join(lines) + '\n',
make_executable=True)
elif basename == 'README.txt':
with open(infilename) as infile:
with open(infilename, encoding='utf-8') as infile:
readme = infile.read()
_write_if_changed(outfilename, readme)
elif basename == 'launch_ballisticacore_server.bat':
# Run Python in opt mode for release builds.
with open(infilename) as infile:
with open(infilename, encoding='utf-8') as infile:
lines = infile.read().splitlines()
if mode == 'release':
lines[1] = replace_one(

View File

@ -31,7 +31,7 @@ class PipRequirement:
# Note: we look directly for modules when possible instead of just pip
# entries; this accounts for manual installations or other nonstandard setups.
PIP_REQUIREMENTS = [
PipRequirement(modulename='pylint', minversion=[2, 9, 6]),
PipRequirement(modulename='pylint', minversion=[2, 10, 2]),
PipRequirement(modulename='mypy', minversion=[0, 910]),
PipRequirement(modulename='yapf', minversion=[0, 31, 0]),
PipRequirement(modulename='cpplint', minversion=[1, 5, 5]),
@ -41,10 +41,10 @@ PIP_REQUIREMENTS = [
PipRequirement(modulename='yaml', pipname='PyYAML'),
PipRequirement(modulename='requests'),
PipRequirement(pipname='typing-extensions', minversion=[3, 10, 0, 0]),
PipRequirement(pipname='types-filelock', minversion=[0, 1, 3]),
PipRequirement(pipname='types-requests', minversion=[0, 1, 9]),
PipRequirement(pipname='types-pytz', minversion=[0, 1, 0]),
PipRequirement(pipname='types-PyYAML', minversion=[0, 1, 6]),
PipRequirement(pipname='types-filelock', minversion=[0, 1, 5]),
PipRequirement(pipname='types-requests', minversion=[2, 25, 6]),
PipRequirement(pipname='types-pytz', minversion=[2021, 1, 2]),
PipRequirement(pipname='types-PyYAML', minversion=[5, 4, 6]),
]
# Parts of full-tests suite we only run on particular days.
@ -335,7 +335,7 @@ def gen_fulltest_buildfile_android() -> None:
else:
raise RuntimeError(f'Unknown extra: {extra}')
with open('_fulltest_buildfile_android', 'w') as outfile:
with open('_fulltest_buildfile_android', 'w', encoding='utf-8') as outfile:
outfile.write('\n'.join(lines))
@ -381,7 +381,7 @@ def gen_fulltest_buildfile_windows() -> None:
else:
raise RuntimeError(f'Unknown extra: {extra}')
with open('_fulltest_buildfile_windows', 'w') as outfile:
with open('_fulltest_buildfile_windows', 'w', encoding='utf-8') as outfile:
outfile.write('\n'.join(lines))
@ -448,7 +448,7 @@ def gen_fulltest_buildfile_apple() -> None:
else:
raise RuntimeError(f'Unknown extra: {extra}')
with open('_fulltest_buildfile_apple', 'w') as outfile:
with open('_fulltest_buildfile_apple', 'w', encoding='utf-8') as outfile:
outfile.write('\n'.join(lines))
@ -476,7 +476,7 @@ def gen_fulltest_buildfile_linux() -> None:
else:
raise RuntimeError(f'Unknown extra: {extra}')
with open('_fulltest_buildfile_linux', 'w') as outfile:
with open('_fulltest_buildfile_linux', 'w', encoding='utf-8') as outfile:
outfile.write('\n'.join(lines))
@ -685,8 +685,8 @@ def update_makebob() -> None:
def _get_server_config_raw_contents(projroot: str) -> str:
import textwrap
with open(os.path.join(projroot,
'tools/bacommon/servermanager.py')) as infile:
with open(os.path.join(projroot, 'tools/bacommon/servermanager.py'),
encoding='utf-8') as infile:
lines = infile.read().splitlines()
firstline = lines.index('class ServerConfig:') + 1
lastline = firstline + 1
@ -782,7 +782,7 @@ def _get_server_config_template_yaml(projroot: str) -> str:
def filter_server_config(projroot: str, infilepath: str) -> str:
"""Add commented-out config options to a server config."""
with open(infilepath) as infile:
with open(infilepath, encoding='utf-8') as infile:
cfg = infile.read()
return cfg.replace('#__CONFIG_TEMPLATE_VALUES__',
_get_server_config_template_yaml(projroot))
@ -821,7 +821,7 @@ def update_docs_md(check: bool) -> None:
# Extract the current embedded hash.
if os.path.exists(docs_hash_path):
with open(docs_hash_path) as infile:
with open(docs_hash_path, encoding='utf-8') as infile:
storedhash = infile.read()
else:
storedhash = None
@ -836,14 +836,14 @@ def update_docs_md(check: bool) -> None:
# Our docs markdown is just the docs html with a few added
# bits at the top.
with open('build/docs.html') as infile:
with open('build/docs.html', encoding='utf-8') as infile:
docs = infile.read()
docs = ('<!-- THIS FILE IS AUTO GENERATED; DO NOT EDIT BY HAND -->\n'
) + docs
os.makedirs(os.path.dirname(docs_path), exist_ok=True)
with open(docs_path, 'w') as outfile:
with open(docs_path, 'w', encoding='utf-8') as outfile:
outfile.write(docs)
with open(docs_hash_path, 'w') as outfile:
with open(docs_hash_path, 'w', encoding='utf-8') as outfile:
outfile.write(curhash)
print(f'{docs_path} is up to date.')
@ -909,7 +909,7 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
versions: Dict[str, str]
if os.path.isfile(verfilename):
with open(verfilename) as infile:
with open(verfilename, encoding='utf-8') as infile:
versions = json.loads(infile.read())
assert isinstance(versions, dict)
assert all(isinstance(x, str) for x in versions.keys())
@ -932,7 +932,7 @@ def cmake_prep_dir(dirname: str, verbose: bool = False) -> None:
f'{Clr.BLD}{title}:{Clr.RST} Blowing away existing build dir.')
subprocess.run(['rm', '-rf', dirname], check=True)
os.makedirs(dirname, exist_ok=True)
with open(verfilename, 'w') as outfile:
with open(verfilename, 'w', encoding='utf-8') as outfile:
outfile.write(
json.dumps(
{entry.name: entry.current_value

View File

@ -16,7 +16,7 @@ def generate(projroot: str) -> None:
out_path_tmp = out_path + '.md'
# Do some filtering of our raw changelog.
with open('CHANGELOG.md') as infile:
with open('CHANGELOG.md', encoding='utf-8') as infile:
lines = infile.read().splitlines()
# Strip out anything marked internal.
@ -24,7 +24,7 @@ def generate(projroot: str) -> None:
line for line in lines if not line.strip().startswith('- (internal)')
]
with open(out_path_tmp, 'w') as outfile:
with open(out_path_tmp, 'w', encoding='utf-8') as outfile:
outfile.write('\n'.join(lines))
subprocess.run(f'pandoc -f markdown {out_path_tmp} > {out_path}',

View File

@ -1264,7 +1264,7 @@ class Generator:
raise Exception(
str(len(self._errors)) + ' docs generation issues.')
with open(outfilename, 'w') as outfile:
with open(outfilename, 'w', encoding='utf-8') as outfile:
outfile.write(self._out)
print(f"Generated docs file: '{Clr.BLU}{outfilename}.{Clr.RST}'")

View File

@ -609,6 +609,8 @@ def generate(sources_hash: str, outfilename: str) -> None:
'# I\'m sorry Pylint. I know this file saddens you. Be strong.\n'
'# pylint: disable=useless-suppression\n'
'# pylint: disable=unnecessary-pass\n'
'# pylint: disable=use-dict-literal\n'
'# pylint: disable=use-list-literal\n'
'# pylint: disable=unused-argument\n'
'# pylint: disable=missing-docstring\n'
'# pylint: disable=too-many-locals\n'
@ -650,10 +652,10 @@ def generate(sources_hash: str, outfilename: str) -> None:
outhashpath = os.path.join(os.path.dirname(outfilename),
'._ba_sources_hash')
with open(outfilename, 'w') as outfile:
with open(outfilename, 'w', encoding='utf-8') as outfile:
outfile.write(out)
with open(outhashpath, 'w') as outfile:
with open(outhashpath, 'w', encoding='utf-8') as outfile:
outfile.write(sources_hash)
# Lastly, format it.
@ -679,7 +681,7 @@ def _dummy_module_dirty() -> Tuple[bool, str]:
if not os.path.exists(outpath):
existing_hash = ''
else:
with open(outpath) as infile:
with open(outpath, encoding='utf-8') as infile:
existing_hash = infile.read()
# Important to keep this deterministic...

View File

@ -44,7 +44,7 @@ def gen_flat_data_code(projroot: str, in_path: str, out_path: str,
if pretty_path.startswith(projroot + '/'):
pretty_path = pretty_path[len(projroot) + 1:]
print(f'Meta-building {Clr.BLD}{pretty_path}{Clr.RST}')
with open(out_path, 'w') as outfile:
with open(out_path, 'w', encoding='utf-8') as outfile:
outfile.write(sval_out)
@ -56,7 +56,7 @@ def gen_binding_code(projroot: str, in_path: str, out_path: str) -> None:
os.makedirs(out_dir, exist_ok=True)
# Pull all lines in the embedded list and split into py and c++ names.
with open(in_path) as infile:
with open(in_path, encoding='utf-8') as infile:
pycode = infile.read()
# Double quotes cause errors.
@ -102,5 +102,5 @@ def gen_binding_code(projroot: str, in_path: str, out_path: str) -> None:
if pretty_path.startswith(projroot + '/'):
pretty_path = pretty_path[len(projroot) + 1:]
print(f'Meta-building {Clr.BLD}{pretty_path}{Clr.RST}')
with open(out_path, 'w') as outfile:
with open(out_path, 'w', encoding='utf-8') as outfile:
outfile.write(ccode)

View File

@ -176,14 +176,14 @@ def update(projroot: str, check: bool) -> None:
fname_pub_man = 'src/meta/.meta_manifest_public.json'
fname_priv_man = 'src/meta/.meta_manifest_private.json'
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
original = infile.read()
lines = original.splitlines()
with open(fname_pub_man) as infile:
with open(fname_pub_man, encoding='utf-8') as infile:
original_pub_man = infile.read()
with open(fname_priv_man) as infile:
with open(fname_priv_man, encoding='utf-8') as infile:
original_priv_man = infile.read()
# We'll generate manifests of all public/private files we generate
@ -263,7 +263,7 @@ def update(projroot: str, check: bool) -> None:
f'{Clr.RST}')
if out != original:
with open(fname, 'w') as outfile:
with open(fname, 'w', encoding='utf-8') as outfile:
outfile.write(out)
# Also write our output file manifests every time we write the
@ -271,10 +271,10 @@ def update(projroot: str, check: bool) -> None:
# they're out of date but the Makefile isn't, though that should not
# happen normally).
if out_pub_man != fname_pub_man:
with open(fname_pub_man, 'w') as outfile:
with open(fname_pub_man, 'w', encoding='utf-8') as outfile:
outfile.write(out_pub_man)
if out_priv_man != fname_priv_man:
with open(fname_priv_man, 'w') as outfile:
with open(fname_priv_man, 'w', encoding='utf-8') as outfile:
outfile.write(out_priv_man)
# Also clean existing meta output every time the Makefile changes;

View File

@ -66,9 +66,11 @@ def clean_orphaned_assets() -> None:
os.chdir(PROJROOT)
# Our manifest is split into 2 files (public and private)
with open('assets/.asset_manifest_public.json') as infile:
with open('assets/.asset_manifest_public.json',
encoding='utf-8') as infile:
manifest = set(json.loads(infile.read()))
with open('assets/.asset_manifest_private.json') as infile:
with open('assets/.asset_manifest_private.json',
encoding='utf-8') as infile:
manifest.update(set(json.loads(infile.read())))
for root, _dirs, fnames in os.walk('assets/build'):
for fname in fnames:
@ -159,7 +161,7 @@ def lazy_increment_build() -> None:
codehash = get_files_hash(codefiles)
hashfilename = '.cache/lazy_increment_build'
try:
with open(hashfilename) as infile:
with open(hashfilename, encoding='utf-8') as infile:
lasthash = infile.read()
except FileNotFoundError:
lasthash = ''
@ -176,7 +178,7 @@ def lazy_increment_build() -> None:
# We probably just changed code, so we need to re-calc the hash.
codehash = get_files_hash(codefiles)
os.makedirs(os.path.dirname(hashfilename), exist_ok=True)
with open(hashfilename, 'w') as outfile:
with open(hashfilename, 'w', encoding='utf-8') as outfile:
outfile.write(codehash)
@ -864,9 +866,11 @@ def win_ci_install_prereqs() -> None:
# Look through everything that gets generated by our meta builds
# and pick out anything we need for our basic builds/tests.
with open('src/meta/.meta_manifest_public.json') as infile:
with open('src/meta/.meta_manifest_public.json',
encoding='utf-8') as infile:
meta_public: List[str] = json.loads(infile.read())
with open('src/meta/.meta_manifest_private.json') as infile:
with open('src/meta/.meta_manifest_private.json',
encoding='utf-8') as infile:
meta_private: List[str] = json.loads(infile.read())
for target in meta_public + meta_private:
if (target.startswith('src/ballistica/generated/') or
@ -957,7 +961,7 @@ def gen_python_init_module() -> None:
os.makedirs(os.path.dirname(outfilename), exist_ok=True)
prettypath = project_centric_path(projroot=str(PROJROOT), path=outfilename)
print(f'Meta-building {Clr.BLD}{prettypath}{Clr.RST}')
with open(outfilename, 'w') as outfile:
with open(outfilename, 'w', encoding='utf-8') as outfile:
outfile.write('# Released under the MIT License.'
' See LICENSE for details.\n'
'#\n')

View File

@ -159,7 +159,7 @@ class Updater:
for fname, fcode in self._file_changes.items():
f_orig: Optional[str]
if os.path.exists(fname):
with open(fname, 'r') as infile:
with open(fname, 'r', encoding='utf-8') as infile:
f_orig = infile.read()
else:
f_orig = None
@ -172,7 +172,7 @@ class Updater:
sys.exit(255)
print(f'{Clr.BLU}Writing project file: {fname}{Clr.RST}')
with open(fname, 'w') as outfile:
with open(fname, 'w', encoding='utf-8') as outfile:
outfile.write(fcode)
if unchanged_project_count > 0:
print(
@ -209,7 +209,7 @@ class Updater:
print(f'{Clr.RED}#{i}: {change[0]}:{Clr.RST}')
print(
f'{Clr.RED} Expected "{change[1].expected}"{Clr.RST}')
with open(change[0]) as infile:
with open(change[0], encoding='utf-8') as infile:
lines = infile.read().splitlines()
line = lines[change[1].line_number]
print(f'{Clr.RED} Found "{line}"{Clr.RST}')
@ -220,10 +220,10 @@ class Updater:
else:
for i, change in enumerate(auto_changes):
print(f'{Clr.BLU}Correcting file: {change[0]}{Clr.RST}')
with open(change[0]) as infile:
with open(change[0], encoding='utf-8') as infile:
lines = infile.read().splitlines()
lines[change[1].line_number] = change[1].expected
with open(change[0], 'w') as outfile:
with open(change[0], 'w', encoding='utf-8') as outfile:
outfile.write('\n'.join(lines) + '\n')
# If there were no issues whatsoever, note that.
@ -250,7 +250,7 @@ class Updater:
self._check_source_file(fname)
def _check_source_file(self, fname: str) -> None:
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
lines = infile.read().splitlines()
if self._license_line_checks:
@ -299,7 +299,7 @@ class Updater:
# Make sure its define guard is correct.
guard = (fname[4:].upper().replace('/', '_').replace('.', '_') + '_')
with open(fname) as fhdr:
with open(fname, encoding='utf-8') as fhdr:
lines = fhdr.read().splitlines()
if self._license_line_checks:
@ -340,7 +340,7 @@ class Updater:
fnames = [n for n in fnames if '/build/' not in n]
for fname in fnames:
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
makefile = infile.read()
if self._public:
public_license = get_public_license('makefile')
@ -354,7 +354,7 @@ class Updater:
def _check_python_file(self, fname: str) -> None:
from efrotools import get_public_license, PYVER
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
contents = infile.read()
lines = contents.splitlines()
@ -451,7 +451,7 @@ class Updater:
if not os.path.exists(fname):
return
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
lines = infile.read().splitlines()
src_root = '..\\..\\src'
@ -556,7 +556,7 @@ class Updater:
return filename not in self._get_internal_source_files()
def _update_cmake_file(self, fname: str) -> None:
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
lines = infile.read().splitlines()
for section in ['PUBLIC', 'PRIVATE']:

View File

@ -27,7 +27,7 @@ def camel_case_convert(name: str) -> str:
def _gen_enums(infilename: str) -> str:
out = ''
enum_lnums: List[int] = []
with open(infilename) as infile:
with open(infilename, encoding='utf-8') as infile:
lines = infile.read().splitlines()
# Tally up all places tagged for exporting python enums.
@ -150,5 +150,5 @@ def generate(projroot: str, infilename: str, outfilename: str) -> None:
path = project_centric_path(projroot=projroot, path=outfilename)
print(f'Meta-building {Clr.BLD}{path}{Clr.RST}')
os.makedirs(os.path.dirname(outfilename), exist_ok=True)
with open(outfilename, 'w') as outfile:
with open(outfilename, 'w', encoding='utf-8') as outfile:
outfile.write(out)

View File

@ -362,7 +362,7 @@ def update(projroot: str, check: bool) -> None:
assert isinstance(public, bool)
fname = 'resources/Makefile'
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
original = infile.read()
lines = original.splitlines()
@ -432,5 +432,5 @@ def update(projroot: str, check: bool) -> None:
f'EXPECTED------\n{out}\nEND EXPECTED-------\n')
raise CleanError(f"ERROR: file is out of date: '{fname}'.")
print(f'{Clr.SBLU}Updating: {fname}{Clr.RST}')
with open(fname, 'w') as outfile:
with open(fname, 'w', encoding='utf-8') as outfile:
outfile.write(out)

View File

@ -32,7 +32,7 @@ def project_build_path(projroot: str, project_path: str,
try:
if os.path.exists(config_path):
with open(config_path) as infile:
with open(config_path, encoding='utf-8') as infile:
config = json.loads(infile.read())
if (project_path in config
and configuration in config[project_path]):
@ -84,7 +84,7 @@ def project_build_path(projroot: str, project_path: str,
'timestamp': time.time()
}
os.makedirs(os.path.dirname(config_path), exist_ok=True)
with open(config_path, 'w') as outfile:
with open(config_path, 'w', encoding='utf-8') as outfile:
outfile.write(json.dumps(config))
assert build_dir is not None

View File

@ -1,6 +1,6 @@
# Released under the MIT License. See LICENSE for details.
#
"""Functionality for dealing with errors."""
"""Common errors and related functionality."""
from __future__ import annotations
from typing import TYPE_CHECKING
@ -33,3 +33,29 @@ class CleanError(Exception):
errstr = str(self)
if errstr:
print(f'{Clr.SRED}{errstr}{Clr.RST}', flush=flush)
class TransportError(Exception):
"""A transport-related communication error has occurred.
This covers anything network-related going wrong in the sending
of data or receiving of a response. This error does not imply
that data was not received on the other end; only that a full
response round trip was not completed.
These errors should be gracefully handled whenever possible, as
occasional network outages are generally unavoidable.
"""
class RemoteError(Exception):
"""An error occurred on the other end of some connection.
This occurs when communication succeeds but another type of error
occurs remotely. The error string can consist of a remote stack
trace or a simple message depending on the context.
"""
def __str__(self) -> str:
s = ''.join(str(arg) for arg in self.args)
return f'Remote Exception Follows:\n{s}'

View File

@ -10,6 +10,7 @@ from typing import TYPE_CHECKING
if TYPE_CHECKING:
from typing import Dict, Type, Tuple, List, Any, Callable, Optional
from efro.error import TransportError
class MessageProtocol:
@ -23,13 +24,24 @@ class MessageProtocol:
message_types: Dict[int, Tuple[Type, List[Type]]],
type_key: str = '_t',
) -> None:
"""Create a protocol with the given settings.
"""Create a protocol with a given configuration.
Each entry for message_types should contain an ID, a message type,
and all possible response types.
"""
self._message_types = message_types
self._type_key = type_key
@classmethod
def create_sender_module(cls, classname: str) -> str:
def message_encode(self, message: Any) -> bytes:
"""Encode a message to bytes for sending."""
print(f'WOULD ENCODE MSG: {message} TO RAW.')
return b''
def message_decode(self, data: bytes) -> Any:
"""Decode a message from bytes."""
print(f'WOULD DECODE MSG FROM RAW: {str(data)}')
return 'foo'
def create_sender_module(self, classname: str) -> str:
""""Create a Python module defining a MessageSender subclass.
This class is primarily for type checking and will contain overrides
@ -37,8 +49,7 @@ class MessageProtocol:
in the protocol.
"""
@classmethod
def create_receiver_module(cls, classname: str) -> str:
def create_receiver_module(self, classname: str) -> str:
""""Create a Python module defining a MessageReceiver subclass.
This class is primarily for type checking and will contain overrides
@ -47,16 +58,6 @@ class MessageProtocol:
"""
class TransportError(Exception):
"""Error occurring for all transport related errors in messaging.
This covers anything network-related going wrong in the sending
of data or receiving of the response. This error does not imply
that the message was not received on the other end; only that a
complete response round trip was not completed.
"""
class MessageSender:
"""Facilitates sending messages to a target and receiving responses.
This is instantiated at the class level and used to register unbound
@ -78,10 +79,11 @@ class MessageSender:
"""
def __init__(
self, protocol: MessageProtocol,
send_raw_message: Optional[Callable[[Any, bytes], bytes]]) -> None:
self, protocol: MessageProtocol,
send_raw_message_call: Optional[Callable[[Any, bytes],
bytes]]) -> None:
self._protocol = protocol
self._send_raw_message = send_raw_message
self._send_raw_message_call = send_raw_message_call
def __get__(self, obj: Any, type_in: Any = None) -> Any:
if obj is None:
@ -93,10 +95,10 @@ class MessageSender:
"""Send a message and receive a response.
Will encode the message for transport and call dispatch_raw_message()
"""
if self._send_raw_message is None:
if self._send_raw_message_call is None:
raise RuntimeError('Unimplemented!')
print(f'WOULD CONVERT MSG TO RAW: {message}')
return self._send_raw_message(None, b'')
encoded = self._protocol.message_encode(message)
return self._send_raw_message_call(None, encoded)
def send_bg(self, message: Any) -> Any:
"""Send a message asynchronously and receive a future.
@ -112,19 +114,6 @@ class MessageSender:
"""
raise RuntimeError('Unimplemented!')
# def send_raw_message(self, msg: bytes) -> bytes:
# """Send a message and get a response synchronously.
# Should be overridden by child classes if supported.
# Gets called by send() or in a bg thread by send_bg().
# """
# raise TransportError('Unimplemented for this dispatch type.')
# async def send_raw_message_async(self, msg: bytes) -> bytes:
# """Send a message and get a response via asyncio.
# Should be overridden by child classes if supported.
# """
# raise TransportError('Unimplemented for this dispatch type.')
class MessageReceiver:
"""Facilitates receiving & responding to messages from a remote source.
@ -142,9 +131,12 @@ class MessageReceiver:
def handle_some_message_type(self, message: SomeType) -> AnotherType:
# Deal with this message type here.
# This will be passed along to the registered handler.
# This will trigger the registered handler being called.
obj = MyClass()
obj.receiver.handle_raw_message(some_raw_data)
Any unhandled Exception occurring during message handling will result in
an Exception being raised on the sending end.
"""
def __init__(self, protocol: MessageProtocol) -> None:
@ -162,23 +154,3 @@ class MessageReceiver:
"""Should be called when the receiver gets a message.
The return value is the raw response to the message.
"""
# class SubTest(MessageSender):
# """Test."""
# if TYPE_CHECKING:
# @overload
# def send(self, message: str) -> str:
# pass
# @overload
# def send(self, message: bool) -> bool:
# pass
# def send(self, message: Any) -> Any:
# pass
# blah = SubTest(protocol=MessageProtocol(message_types={}))
# blah.send('foo')

View File

@ -37,7 +37,8 @@ def getlocalconfig(projroot: Path) -> Dict[str, Any]:
"""Return a project's localconfig contents (or default if missing)."""
localconfig: Dict[str, Any]
try:
with open(Path(projroot, 'config/localconfig.json')) as infile:
with open(Path(projroot, 'config/localconfig.json'),
encoding='utf-8') as infile:
localconfig = json.loads(infile.read())
except FileNotFoundError:
localconfig = {}
@ -48,7 +49,8 @@ def getconfig(projroot: Path) -> Dict[str, Any]:
"""Return a project's config contents (or default if missing)."""
config: Dict[str, Any]
try:
with open(Path(projroot, 'config/config.json')) as infile:
with open(Path(projroot, 'config/config.json'),
encoding='utf-8') as infile:
config = json.loads(infile.read())
except FileNotFoundError:
config = {}
@ -84,13 +86,13 @@ def get_public_license(style: str) -> str:
def readfile(path: Union[str, Path]) -> str:
"""Read a text file and return a str."""
with open(path) as infile:
with open(path, encoding='utf-8') as infile:
return infile.read()
def writefile(path: Union[str, Path], txt: str) -> None:
"""Write a string to a file."""
with open(path, 'w') as outfile:
with open(path, 'w', encoding='utf-8') as outfile:
outfile.write(txt)
@ -157,7 +159,7 @@ def py_examine(projroot: Path, filename: Path, line: int, column: int,
# Pull in our pylint plugin which really just adds astroid filters.
# That way our introspection here will see the same thing as pylint's does.
with open(filename) as infile:
with open(filename, encoding='utf-8') as infile:
fcontents = infile.read()
if '#@' in fcontents:
raise Exception('#@ marker found in file; this breaks examinations.')

View File

@ -23,7 +23,7 @@ def filter_gradle_file(buildfilename: str, enabled_tags: Set[str]) -> None:
sections: List[GradleFilterSection] = []
with open(buildfilename) as infile:
with open(buildfilename, encoding='utf-8') as infile:
original = infile.read()
lines = original.splitlines()
@ -61,5 +61,5 @@ def filter_gradle_file(buildfilename: str, enabled_tags: Set[str]) -> None:
# Only write if its not changed (potentially avoid triggering builds).
out = '\n'.join(lines) + '\n'
if out != original:
with open(buildfilename, 'w') as outfile:
with open(buildfilename, 'w', encoding='utf-8') as outfile:
outfile.write(out)

View File

@ -198,7 +198,7 @@ def _should_include_script(fnamefull: str) -> bool:
# Look for 'binary' scripts with no extensions too.
if not fname.startswith('.') and '.' not in fname:
try:
with open(fnamefull) as infile:
with open(fnamefull, encoding='utf-8') as infile:
line = infile.readline()
if '/usr/bin/env python' in line or '/usr/bin/python' in line:
return True
@ -726,7 +726,7 @@ def _run_idea_inspections_cached(cachepath: Path,
current_hash = md5.hexdigest()
existing_hash: Optional[str]
try:
with open(cachepath) as infile2:
with open(cachepath, encoding='utf-8') as infile2:
existing_hash = json.loads(infile2.read())['hash']
except Exception:
existing_hash = None
@ -738,7 +738,7 @@ def _run_idea_inspections_cached(cachepath: Path,
verbose=verbose,
inspectdir=inspectdir)
cachepath.parent.mkdir(parents=True, exist_ok=True)
with open(cachepath, 'w') as outfile:
with open(cachepath, 'w', encoding='utf-8') as outfile:
outfile.write(json.dumps({'hash': current_hash}))
print(
f'{Clr.GRN}{displayname}: all {len(filenames)}'

View File

@ -66,7 +66,7 @@ def get_target(path: str) -> None:
path = _project_centric_path(path)
with open(CACHE_MAP_NAME) as infile:
with open(CACHE_MAP_NAME, encoding='utf-8') as infile:
efrocachemap = json.loads(infile.read())
if path not in efrocachemap:
raise RuntimeError(f'Path not found in efrocache: {path}')
@ -218,7 +218,7 @@ def update_cache(makefile_dirs: List[str]) -> None:
# is exactly the same as last time we can skip this step.
hashes = _gen_hashes(fnames1 + fnames2)
if os.path.isfile(UPLOAD_STATE_CACHE_FILE):
with open(UPLOAD_STATE_CACHE_FILE) as infile:
with open(UPLOAD_STATE_CACHE_FILE, encoding='utf-8') as infile:
hashes_existing = infile.read()
else:
hashes_existing = ''
@ -234,7 +234,7 @@ def update_cache(makefile_dirs: List[str]) -> None:
# Write the cache state so we can skip the next run if nothing changes.
os.makedirs(os.path.dirname(UPLOAD_STATE_CACHE_FILE), exist_ok=True)
with open(UPLOAD_STATE_CACHE_FILE, 'w') as outfile:
with open(UPLOAD_STATE_CACHE_FILE, 'w', encoding='utf-8') as outfile:
outfile.write(hashes)
@ -352,10 +352,11 @@ def _write_cache_files(fnames1: List[str], fnames2: List[str],
'subprocess.run(["rm", "-rf", "efrocache", "genstartercache.py"])\n'
'print("Starter cache generation complete!", flush=True)\n')
with open('build/efrocache/genstartercache.py', 'w') as outfile:
with open('build/efrocache/genstartercache.py', 'w',
encoding='utf-8') as outfile:
outfile.write(script)
with open(mapping_file, 'w') as outfile:
with open(mapping_file, 'w', encoding='utf-8') as outfile:
outfile.write(json.dumps(mapping, indent=2, sort_keys=True))
@ -437,7 +438,7 @@ def warm_start_cache() -> None:
# each time the cache map changes. It is much more efficient to do
# it in one go here.
cachemap: Dict[str, str]
with open(CACHE_MAP_NAME) as infile:
with open(CACHE_MAP_NAME, encoding='utf-8') as infile:
cachemap = json.loads(infile.read())
assert isinstance(cachemap, dict)
cachemap_mtime = os.path.getmtime(CACHE_MAP_NAME)

View File

@ -8,8 +8,13 @@ import json
import os
from typing import TYPE_CHECKING
from efrotools import get_files_hash
# Pylint's preferred import order here seems non-deterministic (as of 2.10.1).
# pylint: disable=useless-suppression
# pylint: disable=wrong-import-order
from efro.terminal import Clr
from efrotools import get_files_hash
# pylint: enable=wrong-import-order
# pylint: enable=useless-suppression
if TYPE_CHECKING:
from typing import Dict, Optional, Sequence, Any
@ -27,7 +32,7 @@ class FileCache:
if not os.path.exists(path):
self.entries = {}
else:
with open(path, 'r') as infile:
with open(path, 'r', encoding='utf-8') as infile:
self.entries = json.loads(infile.read())
def update(self, filenames: Sequence[str], extrahash: str) -> None:

View File

@ -123,7 +123,7 @@ def _spelling(words: List[str]) -> None:
]:
if not os.path.exists(fname):
continue
with open(fname) as infile:
with open(fname, encoding='utf-8') as infile:
lines = infile.read().splitlines()
if lines[2] != ' <words>':
raise RuntimeError('Unexpected dictionary format.')
@ -134,7 +134,7 @@ def _spelling(words: List[str]) -> None:
lines.insert(3, line)
added_count += 1
with open(fname, 'w') as outfile:
with open(fname, 'w', encoding='utf-8') as outfile:
# Sort lines in the words section.
assert all(l.startswith(' <w>') for l in lines[3:-3])
@ -252,14 +252,14 @@ def formatscripts() -> None:
def formatmakefile() -> None:
"""Format the main makefile."""
from efrotools.makefile import Makefile
with open('Makefile') as infile:
with open('Makefile', encoding='utf-8') as infile:
original = infile.read()
formatted = Makefile(original).get_output()
# Only write if it changed.
if formatted != original:
with open('Makefile', 'w') as outfile:
with open('Makefile', 'w', encoding='utf-8') as outfile:
outfile.write(formatted)
@ -582,7 +582,7 @@ def makefile_target_list() -> None:
if len(sys.argv) != 3:
raise RuntimeError('Expected exactly one filename arg.')
with open(sys.argv[2]) as infile:
with open(sys.argv[2], encoding='utf-8') as infile:
lines = infile.readlines()
def _docstr(lines2: List[str], linenum: int) -> str:

View File

@ -713,7 +713,8 @@ def gather() -> None:
# Write a master pyconfig header that reroutes to each
# platform's actual header.
with open(header_dst + '/pyconfig.h', 'w') as hfile:
with open(header_dst + '/pyconfig.h', 'w',
encoding='utf-8') as hfile:
hfile.write(
'#if BA_OSTYPE_MACOS\n'
'#include "pyconfig-macos.h"\n\n'

View File

@ -9,7 +9,7 @@ from typing import TYPE_CHECKING
import astroid
if TYPE_CHECKING:
from astroid import node_classes as nc
from astroid import nodes as nc
from typing import Set, Dict, Any, List
VERBOSE = False

View File

@ -46,7 +46,7 @@ class StaticTestFile:
self.linetypes_mypy: Dict[int, str] = {}
print(f'Running Mypy static testing on "{filename}"...')
with open(filename, 'r') as infile:
with open(filename, 'r', encoding='utf-8') as infile:
fdata = infile.read()
# Make sure we're running where the config is..
@ -63,7 +63,7 @@ class StaticTestFile:
# instances of static_type_equals(), and run mypy type checks
# in those places to get static types.
tempfilepath = os.path.join(_tempdir.name, self.modulename + '.py')
with open(tempfilepath, 'w') as outfile:
with open(tempfilepath, 'w', encoding='utf-8') as outfile:
outfile.write(self.filter_file_contents(fdata))
results = subprocess.run(
[