unrhodecode/rhodecode/lib/middleware/pycharm_remote_debugger.py
2025-06-11 10:09:19 +02:00

37 lines
1.2 KiB
Python

import os
import logging
import socket
from rhodecode.config.constants import PYCHARM_DEBUG_PAUSE_AT_STARTUP
log = logging.getLogger(__name__)
class PyCharmDebugMiddleware:
def __init__(self, handler):
self.handler = handler
self._start_debugger()
def _start_debugger(self):
try:
import pydevd_pycharm
suspend = os.getenv(PYCHARM_DEBUG_PAUSE_AT_STARTUP, "0") == "1"
host = "host.docker.internal" # assuming that app is running inside docker, and the debug server is on the same machine
pydevd_pycharm.settrace(
host,
suspend=suspend,
stdoutToServer=True,
stderrToServer=True,
)
log.debug("PyCharm debugger attached successfully!")
except ImportError:
log.warning("pydevd_pycharm not installed. Debugging disabled.")
except ConnectionRefusedError:
ip = socket.gethostbyname(host)
log.warning(f"debug server is not running on host[ip]: {host}[{ip}], shutdown remote debugger.")
pydevd_pycharm.stoptrace()
def __call__(self, environ, start_response):
return self.handler(environ, start_response)