refactor: normalize logging to use %-style formatting
Convert f-string logging to lazy %-style interpolation throughout: - session_manager.py - cli.py - terminal_session.py This follows Python logging best practices for performance (lazy evaluation) and consistency across the codebase. Addresses REFACTORING.md item about normalizing logging style.
This commit is contained in:
@@ -139,7 +139,7 @@ def app(
|
|||||||
textual-webterm -a ./calculator.py:CalculatorApp # Serve from file
|
textual-webterm -a ./calculator.py:CalculatorApp # Serve from file
|
||||||
"""
|
"""
|
||||||
VERSION = version("textual-webterm")
|
VERSION = version("textual-webterm")
|
||||||
log.info(f"textual-webterm v{VERSION}")
|
log.info("textual-webterm v%s", VERSION)
|
||||||
|
|
||||||
if constants.DEBUG:
|
if constants.DEBUG:
|
||||||
log.warning("DEBUG env var is set; logs may be verbose!")
|
log.warning("DEBUG env var is set; logs may be verbose!")
|
||||||
@@ -184,10 +184,10 @@ def app(
|
|||||||
else:
|
else:
|
||||||
# Module path - validate module and class names
|
# Module path - validate module and class names
|
||||||
if not module_part.replace(".", "").replace("_", "").isalnum():
|
if not module_part.replace(".", "").replace("_", "").isalnum():
|
||||||
log.error(f"Invalid module path: {module_part}")
|
log.error("Invalid module path: %s", module_part)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if not class_name.isidentifier():
|
if not class_name.isidentifier():
|
||||||
log.error(f"Invalid class name: {class_name}")
|
log.error("Invalid class name: %s", class_name)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
run_command = (
|
run_command = (
|
||||||
f'python3 -c "from {module_part} import {class_name}; {class_name}().run()"'
|
f'python3 -c "from {module_part} import {class_name}; {class_name}().run()"'
|
||||||
@@ -195,16 +195,16 @@ def app(
|
|||||||
|
|
||||||
app_name = getattr(app_class, "TITLE", None) or class_name
|
app_name = getattr(app_class, "TITLE", None) or class_name
|
||||||
server.add_app(app_name, run_command, "")
|
server.add_app(app_name, run_command, "")
|
||||||
log.info(f"Serving Textual app: {app_path}")
|
log.info("Serving Textual app: %s", app_path)
|
||||||
elif command:
|
elif command:
|
||||||
# Run command as terminal
|
# Run command as terminal
|
||||||
server.add_terminal("Terminal", command, "")
|
server.add_terminal("Terminal", command, "")
|
||||||
log.info(f"Serving terminal: {command}")
|
log.info("Serving terminal: %s", command)
|
||||||
elif not landing_apps:
|
elif not landing_apps:
|
||||||
# Run default shell
|
# Run default shell
|
||||||
terminal_command = os.environ.get("SHELL", "/bin/sh")
|
terminal_command = os.environ.get("SHELL", "/bin/sh")
|
||||||
server.add_terminal("Terminal", terminal_command, "")
|
server.add_terminal("Terminal", terminal_command, "")
|
||||||
log.info(f"Serving terminal: {terminal_command}")
|
log.info("Serving terminal: %s", terminal_command)
|
||||||
|
|
||||||
def _run_async():
|
def _run_async():
|
||||||
if constants.WINDOWS:
|
if constants.WINDOWS:
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class SessionManager:
|
|||||||
route_key = self.routes.get_key(session_id)
|
route_key = self.routes.get_key(session_id)
|
||||||
if route_key is not None:
|
if route_key is not None:
|
||||||
del self.routes[route_key]
|
del self.routes[route_key]
|
||||||
log.debug(f"Session {session_id} ended")
|
log.debug("Session %s ended", session_id)
|
||||||
|
|
||||||
async def close_all(self, timeout: float = 3.0) -> None:
|
async def close_all(self, timeout: float = 3.0) -> None:
|
||||||
"""Close app sessions.
|
"""Close app sessions.
|
||||||
@@ -132,20 +132,20 @@ class SessionManager:
|
|||||||
session_id,
|
session_id,
|
||||||
app.command,
|
app.command,
|
||||||
)
|
)
|
||||||
log.info(f"Created terminal session {session_id}")
|
log.info("Created terminal session %s", session_id)
|
||||||
else:
|
else:
|
||||||
session_process = AppSession(
|
session_process = AppSession(
|
||||||
self.path,
|
self.path,
|
||||||
app.command,
|
app.command,
|
||||||
session_id,
|
session_id,
|
||||||
)
|
)
|
||||||
log.info(f"Created app session {session_id}")
|
log.info("Created app session %s", session_id)
|
||||||
|
|
||||||
self.sessions[session_id] = session_process
|
self.sessions[session_id] = session_process
|
||||||
self.routes[route_key] = session_id
|
self.routes[route_key] = session_id
|
||||||
|
|
||||||
await session_process.open(*size)
|
await session_process.open(*size)
|
||||||
log.debug(f"Session {session_id} opened and ready")
|
log.debug("Session %s opened and ready", session_id)
|
||||||
|
|
||||||
return session_process
|
return session_process
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class TerminalSession(Session):
|
|||||||
yield "command", self.command
|
yield "command", self.command
|
||||||
|
|
||||||
async def open(self, width: int = 80, height: int = 24) -> None:
|
async def open(self, width: int = 80, height: int = 24) -> None:
|
||||||
log.info(f"Opening terminal session {self.session_id} with command: {self.command}")
|
log.info("Opening terminal session %s with command: %s", self.session_id, self.command)
|
||||||
pid, master_fd = pty.fork()
|
pid, master_fd = pty.fork()
|
||||||
self.pid = pid
|
self.pid = pid
|
||||||
self.master_fd = master_fd
|
self.master_fd = master_fd
|
||||||
@@ -78,7 +78,7 @@ class TerminalSession(Session):
|
|||||||
os.close(master_fd)
|
os.close(master_fd)
|
||||||
self.master_fd = None
|
self.master_fd = None
|
||||||
raise
|
raise
|
||||||
log.debug(f"Terminal session {self.session_id} opened successfully")
|
log.debug("Terminal session %s opened successfully", self.session_id)
|
||||||
|
|
||||||
def _set_terminal_size(self, width: int, height: int) -> None:
|
def _set_terminal_size(self, width: int, height: int) -> None:
|
||||||
buf = array.array("h", [height, width, 0, 0])
|
buf = array.array("h", [height, width, 0, 0])
|
||||||
@@ -106,7 +106,7 @@ class TerminalSession(Session):
|
|||||||
def update_connector(self, connector: SessionConnector) -> None:
|
def update_connector(self, connector: SessionConnector) -> None:
|
||||||
"""Update the connector for reconnection without restarting the session."""
|
"""Update the connector for reconnection without restarting the session."""
|
||||||
self._connector = connector
|
self._connector = connector
|
||||||
log.debug(f"Updated connector for session {self.session_id}")
|
log.debug("Updated connector for session %s", self.session_id)
|
||||||
|
|
||||||
async def start(self, connector: SessionConnector) -> asyncio.Task:
|
async def start(self, connector: SessionConnector) -> asyncio.Task:
|
||||||
self._connector = connector
|
self._connector = connector
|
||||||
@@ -158,7 +158,7 @@ class TerminalSession(Session):
|
|||||||
except ProcessLookupError:
|
except ProcessLookupError:
|
||||||
pass # Process already gone
|
pass # Process already gone
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log.warning(f"Error closing terminal session {self.session_id}: {e}")
|
log.warning("Error closing terminal session %s: %s", self.session_id, e)
|
||||||
|
|
||||||
async def wait(self) -> None:
|
async def wait(self) -> None:
|
||||||
if self._task is not None:
|
if self._task is not None:
|
||||||
|
|||||||
Reference in New Issue
Block a user