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

1from contextlib import contextmanager 

2 

3import asyncclick as click 

4from jumpstarter_driver_network.adapters import PexpectAdapter 

5from pexpect.fdpexpect import fdspawn 

6 

7from .console import Console 

8from jumpstarter.client import DriverClient 

9 

10 

11class PySerialClient(DriverClient): 

12 """ 

13 A client for handling serial communication using pexpect. 

14 

15 """ 

16 

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 

21 

22 Returns: 

23 fdspawn: The pexpect session object. 

24 """ 

25 return self.stack.enter_context(self.pexpect()) 

26 

27 @contextmanager 

28 def pexpect(self): 

29 """ 

30 Create a pexpect adapter context manager. 

31 

32 Yields: 

33 PexpectAdapter: The pexpect adapter object. 

34 """ 

35 with PexpectAdapter(client=self) as adapter: 

36 yield adapter 

37 

38 def cli(self): 

39 @click.group 

40 def base(): 

41 """Serial port client""" 

42 pass 

43 

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() 

50 

51 return base