mirror of
https://github.com/microsoft/debugpy.git
synced 2025-12-23 08:48:12 +00:00
Re-enable coverage for debugpy.common.log and use comments to exclude specific lines instead.
This commit is contained in:
parent
8e91dfb085
commit
9df16cec07
4 changed files with 24 additions and 28 deletions
|
|
@ -8,14 +8,10 @@ omit =
|
||||||
src/debugpy/_version.py
|
src/debugpy/_version.py
|
||||||
src/debugpy/_vendored/*
|
src/debugpy/_vendored/*
|
||||||
src/debugpy/server/*
|
src/debugpy/server/*
|
||||||
src/debugpy/common/log.py
|
|
||||||
data_file = coverage/.coverage
|
data_file = coverage/.coverage
|
||||||
|
|
||||||
[report]
|
[report]
|
||||||
exclude_lines =
|
exclude_also =
|
||||||
# Have to re-enable the standard pragma.
|
|
||||||
pragma: no cover
|
|
||||||
|
|
||||||
# __repr__ is mostly used for error messages.
|
# __repr__ is mostly used for error messages.
|
||||||
def __repr__
|
def __repr__
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ class LogFile(object):
|
||||||
platform.machine(),
|
platform.machine(),
|
||||||
platform.python_implementation(),
|
platform.python_implementation(),
|
||||||
platform.python_version(),
|
platform.python_version(),
|
||||||
64 if sys.maxsize > 2 ** 32 else 32,
|
64 if sys.maxsize > 2**32 else 32,
|
||||||
debugpy.__version__,
|
debugpy.__version__,
|
||||||
_to_files=[self],
|
_to_files=[self],
|
||||||
)
|
)
|
||||||
|
|
@ -78,7 +78,7 @@ class LogFile(object):
|
||||||
try:
|
try:
|
||||||
self.file.write(output)
|
self.file.write(output)
|
||||||
self.file.flush()
|
self.file.flush()
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
|
|
@ -90,7 +90,7 @@ class LogFile(object):
|
||||||
if self.close_file:
|
if self.close_file:
|
||||||
try:
|
try:
|
||||||
self.file.close()
|
self.file.close()
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
|
|
@ -151,7 +151,7 @@ def write_format(level, format_string, *args, **kwargs):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
text = format_string.format(*args, **kwargs)
|
text = format_string.format(*args, **kwargs)
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
reraise_exception()
|
reraise_exception()
|
||||||
|
|
||||||
return write(level, text, kwargs.pop("_to_files", all))
|
return write(level, text, kwargs.pop("_to_files", all))
|
||||||
|
|
@ -253,7 +253,7 @@ def to_file(filename=None, prefix=None, levels=LEVELS):
|
||||||
return NoLog()
|
return NoLog()
|
||||||
try:
|
try:
|
||||||
os.makedirs(log_dir)
|
os.makedirs(log_dir)
|
||||||
except OSError:
|
except OSError: # pragma: no cover
|
||||||
pass
|
pass
|
||||||
filename = f"{log_dir}/{prefix}-{os.getpid()}.log"
|
filename = f"{log_dir}/{prefix}-{os.getpid()}.log"
|
||||||
|
|
||||||
|
|
@ -347,7 +347,7 @@ def get_environment_description(header):
|
||||||
importlib_metadata = None
|
importlib_metadata = None
|
||||||
try:
|
try:
|
||||||
import importlib_metadata
|
import importlib_metadata
|
||||||
except ImportError:
|
except ImportError: # pragma: no cover
|
||||||
try:
|
try:
|
||||||
from importlib import metadata as importlib_metadata
|
from importlib import metadata as importlib_metadata
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ class JsonIOStream(object):
|
||||||
def cleanup():
|
def cleanup():
|
||||||
try:
|
try:
|
||||||
sock.shutdown(socket.SHUT_RDWR)
|
sock.shutdown(socket.SHUT_RDWR)
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
pass
|
pass
|
||||||
sock.close()
|
sock.close()
|
||||||
|
|
||||||
|
|
@ -155,7 +155,7 @@ class JsonIOStream(object):
|
||||||
self._reader.close()
|
self._reader.close()
|
||||||
finally:
|
finally:
|
||||||
self._cleanup()
|
self._cleanup()
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
log.reraise_exception("Error while closing {0} message stream", self.name)
|
log.reraise_exception("Error while closing {0} message stream", self.name)
|
||||||
|
|
||||||
def _log_message(self, dir, data, logger=log.debug):
|
def _log_message(self, dir, data, logger=log.debug):
|
||||||
|
|
@ -206,7 +206,7 @@ class JsonIOStream(object):
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
line = read_line()
|
line = read_line()
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
# Only log it if we have already read some headers, and are looking
|
# Only log it if we have already read some headers, and are looking
|
||||||
# for a blank line terminating them. If this is the very first read,
|
# for a blank line terminating them. If this is the very first read,
|
||||||
# there's no message data to log in any case, and the caller might
|
# there's no message data to log in any case, and the caller might
|
||||||
|
|
@ -229,7 +229,7 @@ class JsonIOStream(object):
|
||||||
length = int(headers[b"Content-Length"])
|
length = int(headers[b"Content-Length"])
|
||||||
if not (0 <= length <= self.MAX_BODY_SIZE):
|
if not (0 <= length <= self.MAX_BODY_SIZE):
|
||||||
raise ValueError
|
raise ValueError
|
||||||
except (KeyError, ValueError):
|
except (KeyError, ValueError): # pragma: no cover
|
||||||
try:
|
try:
|
||||||
raise IOError("Content-Length is missing or invalid:")
|
raise IOError("Content-Length is missing or invalid:")
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
@ -253,12 +253,12 @@ class JsonIOStream(object):
|
||||||
body = b"".join(raw_chunks[body_start:])
|
body = b"".join(raw_chunks[body_start:])
|
||||||
try:
|
try:
|
||||||
body = body.decode("utf-8")
|
body = body.decode("utf-8")
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
log_message_and_reraise_exception()
|
log_message_and_reraise_exception()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body = decoder.decode(body)
|
body = decoder.decode(body)
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
log_message_and_reraise_exception()
|
log_message_and_reraise_exception()
|
||||||
|
|
||||||
# If parsed successfully, log as JSON for readability.
|
# If parsed successfully, log as JSON for readability.
|
||||||
|
|
@ -285,7 +285,7 @@ class JsonIOStream(object):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body = encoder.encode(value)
|
body = encoder.encode(value)
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
self._log_message("<--", repr(value), logger=log.reraise_exception)
|
self._log_message("<--", repr(value), logger=log.reraise_exception)
|
||||||
body = body.encode("utf-8")
|
body = body.encode("utf-8")
|
||||||
|
|
||||||
|
|
@ -297,7 +297,7 @@ class JsonIOStream(object):
|
||||||
written = writer.write(data[data_written:])
|
written = writer.write(data[data_written:])
|
||||||
data_written += written
|
data_written += written
|
||||||
writer.flush()
|
writer.flush()
|
||||||
except Exception as exc:
|
except Exception as exc: # pragma: no cover
|
||||||
self._log_message("<--", value, logger=log.swallow_exception)
|
self._log_message("<--", value, logger=log.swallow_exception)
|
||||||
raise JsonIOError(stream=self, cause=exc)
|
raise JsonIOError(stream=self, cause=exc)
|
||||||
|
|
||||||
|
|
@ -344,7 +344,7 @@ class MessageDict(collections.OrderedDict):
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
try:
|
try:
|
||||||
return format(json.repr(self))
|
return format(json.repr(self))
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
return super().__repr__()
|
return super().__repr__()
|
||||||
|
|
||||||
def __call__(self, key, validate, optional=False):
|
def __call__(self, key, validate, optional=False):
|
||||||
|
|
|
||||||
|
|
@ -30,13 +30,13 @@ def create_server(host, port=0, backlog=socket.SOMAXCONN, timeout=None):
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
except (AttributeError, OSError):
|
except (AttributeError, OSError): # pragma: no cover
|
||||||
pass # Not available everywhere
|
pass # Not available everywhere
|
||||||
server.bind((host, port))
|
server.bind((host, port))
|
||||||
if timeout is not None:
|
if timeout is not None:
|
||||||
server.settimeout(timeout)
|
server.settimeout(timeout)
|
||||||
server.listen(backlog)
|
server.listen(backlog)
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
server.close()
|
server.close()
|
||||||
raise
|
raise
|
||||||
return server
|
return server
|
||||||
|
|
@ -56,19 +56,19 @@ def _new_sock():
|
||||||
# and closes the connection after 5 failed ping (TCP_KEEPCNT), or 15 seconds
|
# and closes the connection after 5 failed ping (TCP_KEEPCNT), or 15 seconds
|
||||||
try:
|
try:
|
||||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
|
||||||
except (AttributeError, OSError):
|
except (AttributeError, OSError): # pragma: no cover
|
||||||
pass # May not be available everywhere.
|
pass # May not be available everywhere.
|
||||||
try:
|
try:
|
||||||
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)
|
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 1)
|
||||||
except (AttributeError, OSError):
|
except (AttributeError, OSError): # pragma: no cover
|
||||||
pass # May not be available everywhere.
|
pass # May not be available everywhere.
|
||||||
try:
|
try:
|
||||||
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 3)
|
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 3)
|
||||||
except (AttributeError, OSError):
|
except (AttributeError, OSError): # pragma: no cover
|
||||||
pass # May not be available everywhere.
|
pass # May not be available everywhere.
|
||||||
try:
|
try:
|
||||||
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5)
|
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 5)
|
||||||
except (AttributeError, OSError):
|
except (AttributeError, OSError): # pragma: no cover
|
||||||
pass # May not be available everywhere.
|
pass # May not be available everywhere.
|
||||||
return sock
|
return sock
|
||||||
|
|
||||||
|
|
@ -82,7 +82,7 @@ def close_socket(sock):
|
||||||
"""Shutdown and close the socket."""
|
"""Shutdown and close the socket."""
|
||||||
try:
|
try:
|
||||||
shut_down(sock)
|
shut_down(sock)
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
pass
|
pass
|
||||||
sock.close()
|
sock.close()
|
||||||
|
|
||||||
|
|
@ -98,7 +98,7 @@ def serve(name, handler, host, port=0, backlog=socket.SOMAXCONN, timeout=None):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
listener = create_server(host, port, backlog, timeout)
|
listener = create_server(host, port, backlog, timeout)
|
||||||
except Exception:
|
except Exception: # pragma: no cover
|
||||||
log.reraise_exception(
|
log.reraise_exception(
|
||||||
"Error listening for incoming {0} connections on {1}:{2}:", name, host, port
|
"Error listening for incoming {0} connections on {1}:{2}:", name, host, port
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue