Skip to content

Commit dad903b

Browse files
Merge pull request #18 from AntoineBuirey/0.1.2-dev
## Features - Add event documentation generation script (Markdown output) sourced from XML event descriptions. - Enhance version listing: - Dashboard initialization now includes modloader versions. - UI/API refactored to return `Version` objects directly. - Improved endpoints for fetching Minecraft and Forge versions. - Add a console log to confirm dashboard initialization. ## Fixes - Bus message decoding: - Better error handling and error logging for decode failures. - Event argument conversion now uses the new encode/decode functions. - Makefile: - Use the `PYTHON` variable consistently. - Improve startup logging levels. - Refine cleanup behavior. ## Refactor - Event arguments: - Remove deprecated type mapping in `EventArg`. - Consolidate argument conversion via new encode/decode helpers. ## Chore/Tests - Add utility to split strings while ignoring nested structures. - Include unit tests for the new utility. ## Style - Update regex patterns to better match Python type hints for `dict`, `list`, and `tuple`. # Potential Impact / Notes - API/UI now returning `Version` objects may require minor adjustments for any consumers that relied on primitive values. - No breaking changes expected beyond the `Version` return type consideration. # How to Test - Start the server and verify: - Enhanced logging appears at startup. - Dashboard initializes and displays modloader versions. - Hit the version endpoints and confirm they return `Version` objects as intended. - Run the event docs generation script (or associated Makefile target) and check that Markdown is produced from XML descriptions. - Execute the test suite to validate the new nested-split utility behavior.
2 parents 541b6e9 + e0c100d commit dad903b

16 files changed

Lines changed: 922 additions & 98 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ dist/
55
build/
66
mc_srv_manager/
77
*.log
8+
*.md
89

9-
test-report.xml
10+
test-report.xml

client/src/dashboard/dashboard.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ async function init_create_server_form() {
103103
clear_select_options(document.getElementById('modloader-version') as HTMLSelectElement);
104104
}
105105
});
106+
update_modloader_versions(mcVersions[0]);
106107

107108
const serverPathInput = document.getElementById('server-path') as HTMLSelectElement;
108109
const serverPaths = await API.get_mc_server_dirs();
@@ -180,4 +181,5 @@ document.addEventListener("DOMContentLoaded", async () => {
180181
await init_create_server_form();
181182
await fill_server_list();
182183
await init_misc();
184+
console.log("Dashboard initialized.");
183185
});

forge-server-manager.code-workspace

