Source code for pyngrok.log
import logging
import shlex
from typing import Optional
__author__ = "Alex Laird"
__copyright__ = "Copyright 2023, Alex Laird"
__version__ = "7.0.0"
[docs]
class NgrokLog:
"""
An object containing a parsed log from the ``ngrok`` process.
"""
def __init__(self,
line: str) -> None:
#: The raw, unparsed log line.
self.line: str = line.strip()
#: The log's ISO 8601 timestamp.
self.t: Optional[str] = None
#: The log's level.
self.lvl: str = "NOTSET"
#: The log's message.
self.msg: Optional[str] = None
#: The log's error, if applicable.
self.err: Optional[str] = None
#: The URL, if ``obj`` is "web".
self.addr: Optional[str] = None
for i in shlex.split(self.line):
if "=" not in i:
continue
key, value = i.split("=", 1)
if key == "lvl":
if not value:
value = self.lvl
value = value.upper()
if value == "CRIT":
value = "CRITICAL"
elif value in ["ERR", "EROR"]:
value = "ERROR"
elif value == "WARN":
value = "WARNING"
if not hasattr(logging, value):
value = self.lvl
setattr(self, key, value)
def __repr__(self) -> str:
return "<NgrokLog: t={} lvl={} msg=\"{}\">".format(self.t, self.lvl, self.msg)
def __str__(self) -> str: # pragma: no cover
attrs = [attr for attr in dir(self) if not attr.startswith("_") and getattr(self, attr) is not None]
attrs.remove("line")
return " ".join("{}=\"{}\"".format(attr, getattr(self, attr)) for attr in attrs)