Coverage for /home/fedora/jumpstarter/packages/jumpstarter-driver-pyserial/jumpstarter_driver_pyserial/client.py: 48%
23 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-05 20:29 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-05 20:29 +0000
1from contextlib import contextmanager
3import asyncclick as click
4from jumpstarter_driver_network.adapters import PexpectAdapter
5from pexpect.fdpexpect import fdspawn
7from .console import Console
8from jumpstarter.client import DriverClient
11class PySerialClient(DriverClient):
12 """
13 A client for handling serial communication using pexpect.
15 """
17 def open(self) -> fdspawn:
18 """
19 Open a pexpect session. You can find the pexpect documentation
20 here: https://pexpect.readthedocs.io/en/stable/api/pexpect.html#spawn-class
22 Returns:
23 fdspawn: The pexpect session object.
24 """
25 return self.stack.enter_context(self.pexpect())
27 @contextmanager
28 def pexpect(self):
29 """
30 Create a pexpect adapter context manager.
32 Yields:
33 PexpectAdapter: The pexpect adapter object.
34 """
35 with PexpectAdapter(client=self) as adapter:
36 yield adapter
38 def cli(self):
39 @click.group
40 def base():
41 """Serial port client"""
42 pass
44 @base.command()
45 def start_console():
46 """Start serial port console"""
47 click.echo("\nStarting serial port console ... exit with CTRL+B x 3 times\n")
48 console = Console(serial_client=self)
49 console.run()
51 return base