server config is now toml format instead of yaml

This commit is contained in:
Eric 2024-04-25 22:27:10 -07:00
parent 39c9b07b97
commit ac28d632d9
No known key found for this signature in database
GPG Key ID: 89C93F0F8D6D5A98
15 changed files with 105 additions and 205 deletions

50
.efrocachemap generated
View File

@ -945,29 +945,11 @@
"build/assets/ba_data/meshes/zoeTorso.bob": "26a1007e98902178d8c62fd7069d5da5", "build/assets/ba_data/meshes/zoeTorso.bob": "26a1007e98902178d8c62fd7069d5da5",
"build/assets/ba_data/meshes/zoeUpperArm.bob": "a8a881010ac1ee9ec5ca872d5c5e853a", "build/assets/ba_data/meshes/zoeUpperArm.bob": "a8a881010ac1ee9ec5ca872d5c5e853a",
"build/assets/ba_data/meshes/zoeUpperLeg.bob": "95b2502f74c70f934927f67cd505c3ad", "build/assets/ba_data/meshes/zoeUpperLeg.bob": "95b2502f74c70f934927f67cd505c3ad",
"build/assets/ba_data/python-site-packages/_yaml/__init__.py": "b09d1968d73a04d6cf20e4e79657a6e7",
"build/assets/ba_data/python-site-packages/certifi/__init__.py": "98360d9e66de68a618eed6098a65405b", "build/assets/ba_data/python-site-packages/certifi/__init__.py": "98360d9e66de68a618eed6098a65405b",
"build/assets/ba_data/python-site-packages/certifi/__main__.py": "ef02e73f8581609df189a9f61aca365b", "build/assets/ba_data/python-site-packages/certifi/__main__.py": "ef02e73f8581609df189a9f61aca365b",
"build/assets/ba_data/python-site-packages/certifi/cacert.pem": "4e587dca9ab75057ffef6658ed385ff2", "build/assets/ba_data/python-site-packages/certifi/cacert.pem": "4e587dca9ab75057ffef6658ed385ff2",
"build/assets/ba_data/python-site-packages/certifi/core.py": "c1b8c102093ea26587619677c7ec6016", "build/assets/ba_data/python-site-packages/certifi/core.py": "c1b8c102093ea26587619677c7ec6016",
"build/assets/ba_data/python-site-packages/typing_extensions.py": "f1af94a03caf6fc79be0aedc8ab03090", "build/assets/ba_data/python-site-packages/typing_extensions.py": "f1af94a03caf6fc79be0aedc8ab03090",
"build/assets/ba_data/python-site-packages/yaml/__init__.py": "2b747e5772c203377222afc888ac6b71",
"build/assets/ba_data/python-site-packages/yaml/composer.py": "cef871e1f5f99ba2a7c44941b70afb06",
"build/assets/ba_data/python-site-packages/yaml/constructor.py": "8a15e361e34b79491c81553bb3534062",
"build/assets/ba_data/python-site-packages/yaml/cyaml.py": "9b11cba12e6f1cf2efe1725a20d7e1e5",
"build/assets/ba_data/python-site-packages/yaml/dumper.py": "b2cb6b4883f3504bb0255bfce6c3b09f",
"build/assets/ba_data/python-site-packages/yaml/emitter.py": "4c9bec47c3d0398c452f43a4344b2e71",
"build/assets/ba_data/python-site-packages/yaml/error.py": "e419d0e3ccb94a42881b565d285b6c9a",
"build/assets/ba_data/python-site-packages/yaml/events.py": "3e36b40c15962a78747acde2d434518d",
"build/assets/ba_data/python-site-packages/yaml/loader.py": "46f0fc4e2aef0b002bf56c87340a2650",
"build/assets/ba_data/python-site-packages/yaml/nodes.py": "43e867bb7f3cd06e0108837d9fd2a892",
"build/assets/ba_data/python-site-packages/yaml/parser.py": "d5225a0995e6802f440f7bc0bce34905",
"build/assets/ba_data/python-site-packages/yaml/reader.py": "a73be6f8420c9d02c8fe88c06c4b4dab",
"build/assets/ba_data/python-site-packages/yaml/representer.py": "8af292de41185af996c8f35ca1a96663",
"build/assets/ba_data/python-site-packages/yaml/resolver.py": "79802aa2c45560625a19e0eab318e45e",
"build/assets/ba_data/python-site-packages/yaml/scanner.py": "09239836ea50e81db330635e71460baa",
"build/assets/ba_data/python-site-packages/yaml/serializer.py": "baf67e938b13a5a3625d50d8b56180d7",
"build/assets/ba_data/python-site-packages/yaml/tokens.py": "9530e25e7cc2dfa36cff6fddc1578d9a",
"build/assets/ba_data/textures/achievementBoxer.dds": "5b5c461e67f3a92105b56fe264a7dd28", "build/assets/ba_data/textures/achievementBoxer.dds": "5b5c461e67f3a92105b56fe264a7dd28",
"build/assets/ba_data/textures/achievementBoxer.ktx": "1055e009423ea1d0bc3b172f9d7328bb", "build/assets/ba_data/textures/achievementBoxer.ktx": "1055e009423ea1d0bc3b172f9d7328bb",
"build/assets/ba_data/textures/achievementBoxer.pvr": "48f212189a6d83d29be410613b4f0005", "build/assets/ba_data/textures/achievementBoxer.pvr": "48f212189a6d83d29be410613b4f0005",
@ -4064,18 +4046,18 @@
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "5fe54ba7d7250a4e88203ddc7d122d72", "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "5fe54ba7d7250a4e88203ddc7d122d72",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "d36e3dfb83b4d4a4eeb3c5221a230d31", "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "d36e3dfb83b4d4a4eeb3c5221a230d31",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "676a86a2235dc5feeb5b2ac50faef8c3", "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "676a86a2235dc5feeb5b2ac50faef8c3",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "c3f9e038e33af20df864ac218a0a4f29", "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "b094a46a8d4376f0de49e51b979b8833",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "a54c48845d6a222083e27a8eeacfcf4f", "build/prefab/full/mac_arm64_gui/release/ballisticakit": "a54c48845d6a222083e27a8eeacfcf4f",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "e8b988d8474bab7152239dd7cca2125b", "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "fbe8abc5d637fd945a0c9cee358e32ae",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "e85ad52a005548cdffec2d3f68c76c6c", "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "e85ad52a005548cdffec2d3f68c76c6c",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "c68c792ef7b89d961a0fc2f2c7a2a53d", "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "31d588a5bde8b2028129001b5b3be192",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "a9df28724e77a4f241561a8da401c6a4", "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "a9df28724e77a4f241561a8da401c6a4",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "6009222450e3d51276f31299364accd3", "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "0d56f8b4c531f6e7f2d33bc0a5fd4ef2",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "931e8d780ca39a9b4f6878c15cf34283", "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "931e8d780ca39a9b4f6878c15cf34283",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "0f1ce2a8347fec692c121d3d980ed9dd", "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "120259c59b3584db3b6e16711cc01c10",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "ac1775db2ccec6be00c59b915098d71a", "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "e6e8c688fd2540ba3f0402236d91fa2d",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "097bce1746a439817e153b01067150b5", "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "47eaa7e4c28292f47ab50aa90120325a",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "2ddec85274dfa4c41edf2e175e31071d", "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "2858480f76f850ace31a37bc7ff5aeab",
"build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "e40234644df79316d71808a731ba14f0", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "e40234644df79316d71808a731ba14f0",
"build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "8563857336ffcf40abfeac81fc3955eb", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "8563857336ffcf40abfeac81fc3955eb",
"build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "e40234644df79316d71808a731ba14f0", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "e40234644df79316d71808a731ba14f0",
@ -4092,14 +4074,14 @@
"build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "9768548c6dfdff65fb25661540025ffe", "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "9768548c6dfdff65fb25661540025ffe",
"build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "1a0cc7e78dc66dec6ee85a8a0d68aefd", "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "1a0cc7e78dc66dec6ee85a8a0d68aefd",
"build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "9768548c6dfdff65fb25661540025ffe", "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "9768548c6dfdff65fb25661540025ffe",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "4baede5ec7e5689ef398a07b2cd4d8b0", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "d0ebeba4c65ae9d39e831e30ee526022",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "96f9084001fb46ae7f6b5c369dd54597", "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "85d436353222ca21a15d71602753a5e6",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "069e9d0c5dc09e93826a85f4888f13e0", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "73d6b99a4e8ada86a0328e62d33b3683",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "4e1356a6e4d253df2768fd1619d981a6", "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "f6203b004d00432c08c2f47f170111b8",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "d81cc208e26a6cfa37b8fa156a2bffba", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "f1f41e53e35805a071f86c252adcb517",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "a87689ec2c168833bb5e1753d0b360a6", "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "4addbf2b7b2bc99e13d91f5b14660239",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "f15c686d83350f1e6fcbc04bd7619775", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "585587b1488674c182f67b77fe7bcf4e",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "4c32efd6dced334def9d466cb3df3d7f", "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "a8a272cd5146456f654d7b154e512404",
"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",

