fix: nl_mkimage wieder Python-3.8-tauglich machen
CMake ruft nl_mkimage.py bei jedem Firmware-Build ueber das plain "python3" im Docker-Build-Container auf (Python 3.8.10), unabhaengig von den Werkzeugen auf Mac/Pi, die Python >= 3.11 voraussetzen. Die zuletzt hinzugekommene Annotation "expect_device: str | None" wird dort zur Laufzeit ausgewertet und wirft "TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'", was jeden Firmware-Build abbrechen liess. "from __future__ import annotations" (wie in tools/station/server.py) sorgt dafuer, dass Annotationen nur noch als Text existieren und nie ausgewertet werden - der Rest der Datei kam ohne weitere 3.8-Stolpersteine aus. test: zwei Regressionstests ergaenzt, die ohne installiertes Python 3.8 auskommen: einer prueft per AST, dass der future-Import direkt nach dem Docstring steht, der andere laesst vermin (dev-Dependency) die Mindestversion aus Syntax/Stdlib-Nutzung ableiten. vermins "union-types"-Feature wird bewusst nicht aktiviert, weil es "str | None" unabhaengig vom future-Import als 3.10-Anforderung meldet - das wuerde ausgerechnet den korrekten Fix durchfallen lassen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
d23b0d4e02
commit
4a8a5d658f
@@ -4,7 +4,19 @@
|
||||
Layout (512 bytes): "NINL" | version(1) | device[16] | fw_version[16] | sha256[32] | 0xFF padding.
|
||||
The hash covers the complete `_gz.img` (T_BOOTER header + payload), which is exactly what the
|
||||
firmware hashes while writing the image to flash.
|
||||
|
||||
Must run under Python 3.8.10: CMake invokes this script via plain `python3` inside the
|
||||
x86_64 build container (see docker/Dockerfile, cmake/run_mkimage.cmake) on every firmware
|
||||
build, and that container has not been upgraded past 3.8. This is independent of the
|
||||
"Python >= 3.11" requirement elsewhere in this repo, which applies only to the tooling that
|
||||
runs on the Mac and the Pi (tools/station, tools/mkimage's own pytest suite), never to this
|
||||
file. Keep `from __future__ import annotations` below so that PEP 604 unions (`str | None`)
|
||||
in annotations stay text and are never evaluated - without it, that syntax raises
|
||||
`TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'` on 3.8/3.9. See
|
||||
test_nl_mkimage.py::test_stays_python38_compatible, which fails the build if this drifts.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import hashlib
|
||||
import sys
|
||||
|
||||
Reference in New Issue
Block a user