mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-05 23:13:46 +08:00
langs and misc library work
This commit is contained in:
parent
dc6d29de22
commit
37588433bc
92
.efrocachemap
generated
92
.efrocachemap
generated
@ -421,7 +421,7 @@
|
|||||||
"build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26",
|
"build/assets/ba_data/audio/zoeOw.ogg": "74befe45a8417e95b6a2233c51992a26",
|
||||||
"build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8",
|
"build/assets/ba_data/audio/zoePickup01.ogg": "48ab8cddfcde36a750856f3f81dd20c8",
|
||||||
"build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55",
|
"build/assets/ba_data/audio/zoeScream01.ogg": "2b468aedfa8741090247f04eb9e6df55",
|
||||||
"build/assets/ba_data/data/langdata.json": "750e45f2f19a94a44703e3d31b9a8e96",
|
"build/assets/ba_data/data/langdata.json": "831b83240126d0a851104f4148712ed1",
|
||||||
"build/assets/ba_data/data/languages/arabic.json": "0db32e21b6d5337ccca478381744aa88",
|
"build/assets/ba_data/data/languages/arabic.json": "0db32e21b6d5337ccca478381744aa88",
|
||||||
"build/assets/ba_data/data/languages/belarussian.json": "a112dfca3e188387516788bd8229c5b0",
|
"build/assets/ba_data/data/languages/belarussian.json": "a112dfca3e188387516788bd8229c5b0",
|
||||||
"build/assets/ba_data/data/languages/chinese.json": "1360ffde06828b63ce4fe956c3c3cd1d",
|
"build/assets/ba_data/data/languages/chinese.json": "1360ffde06828b63ce4fe956c3c3cd1d",
|
||||||
@ -456,7 +456,7 @@
|
|||||||
"build/assets/ba_data/data/languages/thai.json": "9c425b420f0488a7f883da98947657ad",
|
"build/assets/ba_data/data/languages/thai.json": "9c425b420f0488a7f883da98947657ad",
|
||||||
"build/assets/ba_data/data/languages/turkish.json": "2be25c89ca754341f27750e0d595f31e",
|
"build/assets/ba_data/data/languages/turkish.json": "2be25c89ca754341f27750e0d595f31e",
|
||||||
"build/assets/ba_data/data/languages/ukrainian.json": "b54a38e93deebafa5706ba2d1f626892",
|
"build/assets/ba_data/data/languages/ukrainian.json": "b54a38e93deebafa5706ba2d1f626892",
|
||||||
"build/assets/ba_data/data/languages/venetian.json": "8e9714d98a85e428ce3543fc49188a46",
|
"build/assets/ba_data/data/languages/venetian.json": "f896fc3df13a42f1bef8813ca80b1a09",
|
||||||
"build/assets/ba_data/data/languages/vietnamese.json": "921cd1e50f60fe3e101f246e172750ba",
|
"build/assets/ba_data/data/languages/vietnamese.json": "921cd1e50f60fe3e101f246e172750ba",
|
||||||
"build/assets/ba_data/data/maps/big_g.json": "1dd301d490643088a435ce75df971054",
|
"build/assets/ba_data/data/maps/big_g.json": "1dd301d490643088a435ce75df971054",
|
||||||
"build/assets/ba_data/data/maps/bridgit.json": "6aea74805f4880cc11237c5734a24422",
|
"build/assets/ba_data/data/maps/bridgit.json": "6aea74805f4880cc11237c5734a24422",
|
||||||
@ -4060,50 +4060,50 @@
|
|||||||
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
|
"build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1",
|
||||||
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
|
"build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae",
|
||||||
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
|
"build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599",
|
||||||
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "7169141b846e3c15160f3405bd1ed2ce",
|
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "d5a8312cd9cf65f32ca2a7c4a2063c03",
|
||||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "04869210f06ff8c00fb6d68a69f6b335",
|
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "aecb00e9044fa677583e1036fa7875d8",
|
||||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "e28eac17f30edddc35c483fbc4e69fc5",
|
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "eca7f9ab892edfa7423a9d4a6f89e571",
|
||||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "342aee2d1f2965caed811a72888cc7f1",
|
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "99647f48362f84112d23a9bc89eaa983",
|
||||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "c091240edeeeac378ffe86ce1421decc",
|
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "31e21a64d77fc0834832b633a26d986b",
|
||||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "c959d3661ea83a2f9920da6d6d355fd9",
|
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "7c12b4078c3af6e627a4051b1c1d8370",
|
||||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "9015fb2718d6fc5a9a9bd95b0086bde6",
|
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "f7a66c48321efa4462e8eae6b72db2b2",
|
||||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "dfcd11db04c0071b7e5032673c2dad43",
|
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "08cdbeb2ca4fa8c996f3369680c4e5cd",
|
||||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "8a0ad295f62fc9cfa4a71d30038b0c20",
|
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "f92679bab5a0d057427962869e19f057",
|
||||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "21f2f9aecbd0c60b8e125f206ebd44c2",
|
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "d5bcd695f84dab1ab32655989d399c9e",
|
||||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "df5d59cf4b6da427b3e2bb4d1136cf32",
|
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "c766f437ece15dae0ee971e4c2e10a2d",
|
||||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "72f5ab8cd24ce31b8bbfe08ce691bf7b",
|
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "cbecc4c11b9aa4621abfdc996fecfd74",
|
||||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "11280b6cbec7a21574f0e8e29c379bea",
|
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7af782c9d9bcf1396a15dea6f2493d70",
|
||||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "766b8ad86046a92fa5fa25a0a7ad88ae",
|
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "2c04f3f68db3e73e4aad4c656d956c00",
|
||||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "10ac2e99587552edfc3eb089ea69ede4",
|
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "132c83ee8811828739601ac3d0599fe9",
|
||||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "8cd63147b79d8866af817d01dcc8f5eb",
|
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "8de942a2e1ff96c147a9500a56ca4f64",
|
||||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "061de20725a847ac6ed327d8c2e5b905",
|
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "6bf51ccbd01937bf1b28cfffe029d857",
|
||||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "6556a6e96f2a360a4006f2c2b7a5a1f1",
|
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "c5f0d834a47852f1c240e17a6c933e0a",
|
||||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "1324063eeaeda2c72f7e133984fa838b",
|
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "4f74b71dabd207bee732dc91c9a28dc4",
|
||||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "3c6b96c3a63fc53819425f8872264aa8",
|
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "f48ab8e4c4d05f4b2231bebf33c965f1",
|
||||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "8709ad96140d71760c2f493ee8bd7c43",
|
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "ee36a39fd0f524989cb68930c89c8868",
|
||||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "ee829cd5488e9750570dc6f602d65589",
|
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "dbed9145e5db116d92aa47cb9e98da39",
|
||||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "8709ad96140d71760c2f493ee8bd7c43",
|
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "ee36a39fd0f524989cb68930c89c8868",
|
||||||
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "ee829cd5488e9750570dc6f602d65589",
|
"build/prefab/lib/linux_arm64_server/release/libballisticaplus.a": "dbed9145e5db116d92aa47cb9e98da39",
|
||||||
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "35fe69d96c154b97b534711dae9d8d3a",
|
"build/prefab/lib/linux_x86_64_gui/debug/libballisticaplus.a": "dc078f11a4e93062adc7d210fd4f08fb",
|
||||||
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "2db876e543b3e93128ec421ea5cbb011",
|
"build/prefab/lib/linux_x86_64_gui/release/libballisticaplus.a": "a74bea3380d0fb39f78ac7b7598c1a72",
|
||||||
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "35fe69d96c154b97b534711dae9d8d3a",
|
"build/prefab/lib/linux_x86_64_server/debug/libballisticaplus.a": "dc078f11a4e93062adc7d210fd4f08fb",
|
||||||
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "2db876e543b3e93128ec421ea5cbb011",
|
"build/prefab/lib/linux_x86_64_server/release/libballisticaplus.a": "a74bea3380d0fb39f78ac7b7598c1a72",
|
||||||
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "417ea0f30d203d5de0e235550fcd7ab8",
|
"build/prefab/lib/mac_arm64_gui/debug/libballisticaplus.a": "b397e020f33132c4dd2280cb1222cd14",
|
||||||
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "72d071e977c88454d0623c4a9fb34361",
|
"build/prefab/lib/mac_arm64_gui/release/libballisticaplus.a": "ff0cb4db976707d25bd401bce80a4882",
|
||||||
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "417ea0f30d203d5de0e235550fcd7ab8",
|
"build/prefab/lib/mac_arm64_server/debug/libballisticaplus.a": "b397e020f33132c4dd2280cb1222cd14",
|
||||||
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "72d071e977c88454d0623c4a9fb34361",
|
"build/prefab/lib/mac_arm64_server/release/libballisticaplus.a": "ff0cb4db976707d25bd401bce80a4882",
|
||||||
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "de1b228d95c47a7c296a853778715326",
|
"build/prefab/lib/mac_x86_64_gui/debug/libballisticaplus.a": "c464accef921df1325459bdd10c59b84",
|
||||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "79117cbfdf695298e1d9ae997d990c4d",
|
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "0896e849885cef50bcf33ce863efa7d2",
|
||||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "984f0990a8e4cca29a382d70e51cc051",
|
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "e53c808357cc0a2f0da7b870be147083",
|
||||||
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "79117cbfdf695298e1d9ae997d990c4d",
|
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "0896e849885cef50bcf33ce863efa7d2",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "810dd57e398827fb3abc488a4185a0b3",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "e34cc55fd284e31d9ed1151c5a51bf34",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "c10f8fb6e748f6244753adef81ef5ed4",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "36cb65be158a0103d81c82d8a51dc8b6",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "d30f36c9c925e52e94ef39afc8b0a35e",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "21f8a61745c2fec88749299f5aeeeaf9",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "88431c1a6372b951ce85c2c73bc7f8c5",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "d61272f101f87b140b84895e482b07f4",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "928e9fd64e81de0d43e433a4474826cb",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "36c30bcd93d38569b9515ed17896d8de",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "ae0ce0dd3541770cb7bd93997aca3e04",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "841c7cd3cc96c91ecd11335a91c0c465",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "0de083bc720affcbab4fbf0c121a84fe",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "305aab4423bf510f6bf95fe0c996128f",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "299be2aa45e5d943b56828f065911172",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "f1066b8591d7859df76c8e976ceee2d5",
|
||||||
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
"src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c",
|
||||||
"src/assets/ba_data/python/babase/_mgen/enums.py": "b611c090513a21e2fe90e56582724e9d",
|
"src/assets/ba_data/python/babase/_mgen/enums.py": "b611c090513a21e2fe90e56582724e9d",
|
||||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "72bfed2cce8ff19741989dec28302f3f",
|
"src/ballistica/base/mgen/pyembed/binding_base.inc": "72bfed2cce8ff19741989dec28302f3f",
|
||||||
|
|||||||
5
Makefile
5
Makefile
@ -49,7 +49,7 @@ endif
|
|||||||
# Prereq targets that should be safe to run anytime; even if project-files
|
# Prereq targets that should be safe to run anytime; even if project-files
|
||||||
# are out of date.
|
# are out of date.
|
||||||
PREREQS_SAFE = .cache/checkenv $(PCOMMANDBATCHBIN) .dir-locals.el .mypy.ini \
|
PREREQS_SAFE = .cache/checkenv $(PCOMMANDBATCHBIN) .dir-locals.el .mypy.ini \
|
||||||
.pyrightconfig.json .pycheckers .pylintrc .style.yapf .clang-format \
|
.pyrightconfig.json .pylintrc .style.yapf .clang-format \
|
||||||
ballisticakit-cmake/.clang-format .editorconfig
|
ballisticakit-cmake/.clang-format .editorconfig
|
||||||
|
|
||||||
# Prereq targets that may break if the project needs updating should go here.
|
# Prereq targets that may break if the project needs updating should go here.
|
||||||
@ -1216,9 +1216,6 @@ ENV_SRC = $(PCOMMAND) tools/batools/build.py
|
|||||||
.pyrightconfig.json: config/toolconfigsrc/pyrightconfig.yaml $(TOOL_CFG_SRC)
|
.pyrightconfig.json: config/toolconfigsrc/pyrightconfig.yaml $(TOOL_CFG_SRC)
|
||||||
@$(TOOL_CFG_INST) $< $@
|
@$(TOOL_CFG_INST) $< $@
|
||||||
|
|
||||||
.pycheckers: config/toolconfigsrc/pycheckers $(TOOL_CFG_SRC)
|
|
||||||
@$(TOOL_CFG_INST) $< $@
|
|
||||||
|
|
||||||
# Set this to 1 to skip environment checks.
|
# Set this to 1 to skip environment checks.
|
||||||
SKIP_ENV_CHECKS ?= 0
|
SKIP_ENV_CHECKS ?= 0
|
||||||
|
|
||||||
|
|||||||
@ -288,14 +288,12 @@ class DirectoryScan:
|
|||||||
) -> None:
|
) -> None:
|
||||||
"""Scan provided path and add module entries to provided list."""
|
"""Scan provided path and add module entries to provided list."""
|
||||||
try:
|
try:
|
||||||
# Special case: let's save some time and skip the whole 'babase'
|
|
||||||
# package since we know it doesn't contain any meta tags.
|
|
||||||
fullpath = Path(path, subpath)
|
fullpath = Path(path, subpath)
|
||||||
|
# Note: skipping hidden dirs (starting with '.').
|
||||||
entries = [
|
entries = [
|
||||||
(path, Path(subpath, name))
|
(path, Path(subpath, name))
|
||||||
for name in os.listdir(fullpath)
|
for name in os.listdir(fullpath)
|
||||||
# Actually scratch that for now; trying to avoid special cases.
|
if not name.startswith('.')
|
||||||
# if name != 'babase'
|
|
||||||
]
|
]
|
||||||
except PermissionError:
|
except PermissionError:
|
||||||
# Expected sometimes.
|
# Expected sometimes.
|
||||||
|
|||||||
@ -149,16 +149,13 @@ class _BoundTestMessageSenderSync(BoundMessageSender):
|
|||||||
"""Protocol-specific bound sender."""
|
"""Protocol-specific bound sender."""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def send(self, message: _TMsg1) -> _TResp1:
|
def send(self, message: _TMsg1) -> _TResp1: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def send(self, message: _TMsg2) -> _TResp1 | _TResp2:
|
def send(self, message: _TMsg2) -> _TResp1 | _TResp2: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def send(self, message: _TMsg3) -> None:
|
def send(self, message: _TMsg3) -> None: ...
|
||||||
...
|
|
||||||
|
|
||||||
def send(self, message: Message) -> Response | None:
|
def send(self, message: Message) -> Response | None:
|
||||||
"""Send a message synchronously."""
|
"""Send a message synchronously."""
|
||||||
@ -188,16 +185,13 @@ class _BoundTestMessageSenderAsync(BoundMessageSender):
|
|||||||
"""Protocol-specific bound sender."""
|
"""Protocol-specific bound sender."""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
async def send_async(self, message: _TMsg1) -> _TResp1:
|
async def send_async(self, message: _TMsg1) -> _TResp1: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
async def send_async(self, message: _TMsg2) -> _TResp1 | _TResp2:
|
async def send_async(self, message: _TMsg2) -> _TResp1 | _TResp2: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
async def send_async(self, message: _TMsg3) -> None:
|
async def send_async(self, message: _TMsg3) -> None: ...
|
||||||
...
|
|
||||||
|
|
||||||
def send_async(self, message: Message) -> Awaitable[Response | None]:
|
def send_async(self, message: Message) -> Awaitable[Response | None]:
|
||||||
"""Send a message asynchronously."""
|
"""Send a message asynchronously."""
|
||||||
@ -227,40 +221,32 @@ class _BoundTestMessageSenderBBoth(BoundMessageSender):
|
|||||||
"""Protocol-specific bound sender."""
|
"""Protocol-specific bound sender."""
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def send(self, message: _TMsg1) -> _TResp1:
|
def send(self, message: _TMsg1) -> _TResp1: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def send(self, message: _TMsg2) -> _TResp1 | _TResp2:
|
def send(self, message: _TMsg2) -> _TResp1 | _TResp2: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def send(self, message: _TMsg3) -> None:
|
def send(self, message: _TMsg3) -> None: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def send(self, message: _TMsg4) -> None:
|
def send(self, message: _TMsg4) -> None: ...
|
||||||
...
|
|
||||||
|
|
||||||
def send(self, message: Message) -> Response | None:
|
def send(self, message: Message) -> Response | None:
|
||||||
"""Send a message synchronously."""
|
"""Send a message synchronously."""
|
||||||
return self._sender.send(self._obj, message)
|
return self._sender.send(self._obj, message)
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
async def send_async(self, message: _TMsg1) -> _TResp1:
|
async def send_async(self, message: _TMsg1) -> _TResp1: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
async def send_async(self, message: _TMsg2) -> _TResp1 | _TResp2:
|
async def send_async(self, message: _TMsg2) -> _TResp1 | _TResp2: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
async def send_async(self, message: _TMsg3) -> None:
|
async def send_async(self, message: _TMsg3) -> None: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
async def send_async(self, message: _TMsg4) -> None:
|
async def send_async(self, message: _TMsg4) -> None: ...
|
||||||
...
|
|
||||||
|
|
||||||
def send_async(self, message: Message) -> Awaitable[Response | None]:
|
def send_async(self, message: Message) -> Awaitable[Response | None]:
|
||||||
"""Send a message asynchronously."""
|
"""Send a message asynchronously."""
|
||||||
@ -338,22 +324,19 @@ class _TestSyncMessageReceiver(MessageReceiver):
|
|||||||
def handler(
|
def handler(
|
||||||
self,
|
self,
|
||||||
call: Callable[[Any, _TMsg1], _TResp1],
|
call: Callable[[Any, _TMsg1], _TResp1],
|
||||||
) -> Callable[[Any, _TMsg1], _TResp1]:
|
) -> Callable[[Any, _TMsg1], _TResp1]: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def handler(
|
def handler(
|
||||||
self,
|
self,
|
||||||
call: Callable[[Any, _TMsg2], _TResp1 | _TResp2],
|
call: Callable[[Any, _TMsg2], _TResp1 | _TResp2],
|
||||||
) -> Callable[[Any, _TMsg2], _TResp1 | _TResp2]:
|
) -> Callable[[Any, _TMsg2], _TResp1 | _TResp2]: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def handler(
|
def handler(
|
||||||
self,
|
self,
|
||||||
call: Callable[[Any, _TMsg3], None],
|
call: Callable[[Any, _TMsg3], None],
|
||||||
) -> Callable[[Any, _TMsg3], None]:
|
) -> Callable[[Any, _TMsg3], None]: ...
|
||||||
...
|
|
||||||
|
|
||||||
def handler(self, call: Callable) -> Callable:
|
def handler(self, call: Callable) -> Callable:
|
||||||
"""Decorator to register message handlers."""
|
"""Decorator to register message handlers."""
|
||||||
@ -399,22 +382,19 @@ class _TestAsyncMessageReceiver(MessageReceiver):
|
|||||||
def handler(
|
def handler(
|
||||||
self,
|
self,
|
||||||
call: Callable[[Any, _TMsg1], Awaitable[_TResp1]],
|
call: Callable[[Any, _TMsg1], Awaitable[_TResp1]],
|
||||||
) -> Callable[[Any, _TMsg1], Awaitable[_TResp1]]:
|
) -> Callable[[Any, _TMsg1], Awaitable[_TResp1]]: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def handler(
|
def handler(
|
||||||
self,
|
self,
|
||||||
call: Callable[[Any, _TMsg2], Awaitable[_TResp1 | _TResp2]],
|
call: Callable[[Any, _TMsg2], Awaitable[_TResp1 | _TResp2]],
|
||||||
) -> Callable[[Any, _TMsg2], Awaitable[_TResp1 | _TResp2]]:
|
) -> Callable[[Any, _TMsg2], Awaitable[_TResp1 | _TResp2]]: ...
|
||||||
...
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def handler(
|
def handler(
|
||||||
self,
|
self,
|
||||||
call: Callable[[Any, _TMsg3], Awaitable[None]],
|
call: Callable[[Any, _TMsg3], Awaitable[None]],
|
||||||
) -> Callable[[Any, _TMsg3], Awaitable[None]]:
|
) -> Callable[[Any, _TMsg3], Awaitable[None]]: ...
|
||||||
...
|
|
||||||
|
|
||||||
def handler(self, call: Callable) -> Callable:
|
def handler(self, call: Callable) -> Callable:
|
||||||
"""Decorator to register message handlers."""
|
"""Decorator to register message handlers."""
|
||||||
|
|||||||
@ -75,9 +75,9 @@ class ResponseData:
|
|||||||
delay_seconds: Annotated[float, IOAttrs('d', store_default=False)] = 0.0
|
delay_seconds: Annotated[float, IOAttrs('d', store_default=False)] = 0.0
|
||||||
login: Annotated[str | None, IOAttrs('l', store_default=False)] = None
|
login: Annotated[str | None, IOAttrs('l', store_default=False)] = None
|
||||||
logout: Annotated[bool, IOAttrs('lo', store_default=False)] = False
|
logout: Annotated[bool, IOAttrs('lo', store_default=False)] = False
|
||||||
dir_manifest: Annotated[
|
dir_manifest: Annotated[str | None, IOAttrs('man', store_default=False)] = (
|
||||||
str | None, IOAttrs('man', store_default=False)
|
None
|
||||||
] = None
|
)
|
||||||
uploads: Annotated[
|
uploads: Annotated[
|
||||||
tuple[list[str], str, dict] | None, IOAttrs('u', store_default=False)
|
tuple[list[str], str, dict] | None, IOAttrs('u', store_default=False)
|
||||||
] = None
|
] = None
|
||||||
@ -97,9 +97,9 @@ class ResponseData:
|
|||||||
input_prompt: Annotated[
|
input_prompt: Annotated[
|
||||||
tuple[str, bool] | None, IOAttrs('inp', store_default=False)
|
tuple[str, bool] | None, IOAttrs('inp', store_default=False)
|
||||||
] = None
|
] = None
|
||||||
end_message: Annotated[
|
end_message: Annotated[str | None, IOAttrs('em', store_default=False)] = (
|
||||||
str | None, IOAttrs('em', store_default=False)
|
None
|
||||||
] = None
|
)
|
||||||
end_message_end: Annotated[str, IOAttrs('eme', store_default=False)] = '\n'
|
end_message_end: Annotated[str, IOAttrs('eme', store_default=False)] = '\n'
|
||||||
end_command: Annotated[
|
end_command: Annotated[
|
||||||
tuple[str, dict] | None, IOAttrs('ec', store_default=False)
|
tuple[str, dict] | None, IOAttrs('ec', store_default=False)
|
||||||
|
|||||||
@ -63,9 +63,9 @@ class PrivateHostingConfig:
|
|||||||
randomize: bool = False
|
randomize: bool = False
|
||||||
tutorial: bool = False
|
tutorial: bool = False
|
||||||
custom_team_names: tuple[str, str] | None = None
|
custom_team_names: tuple[str, str] | None = None
|
||||||
custom_team_colors: tuple[
|
custom_team_colors: (
|
||||||
tuple[float, float, float], tuple[float, float, float]
|
tuple[tuple[float, float, float], tuple[float, float, float]] | None
|
||||||
] | None = None
|
) = None
|
||||||
playlist: list[dict[str, Any]] | None = None
|
playlist: list[dict[str, Any]] | None = None
|
||||||
exit_minutes: float = 120.0
|
exit_minutes: float = 120.0
|
||||||
exit_minutes_unclean: float = 180.0
|
exit_minutes_unclean: float = 180.0
|
||||||
|
|||||||
@ -134,9 +134,9 @@ class ServerConfig:
|
|||||||
team_names: tuple[str, str] | None = None
|
team_names: tuple[str, str] | None = None
|
||||||
|
|
||||||
# Team colors (teams mode only).
|
# Team colors (teams mode only).
|
||||||
team_colors: tuple[
|
team_colors: (
|
||||||
tuple[float, float, float], tuple[float, float, float]
|
tuple[tuple[float, float, float], tuple[float, float, float]] | None
|
||||||
] | None = None
|
) = None
|
||||||
|
|
||||||
# Whether to enable the queue where players can line up before entering
|
# Whether to enable the queue where players can line up before entering
|
||||||
# your server. Disabling this can be used as a workaround to deal with
|
# your server. Disabling this can be used as a workaround to deal with
|
||||||
|
|||||||
@ -52,7 +52,7 @@ PY_REQUIREMENTS = [
|
|||||||
PyRequirement(pipname='requests', minversion=[2, 31, 0]),
|
PyRequirement(pipname='requests', minversion=[2, 31, 0]),
|
||||||
PyRequirement(pipname='pdoc', minversion=[14, 4, 0]),
|
PyRequirement(pipname='pdoc', minversion=[14, 4, 0]),
|
||||||
PyRequirement(pipname='PyYAML', minversion=[6, 0, 1]),
|
PyRequirement(pipname='PyYAML', minversion=[6, 0, 1]),
|
||||||
PyRequirement(pipname='black', minversion=[23, 12, 1]),
|
PyRequirement(pipname='black', minversion=[24, 1, 1]),
|
||||||
PyRequirement(pipname='typing_extensions', minversion=[4, 9, 0]),
|
PyRequirement(pipname='typing_extensions', minversion=[4, 9, 0]),
|
||||||
PyRequirement(pipname='types-filelock', minversion=[3, 2, 7]),
|
PyRequirement(pipname='types-filelock', minversion=[3, 2, 7]),
|
||||||
PyRequirement(pipname='types-requests', minversion=[2, 31, 0, 20240106]),
|
PyRequirement(pipname='types-requests', minversion=[2, 31, 0, 20240106]),
|
||||||
@ -614,7 +614,7 @@ def _get_server_config_template_yaml(projroot: str) -> str:
|
|||||||
# Ignore indented lines (our few multi-line special cases).
|
# Ignore indented lines (our few multi-line special cases).
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if line.startswith(']'):
|
if line.startswith(']') or line.startswith(')'):
|
||||||
# Ignore closing lines (our few multi-line special cases).
|
# Ignore closing lines (our few multi-line special cases).
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -643,7 +643,7 @@ def _get_server_config_template_yaml(projroot: str) -> str:
|
|||||||
before_equal_sign = before_equal_sign.strip()
|
before_equal_sign = before_equal_sign.strip()
|
||||||
vval_raw = vval_raw.strip()
|
vval_raw = vval_raw.strip()
|
||||||
vname = before_equal_sign.split()[0]
|
vname = before_equal_sign.split()[0]
|
||||||
assert vname.endswith(':')
|
assert vname.endswith(':'), f"'{vname}' does not end with ':'"
|
||||||
vname = vname[:-1]
|
vname = vname[:-1]
|
||||||
vval: Any
|
vval: Any
|
||||||
if vval_raw == 'field(default_factory=list)':
|
if vval_raw == 'field(default_factory=list)':
|
||||||
|
|||||||
@ -83,57 +83,46 @@ if TYPE_CHECKING:
|
|||||||
class _CallNoArgs(Generic[OutT]):
|
class _CallNoArgs(Generic[OutT]):
|
||||||
"""Single argument variant of call wrapper."""
|
"""Single argument variant of call wrapper."""
|
||||||
|
|
||||||
def __init__(self, _call: Callable[[], OutT]):
|
def __init__(self, _call: Callable[[], OutT]): ...
|
||||||
...
|
|
||||||
|
|
||||||
def __call__(self) -> OutT:
|
def __call__(self) -> OutT: ...
|
||||||
...
|
|
||||||
|
|
||||||
class _Call1Arg(Generic[In1T, OutT]):
|
class _Call1Arg(Generic[In1T, OutT]):
|
||||||
"""Single argument variant of call wrapper."""
|
"""Single argument variant of call wrapper."""
|
||||||
|
|
||||||
def __init__(self, _call: Callable[[In1T], OutT]):
|
def __init__(self, _call: Callable[[In1T], OutT]): ...
|
||||||
...
|
|
||||||
|
|
||||||
def __call__(self, _arg1: In1T) -> OutT:
|
def __call__(self, _arg1: In1T) -> OutT: ...
|
||||||
...
|
|
||||||
|
|
||||||
class _Call2Args(Generic[In1T, In2T, OutT]):
|
class _Call2Args(Generic[In1T, In2T, OutT]):
|
||||||
"""Two argument variant of call wrapper"""
|
"""Two argument variant of call wrapper"""
|
||||||
|
|
||||||
def __init__(self, _call: Callable[[In1T, In2T], OutT]):
|
def __init__(self, _call: Callable[[In1T, In2T], OutT]): ...
|
||||||
...
|
|
||||||
|
|
||||||
def __call__(self, _arg1: In1T, _arg2: In2T) -> OutT:
|
def __call__(self, _arg1: In1T, _arg2: In2T) -> OutT: ...
|
||||||
...
|
|
||||||
|
|
||||||
class _Call3Args(Generic[In1T, In2T, In3T, OutT]):
|
class _Call3Args(Generic[In1T, In2T, In3T, OutT]):
|
||||||
"""Three argument variant of call wrapper"""
|
"""Three argument variant of call wrapper"""
|
||||||
|
|
||||||
def __init__(self, _call: Callable[[In1T, In2T, In3T], OutT]):
|
def __init__(self, _call: Callable[[In1T, In2T, In3T], OutT]): ...
|
||||||
...
|
|
||||||
|
|
||||||
def __call__(self, _arg1: In1T, _arg2: In2T, _arg3: In3T) -> OutT:
|
def __call__(self, _arg1: In1T, _arg2: In2T, _arg3: In3T) -> OutT: ...
|
||||||
...
|
|
||||||
|
|
||||||
class _Call4Args(Generic[In1T, In2T, In3T, In4T, OutT]):
|
class _Call4Args(Generic[In1T, In2T, In3T, In4T, OutT]):
|
||||||
"""Four argument variant of call wrapper"""
|
"""Four argument variant of call wrapper"""
|
||||||
|
|
||||||
def __init__(self, _call: Callable[[In1T, In2T, In3T, In4T], OutT]):
|
def __init__(self, _call: Callable[[In1T, In2T, In3T, In4T], OutT]): ...
|
||||||
...
|
|
||||||
|
|
||||||
def __call__(
|
def __call__(
|
||||||
self, _arg1: In1T, _arg2: In2T, _arg3: In3T, _arg4: In4T
|
self, _arg1: In1T, _arg2: In2T, _arg3: In3T, _arg4: In4T
|
||||||
) -> OutT:
|
) -> OutT: ...
|
||||||
...
|
|
||||||
|
|
||||||
class _Call5Args(Generic[In1T, In2T, In3T, In4T, In5T, OutT]):
|
class _Call5Args(Generic[In1T, In2T, In3T, In4T, In5T, OutT]):
|
||||||
"""Five argument variant of call wrapper"""
|
"""Five argument variant of call wrapper"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, _call: Callable[[In1T, In2T, In3T, In4T, In5T], OutT]
|
self, _call: Callable[[In1T, In2T, In3T, In4T, In5T], OutT]
|
||||||
):
|
): ...
|
||||||
...
|
|
||||||
|
|
||||||
def __call__(
|
def __call__(
|
||||||
self,
|
self,
|
||||||
@ -142,16 +131,14 @@ if TYPE_CHECKING:
|
|||||||
_arg3: In3T,
|
_arg3: In3T,
|
||||||
_arg4: In4T,
|
_arg4: In4T,
|
||||||
_arg5: In5T,
|
_arg5: In5T,
|
||||||
) -> OutT:
|
) -> OutT: ...
|
||||||
...
|
|
||||||
|
|
||||||
class _Call6Args(Generic[In1T, In2T, In3T, In4T, In5T, In6T, OutT]):
|
class _Call6Args(Generic[In1T, In2T, In3T, In4T, In5T, In6T, OutT]):
|
||||||
"""Six argument variant of call wrapper"""
|
"""Six argument variant of call wrapper"""
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, _call: Callable[[In1T, In2T, In3T, In4T, In5T, In6T], OutT]
|
self, _call: Callable[[In1T, In2T, In3T, In4T, In5T, In6T], OutT]
|
||||||
):
|
): ...
|
||||||
...
|
|
||||||
|
|
||||||
def __call__(
|
def __call__(
|
||||||
self,
|
self,
|
||||||
@ -161,8 +148,7 @@ if TYPE_CHECKING:
|
|||||||
_arg4: In4T,
|
_arg4: In4T,
|
||||||
_arg5: In5T,
|
_arg5: In5T,
|
||||||
_arg6: In6T,
|
_arg6: In6T,
|
||||||
) -> OutT:
|
) -> OutT: ...
|
||||||
...
|
|
||||||
|
|
||||||
class _Call7Args(Generic[In1T, In2T, In3T, In4T, In5T, In6T, In7T, OutT]):
|
class _Call7Args(Generic[In1T, In2T, In3T, In4T, In5T, In6T, In7T, OutT]):
|
||||||
"""Seven argument variant of call wrapper"""
|
"""Seven argument variant of call wrapper"""
|
||||||
@ -170,8 +156,7 @@ if TYPE_CHECKING:
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
_call: Callable[[In1T, In2T, In3T, In4T, In5T, In6T, In7T], OutT],
|
_call: Callable[[In1T, In2T, In3T, In4T, In5T, In6T, In7T], OutT],
|
||||||
):
|
): ...
|
||||||
...
|
|
||||||
|
|
||||||
def __call__(
|
def __call__(
|
||||||
self,
|
self,
|
||||||
@ -182,50 +167,43 @@ if TYPE_CHECKING:
|
|||||||
_arg5: In5T,
|
_arg5: In5T,
|
||||||
_arg6: In6T,
|
_arg6: In6T,
|
||||||
_arg7: In7T,
|
_arg7: In7T,
|
||||||
) -> OutT:
|
) -> OutT: ...
|
||||||
...
|
|
||||||
|
|
||||||
# No arg call; no args bundled.
|
# No arg call; no args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(call: Callable[[], OutT]) -> _CallNoArgs[OutT]:
|
def Call(call: Callable[[], OutT]) -> _CallNoArgs[OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 1 arg call; 1 arg bundled.
|
# 1 arg call; 1 arg bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(call: Callable[[In1T], OutT], arg1: In1T) -> _CallNoArgs[OutT]:
|
def Call(call: Callable[[In1T], OutT], arg1: In1T) -> _CallNoArgs[OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 1 arg call; no args bundled.
|
# 1 arg call; no args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(call: Callable[[In1T], OutT]) -> _Call1Arg[In1T, OutT]:
|
def Call(call: Callable[[In1T], OutT]) -> _Call1Arg[In1T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 2 arg call; 2 args bundled.
|
# 2 arg call; 2 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(
|
def Call(
|
||||||
call: Callable[[In1T, In2T], OutT], arg1: In1T, arg2: In2T
|
call: Callable[[In1T, In2T], OutT], arg1: In1T, arg2: In2T
|
||||||
) -> _CallNoArgs[OutT]:
|
) -> _CallNoArgs[OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 2 arg call; 1 arg bundled.
|
# 2 arg call; 1 arg bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(
|
def Call(
|
||||||
call: Callable[[In1T, In2T], OutT], arg1: In1T
|
call: Callable[[In1T, In2T], OutT], arg1: In1T
|
||||||
) -> _Call1Arg[In2T, OutT]:
|
) -> _Call1Arg[In2T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 2 arg call; no args bundled.
|
# 2 arg call; no args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(
|
def Call(
|
||||||
call: Callable[[In1T, In2T], OutT]
|
call: Callable[[In1T, In2T], OutT]
|
||||||
) -> _Call2Args[In1T, In2T, OutT]:
|
) -> _Call2Args[In1T, In2T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 3 arg call; 3 args bundled.
|
# 3 arg call; 3 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@ -235,32 +213,28 @@ if TYPE_CHECKING:
|
|||||||
arg1: In1T,
|
arg1: In1T,
|
||||||
arg2: In2T,
|
arg2: In2T,
|
||||||
arg3: In3T,
|
arg3: In3T,
|
||||||
) -> _CallNoArgs[OutT]:
|
) -> _CallNoArgs[OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 3 arg call; 2 args bundled.
|
# 3 arg call; 2 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(
|
def Call(
|
||||||
call: Callable[[In1T, In2T, In3T], OutT], arg1: In1T, arg2: In2T
|
call: Callable[[In1T, In2T, In3T], OutT], arg1: In1T, arg2: In2T
|
||||||
) -> _Call1Arg[In3T, OutT]:
|
) -> _Call1Arg[In3T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 3 arg call; 1 arg bundled.
|
# 3 arg call; 1 arg bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(
|
def Call(
|
||||||
call: Callable[[In1T, In2T, In3T], OutT], arg1: In1T
|
call: Callable[[In1T, In2T, In3T], OutT], arg1: In1T
|
||||||
) -> _Call2Args[In2T, In3T, OutT]:
|
) -> _Call2Args[In2T, In3T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 3 arg call; no args bundled.
|
# 3 arg call; no args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(
|
def Call(
|
||||||
call: Callable[[In1T, In2T, In3T], OutT]
|
call: Callable[[In1T, In2T, In3T], OutT]
|
||||||
) -> _Call3Args[In1T, In2T, In3T, OutT]:
|
) -> _Call3Args[In1T, In2T, In3T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 4 arg call; 4 args bundled.
|
# 4 arg call; 4 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@ -271,8 +245,7 @@ if TYPE_CHECKING:
|
|||||||
arg2: In2T,
|
arg2: In2T,
|
||||||
arg3: In3T,
|
arg3: In3T,
|
||||||
arg4: In4T,
|
arg4: In4T,
|
||||||
) -> _CallNoArgs[OutT]:
|
) -> _CallNoArgs[OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 4 arg call; 3 args bundled.
|
# 4 arg call; 3 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@ -282,8 +255,7 @@ if TYPE_CHECKING:
|
|||||||
arg1: In1T,
|
arg1: In1T,
|
||||||
arg2: In2T,
|
arg2: In2T,
|
||||||
arg3: In3T,
|
arg3: In3T,
|
||||||
) -> _Call1Arg[In4T, OutT]:
|
) -> _Call1Arg[In4T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 4 arg call; 2 args bundled.
|
# 4 arg call; 2 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@ -292,8 +264,7 @@ if TYPE_CHECKING:
|
|||||||
call: Callable[[In1T, In2T, In3T, In4T], OutT],
|
call: Callable[[In1T, In2T, In3T, In4T], OutT],
|
||||||
arg1: In1T,
|
arg1: In1T,
|
||||||
arg2: In2T,
|
arg2: In2T,
|
||||||
) -> _Call2Args[In3T, In4T, OutT]:
|
) -> _Call2Args[In3T, In4T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 4 arg call; 1 arg bundled.
|
# 4 arg call; 1 arg bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@ -301,16 +272,14 @@ if TYPE_CHECKING:
|
|||||||
def Call(
|
def Call(
|
||||||
call: Callable[[In1T, In2T, In3T, In4T], OutT],
|
call: Callable[[In1T, In2T, In3T, In4T], OutT],
|
||||||
arg1: In1T,
|
arg1: In1T,
|
||||||
) -> _Call3Args[In2T, In3T, In4T, OutT]:
|
) -> _Call3Args[In2T, In3T, In4T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 4 arg call; no args bundled.
|
# 4 arg call; no args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@overload
|
@overload
|
||||||
def Call(
|
def Call(
|
||||||
call: Callable[[In1T, In2T, In3T, In4T], OutT],
|
call: Callable[[In1T, In2T, In3T, In4T], OutT],
|
||||||
) -> _Call4Args[In1T, In2T, In3T, In4T, OutT]:
|
) -> _Call4Args[In1T, In2T, In3T, In4T, OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 5 arg call; 5 args bundled.
|
# 5 arg call; 5 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@ -322,8 +291,7 @@ if TYPE_CHECKING:
|
|||||||
arg3: In3T,
|
arg3: In3T,
|
||||||
arg4: In4T,
|
arg4: In4T,
|
||||||
arg5: In5T,
|
arg5: In5T,
|
||||||
) -> _CallNoArgs[OutT]:
|
) -> _CallNoArgs[OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 6 arg call; 6 args bundled.
|
# 6 arg call; 6 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@ -336,8 +304,7 @@ if TYPE_CHECKING:
|
|||||||
arg4: In4T,
|
arg4: In4T,
|
||||||
arg5: In5T,
|
arg5: In5T,
|
||||||
arg6: In6T,
|
arg6: In6T,
|
||||||
) -> _CallNoArgs[OutT]:
|
) -> _CallNoArgs[OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# 7 arg call; 7 args bundled.
|
# 7 arg call; 7 args bundled.
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
@ -351,12 +318,10 @@ if TYPE_CHECKING:
|
|||||||
arg5: In5T,
|
arg5: In5T,
|
||||||
arg6: In6T,
|
arg6: In6T,
|
||||||
arg7: In7T,
|
arg7: In7T,
|
||||||
) -> _CallNoArgs[OutT]:
|
) -> _CallNoArgs[OutT]: ...
|
||||||
...
|
|
||||||
|
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
def Call(*_args: Any, **_keywds: Any) -> Any:
|
def Call(*_args: Any, **_keywds: Any) -> Any: ...
|
||||||
...
|
|
||||||
|
|
||||||
# (Type-safe Partial)
|
# (Type-safe Partial)
|
||||||
# A convenient wrapper around functools.partial which adds type-safety
|
# A convenient wrapper around functools.partial which adds type-safety
|
||||||
|
|||||||
@ -11,7 +11,13 @@ data formats in a nondestructive manner.
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from efro.util import set_canonical_module_names
|
from efro.util import set_canonical_module_names
|
||||||
from efro.dataclassio._base import Codec, IOAttrs, IOExtendedData, IOMultiType
|
from efro.dataclassio._base import (
|
||||||
|
Codec,
|
||||||
|
IOAttrs,
|
||||||
|
IOExtendedData,
|
||||||
|
IOMultiType,
|
||||||
|
EXTRA_ATTRS_ATTR,
|
||||||
|
)
|
||||||
from efro.dataclassio._prep import (
|
from efro.dataclassio._prep import (
|
||||||
ioprep,
|
ioprep,
|
||||||
ioprepped,
|
ioprepped,
|
||||||
@ -29,21 +35,22 @@ from efro.dataclassio._api import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'JsonStyle',
|
|
||||||
'Codec',
|
'Codec',
|
||||||
|
'DataclassFieldLookup',
|
||||||
|
'EXTRA_ATTRS_ATTR',
|
||||||
'IOAttrs',
|
'IOAttrs',
|
||||||
'IOExtendedData',
|
'IOExtendedData',
|
||||||
'IOMultiType',
|
'IOMultiType',
|
||||||
'ioprep',
|
'JsonStyle',
|
||||||
'ioprepped',
|
|
||||||
'will_ioprep',
|
|
||||||
'is_ioprepped_dataclass',
|
|
||||||
'DataclassFieldLookup',
|
|
||||||
'dataclass_to_dict',
|
|
||||||
'dataclass_to_json',
|
|
||||||
'dataclass_from_dict',
|
'dataclass_from_dict',
|
||||||
'dataclass_from_json',
|
'dataclass_from_json',
|
||||||
|
'dataclass_to_dict',
|
||||||
|
'dataclass_to_json',
|
||||||
'dataclass_validate',
|
'dataclass_validate',
|
||||||
|
'ioprep',
|
||||||
|
'ioprepped',
|
||||||
|
'is_ioprepped_dataclass',
|
||||||
|
'will_ioprep',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Have these things present themselves cleanly as 'thismodule.SomeClass'
|
# Have these things present themselves cleanly as 'thismodule.SomeClass'
|
||||||
|
|||||||
@ -91,28 +91,6 @@ def dataclass_to_json(
|
|||||||
return json.dumps(jdict, separators=(',', ':'), sort_keys=sort_keys)
|
return json.dumps(jdict, separators=(',', ':'), sort_keys=sort_keys)
|
||||||
|
|
||||||
|
|
||||||
# @overload
|
|
||||||
# def dataclass_from_dict(
|
|
||||||
# cls: type[T],
|
|
||||||
# values: dict,
|
|
||||||
# codec: Codec = Codec.JSON,
|
|
||||||
# coerce_to_float: bool = True,
|
|
||||||
# allow_unknown_attrs: bool = True,
|
|
||||||
# discard_unknown_attrs: bool = False,
|
|
||||||
# ) -> T: ...
|
|
||||||
|
|
||||||
|
|
||||||
# @overload
|
|
||||||
# def dataclass_from_dict(
|
|
||||||
# cls: IOTypeMap,
|
|
||||||
# values: dict,
|
|
||||||
# codec: Codec = Codec.JSON,
|
|
||||||
# coerce_to_float: bool = True,
|
|
||||||
# allow_unknown_attrs: bool = True,
|
|
||||||
# discard_unknown_attrs: bool = False,
|
|
||||||
# ) -> Any: ...
|
|
||||||
|
|
||||||
|
|
||||||
def dataclass_from_dict(
|
def dataclass_from_dict(
|
||||||
cls: type[T],
|
cls: type[T],
|
||||||
values: dict,
|
values: dict,
|
||||||
@ -125,24 +103,26 @@ def dataclass_from_dict(
|
|||||||
|
|
||||||
The dict must be formatted to match the specified codec (generally
|
The dict must be formatted to match the specified codec (generally
|
||||||
json-friendly object types). This means that sequence values such as
|
json-friendly object types). This means that sequence values such as
|
||||||
tuples or sets should be passed as lists, enums should be passed as their
|
tuples or sets should be passed as lists, enums should be passed as
|
||||||
associated values, nested dataclasses should be passed as dicts, etc.
|
their associated values, nested dataclasses should be passed as dicts,
|
||||||
|
etc.
|
||||||
|
|
||||||
All values are checked to ensure their types/values are valid.
|
All values are checked to ensure their types/values are valid.
|
||||||
|
|
||||||
Data for attributes of type Any will be checked to ensure they match
|
Data for attributes of type Any will be checked to ensure they match
|
||||||
types supported directly by json. This does not include types such
|
types supported directly by json. This does not include types such
|
||||||
as tuples which are implicitly translated by Python's json module
|
as tuples which are implicitly translated by Python's json module
|
||||||
(as this would break the ability to do a lossless round-trip with data).
|
(as this would break the ability to do a lossless round-trip with
|
||||||
|
data).
|
||||||
|
|
||||||
If coerce_to_float is True, int values passed for float typed fields
|
If coerce_to_float is True, int values passed for float typed fields
|
||||||
will be converted to float values. Otherwise, a TypeError is raised.
|
will be converted to float values. Otherwise, a TypeError is raised.
|
||||||
|
|
||||||
If allow_unknown_attrs is False, AttributeErrors will be raised for
|
If `allow_unknown_attrs` is False, AttributeErrors will be raised for
|
||||||
attributes present in the dict but not on the data class. Otherwise, they
|
attributes present in the dict but not on the data class. Otherwise,
|
||||||
will be preserved as part of the instance and included if it is
|
they will be preserved as part of the instance and included if it is
|
||||||
exported back to a dict, unless discard_unknown_attrs is True, in which
|
exported back to a dict, unless `discard_unknown_attrs` is True, in
|
||||||
case they will simply be discarded.
|
which case they will simply be discarded.
|
||||||
"""
|
"""
|
||||||
val = _Inputter(
|
val = _Inputter(
|
||||||
cls,
|
cls,
|
||||||
|
|||||||
@ -19,8 +19,9 @@ if TYPE_CHECKING:
|
|||||||
# Types which we can pass through as-is.
|
# Types which we can pass through as-is.
|
||||||
SIMPLE_TYPES = {int, bool, str, float, type(None)}
|
SIMPLE_TYPES = {int, bool, str, float, type(None)}
|
||||||
|
|
||||||
# Attr name for dict of extra attributes included on dataclass instances.
|
# Attr name for dict of extra attributes included on dataclass
|
||||||
# Note that this is only added if extra attributes are present.
|
# instances. Note that this is only added if extra attributes are
|
||||||
|
# present.
|
||||||
EXTRA_ATTRS_ATTR = '_DCIOEXATTRS'
|
EXTRA_ATTRS_ATTR = '_DCIOEXATTRS'
|
||||||
|
|
||||||
|
|
||||||
@ -68,12 +69,12 @@ class IOMultiType(Generic[EnumT]):
|
|||||||
"""A base class for types that can map to multiple dataclass types.
|
"""A base class for types that can map to multiple dataclass types.
|
||||||
|
|
||||||
This enables usage of high level base classes (for example
|
This enables usage of high level base classes (for example
|
||||||
a 'Message' type) in dataclasses, with dataclassio automatically
|
a 'Message' type) in annotations, with dataclassio automatically
|
||||||
serializing & deserializing subclass instances based on their
|
serializing & deserializing dataclass subclasses based on their
|
||||||
type.
|
type ('MessagePing', 'MessageChat', etc.)
|
||||||
|
|
||||||
Standard usage involves creating a class which inherits from this
|
Standard usage involves creating a class which inherits from this
|
||||||
one that acts as a 'registry', and then creating dataclass classes
|
one which acts as a 'registry', and then creating dataclass classes
|
||||||
inheriting from that registry class. Dataclassio will then do the
|
inheriting from that registry class. Dataclassio will then do the
|
||||||
right thing when that registry class is used in type annotations.
|
right thing when that registry class is used in type annotations.
|
||||||
|
|
||||||
@ -82,7 +83,7 @@ class IOMultiType(Generic[EnumT]):
|
|||||||
|
|
||||||
# Dataclasses inheriting from an IOMultiType will store a type-id
|
# Dataclasses inheriting from an IOMultiType will store a type-id
|
||||||
# with this key in their serialized data. This value can be
|
# with this key in their serialized data. This value can be
|
||||||
# overridden in IOMultiType subclasses in case of conflicts.
|
# overridden in IOMultiType subclasses as desired.
|
||||||
ID_STORAGE_NAME = '_dciotype'
|
ID_STORAGE_NAME = '_dciotype'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@ -72,6 +72,7 @@ class _Outputter:
|
|||||||
def _process_dataclass(self, cls: type, obj: Any, fieldpath: str) -> Any:
|
def _process_dataclass(self, cls: type, obj: Any, fieldpath: str) -> Any:
|
||||||
# pylint: disable=too-many-locals
|
# pylint: disable=too-many-locals
|
||||||
# pylint: disable=too-many-branches
|
# pylint: disable=too-many-branches
|
||||||
|
# pylint: disable=too-many-statements
|
||||||
prep = PrepSession(explicit=False).prep_dataclass(
|
prep = PrepSession(explicit=False).prep_dataclass(
|
||||||
type(obj), recursion_level=0
|
type(obj), recursion_level=0
|
||||||
)
|
)
|
||||||
@ -146,8 +147,16 @@ class _Outputter:
|
|||||||
# If this obj inherits from multi-type, store its type id.
|
# If this obj inherits from multi-type, store its type id.
|
||||||
if isinstance(obj, IOMultiType):
|
if isinstance(obj, IOMultiType):
|
||||||
type_id = obj.get_type_id()
|
type_id = obj.get_type_id()
|
||||||
# Sanity checks; make sure looking up this id gets us this type.
|
|
||||||
|
# Sanity checks; make sure looking up this id gets us this
|
||||||
|
# type.
|
||||||
assert isinstance(type_id.value, str)
|
assert isinstance(type_id.value, str)
|
||||||
|
if obj.get_type(type_id) is not type(obj):
|
||||||
|
raise RuntimeError(
|
||||||
|
f'dataclassio: object of type {type(obj)}'
|
||||||
|
f' gives type-id {type_id} but that id gives type'
|
||||||
|
f' {obj.get_type(type_id)}. Something is out of sync.'
|
||||||
|
)
|
||||||
assert obj.get_type(type_id) is type(obj)
|
assert obj.get_type(type_id) is type(obj)
|
||||||
if self._create:
|
if self._create:
|
||||||
assert out is not None
|
assert out is not None
|
||||||
|
|||||||
@ -278,9 +278,7 @@ def _desc(obj: Any) -> str:
|
|||||||
tpss = (
|
tpss = (
|
||||||
f', contains [{tpsj}, ...]'
|
f', contains [{tpsj}, ...]'
|
||||||
if len(obj) > 3
|
if len(obj) > 3
|
||||||
else f', contains [{tpsj}]'
|
else f', contains [{tpsj}]' if tps else ''
|
||||||
if tps
|
|
||||||
else ''
|
|
||||||
)
|
)
|
||||||
extra = f' (len {len(obj)}{tpss})'
|
extra = f' (len {len(obj)}{tpss})'
|
||||||
elif isinstance(obj, dict):
|
elif isinstance(obj, dict):
|
||||||
@ -299,9 +297,7 @@ def _desc(obj: Any) -> str:
|
|||||||
pairss = (
|
pairss = (
|
||||||
f', contains {{{pairsj}, ...}}'
|
f', contains {{{pairsj}, ...}}'
|
||||||
if len(obj) > 3
|
if len(obj) > 3
|
||||||
else f', contains {{{pairsj}}}'
|
else f', contains {{{pairsj}}}' if pairs else ''
|
||||||
if pairs
|
|
||||||
else ''
|
|
||||||
)
|
)
|
||||||
extra = f' (len {len(obj)}{pairss})'
|
extra = f' (len {len(obj)}{pairss})'
|
||||||
if extra is None:
|
if extra is None:
|
||||||
|
|||||||
@ -92,9 +92,9 @@ class LogEntry:
|
|||||||
# incorporated into custom log processing. To populate this, our
|
# incorporated into custom log processing. To populate this, our
|
||||||
# LogHandler class looks for a 'labels' dict passed in the optional
|
# LogHandler class looks for a 'labels' dict passed in the optional
|
||||||
# 'extra' dict arg to standard Python log calls.
|
# 'extra' dict arg to standard Python log calls.
|
||||||
labels: Annotated[
|
labels: Annotated[dict[str, str], IOAttrs('la', store_default=False)] = (
|
||||||
dict[str, str], IOAttrs('la', store_default=False)
|
field(default_factory=dict)
|
||||||
] = field(default_factory=dict)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ioprepped
|
@ioprepped
|
||||||
@ -483,11 +483,11 @@ class LogHandler(logging.Handler):
|
|||||||
# after a short bit if we never get a newline.
|
# after a short bit if we never get a newline.
|
||||||
ship_task = self._file_chunk_ship_task[name]
|
ship_task = self._file_chunk_ship_task[name]
|
||||||
if ship_task is None:
|
if ship_task is None:
|
||||||
self._file_chunk_ship_task[
|
self._file_chunk_ship_task[name] = (
|
||||||
name
|
self._event_loop.create_task(
|
||||||
] = self._event_loop.create_task(
|
self._ship_chunks_task(name),
|
||||||
self._ship_chunks_task(name),
|
name='log ship file chunks',
|
||||||
name='log ship file chunks',
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|||||||
@ -499,8 +499,7 @@ class MessageProtocol:
|
|||||||
f' @overload\n'
|
f' @overload\n'
|
||||||
f' {pfx}def send{sfx}(self,'
|
f' {pfx}def send{sfx}(self,'
|
||||||
f' message: {msgtypevar})'
|
f' message: {msgtypevar})'
|
||||||
f' -> {rtypevar}:\n'
|
f' -> {rtypevar}: ...\n'
|
||||||
f' ...\n'
|
|
||||||
)
|
)
|
||||||
rtypevar = 'Response | None'
|
rtypevar = 'Response | None'
|
||||||
if async_pass:
|
if async_pass:
|
||||||
@ -607,8 +606,7 @@ class MessageProtocol:
|
|||||||
f' call: Callable[[Any, {msgtypevar}], '
|
f' call: Callable[[Any, {msgtypevar}], '
|
||||||
f'{rtypevar}],\n'
|
f'{rtypevar}],\n'
|
||||||
f' )'
|
f' )'
|
||||||
f' -> Callable[[Any, {msgtypevar}], {rtypevar}]:\n'
|
f' -> Callable[[Any, {msgtypevar}], {rtypevar}]: ...\n'
|
||||||
f' ...\n'
|
|
||||||
)
|
)
|
||||||
out += (
|
out += (
|
||||||
'\n'
|
'\n'
|
||||||
|
|||||||
@ -55,12 +55,13 @@ class MessageReceiver:
|
|||||||
def __init__(self, protocol: MessageProtocol) -> None:
|
def __init__(self, protocol: MessageProtocol) -> None:
|
||||||
self.protocol = protocol
|
self.protocol = protocol
|
||||||
self._handlers: dict[type[Message], Callable] = {}
|
self._handlers: dict[type[Message], Callable] = {}
|
||||||
self._decode_filter_call: Callable[
|
self._decode_filter_call: (
|
||||||
[Any, dict, Message], None
|
Callable[[Any, dict, Message], None] | None
|
||||||
] | None = None
|
) = None
|
||||||
self._encode_filter_call: Callable[
|
self._encode_filter_call: (
|
||||||
[Any, Message | None, Response | SysResponse, dict], None
|
Callable[[Any, Message | None, Response | SysResponse, dict], None]
|
||||||
] | None = None
|
| None
|
||||||
|
) = None
|
||||||
|
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
def register_handler(
|
def register_handler(
|
||||||
|
|||||||
@ -41,18 +41,18 @@ class MessageSender:
|
|||||||
def __init__(self, protocol: MessageProtocol) -> None:
|
def __init__(self, protocol: MessageProtocol) -> None:
|
||||||
self.protocol = protocol
|
self.protocol = protocol
|
||||||
self._send_raw_message_call: Callable[[Any, str], str] | None = None
|
self._send_raw_message_call: Callable[[Any, str], str] | None = None
|
||||||
self._send_async_raw_message_call: Callable[
|
self._send_async_raw_message_call: (
|
||||||
[Any, str], Awaitable[str]
|
Callable[[Any, str], Awaitable[str]] | None
|
||||||
] | None = None
|
) = None
|
||||||
self._send_async_raw_message_ex_call: Callable[
|
self._send_async_raw_message_ex_call: (
|
||||||
[Any, str, Message], Awaitable[str]
|
Callable[[Any, str, Message], Awaitable[str]] | None
|
||||||
] | None = None
|
) = None
|
||||||
self._encode_filter_call: Callable[
|
self._encode_filter_call: (
|
||||||
[Any, Message, dict], None
|
Callable[[Any, Message, dict], None] | None
|
||||||
] | None = None
|
) = None
|
||||||
self._decode_filter_call: Callable[
|
self._decode_filter_call: (
|
||||||
[Any, Message, dict, Response | SysResponse], None
|
Callable[[Any, Message, dict, Response | SysResponse], None] | None
|
||||||
] | None = None
|
) = None
|
||||||
self._peer_desc_call: Callable[[Any], str] | None = None
|
self._peer_desc_call: Callable[[Any], str] | None = None
|
||||||
|
|
||||||
def send_method(
|
def send_method(
|
||||||
|
|||||||
@ -317,8 +317,6 @@ _envval = os.environ.get('EFRO_TERMCOLORS')
|
|||||||
color_enabled: bool = (
|
color_enabled: bool = (
|
||||||
True
|
True
|
||||||
if _envval == '1'
|
if _envval == '1'
|
||||||
else False
|
else False if _envval == '0' else _default_color_enabled()
|
||||||
if _envval == '0'
|
|
||||||
else _default_color_enabled()
|
|
||||||
)
|
)
|
||||||
Clr: type[ClrBase] = ClrAlways if color_enabled else ClrNever
|
Clr: type[ClrBase] = ClrAlways if color_enabled else ClrNever
|
||||||
|
|||||||
@ -459,8 +459,7 @@ if TYPE_CHECKING:
|
|||||||
class ValueDispatcherMethod(Generic[ValT, RetT]):
|
class ValueDispatcherMethod(Generic[ValT, RetT]):
|
||||||
"""Used by the valuedispatchmethod decorator."""
|
"""Used by the valuedispatchmethod decorator."""
|
||||||
|
|
||||||
def __call__(self, value: ValT) -> RetT:
|
def __call__(self, value: ValT) -> RetT: ...
|
||||||
...
|
|
||||||
|
|
||||||
def register(
|
def register(
|
||||||
self, value: ValT
|
self, value: ValT
|
||||||
|
|||||||
@ -105,13 +105,11 @@ def extract_flag(args: list[str], name: str) -> bool:
|
|||||||
@overload
|
@overload
|
||||||
def extract_arg(
|
def extract_arg(
|
||||||
args: list[str], name: str, required: Literal[False] = False
|
args: list[str], name: str, required: Literal[False] = False
|
||||||
) -> str | None:
|
) -> str | None: ...
|
||||||
...
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def extract_arg(args: list[str], name: str, required: Literal[True]) -> str:
|
def extract_arg(args: list[str], name: str, required: Literal[True]) -> str: ...
|
||||||
...
|
|
||||||
|
|
||||||
|
|
||||||
def extract_arg(
|
def extract_arg(
|
||||||
|
|||||||
@ -120,9 +120,11 @@ def clientprint(
|
|||||||
assert _g_thread_local_storage is not None
|
assert _g_thread_local_storage is not None
|
||||||
print(
|
print(
|
||||||
*args,
|
*args,
|
||||||
file=_g_thread_local_storage.stderr
|
file=(
|
||||||
if stderr
|
_g_thread_local_storage.stderr
|
||||||
else _g_thread_local_storage.stdout,
|
if stderr
|
||||||
|
else _g_thread_local_storage.stdout
|
||||||
|
),
|
||||||
end=end,
|
end=end,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@ -39,7 +39,6 @@ def _valid_filename(fname: str) -> bool:
|
|||||||
'requirements.txt',
|
'requirements.txt',
|
||||||
'pylintrc',
|
'pylintrc',
|
||||||
'clang-format',
|
'clang-format',
|
||||||
'pycheckers',
|
|
||||||
'style.yapf',
|
'style.yapf',
|
||||||
'test_task_bin',
|
'test_task_bin',
|
||||||
'.editorconfig',
|
'.editorconfig',
|
||||||
|
|||||||
@ -47,7 +47,6 @@ def install_tool_config(projroot: Path, src: Path, dst: Path) -> None:
|
|||||||
comment = ';;'
|
comment = ';;'
|
||||||
elif dst.name in [
|
elif dst.name in [
|
||||||
'.mypy.ini',
|
'.mypy.ini',
|
||||||
'.pycheckers',
|
|
||||||
'.pylintrc',
|
'.pylintrc',
|
||||||
'.style.yapf',
|
'.style.yapf',
|
||||||
'.clang-format',
|
'.clang-format',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user