View File

@ -601,6 +601,11 @@
can be useful for core engine code to directly and clearly point out problems can be useful for core engine code to directly and clearly point out problems
that cannot be recovered from (Exceptions in such cases can tend to be that cannot be recovered from (Exceptions in such cases can tend to be
'handled' which leads to a broken or crashing app). 'handled' which leads to a broken or crashing app).
- The server config file is now in `toml` format instead of `yaml`. Python has
built in support for reading `toml` as of 3.11 which means we don't have to
bundle extra packages, and `toml` has more of a clean minimal design that
works well for config files. Also I plan to use it for AssetPackage
configuration stuff so this keeps things consistent.
### 1.7.23 (build 21178, api 8, 2023-07-19) ### 1.7.23 (build 21178, api 8, 2023-07-19)

View File

@ -1205,7 +1205,6 @@
<w>objpath</w> <w>objpath</w>
<w>objset</w> <w>objset</w>
<w>objsizes</w> <w>objsizes</w>
<w>objtoyaml</w>
<w>objtypes</w> <w>objtypes</w>
<w>obstack</w> <w>obstack</w>
<w>obvs</w> <w>obvs</w>
@ -2013,4 +2012,4 @@
<w>zrot</w> <w>zrot</w>
</words> </words>
</dictionary> </dictionary>
</component> </component>

