fix(server): fix werkzeug metadata lookup crash & add update channel selector (Stable/Beta)
This commit is contained in:
1 parent
2de9a13c89
commit
9ace7a2c16
6 files changed
+314
-51
No files matched your search
@@ -8,12 +8,62 @@ import socket
|
||||
import struct
|
||||
import warnings
|
||||
|
||||
# === GLOBAL WARNING SUPPRESSION (very early) ===
|
||||
# === GLOBAL WARNING SUPPRESSION & METADATA SHIM (very early) ===
|
||||
try:
|
||||
import importlib.metadata
|
||||
_orig_metadata_version = importlib.metadata.version
|
||||
_orig_metadata_distribution = importlib.metadata.distribution
|
||||
|
||||
_KNOWN_VERSIONS = {
|
||||
"werkzeug": "3.1.9",
|
||||
"flask": "3.1.3",
|
||||
"marshmallow": "3.20.0",
|
||||
"requests": "2.34.2",
|
||||
"urllib3": "2.8.0",
|
||||
"protobuf": "7.36.2",
|
||||
"click": "8.5.0",
|
||||
"jinja2": "3.1.6",
|
||||
"itsdangerous": "2.2.0",
|
||||
"blinker": "1.9.0",
|
||||
"markupsafe": "3.0.4",
|
||||
"dataclasses-json": "0.6.7",
|
||||
"dataclasses_json": "0.6.7",
|
||||
"packaging": "26.3"
|
||||
}
|
||||
|
||||
class _ShimedDistribution:
|
||||
def __init__(self, name, version):
|
||||
self.name = name
|
||||
self.version = version
|
||||
self.metadata = {"Name": name, "Version": version}
|
||||
|
||||
def _safe_metadata_version(name):
|
||||
try:
|
||||
return _orig_metadata_version(name)
|
||||
except Exception:
|
||||
clean = name.lower().replace("-", "_")
|
||||
return _KNOWN_VERSIONS.get(name.lower(), _KNOWN_VERSIONS.get(clean, "1.0.0"))
|
||||
|
||||
def _safe_metadata_distribution(name):
|
||||
try:
|
||||
return _orig_metadata_distribution(name)
|
||||
except Exception:
|
||||
ver = _safe_metadata_version(name)
|
||||
return _ShimedDistribution(name, ver)
|
||||
|
||||
importlib.metadata.version = _safe_metadata_version
|
||||
importlib.metadata.distribution = _safe_metadata_distribution
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
warnings.filterwarnings("ignore", message=".*default.*deprecated.*")
|
||||
warnings.filterwarnings("ignore", message=".*metadata.*deprecated.*")
|
||||
warnings.filterwarnings("ignore", module="marshmallow.*")
|
||||
warnings.filterwarnings("ignore", module="dataclasses_json.*")
|
||||
|
||||
try:
|
||||
from marshmallow.warnings import RemovedInMarshmallow4Warning
|
||||
warnings.filterwarnings("ignore", category=RemovedInMarshmallow4Warning)
|
||||
warnings.filterwarnings("ignore", message=".*default.*deprecated.*")
|
||||
warnings.filterwarnings("ignore", message=".*metadata.*deprecated.*")
|
||||
warnings.simplefilter("ignore", category=RemovedInMarshmallow4Warning)
|
||||
print("[Shim] Global warning suppression activated")
|
||||
except Exception:
|
||||
@@ -160,6 +210,11 @@ def run_server(ppsr_path, activity_context=None):
|
||||
if os.path.exists(path) and path not in sys.path:
|
||||
sys.path.insert(0, path)
|
||||
|
||||
warnings.filterwarnings("ignore", message=".*default.*deprecated.*")
|
||||
warnings.filterwarnings("ignore", message=".*metadata.*deprecated.*")
|
||||
warnings.filterwarnings("ignore", module="marshmallow.*")
|
||||
warnings.filterwarnings("ignore", module="dataclasses_json.*")
|
||||
|
||||
# Verify and auto-recover critical packages if needed
|
||||
for pkg_name in ["requests", "werkzeug", "flask"]:
|
||||
try:
|
||||
@@ -175,6 +230,12 @@ def run_server(ppsr_path, activity_context=None):
|
||||
# --- Werkzeug Patch ---
|
||||
try:
|
||||
import werkzeug.serving
|
||||
if hasattr(werkzeug.serving, "ThreadedWSGIServer"):
|
||||
try:
|
||||
werkzeug.serving.ThreadedWSGIServer._server_version = "Werkzeug/3.1.9"
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
_orig_make_server = werkzeug.serving.make_server
|
||||
|
||||
def _patched_make_server(*args, **kwargs):
|
||||
@@ -182,6 +243,11 @@ def run_server(ppsr_path, activity_context=None):
|
||||
kwargs.pop('options', None)
|
||||
server = _orig_make_server(*args, **kwargs)
|
||||
|
||||
try:
|
||||
server._server_version = "Werkzeug/3.1.9"
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
if hasattr(server, 'socket') and server.socket:
|
||||
server.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
|
||||
Reference in new issue
Block a user