From 682451e81cd0073eba2d982767c6035c546ef6ed Mon Sep 17 00:00:00 2001 From: Samuel Tinnerholm Date: Mon, 22 Jun 2026 06:48:03 +0000 Subject: [PATCH] fix(python-sdk): log silent sidecar cleanup failures --- sdks/python/pmxt/client.py | 8 ++++++-- sdks/python/pmxt/server_manager.py | 20 ++++++++++++-------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/sdks/python/pmxt/client.py b/sdks/python/pmxt/client.py index 495b90f2..53f64f66 100644 --- a/sdks/python/pmxt/client.py +++ b/sdks/python/pmxt/client.py @@ -6,6 +6,7 @@ """ import json +import logging import os import re import sys @@ -26,6 +27,9 @@ from pmxt_internal.api.default_api import DefaultApi from pmxt_internal.exceptions import ApiException + +logger = logging.getLogger(__name__) + from .models import ( UnifiedMarket, UnifiedEvent, @@ -461,8 +465,8 @@ def _extract_api_error(self, e: Exception) -> str: return error_detail.get("message", str(e)) elif isinstance(error_detail, str): return error_detail - except (json.JSONDecodeError, KeyError, TypeError, ValueError): - pass + except (json.JSONDecodeError, KeyError, TypeError, ValueError) as exc: + logger.debug("Unable to parse PMXT API error response body", exc_info=exc) return str(e) def _parse_api_exception(self, e: Exception) -> PmxtError: diff --git a/sdks/python/pmxt/server_manager.py b/sdks/python/pmxt/server_manager.py index 38ab3bec..8fe7b5c6 100644 --- a/sdks/python/pmxt/server_manager.py +++ b/sdks/python/pmxt/server_manager.py @@ -15,6 +15,7 @@ import os import json +import logging import time import subprocess import shutil @@ -25,6 +26,9 @@ import urllib.error +logger = logging.getLogger(__name__) + + class ServerManager: """ Manages the PMXT sidecar server lifecycle. @@ -153,8 +157,8 @@ def normalize_version(v: str) -> str: # This allows 1.0.0 and 1.0.0-b4 to coexist in dev if expected_base != server_base: return True - except (OSError, json.JSONDecodeError, AttributeError, KeyError, TypeError, ValueError): - pass + except (OSError, json.JSONDecodeError, AttributeError, KeyError, TypeError, ValueError) as exc: + logger.debug("Unable to compare sidecar server version", exc_info=exc) return False @@ -289,13 +293,13 @@ def _kill_orphan_sidecars(self) -> None: pid = int(line.strip()) try: os.kill(pid, _signal.SIGTERM) - except (OSError, ProcessLookupError): - pass + except (OSError, ProcessLookupError) as exc: + logger.debug("Unable to terminate orphaned PMXT sidecar pid %s", pid, exc_info=exc) if result.stdout.strip(): time.sleep(0.5) - except (OSError, subprocess.TimeoutExpired, ValueError): - pass + except (OSError, subprocess.TimeoutExpired, ValueError) as exc: + logger.debug("Unable to scan or terminate orphaned PMXT sidecars", exc_info=exc) def _kill_old_server(self) -> None: """Kill the currently running server (Internal).""" @@ -312,8 +316,8 @@ def _kill_old_server(self) -> None: import signal os.kill(pid, signal.SIGTERM) time.sleep(0.5) - except (OSError, subprocess.TimeoutExpired): - pass + except (OSError, subprocess.TimeoutExpired) as exc: + logger.debug("Unable to terminate PMXT sidecar pid %s", pid, exc_info=exc) # Verify the process is actually dead; escalate to SIGKILL if not if os.name != 'nt':