Skip to content

Commit

Permalink
[#56815] frontend_tester: tester_client: Updated the way the terminal…
Browse files Browse the repository at this point in the history
… is instantiated

Signed-off-by: Grzegorz Latosinski <[email protected]>
  • Loading branch information
glatosinski committed Mar 29, 2024
1 parent ff7b3e6 commit 4ea0443
Showing 1 changed file with 50 additions and 36 deletions.
86 changes: 50 additions & 36 deletions pipeline_manager/frontend_tester/tester_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,34 +187,57 @@ def __init__(
self.run = True
self.input_queue = Queue(-1)
self.loop = asyncio.get_event_loop()
self.reader_thread = None

def writable_terminal_management():
"""
Manages subprocess input and output.
"""
shell = pexpect.spawn("bash")
while self.run:
if not self.input_queue.empty():
shell.send(self.input_queue.get(False))
try:
char = shell.read_nonblocking(1024, timeout=0.1)
asyncio.run_coroutine_threadsafe(
self.client.request(
"terminal_write",
{
"name": self.WRITABLE_TERMINAL,
"message": char.decode(errors="replace"),
},
),
self.loop,
)
except pexpect.exceptions.TIMEOUT:
pass
except pexpect.exceptions.EOF:
shell.close()
return
def writable_terminal_management(self):
"""
Manages subprocess input and output.
"""
shell = pexpect.spawn("bash")
while self.run:
if not self.input_queue.empty():
shell.send(self.input_queue.get(False))
try:
char = shell.read_nonblocking(1024, timeout=0.1)
asyncio.run_coroutine_threadsafe(
self.client.request(
"terminal_write",
{
"name": self.WRITABLE_TERMINAL,
"message": char.decode(errors="replace"),
},
),
self.loop,
)
except pexpect.exceptions.TIMEOUT:
pass
except pexpect.exceptions.EOF:
shell.close()
return

self.reader_thread = Thread(target=writable_terminal_management)
async def start_writable_terminal(self) -> Dict:
"""
Creates a new writable terminal, if it hasn't been opened yet.
Returns
-------
Dict
Message whether the terminal is created and running
"""
if self.reader_thread:
if self.reader_thread.is_alive():
return {
"type": MessageType.ERROR.value,
"content": "Writable terminal already exists",
}
else:
self.reader_thread.join()
self.reader_thread = Thread(target=self.writable_terminal_management)
self.reader_thread.start()
await self.client.request(
"terminal_add", {"name": self.WRITABLE_TERMINAL, "readonly": False}
)
return {"type": MessageType.OK.value, "content": "Terminal created"}

def terminal_read(
self,
Expand Down Expand Up @@ -417,16 +440,7 @@ async def custom_create_writable_terminal(self, dataflow: Dict) -> Dict:
Dict
Method's response
"""
if self.reader_thread.is_alive():
return {
"type": MessageType.ERROR.value,
"content": "Writable terminal already exists",
}
await self.client.request(
"terminal_add", {"name": self.WRITABLE_TERMINAL, "readonly": False}
)
self.reader_thread.start()
return {"type": MessageType.OK.value, "content": "Terminal created"}
return await self.start_writable_terminal()

def custom_api_test(self, dataflow: Dict) -> Dict:
"""
Expand Down

0 comments on commit 4ea0443

Please sign in to comment.