Lines changed: 135 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,140 @@
2323
},
2424
"python.analysis.inlayHints.callArgumentNames": "partial",
2525
"python.analysis.inlayHints.functionReturnTypes": true,
26-
"python.analysis.typeCheckingMode": "basic"
26+
"python.analysis.typeCheckingMode": "basic",
27+
"makefile.configureOnOpen": false,
28+
"VsCodeTaskButtons.showCounter": false,
29+
"VsCodeTaskButtons.tasks": [
30+
{
31+
"label": "$(debug-start) Run Server",
32+
"alignment": "right",
33+
"task": "Run Server",
34+
"tooltip": "Start the server, build it if necessary\n(equivalent to 'make start')",
35+
},
36+
{
37+
"label": "$(tools) Server related tools",
38+
"alignment": "right",
39+
"tasks": [
40+
{
41+
"label": "Decode Event",
42+
"task": "Decode Event",
43+
"tooltip": "Decode a raw event string"
44+
},
45+
{
46+
"label": "Generate doc",
47+
"task": "Generate doc",
48+
"tooltip": "Regenerate the documentation files"
49+
},
50+
{
51+
"label": "Build app",
52+
"task": "Build app",
53+
"tooltip": "Build the application (equivalent to 'make install')"
54+
}
55+
],
56+
"tooltip": "Start the server, build it if necessary\n(equivalent to 'make start')",
57+
}
58+
]
59+
},
60+
"extensions": {
61+
"recommendations": [
62+
"donjayamanne.python-extension-pack",
63+
"ms-vscode.vscode-typescript-next",
64+
"ms-python.python",
65+
"hediet.vscode-drawio",
66+
"redhat.vscode-xml",
67+
"spencerwmiles.vscode-task-buttons"
68+
]
69+
},
70+
"tasks": {
71+
"version": "2.0.0",
72+
"tasks": [
73+
{
74+
"label": "Run Server",
75+
"type": "shell",
76+
"command": "make",
77+
"args": ["start"],
78+
"group": {"kind": "build", "isDefault": true},
79+
"problemMatcher": [],
80+
"presentation": {
81+
"echo": false,
82+
"reveal": "always",
83+
"focus": false,
84+
"panel": "dedicated",
85+
"showReuseMessage": false,
86+
"clear": true,
87+
"close": true
88+
}
89+
},
90+
{
91+
"label": "Generate doc",
92+
"type": "shell",
93+
"command": "env/bin/mc-srv-manager-doc-gen",
94+
"group": {"kind": "build", "isDefault": false},
95+
"problemMatcher": [],
96+
"presentation": {
97+
"echo": false,
98+
"reveal": "silent",
99+
"focus": false,
100+
"panel": "shared",
101+
"showReuseMessage": false,
102+
"clear": false
103+
}
104+
},
105+
{
106+
"label": "Decode Event",
107+
"type": "shell",
108+
"command": "env/bin/mc-srv-manager-event-decoder",
109+
"args": ["${input:event}", "${input:raw_mode}", "${input:has_prefix}"],
110+
"group": {"kind": "none", "isDefault": false},
111+
"problemMatcher": [],
112+
"presentation": {
113+
"echo": false,
114+
"reveal": "always",
115+
"focus": false,
116+
"panel": "shared",
117+
"showReuseMessage": false,
118+
"clear": false
119+
},
120+
121+
},
122+
{
123+
"label": "Build app",
124+
"type": "shell",
125+
"command": "make",
126+
"args": ["install"],
127+
"group": {"kind": "build", "isDefault": false},
128+
"problemMatcher": [],
129+
"presentation": {
130+
"echo": false,
131+
"reveal": "always",
132+
"focus": false,
133+
"panel": "shared",
134+
"showReuseMessage": false,
135+
"clear": false
136+
},
137+
138+
}
139+
],
140+
"inputs": [
141+
{
142+
"id": "event",
143+
"type": "promptString",
144+
"description": "Enter the event string to decode"
145+
},
146+
{
147+
"id" : "raw_mode",
148+
"type": "pickString",
149+
"description": "Enable raw mode",
150+
"options": ["--raw", ""],
151+
"default": ""
152+
},
153+
{
154+
"id": "has_prefix",
155+
"type": "pickString",
156+
"description": "Does the event have a prefix",
157+
"options": ["--prefix", ""],
158+
"default": ""
159+
}
160+
]
27161
}
28162
}