View File

@ -31,7 +31,6 @@
"astroid", "astroid",
"pylint.lint", "pylint.lint",
"pytest", "pytest",
"yaml",
"requests", "requests",
"typing_extensions", "typing_extensions",
"cpplint", "cpplint",
@ -46,7 +45,8 @@
"openstep_parser", "openstep_parser",
"daemon", "daemon",
"jinja2", "jinja2",
"jinja2.Environment" "jinja2.Environment",
"tomlkit"
], ],
"python_paths": [ "python_paths": [
"src/assets/ba_data/python", "src/assets/ba_data/python",

View File

@ -12,11 +12,10 @@ pytest==8.1.1
python-daemon==3.0.1 python-daemon==3.0.1
python-lsp-black==2.0.0 python-lsp-black==2.0.0
python-lsp-server==1.11.0 python-lsp-server==1.11.0
PyYAML==6.0.1
requests==2.31.0 requests==2.31.0
Sphinx==7.3.7 Sphinx==7.3.7
tomlkit==0.12.4
types-certifi==2021.10.8.3 types-certifi==2021.10.8.3
types-filelock==3.2.7 types-filelock==3.2.7
types-PyYAML==6.0.12.20240311
types-requests==2.31.0.20240406 types-requests==2.31.0.20240406
typing_extensions==4.11.0 typing_extensions==4.11.0

View File

@ -198,7 +198,7 @@ ctx.filter_file_names = {
'LICENSE', 'LICENSE',
'cloudtool', 'cloudtool',
'bacloud', 'bacloud',
'config_template.yaml', 'config_template.toml',
'.efrocachemap', '.efrocachemap',
} }

View File

@ -1,4 +1,4 @@
# Pyright's actual config is a json file but we're using yaml here so we # Pyright's actual config is a json file but we're using toml here so we
# can include lovely comments (yaml is a superset of json) and then we # can include lovely comments (yaml is a superset of json) and then we
# bake it down into a json file. # bake it down into a json file.

View File

@ -945,8 +945,6 @@
"ba_data/meshes/zoeUpperArm.bob", "ba_data/meshes/zoeUpperArm.bob",
"ba_data/meshes/zoeUpperLeg.bob", "ba_data/meshes/zoeUpperLeg.bob",
"ba_data/python-site-packages/__pycache__/typing_extensions.cpython-312.opt-1.pyc", "ba_data/python-site-packages/__pycache__/typing_extensions.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/_yaml/__init__.py",
"ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/certifi/__init__.py", "ba_data/python-site-packages/certifi/__init__.py",
"ba_data/python-site-packages/certifi/__main__.py", "ba_data/python-site-packages/certifi/__main__.py",
"ba_data/python-site-packages/certifi/__pycache__/__init__.cpython-312.opt-1.pyc", "ba_data/python-site-packages/certifi/__pycache__/__init__.cpython-312.opt-1.pyc",
@ -955,40 +953,6 @@
"ba_data/python-site-packages/certifi/cacert.pem", "ba_data/python-site-packages/certifi/cacert.pem",
"ba_data/python-site-packages/certifi/core.py", "ba_data/python-site-packages/certifi/core.py",
"ba_data/python-site-packages/typing_extensions.py", "ba_data/python-site-packages/typing_extensions.py",
"ba_data/python-site-packages/yaml/__init__.py",
"ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/composer.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/error.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/events.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/loader.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/parser.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/reader.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/representer.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-312.opt-1.pyc",
"ba_data/python-site-packages/yaml/composer.py",
"ba_data/python-site-packages/yaml/constructor.py",
"ba_data/python-site-packages/yaml/cyaml.py",
"ba_data/python-site-packages/yaml/dumper.py",
"ba_data/python-site-packages/yaml/emitter.py",
"ba_data/python-site-packages/yaml/error.py",
"ba_data/python-site-packages/yaml/events.py",
"ba_data/python-site-packages/yaml/loader.py",
"ba_data/python-site-packages/yaml/nodes.py",
"ba_data/python-site-packages/yaml/parser.py",
"ba_data/python-site-packages/yaml/reader.py",
"ba_data/python-site-packages/yaml/representer.py",
"ba_data/python-site-packages/yaml/resolver.py",
"ba_data/python-site-packages/yaml/scanner.py",
"ba_data/python-site-packages/yaml/serializer.py",
"ba_data/python-site-packages/yaml/tokens.py",
"ba_data/textures/achievementBoxer.dds", "ba_data/textures/achievementBoxer.dds",
"ba_data/textures/achievementBoxer.ktx", "ba_data/textures/achievementBoxer.ktx",
"ba_data/textures/achievementBoxer.pvr", "ba_data/textures/achievementBoxer.pvr",

View File

@ -2691,53 +2691,17 @@ $(foreach element,$(SCRIPT_TARGETS_PYC_PRIVATE_ANDROID),\
$(eval $(call make-opt-pyc-target,$(element)))) $(eval $(call make-opt-pyc-target,$(element))))
SCRIPT_TARGETS_PY_PRIVATE_COMMON = \ SCRIPT_TARGETS_PY_PRIVATE_COMMON = \
$(BUILD_DIR)/ba_data/python-site-packages/_yaml/__init__.py \
$(BUILD_DIR)/ba_data/python-site-packages/certifi/__init__.py \ $(BUILD_DIR)/ba_data/python-site-packages/certifi/__init__.py \
$(BUILD_DIR)/ba_data/python-site-packages/certifi/__main__.py \ $(BUILD_DIR)/ba_data/python-site-packages/certifi/__main__.py \
$(BUILD_DIR)/ba_data/python-site-packages/certifi/core.py \ $(BUILD_DIR)/ba_data/python-site-packages/certifi/core.py \
$(BUILD_DIR)/ba_data/python-site-packages/typing_extensions.py \ $(BUILD_DIR)/ba_data/python-site-packages/typing_extensions.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__init__.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/composer.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/constructor.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/cyaml.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/dumper.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/emitter.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/error.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/events.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/loader.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/nodes.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/parser.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/reader.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/representer.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/resolver.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/scanner.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/serializer.py \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/tokens.py \
$(BUILD_DIR)/sphinx/static/conf.py $(BUILD_DIR)/sphinx/static/conf.py
SCRIPT_TARGETS_PYC_PRIVATE_COMMON = \ SCRIPT_TARGETS_PYC_PRIVATE_COMMON = \
$(BUILD_DIR)/ba_data/python-site-packages/_yaml/__pycache__/__init__.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/certifi/__pycache__/__init__.cpython-312.opt-1.pyc \ $(BUILD_DIR)/ba_data/python-site-packages/certifi/__pycache__/__init__.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/certifi/__pycache__/__main__.cpython-312.opt-1.pyc \ $(BUILD_DIR)/ba_data/python-site-packages/certifi/__pycache__/__main__.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/certifi/__pycache__/core.cpython-312.opt-1.pyc \ $(BUILD_DIR)/ba_data/python-site-packages/certifi/__pycache__/core.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-312.opt-1.pyc \ $(BUILD_DIR)/ba_data/python-site-packages/__pycache__/typing_extensions.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/__init__.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/composer.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/constructor.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/cyaml.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/dumper.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/emitter.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/error.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/events.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/loader.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/nodes.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/parser.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/reader.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/representer.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/resolver.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/scanner.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/serializer.cpython-312.opt-1.pyc \
$(BUILD_DIR)/ba_data/python-site-packages/yaml/__pycache__/tokens.cpython-312.opt-1.pyc \
$(BUILD_DIR)/sphinx/static/__pycache__/conf.cpython-312.opt-1.pyc $(BUILD_DIR)/sphinx/static/__pycache__/conf.cpython-312.opt-1.pyc
# Rule to copy src asset scripts to dst. # Rule to copy src asset scripts to dst.

