mirror of
https://github.com/RYDE-WORK/ballistica.git
synced 2026-02-08 08:45:43 +08:00
more bacloud work
This commit is contained in:
parent
cc55afd1db
commit
79dbd89c6b
56
.efrocachemap
generated
56
.efrocachemap
generated
@ -4038,26 +4038,26 @@
|
|||||||
"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": "a92a8552dc768a124023921e2d7c8e4b",
|
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "2463d9fec0254150bd385e9ef80d1098",
|
||||||
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "4aed94d02131e7387238efb8e8c88517",
|
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "3dc65856b5a30df83ee088428a7ed862",
|
||||||
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "8b95dbba57e6453070609a8f7c05284e",
|
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "f108ac7b56522e05aa061a43ec0f7ad7",
|
||||||
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "36961e7faa9e949ef714136f6f72ed9d",
|
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "0b4ef8f5b00f2917467d6bc3926003ae",
|
||||||
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "4b96f8141e053abef2796f6970cca7bf",
|
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "11495371a0ff7a476b88b715e0d4899c",
|
||||||
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "7d2542c6f789099c37f1c36a004c0532",
|
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "e1ffd608a74e1135a74535ef0f24de84",
|
||||||
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "2b35512a02c77933cc9d1988761e9907",
|
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "0df1d668840d11debccf8cd018acf04f",
|
||||||
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "30fe1c1ac3a70695001a21ceb7b137ec",
|
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "a8c964a36ad22fab92cb003f66e0e463",
|
||||||
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "633e84b17f8e564c904dc85f1b4fa657",
|
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "24097673630e5b052b383277a260aea2",
|
||||||
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "07cd831fee262def54be88ce219207c8",
|
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "a85895d48516991dd9a3cd5f3dbd11b0",
|
||||||
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "ee638b2db04ebcf3889c5cb6ce70c153",
|
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "c2764b0cde11a194cad2604fa1d1471f",
|
||||||
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "360cedd219db792e8910544b028b76cf",
|
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "ea55aef603d7998f134bc25567d2e175",
|
||||||
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "6338e5613990e5df7592109a77f2ce66",
|
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "af07fba782424d77cd143a5b92a9aa8e",
|
||||||
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "d29b1531d1610c5815071c0f5fd596e9",
|
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "06b5aaf53195021bd21d05ec372fe403",
|
||||||
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "6656b4b2bcbc87f94cf573ff9c34648e",
|
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "b26f17d43516f14085628892b73d4023",
|
||||||
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "8153ea67d0e0bdeb852e656a9ff89505",
|
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "94dfd167a76d72054ec3f41f2a0b82fa",
|
||||||
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "4a5f1dd454ff6e2215d63e24b871b226",
|
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "a0d37cea9ada58a27a38b039165160ed",
|
||||||
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "4a6ba058616fddd1d2f3045e7eba5fef",
|
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "7bcc1336a2a123041a8c01924bf237dc",
|
||||||
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "79d13825d258fb365b99e1045cff2607",
|
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "d401578a393dce23422773dc38db40c8",
|
||||||
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "7fcfa30b3aab3ce4c31287b7cd15aeef",
|
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "a5b49b99f94e7750214ebfa22789f083",
|
||||||
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "f231b10895bdcb542de87b887ca181fd",
|
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "f231b10895bdcb542de87b887ca181fd",
|
||||||
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "ae936a119668ede7b36f38c8672f4bf8",
|
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "ae936a119668ede7b36f38c8672f4bf8",
|
||||||
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "f231b10895bdcb542de87b887ca181fd",
|
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "f231b10895bdcb542de87b887ca181fd",
|
||||||
@ -4074,14 +4074,14 @@
|
|||||||
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "efffc4f330e77530accd9a9f82840a6c",
|
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "efffc4f330e77530accd9a9f82840a6c",
|
||||||
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "c20363fe2af3d54e666b1c8ee67f6b76",
|
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "c20363fe2af3d54e666b1c8ee67f6b76",
|
||||||
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "efffc4f330e77530accd9a9f82840a6c",
|
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "efffc4f330e77530accd9a9f82840a6c",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "632d0e121545353cc40577b765c156f9",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "15872f211c5469c1c36effbccc175df6",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "ffe84e846b294dc8517d9af555dad70f",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "be9f86b56e673690295bc3ae0e34e4cd",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "ef1743ca2035c525e8884129d69fa582",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "9a66106a77e0850ced1de339e8ea09b3",
|
||||||
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "0d215e98b6440a823809d3d582ae542f",
|
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "aaa392bfda1f92d3ce3478ac833278a3",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "359f0e344c2f9d6409b675c2ab600df4",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "b589b7a0bf5dea29a4e979db7b331fed",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "7467cc9095607857b21f5f55518874e0",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "6ad1eac0bfd7fe89a7d1be258cc562d2",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "2680d5d44629d8a19857d1c6b87a6fd2",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "88916d575d6e93fd22f50639d25ceeea",
|
||||||
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "bed37e7b4e1dfcdd31789db7730a388e",
|
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "ea9a9af9f29d096abfdc9d9c88f503d4",
|
||||||
"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": "5548f407d97e380069f6c596c4e36cd7",
|
"src/assets/ba_data/python/babase/_mgen/enums.py": "5548f407d97e380069f6c596c4e36cd7",
|
||||||
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",
|
"src/ballistica/base/mgen/pyembed/binding_base.inc": "efa61468cf098f77cc6a234461d8b86d",
|
||||||
|
|||||||
11
CHANGELOG.md
11
CHANGELOG.md
@ -1,7 +1,10 @@
|
|||||||
### 1.7.36 (build 21896, api 8, 2024-06-26)
|
### 1.7.36 (build 21897, api 8, 2024-06-26)
|
||||||
- `bacloud workspace put` is now a bit smarter; you can now do things like
|
- bacloud workspace commands are now a bit smarter; you can now do things like
|
||||||
`bacloud workspace put .` and it will work. Previously such cases required
|
`bacloud workspace put .` or even just `bacloud workspace put` and it will
|
||||||
explicitly passing the workspace name as a second argument.
|
work. Previously such cases required explicitly passing the workspace name
|
||||||
|
as a second argument. Both `workspace get` and `workspace put` now also have
|
||||||
|
an optional `--workspace` arg if you want to sync with a workspace different
|
||||||
|
than the local directory name.
|
||||||
|
|
||||||
### 1.7.35 (build 21889, api 8, 2024-06-20)
|
### 1.7.35 (build 21889, api 8, 2024-06-20)
|
||||||
- Fixed an issue where the engine would block at exit on some version of Linux
|
- Fixed an issue where the engine would block at exit on some version of Linux
|
||||||
|
|||||||
@ -52,7 +52,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
# Build number and version of the ballistica binary we expect to be
|
# Build number and version of the ballistica binary we expect to be
|
||||||
# using.
|
# using.
|
||||||
TARGET_BALLISTICA_BUILD = 21896
|
TARGET_BALLISTICA_BUILD = 21897
|
||||||
TARGET_BALLISTICA_VERSION = '1.7.36'
|
TARGET_BALLISTICA_VERSION = '1.7.36'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
|
|||||||
namespace ballistica {
|
namespace ballistica {
|
||||||
|
|
||||||
// These are set automatically via script; don't modify them here.
|
// These are set automatically via script; don't modify them here.
|
||||||
const int kEngineBuildNumber = 21896;
|
const int kEngineBuildNumber = 21897;
|
||||||
const char* kEngineVersion = "1.7.36";
|
const char* kEngineVersion = "1.7.36";
|
||||||
const int kEngineApiVersion = 8;
|
const int kEngineApiVersion = 8;
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,7 @@ if TYPE_CHECKING:
|
|||||||
|
|
||||||
# Version is sent to the master-server with all commands. Can be incremented
|
# Version is sent to the master-server with all commands. Can be incremented
|
||||||
# if we need to change behavior server-side to go along with client changes.
|
# if we need to change behavior server-side to go along with client changes.
|
||||||
BACLOUD_VERSION = 9
|
BACLOUD_VERSION = 11
|
||||||
|
|
||||||
|
|
||||||
@ioprepped
|
@ioprepped
|
||||||
@ -49,11 +49,11 @@ class ResponseData:
|
|||||||
It should be added to end_command args as 'manifest'.
|
It should be added to end_command args as 'manifest'.
|
||||||
uploads: If present, client should upload the requested files (arg1)
|
uploads: If present, client should upload the requested files (arg1)
|
||||||
individually to a server command (arg2) with provided args (arg3).
|
individually to a server command (arg2) with provided args (arg3).
|
||||||
uploads_inline: If present, a list of pathnames that should be base64
|
uploads_inline: If present, a list of pathnames that should be gzipped
|
||||||
gzipped and uploaded to an 'uploads_inline' dict in end_command args.
|
and uploaded to an 'uploads_inline' bytes dict in end_command args.
|
||||||
This should be limited to relatively small files.
|
This should be limited to relatively small files.
|
||||||
deletes: If present, file paths that should be deleted on the client.
|
deletes: If present, file paths that should be deleted on the client.
|
||||||
downloads_inline: If present, pathnames mapped to base64 gzipped data to
|
downloads_inline: If present, pathnames mapped to gzipped data to
|
||||||
be written to the client. This should only be used for relatively
|
be written to the client. This should only be used for relatively
|
||||||
small files as they are all included inline as part of the response.
|
small files as they are all included inline as part of the response.
|
||||||
dir_prune_empty: If present, all empty dirs under this one should be
|
dir_prune_empty: If present, all empty dirs under this one should be
|
||||||
@ -88,7 +88,7 @@ class ResponseData:
|
|||||||
list[str] | None, IOAttrs('dlt', store_default=False)
|
list[str] | None, IOAttrs('dlt', store_default=False)
|
||||||
] = None
|
] = None
|
||||||
downloads_inline: Annotated[
|
downloads_inline: Annotated[
|
||||||
dict[str, str] | None, IOAttrs('dinl', store_default=False)
|
dict[str, bytes] | None, IOAttrs('dinl', store_default=False)
|
||||||
] = None
|
] = None
|
||||||
dir_prune_empty: Annotated[
|
dir_prune_empty: Annotated[
|
||||||
str | None, IOAttrs('dpe', store_default=False)
|
str | None, IOAttrs('dpe', store_default=False)
|
||||||
|
|||||||
@ -253,10 +253,10 @@ class App:
|
|||||||
|
|
||||||
def _handle_downloads_inline(
|
def _handle_downloads_inline(
|
||||||
self,
|
self,
|
||||||
downloads_inline: dict[str, str],
|
downloads_inline: dict[str, bytes],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Handle inline file data to be saved to the client."""
|
"""Handle inline file data to be saved to the client."""
|
||||||
import base64
|
# import base64
|
||||||
|
|
||||||
for fname, fdata in downloads_inline.items():
|
for fname, fdata in downloads_inline.items():
|
||||||
# If there's a directory where we want our file to go, clear it
|
# If there's a directory where we want our file to go, clear it
|
||||||
@ -271,7 +271,8 @@ class App:
|
|||||||
dirname = os.path.dirname(fname)
|
dirname = os.path.dirname(fname)
|
||||||
if dirname:
|
if dirname:
|
||||||
os.makedirs(dirname, exist_ok=True)
|
os.makedirs(dirname, exist_ok=True)
|
||||||
data_zipped = base64.b64decode(fdata)
|
# data_zipped = base64.b64decode(fdata)
|
||||||
|
data_zipped = fdata
|
||||||
data = zlib.decompress(data_zipped)
|
data = zlib.decompress(data_zipped)
|
||||||
|
|
||||||
# Write to tmp files first and then move into place. This
|
# Write to tmp files first and then move into place. This
|
||||||
|
|||||||
@ -223,7 +223,7 @@ def androidaddr() -> None:
|
|||||||
def push_ipa() -> None:
|
def push_ipa() -> None:
|
||||||
"""Construct and push ios IPA for testing."""
|
"""Construct and push ios IPA for testing."""
|
||||||
|
|
||||||
from efrotools.util import extract_arg
|
from efro.util import extract_arg
|
||||||
import efrotools.ios
|
import efrotools.ios
|
||||||
|
|
||||||
pcommand.disallow_in_batch()
|
pcommand.disallow_in_batch()
|
||||||
|
|||||||
@ -107,7 +107,7 @@ def _main() -> None:
|
|||||||
assert_never(cmd)
|
assert_never(cmd)
|
||||||
|
|
||||||
if single_run_mode is not None:
|
if single_run_mode is not None:
|
||||||
from efrotools.util import extract_flag
|
from efro.util import extract_flag
|
||||||
|
|
||||||
args = sys.argv[2:]
|
args = sys.argv[2:]
|
||||||
force = extract_flag(args, '--force')
|
force = extract_flag(args, '--force')
|
||||||
@ -146,7 +146,7 @@ def _main() -> None:
|
|||||||
|
|
||||||
def _do_create(src_root: str, dst_root: str | None) -> None:
|
def _do_create(src_root: str, dst_root: str | None) -> None:
|
||||||
# pylint: disable=too-many-locals, cyclic-import
|
# pylint: disable=too-many-locals, cyclic-import
|
||||||
from efrotools.util import extract_arg, extract_flag
|
from efro.util import extract_arg, extract_flag
|
||||||
from efrotools.code import format_python_str
|
from efrotools.code import format_python_str
|
||||||
from efrotools.project import getprojectconfig
|
from efrotools.project import getprojectconfig
|
||||||
import batools.spinoff
|
import batools.spinoff
|
||||||
@ -317,7 +317,7 @@ def _do_featureset_delete() -> None:
|
|||||||
|
|
||||||
def _do_featureset_copy() -> None:
|
def _do_featureset_copy() -> None:
|
||||||
# pylint: disable=too-many-locals
|
# pylint: disable=too-many-locals
|
||||||
from efrotools.util import extract_flag
|
from efro.util import extract_flag
|
||||||
|
|
||||||
from batools.featureset import FeatureSet
|
from batools.featureset import FeatureSet
|
||||||
|
|
||||||
|
|||||||
@ -19,11 +19,11 @@ def spinoff_test(args: list[str]) -> None:
|
|||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from batools.featureset import FeatureSet
|
from efro.util import extract_flag
|
||||||
from efrotools.util import extract_flag
|
|
||||||
from efrotools.project import getprojectconfig
|
|
||||||
from efro.terminal import Clr
|
from efro.terminal import Clr
|
||||||
from efro.error import CleanError
|
from efro.error import CleanError
|
||||||
|
from batools.featureset import FeatureSet
|
||||||
|
from efrotools.project import getprojectconfig
|
||||||
|
|
||||||
submodule_parent = extract_flag(args, '--submodule-parent')
|
submodule_parent = extract_flag(args, '--submodule-parent')
|
||||||
shared_test_parent = extract_flag(args, '--shared-test-parent')
|
shared_test_parent = extract_flag(args, '--shared-test-parent')
|
||||||
|
|||||||
@ -12,7 +12,8 @@ from functools import partial
|
|||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from efro.terminal import Clr
|
from efro.terminal import Clr
|
||||||
from efrotools.util import extract_arg, extract_flag, is_wsl_windows_build_path
|
from efro.util import extract_arg, extract_flag
|
||||||
|
from efrotools.util import is_wsl_windows_build_path
|
||||||
from efrotools.pyver import PYVER
|
from efrotools.pyver import PYVER
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|||||||
@ -10,12 +10,13 @@ import weakref
|
|||||||
import datetime
|
import datetime
|
||||||
import functools
|
import functools
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import TYPE_CHECKING, cast, TypeVar, Generic
|
from typing import TYPE_CHECKING, cast, TypeVar, Generic, overload
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import asyncio
|
import asyncio
|
||||||
|
from typing import Any, Callable, Literal
|
||||||
|
|
||||||
from efro.call import Call as Call # 'as Call' so we re-export.
|
from efro.call import Call as Call # 'as Call' so we re-export.
|
||||||
from typing import Any, Callable
|
|
||||||
|
|
||||||
T = TypeVar('T')
|
T = TypeVar('T')
|
||||||
ValT = TypeVar('ValT')
|
ValT = TypeVar('ValT')
|
||||||
@ -913,3 +914,58 @@ def split_list(input_list: list[T], max_length: int) -> list[list[T]]:
|
|||||||
input_list[i : i + max_length]
|
input_list[i : i + max_length]
|
||||||
for i in range(0, len(input_list), max_length)
|
for i in range(0, len(input_list), max_length)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def extract_flag(args: list[str], name: str) -> bool:
|
||||||
|
"""Given a list of args and a flag name, returns whether it is present.
|
||||||
|
|
||||||
|
The arg flag, if present, is removed from the arg list.
|
||||||
|
"""
|
||||||
|
from efro.error import CleanError
|
||||||
|
|
||||||
|
count = args.count(name)
|
||||||
|
if count > 1:
|
||||||
|
raise CleanError(f'Flag {name} passed multiple times.')
|
||||||
|
if not count:
|
||||||
|
return False
|
||||||
|
args.remove(name)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def extract_arg(
|
||||||
|
args: list[str], name: str, required: Literal[False] = False
|
||||||
|
) -> str | None: ...
|
||||||
|
|
||||||
|
|
||||||
|
@overload
|
||||||
|
def extract_arg(args: list[str], name: str, required: Literal[True]) -> str: ...
|
||||||
|
|
||||||
|
|
||||||
|
def extract_arg(
|
||||||
|
args: list[str], name: str, required: bool = False
|
||||||
|
) -> str | None:
|
||||||
|
"""Given a list of args and an arg name, returns a value.
|
||||||
|
|
||||||
|
The arg flag and value are removed from the arg list.
|
||||||
|
raises CleanErrors on any problems.
|
||||||
|
"""
|
||||||
|
from efro.error import CleanError
|
||||||
|
|
||||||
|
count = args.count(name)
|
||||||
|
if not count:
|
||||||
|
if required:
|
||||||
|
raise CleanError(f'Required argument {name} not passed.')
|
||||||
|
return None
|
||||||
|
|
||||||
|
if count > 1:
|
||||||
|
raise CleanError(f'Arg {name} passed multiple times.')
|
||||||
|
|
||||||
|
argindex = args.index(name)
|
||||||
|
if argindex + 1 >= len(args):
|
||||||
|
raise CleanError(f'No value passed after {name} arg.')
|
||||||
|
|
||||||
|
val = args[argindex + 1]
|
||||||
|
del args[argindex : argindex + 2]
|
||||||
|
|
||||||
|
return val
|
||||||
|
|||||||
@ -121,8 +121,8 @@ def build_pcommandbatch() -> None:
|
|||||||
def batchserver() -> None:
|
def batchserver() -> None:
|
||||||
"""Run a server for handling pcommands."""
|
"""Run a server for handling pcommands."""
|
||||||
from efro.error import CleanError
|
from efro.error import CleanError
|
||||||
|
from efro.util import extract_arg
|
||||||
|
|
||||||
from efrotools.util import extract_arg
|
|
||||||
import efrotools.pcommandbatch as pcb
|
import efrotools.pcommandbatch as pcb
|
||||||
|
|
||||||
pcommand.disallow_in_batch()
|
pcommand.disallow_in_batch()
|
||||||
|
|||||||
@ -7,7 +7,7 @@ Ideally the stuff in here should migrate to more descriptive module names.
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING, overload
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@ -20,61 +20,6 @@ def explicit_bool(value: bool) -> bool:
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
def extract_flag(args: list[str], name: str) -> bool:
|
|
||||||
"""Given a list of args and a flag name, returns whether it is present.
|
|
||||||
|
|
||||||
The arg flag, if present, is removed from the arg list.
|
|
||||||
"""
|
|
||||||
from efro.error import CleanError
|
|
||||||
|
|
||||||
count = args.count(name)
|
|
||||||
if count > 1:
|
|
||||||
raise CleanError(f'Flag {name} passed multiple times.')
|
|
||||||
if not count:
|
|
||||||
return False
|
|
||||||
args.remove(name)
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
def extract_arg(
|
|
||||||
args: list[str], name: str, required: Literal[False] = False
|
|
||||||
) -> str | None: ...
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
def extract_arg(args: list[str], name: str, required: Literal[True]) -> str: ...
|
|
||||||
|
|
||||||
|
|
||||||
def extract_arg(
|
|
||||||
args: list[str], name: str, required: bool = False
|
|
||||||
) -> str | None:
|
|
||||||
"""Given a list of args and an arg name, returns a value.
|
|
||||||
|
|
||||||
The arg flag and value are removed from the arg list.
|
|
||||||
raises CleanErrors on any problems.
|
|
||||||
"""
|
|
||||||
from efro.error import CleanError
|
|
||||||
|
|
||||||
count = args.count(name)
|
|
||||||
if not count:
|
|
||||||
if required:
|
|
||||||
raise CleanError(f'Required argument {name} not passed.')
|
|
||||||
return None
|
|
||||||
|
|
||||||
if count > 1:
|
|
||||||
raise CleanError(f'Arg {name} passed multiple times.')
|
|
||||||
|
|
||||||
argindex = args.index(name)
|
|
||||||
if argindex + 1 >= len(args):
|
|
||||||
raise CleanError(f'No value passed after {name} arg.')
|
|
||||||
|
|
||||||
val = args[argindex + 1]
|
|
||||||
del args[argindex : argindex + 2]
|
|
||||||
|
|
||||||
return val
|
|
||||||
|
|
||||||
|
|
||||||
def replace_section(
|
def replace_section(
|
||||||
text: str,
|
text: str,
|
||||||
begin_marker: str,
|
begin_marker: str,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user