@@ -29,6 +29,12 @@ class Controller: | |||
def registerCallback(self, cb): | |||
self.callbacks.append(cb) | |||
def registerFieldCallback(self, fieldName, cb): | |||
def execCB(c): | |||
if c.recentField == fieldName: | |||
cb(c) | |||
self.callbacks.append(execCB) | |||
def registerFunction(self, f): | |||
self.functions.append(f) | |||
@@ -1,6 +1,31 @@ | |||
from memory_Context import * | |||
from llm import * | |||
# Exit | |||
# | |||
# Conditions: | |||
# 1. `e`, `exit`, `q`, or `quit` was entered | |||
@llm_by_value | |||
def cli_exit( | |||
c: memory_Context | |||
) -> memory_Context: | |||
if ( | |||
c.recentField == "input" and | |||
( | |||
c.input == "e" or | |||
c.input == "exit" or | |||
c.input == "q" or | |||
c.input == "quit" | |||
) | |||
): | |||
c.exit = True | |||
c.recentField = "exit" | |||
return c | |||
#} | |||
c.recentField = "none" | |||
return c | |||
#} | |||
# Greet the user | |||
# | |||
# Conditions: | |||
@@ -2,6 +2,62 @@ from cli import * | |||
from memory import * | |||
from memory_Context import * | |||
def cli_test_exit_e( | |||
) -> str: | |||
c = memory_createContext() | |||
c.input = "e" | |||
c.recentField = "input" | |||
c = cli_exit(c) | |||
if ( | |||
c.recentField == "exit" | |||
): | |||
return "OK: cli_exit_e" | |||
#} | |||
return "ERR: cli_exit_e" | |||
#} | |||
def cli_test_exit_exit( | |||
) -> str: | |||
c = memory_createContext() | |||
c.input = "exit" | |||
c.recentField = "input" | |||
c = cli_exit(c) | |||
if ( | |||
c.recentField == "exit" | |||
): | |||
return "OK: cli_exit_exit" | |||
#} | |||
return "ERR: cli_exit_e" | |||
#} | |||
def cli_test_exit_q( | |||
) -> str: | |||
c = memory_createContext() | |||
c.input = "q" | |||
c.recentField = "input" | |||
c = cli_exit(c) | |||
if ( | |||
c.recentField == "exit" | |||
): | |||
return "OK: cli_exit_q" | |||
#} | |||
return "ERR: cli_exit_q" | |||
#} | |||
def cli_test_exit_quit( | |||
) -> str: | |||
c = memory_createContext() | |||
c.input = "quit" | |||
c.recentField = "input" | |||
c = cli_exit(c) | |||
if ( | |||
c.recentField == "exit" | |||
): | |||
return "OK: cli_exit_quit" | |||
#} | |||
return "ERR: cli_exit_quit" | |||
#} | |||
def cli_test_greetUser( | |||
) -> str: | |||
c = memory_createContext() | |||
@@ -16,6 +72,34 @@ def cli_test_greetUser( | |||
return "ERR: cli_greetUser" | |||
#} | |||
def cli_test_showHelp_h( | |||
) -> str: | |||
c = memory_createContext() | |||
c.input = "h" | |||
c.recentField = "input" | |||
c = cli_showHelp(c) | |||
if ( | |||
c.recentField == "outputHelp" | |||
): | |||
return "OK: cli_showHelp_h" | |||
#} | |||
return "ERR: cli_showHelp_h" | |||
#} | |||
def cli_test_showHelp_help( | |||
) -> str: | |||
c = memory_createContext() | |||
c.input = "help" | |||
c.recentField = "input" | |||
c = cli_showHelp(c) | |||
if ( | |||
c.recentField == "outputHelp" | |||
): | |||
return "OK: cli_showHelp_help" | |||
#} | |||
return "ERR: cli_showHelp_help" | |||
#} | |||
#def cli_test_selectItem( | |||
#) -> str: | |||
# c = cli_createContext() | |||
@@ -61,28 +145,3 @@ def cli_test_greetUser( | |||
# return "ERR: cli_shouldReportInvalidItemSelection" | |||
##} | |||
# | |||
#def cli_test_showHelp_h( | |||
#) -> str: | |||
# c = cli_createContext() | |||
# c.input = "h" | |||
# c = cli_showHelp(c) | |||
# if ( | |||
# c.recentField == "outputHelp" | |||
# ): | |||
# return "OK: cli_showHelp_h" | |||
# #} | |||
# return "ERR: cli_showHelp_h" | |||
##} | |||
# | |||
#def cli_test_showHelp_help( | |||
#) -> str: | |||
# c = cli_createContext() | |||
# c.input = "help" | |||
# c = cli_showHelp(c) | |||
# if ( | |||
# c.recentField == "outputHelp" | |||
# ): | |||
# return "OK: cli_showHelp_help" | |||
# #} | |||
# return "ERR: cli_showHelp_help" | |||
##} |
@@ -2,8 +2,7 @@ from cli import * | |||
from cli_test import * | |||
from memory_test import * | |||
from Controller import * | |||
#from shell import * | |||
#import sys | |||
import sys | |||
print(memory_test_deselectMismatchedItems()) | |||
print(memory_test_deselectMismatchedItems_itemTwice()) | |||
@@ -14,24 +13,29 @@ print(memory_test_selectItem_1x()) | |||
print(memory_test_selectItem_2x()) | |||
print(memory_test_selectItem_3x()) | |||
print(cli_test_exit_e()) | |||
print(cli_test_exit_exit()) | |||
print(cli_test_exit_q()) | |||
print(cli_test_exit_quit()) | |||
print(cli_test_greetUser()) | |||
print(cli_test_showHelp_h()) | |||
print(cli_test_showHelp_help()) | |||
#print(cli_test_selectItem()) | |||
#print(cli_test_shouldPromptSelection()) | |||
##print(cli_test_shouldReportIvalidItemSelection_outOfBoundsMin()) | |||
#print(cli_test_showHelp_h()) | |||
#print(cli_test_showHelp_help()) | |||
ctrl = Controller(memory_createContext()) | |||
ctrl.registerFunction(cli_exit) | |||
ctrl.registerFunction(cli_greetUser) | |||
ctrl.registerFunction(cli_showHelp) | |||
ctrl.registerCallback(lambda c: print(f"ИГР App.dbg ctx: '{c}'")) | |||
def printOutput(c): | |||
if c.recentField.startswith("output"): | |||
print(getattr(c, c.recentField)) | |||
ctrl.registerCallback(printOutput) | |||
#ctrl.registerCallback(lambda c: print(f"ИГР App.dbg ctx: '{c}'")) | |||
ctrl.registerFieldCallback("exit", lambda c: sys.exit(0)) | |||
# | |||
#c = shell_createContext() | |||
@@ -46,43 +50,6 @@ ctrl.registerCallback(printOutput) | |||
ctrl.set("didLaunch", True) | |||
#for line in sys.stdin: | |||
# c.input = line.rstrip() | |||
# c = shell_processInput(c) | |||
# if c.exit: | |||
# break | |||
# print(c.output) | |||
import threading | |||
import time | |||
class KeyboardThread(threading.Thread): | |||
def __init__(self, input_cbk = None, name='keyboard-input-thread'): | |||
self.input_cbk = input_cbk | |||
super(KeyboardThread, self).__init__(name=name, daemon=True) | |||
self.start() | |||
def run(self): | |||
while True: | |||
self.input_cbk(input()) #waits to get input + Return | |||
showcounter = 0 #something to demonstrate the change | |||
def my_callback(inp): | |||
#evaluate the keyboard input | |||
print('You Entered:', inp, ' Counter is at:', showcounter) | |||
#start the Keyboard thread | |||
kthread = KeyboardThread(my_callback) | |||
while True: | |||
#the normal program executes without blocking. here just counting up | |||
showcounter += 1 | |||
time.sleep(0.5) | |||
for line in sys.stdin: | |||
ln = line.rstrip() | |||
ctrl.set("input", ln) |