View File

@ -2,8 +2,8 @@ To run this, simply cd into this directory and run ./ballisticakit_server
(on mac or linux) or launch_ballisticakit_server.bat (on windows). (on mac or linux) or launch_ballisticakit_server.bat (on windows).
You'll need to open a UDP port (43210 by default) so that the world can You'll need to open a UDP port (43210 by default) so that the world can
communicate with your server. communicate with your server.
You can configure your server by editing the config.yaml file. You can configure your server by editing the config.toml file.
(if you only see config_template.yaml, you can copy/rename that to config.yaml) (if you only see config_template.toml, you can copy/rename that to config.toml)
Platform-Specific Notes: Platform-Specific Notes:

View File

@ -39,6 +39,8 @@ VERSION_STR = '1.3.2'
# #
# - Updated to use Python 3.12. # - Updated to use Python 3.12.
# #
# - Server config file is now in toml format instead of yaml.
#
# 1.3.1 # 1.3.1
# #
# - Windows binary is now named 'BallisticaKitHeadless.exe'. # - Windows binary is now named 'BallisticaKitHeadless.exe'.
@ -101,7 +103,7 @@ class ServerManagerApp:
IMMEDIATE_SHUTDOWN_TIME_LIMIT = 5.0 IMMEDIATE_SHUTDOWN_TIME_LIMIT = 5.0
def __init__(self) -> None: def __init__(self) -> None:
self._config_path = 'config.yaml' self._config_path = 'config.toml'
self._user_provided_config_path = False self._user_provided_config_path = False
self._config = ServerConfig() self._config = ServerConfig()
self._ba_root_path = os.path.abspath('dist/ba_root') self._ba_root_path = os.path.abspath('dist/ba_root')
@ -476,11 +478,9 @@ class ServerManagerApp:
+ cls._par( + cls._par(
'Set the config file read by the server script. The config' 'Set the config file read by the server script. The config'
' file contains most options for what kind of game to host.' ' file contains most options for what kind of game to host.'
' It should be in yaml format. Note that yaml is backwards' ' It should be in toml format. If not specified, the script'
' compatible with json so you can just write json if you' ' will look for a file named \'config.toml\' in the same'
' want to. If not specified, the script will look for a' ' directory as the script.'
' file named \'config.yaml\' in the same directory as the'
' script.'
) )
+ '\n' + '\n'
f'{Clr.BLD}--root [path]{Clr.RST}\n' f'{Clr.BLD}--root [path]{Clr.RST}\n'
@ -594,23 +594,17 @@ class ServerManagerApp:
# Don't be so lenient if the user pointed us at one though. # Don't be so lenient if the user pointed us at one though.
raise RuntimeError(f"Config file not found: '{self._config_path}'.") raise RuntimeError(f"Config file not found: '{self._config_path}'.")
import yaml import tomllib
with open(self._config_path, encoding='utf-8') as infile: with open(self._config_path, encoding='utf-8') as infile:
user_config_raw = yaml.safe_load(infile.read()) user_config_raw = tomllib.loads(infile.read())
# An empty config file will yield None, and that's ok. out = dataclass_from_dict(ServerConfig, user_config_raw)
if user_config_raw is not None:
out = dataclass_from_dict(ServerConfig, user_config_raw)
# Update our known mod-time since we know it exists. # Update our known mod-time since we know it exists.
self._config_mtime = Path(self._config_path).stat().st_mtime self._config_mtime = Path(self._config_path).stat().st_mtime
self._last_config_mtime_check_time = time.time() self._last_config_mtime_check_time = time.time()
# Go with defaults if we weren't able to load anything.
if out is None:
out = ServerConfig()
if print_confirmation: if print_confirmation:
print( print(
f'{Clr.CYN}Valid server config file loaded.{Clr.RST}', f'{Clr.CYN}Valid server config file loaded.{Clr.RST}',

View File

@ -1,5 +1,5 @@
# To configure your server, create a config.yaml file in the same directory # To configure your server, create a config.toml file in the same directory
# as the ballisticakit_server script. The config_template.yaml file can be # as the ballisticakit_server script. The config_template.toml file can be
# copied or renamed as a convenient starting point. # copied or renamed as a convenient starting point.
# Uncomment any of these values to override defaults. # Uncomment any of these values to override defaults.

View File

@ -446,92 +446,85 @@ def _get_server_config_raw_contents(projroot: str) -> str:
return textwrap.dedent('\n'.join(lines[firstline : lastline + 1])) return textwrap.dedent('\n'.join(lines[firstline : lastline + 1]))
def _get_server_config_template_yaml(projroot: str) -> str: def _get_server_config_template_toml(projroot: str) -> str:
# pylint: disable=too-many-branches from tomlkit import document, dumps
# pylint: disable=too-many-statements from bacommon.servermanager import ServerConfig
import yaml
cfg = ServerConfig()
# Override some defaults with values we want to display commented
# out instead.
cfg.playlist_code = 12345
cfg.stats_url = 'https://mystatssite.com/showstats?player=${ACCOUNT}'
cfg.clean_exit_minutes = 60
cfg.unclean_exit_minutes = 90
cfg.idle_exit_minutes = 20
cfg.admins = ['pb-yOuRAccOuNtIdHErE', 'pb-aNdMayBeAnotherHeRE']
cfg.protocol_version = 35
cfg.session_max_players_override = 8
cfg.playlist_inline = []
cfg.team_names = ('Red', 'Blue')
cfg.team_colors = ((0.1, 0.25, 1.0), (1.0, 0.25, 0.2))
lines_in = _get_server_config_raw_contents(projroot).splitlines() lines_in = _get_server_config_raw_contents(projroot).splitlines()
# Convert to double quotes only (we'll convert back at the end).
assert all(('"' not in l) for l in lines_in)
lines_in = [l.replace("'", '"') for l in lines_in]
lines_out: list[str] = [] lines_out: list[str] = []
ignore_vars = {'stress_test_players'} ignore_vars = {'stress_test_players'}
for line in lines_in: for line in lines_in:
if any(line.startswith(f'{var}:') for var in ignore_vars):
continue
if line.startswith(' '):
# Ignore indented lines (our few multi-line special cases).
continue
if line.startswith(']') or line.startswith(')'): # Replace attr declarations with commented out toml values.
# Ignore closing lines (our few multi-line special cases). if line != '' and not line.startswith('#') and ':' in line:
continue before_colon, _after_colon = line.split(':', 1)
vname = before_colon.strip()
if vname in ignore_vars:
continue
vval: Any = getattr(cfg, vname)
if line.startswith('team_names:'): doc = document()
lines_out += [ # Toml doesn't support None/null
'#team_names:', if vval is None:
'#- Blue', raise RuntimeError(
'#- Red', f"ServerManager value '{vname}' has value None."
] f' This is not allowed in toml;'
continue f' please provide a dummy value.'
)
assert vval is not None
doc[vname] = vval
lines_out += ['#' + l for l in dumps(doc).strip().splitlines()]
if line.startswith('team_colors:'): # Preserve blank lines, but only one in a row.
lines_out += [ elif line == '':
'#team_colors:', if not lines_out or lines_out[-1] != '':
'#- [0.1, 0.25, 1.0]', lines_out.append(line)
'#- [1.0, 0.25, 0.2]',
]
continue
if line.startswith('playlist_inline:'): # Preserve comment lines.
lines_out += ['#playlist_inline: []'] elif line.startswith('#'):
continue # Convert comments referring to python bools to toml bools.
if line != '' and not line.startswith('#'):
before_equal_sign, vval_raw = line.split('=', 1)
before_equal_sign = before_equal_sign.strip()
vval_raw = vval_raw.strip()
vname = before_equal_sign.split()[0]
assert vname.endswith(':'), f"'{vname}' does not end with ':'"
vname = vname[:-1]
vval: Any
if vval_raw == 'field(default_factory=list)':
vval = []
else:
vval = eval(vval_raw) # pylint: disable=eval-used
# Filter/override a few things.
if vname == 'playlist_code':
# User wouldn't want to pass the default of None here.
vval = 12345
elif vname == 'clean_exit_minutes':
vval = 60
elif vname == 'unclean_exit_minutes':
vval = 90
elif vname == 'idle_exit_minutes':
vval = 20
elif vname == 'stats_url':
vval = 'https://mystatssite.com/showstats?player=${ACCOUNT}'
elif vname == 'admins':
vval = ['pb-yOuRAccOuNtIdHErE', 'pb-aNdMayBeAnotherHeRE']
elif vname == 'protocol_version':
vval = 35
lines_out += [
'#' + l for l in yaml.dump({vname: vval}).strip().splitlines()
]
else:
# Convert comments referring to python bools to yaml bools.
line = line.replace('True', 'true').replace('False', 'false') line = line.replace('True', 'true').replace('False', 'false')
if '(internal)' not in line: if '(internal)' not in line:
lines_out.append(line) lines_out.append(line)
return '\n'.join(lines_out)
out = '\n'.join(lines_out)
# Convert back to single quotes only.
assert "'" not in out
out = out.replace('"', "'")
return out
def filter_server_config(projroot: str, infilepath: str) -> str: def filter_server_config_toml(projroot: str, infilepath: str) -> str:
"""Add commented-out config options to a server config.""" """Add commented-out config options to a server config."""
with open(infilepath, encoding='utf-8') as infile: with open(infilepath, encoding='utf-8') as infile:
cfg = infile.read() cfg = infile.read()
return cfg.replace( return cfg.replace(
'# __CONFIG_TEMPLATE_VALUES__', '# __CONFIG_TEMPLATE_VALUES__',
_get_server_config_template_yaml(projroot), _get_server_config_template_toml(projroot),
) )

View File

@ -669,8 +669,8 @@ class AssetStager:
projroot=self.projroot, projroot=self.projroot,
mode=modeval, mode=modeval,
infilename=f'{self.projroot}/src/assets/server_package/' infilename=f'{self.projroot}/src/assets/server_package/'
'config_template.yaml', 'config_template.toml',
outfilename=os.path.join(self.serverdst, 'config_template.yaml'), outfilename=os.path.join(self.serverdst, 'config_template.toml'),
) )
if self.win_type is not None: if self.win_type is not None:
fname = 'launch_ballisticakit_server.bat' fname = 'launch_ballisticakit_server.bat'
@ -763,11 +763,11 @@ def _stage_server_file(
os.makedirs(os.path.dirname(outfilename), exist_ok=True) os.makedirs(os.path.dirname(outfilename), exist_ok=True)
basename = os.path.basename(infilename) basename = os.path.basename(infilename)
if basename == 'config_template.yaml': if basename == 'config_template.toml':
# Inject all available config values into the config file. # Inject all available config values into the config file.
_write_if_changed( _write_if_changed(
outfilename, outfilename,
batools.build.filter_server_config(str(projroot), infilename), batools.build.filter_server_config_toml(str(projroot), infilename),
) )
elif basename == 'ballisticakit_server.py': elif basename == 'ballisticakit_server.py':

View File

@ -23,7 +23,7 @@ def install_tool_config(projroot: Path, src: Path, dst: Path) -> None:
"""Install a config.""" """Install a config."""
print(f'Creating tool config: {Clr.BLD}{dst}{Clr.RST}') print(f'Creating tool config: {Clr.BLD}{dst}{Clr.RST}')
# Special case: if we've got a src .yaml and a dst .json, convert. # Special case: if we've got a src .toml and a dst .json, convert.
# This can be handy to add annotations/etc. in the src which isn't # This can be handy to add annotations/etc. in the src which isn't
# possible with json. # possible with json.
if src.suffix == '.toml' and dst.suffix == '.json': if src.suffix == '.toml' and dst.suffix == '.json':