makefile

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ WEB_DEV_ASSETS = $(patsubst client/src/assets/%,client/dist/assets/%,$(WEB_ASSET
2222
WEB_DEV_DIST = $(WEB_DEV_JS) $(WEB_DEV_HTML) $(WEB_DEV_CSS) $(WEB_DEV_ASSETS)
2323

2424

25-
SRV_SRC = $(shell find server/src -type f -name "*.py") server/src/minecraft/properties.xml server/src/bus/events.xml
25+
SRV_SRC = $(shell find server/src -type f -name "*.py") server/src/minecraft/properties.xml server/src/bus/events.xml server/src/events_descriptions.json
2626
SRV_DIST = $(patsubst server/src/%,mc_srv_manager/%,$(SRV_SRC))
2727

2828
CONFIG_SRC = $(wildcard server/src/config.json)
@@ -42,20 +42,19 @@ mc_srv_manager/client/login/index.html: client/src/metadata.template client/
4242
PYPROJECT = pyproject.toml
4343

4444
PYTHON_PATH = $(shell if [ -d env/bin ]; then echo "env/bin/"; elif [ -d env/Scripts ]; then echo "env/Scripts/"; else echo ""; fi)
45-
PYTHON_LIB = $(shell if [ -d env/lib/python3.12/site-packages ]; then echo "env/lib/python3.12/site-packages/"; elif [ -d env/Lib/site-packages ]; then echo "env/Lib/site-packages/"; else echo ""; fi)
45+
PYTHON_LIB = $(shell find env/lib -type d -name "site-packages" | head -n 1; if [ -d env/Lib/site-packages ]; then echo "env/Lib/site-packages/"; fi)
4646
PYTHON = $(PYTHON_PATH)python
4747

4848
EXECUTABLE_EXTENSION = $(shell if [ -d env/bin ]; then echo ""; elif [ -d env/Scripts ]; then echo ".exe"; else echo ""; fi)
4949

5050
APP_EXECUTABLE = $(PYTHON_PATH)mc-srv-manager$(EXECUTABLE_EXTENSION)
51-
DEBUG_LOCAL_EXECUTABLE = $(PYTHON_PATH)mc-srv-manager-local-debug$(EXECUTABLE_EXTENSION)
5251

5352
# if not defined, get the version from git
5453
VERSION ?= $(shell $(PYTHON) get_version.py)
5554

5655
# if version is in the form of x.y.z-dev-aaaa or x.y.z-dev+aaaa, set it to x.y.z-dev
57-
# VERSION_STR = $(shell echo $(VERSION) | sed 's/-dev-[a-z0-9]*//')
58-
VERSION_STR = $(shell echo $(VERSION) | sed 's/-dev-[a-z0-9]*//; s/-dev+.*//')
56+
# VERSION_STR = $(shell echo $(VERSION) | sed 's/-dev-[a-z0-9]*\/\/')
57+
VERSION_STR = $(shell echo $(VERSION) | sed "s/-dev-[a-z0-9]*//; s/-dev+.*//")
5958

6059

6160
WHEEL = mc_srv_manager-$(VERSION_STR)-py3-none-any.whl
@@ -71,7 +70,7 @@ print-%:
7170
mc_srv_manager/client/%.html: client/src/%.template.html
7271
@mkdir -p $(@D)
7372
@echo "Compiling $< to $@"
74-
@python html_template.py client/src $(subst .template.html,,$(subst client/src/,,$<)) -o $@
73+
@$(PYTHON) html_template.py client/src $(subst .template.html,,$(subst client/src/,,$<)) -o $@
7574

7675
mc_srv_manager/client/%.js: client/src/%.ts
7776
@mkdir -p $(dir $@)
@@ -125,13 +124,10 @@ $(APP_EXECUTABLE) : $(WEB_DIST) $(SRV_DIST) $(PYPROJECT) $(CONFIG_DIST) dist/$(W
125124
@echo "Package installed."
126125

127126
build: dist/$(WHEEL) dist/$(ARCHIVE)
128-
@echo "Build complete."
129127

130128
client: $(WEB_DIST)
131-
@echo "Client build complete."
132129

133130
server: $(SRV_DIST) $(CONFIG_DIST)
134-
@echo "Server build complete."
135131

136132

137133

@@ -142,20 +138,22 @@ test-report.xml: $(APP_EXECUTABLE) $(WEB_DIST) $(SRV_DIST) $(PYPROJECT) $(CONFIG
142138
install: $(APP_EXECUTABLE)
143139

144140
start: install
145-
@echo "Starting server..."
146-
@$(APP_EXECUTABLE) --log-file server.log:TRACE \
141+
@$(APP_EXECUTABLE) \
147142
-c /var/minecraft/config.json \
148-
--module-level config:INFO \
143+
--log-file server.trace.log:TRACE \
144+
--log-file server.debug.log:DEBUG \
145+
--module-level config:TRACE \
149146
--module-level minecraft.properties:DEBUG
150147

151-
152-
153148
tests: clean-tests test-report.xml
154149

155150

156151
clean:
157152
rm -rf mc_srv_manager
158153
rm -rf dist
154+
rm -rf $(PYTHON_LIB)/mc_srv_manager
155+
rm -rf $(PYTHON_LIB)/mc_srv_manager-*.dist-info
156+
rm -rf $(APP_EXECUTABLE)
159157

160158
clean-tests:
161159
rm -rf test-report.xml

pyproject.toml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ dependencies = [
3939
[project.scripts]
4040
mc-srv-manager = "mc_srv_manager.__main__:main"
4141
mc-srv-manager-event-decoder = "mc_srv_manager.decode_event:main"
42+
mc-srv-manager-doc-gen = "mc_srv_manager.gen_doc:main"
4243

4344
[tool.setuptools]
4445
packages = ["mc_srv_manager",
@@ -55,7 +56,13 @@ packages = ["mc_srv_manager",
5556
"mc_srv_manager.client",
5657
"mc_srv_manager.client.assets"
5758
]
58-
package-data = { "mc_srv_manager" = ["client/**", "config.json", "minecraft/properties.xml", "bus/events.xml"] }
59+
package-data = { "mc_srv_manager" = [
60+
"client/**",
61+
"config.json",
62+
"minecraft/properties.xml",
63+
"bus/events.xml",
64+
"events_descriptions.json",
65+
] }
5966
include-package-data = true
6067

6168
[tool.pytest.ini_options]

server/src/bus/bus.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,11 @@ def __read_incoming(self):
225225
event, args = Event.decode(msg)
226226
Logger.debug(f"Received message: {event} with args: {args}")
227227
Logger.trace(f"Raw data: {msg} (Length: {len(msg)} bytes)")
228+
except Exception as e:
229+
Logger.error(f"Error decoding message {msg}: {e.__class__.__name__} : {e}")
230+
Logger.debug(traceback.format_exc())
231+
continue
232+
try:
228233
if event.id in self.__subscribers:
229234
def a():
230235
try:

0 commit comments

Comments
 (0)