diff --git a/__pycache__/createdispatch.cpython-314.pyc b/__pycache__/createdispatch.cpython-314.pyc new file mode 100644 index 0000000..233865e Binary files /dev/null and b/__pycache__/createdispatch.cpython-314.pyc differ diff --git a/__pycache__/createthread.cpython-314.pyc b/__pycache__/createthread.cpython-314.pyc new file mode 100644 index 0000000..ba83802 Binary files /dev/null and b/__pycache__/createthread.cpython-314.pyc differ diff --git a/__pycache__/dispatch.cpython-314.pyc b/__pycache__/dispatch.cpython-314.pyc index 23122db..a562dd5 100644 Binary files a/__pycache__/dispatch.cpython-314.pyc and b/__pycache__/dispatch.cpython-314.pyc differ diff --git a/__pycache__/dispatcher.cpython-314.pyc b/__pycache__/dispatcher.cpython-314.pyc new file mode 100644 index 0000000..3d5dcaf Binary files /dev/null and b/__pycache__/dispatcher.cpython-314.pyc differ diff --git a/__pycache__/dispatchstate.cpython-314.pyc b/__pycache__/dispatchstate.cpython-314.pyc new file mode 100644 index 0000000..aa743a5 Binary files /dev/null and b/__pycache__/dispatchstate.cpython-314.pyc differ diff --git a/__pycache__/lifecyclemanager.cpython-314.pyc b/__pycache__/lifecyclemanager.cpython-314.pyc index 442eaa9..f9e73d3 100644 Binary files a/__pycache__/lifecyclemanager.cpython-314.pyc and b/__pycache__/lifecyclemanager.cpython-314.pyc differ diff --git a/__pycache__/lifecycleregistry.cpython-314.pyc b/__pycache__/lifecycleregistry.cpython-314.pyc new file mode 100644 index 0000000..aed971b Binary files /dev/null and b/__pycache__/lifecycleregistry.cpython-314.pyc differ diff --git a/core/__init__.py b/core/__init__.py index 8248335..e65c17f 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -3,3 +3,5 @@ from .runtime import buildSave, loadSave, buildLog, manageFailure, buildOutput #from .execution import buildOperation, buildAction from .execution.action import buildAction from .execution.operation import buildOperation +from .execution.executioncontract import executeContract +#from executioncontract import executionContract diff --git a/core/__pycache__/__init__.cpython-314.pyc b/core/__pycache__/__init__.cpython-314.pyc index f0d3a3c..351ecbd 100644 Binary files a/core/__pycache__/__init__.cpython-314.pyc and b/core/__pycache__/__init__.cpython-314.pyc differ diff --git a/core/execution/__init__.py b/core/execution/__init__.py index af15bc1..38f47dd 100644 --- a/core/execution/__init__.py +++ b/core/execution/__init__.py @@ -1,2 +1,3 @@ #from . import action #from . import operation +#from . import executioncontract diff --git a/core/execution/__pycache__/__init__.cpython-314.pyc b/core/execution/__pycache__/__init__.cpython-314.pyc index 4c9c3a8..412bc52 100644 Binary files a/core/execution/__pycache__/__init__.cpython-314.pyc and b/core/execution/__pycache__/__init__.cpython-314.pyc differ diff --git a/core/execution/__pycache__/executioncontract.cpython-314.pyc b/core/execution/__pycache__/executioncontract.cpython-314.pyc new file mode 100644 index 0000000..9d069d3 Binary files /dev/null and b/core/execution/__pycache__/executioncontract.cpython-314.pyc differ diff --git a/core/execution/executioncontract.py b/core/execution/executioncontract.py index eb6f080..abb8f6e 100644 --- a/core/execution/executioncontract.py +++ b/core/execution/executioncontract.py @@ -1,9 +1,11 @@ from core.execution.action import buildAction from core.execution.operation import buildOperation -def executeContract(module) - if module.kind == "operation": - outputs = buildOperation(module) +def executeContract(module): + if module.kind == "operation": + outputs = buildOperation(module) - elif module.kind == "action": - outputs = buildAction(module) + elif module.kind == "action": + outputs = buildAction(module) + + return outputs diff --git a/createdispatch.py b/createdispatch.py new file mode 100644 index 0000000..509cad7 --- /dev/null +++ b/createdispatch.py @@ -0,0 +1,17 @@ +import importlib +from lifecyclemanager import manageLifecycle +from dispatchstate import buildState + +def buildDispatch(request): + dispatch = [] + + for key in request["module"]: + dispatch.append(request["module"][key]) + + resolveddispatch = "plugins."+ ".".join(dispatch) + + module = importlib.import_module(resolveddispatch) + + mode = request.get("mode", "oneshot") + + return module, mode diff --git a/createthread.py b/createthread.py new file mode 100644 index 0000000..849a99e --- /dev/null +++ b/createthread.py @@ -0,0 +1,31 @@ +import threading +from lifecycleregistry import registerLifecycle +from lifecyclemanager import manageLifecycle + +activethreads = [] +threadnum = 0 + +def buildThread(module, state, lifecycles): +#for mode in ("continuous", "oneshot") + global threadnum + threadnum += 1 + + threadname = f"thread.{threadnum}" + + thread = threading.Thread( + target=manageLifecycle, + args=(module, state) + ) + thread.start() + + registryname = threadname + registryvalue = thread + + lifecycles = registerLifecycle (module, lifecycles, registryname, registryvalue) + + activethreads.append(threadname) + + print(activethreads) + print(lifecycles) + + return threadnum, threadname, lifecycles, activethreads diff --git a/dispatch.py b/dispatch.py deleted file mode 100644 index 0a4bee0..0000000 --- a/dispatch.py +++ /dev/null @@ -1,55 +0,0 @@ -from core.execution.action import buildAction -from core.execution.operation import buildOperation -import plugins -import importlib -import threading -from lifecyclemanager import manageLifecycle - -lifecycles = {} - -def buildDispatch(request): - dispatch = [] - - for key in request["module"]: - dispatch.append(request["module"][key]) - - resolveddispatch = "plugins."+ ".".join(dispatch) - - module = importlib.import_module(resolveddispatch) - - mode = request.get("mode", "oneshot") - - if mode == "continuous": - - state = { - "mode": "continuous" - } - - lifecycles[resolveddispatch] = state - - print(f"Dispatching: {module.name}") - - thread = threading.Thread( - target=manageLifecycle, - args=(module, state) - ) - - thread.start() - print(f"Started lifecycle: {module.name}") - - elif mode == "stop": - if resolveddispatch in lifecycles: - state = lifecycles[resolveddispatch] - state["mode"] = "stop" - print(f"Stopping lifecycle: {module.name}") - else: - print(f"No registered lifecycle: {module.name}") - - elif mode == "oneshot": - outputs = manageLifecycle(module, {"mode": "oneshot"}) - - else: - raise ValueError(f"Unsupported lifecycle mode {mode}") - - return - #outputs = manageLifecycle(module, state) diff --git a/dispatcher.py b/dispatcher.py new file mode 100644 index 0000000..cec2c87 --- /dev/null +++ b/dispatcher.py @@ -0,0 +1,14 @@ +from createdispatch import buildDispatch +from createthread import buildThread +from dispatchstate import buildState +import threading + +def dispatchRequest(request, lifecycles): + + module, mode = buildDispatch(request) + + state, lifecycles = buildState(module, mode, lifecycles) + + threadnum, threadname, lifecycles, activethreads = buildThread(module, state, lifecycles) + + return threadnum, lifecycles, diff --git a/dispatchstate.py b/dispatchstate.py new file mode 100644 index 0000000..5c58637 --- /dev/null +++ b/dispatchstate.py @@ -0,0 +1,33 @@ +import requests + +from lifecycleregistry import registerLifecycle + +def buildState(module, mode, lifecycles): + registryname = "state" + if mode == "continuous": + registryvalue = {"mode": "continuous"} + + lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue) + + elif mode == "stop": + if not module.name in lifecycles: + registryvalue ={} + print(f"No registered lifecycle: {module.name}") + return None + elif lifecycles[module.name]["state"]["mode"] != "stop": + state = lifecycles[module.name]["state"] + state["mode"] = "stop" + #lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue) + + print(f"Stopping lifecycle: {module.name}") + + elif mode == "oneshot": + registryvalue = {"mode": "oneshot"} + lifecycles = registerLifecycle(module, lifecycles, registryname, registryvalue) + + else: + raise ValueError(f"Unsupported lifecycle mode: {mode}") + + state = registryvalue + + return state, lifecycles diff --git a/lifecyclemanager.py b/lifecyclemanager.py index 1cf7388..d9c5d12 100644 --- a/lifecyclemanager.py +++ b/lifecyclemanager.py @@ -1,16 +1,12 @@ -from core.execution.operation import buildOperation -from core.execution.action import buildAction import time -def executeContract(module): - if module.kind == "operation": - outputs = buildOperation(module) - - elif module.kind == "action": - outputs = buildAction(module) - +from core.execution.operation import buildOperation +from core.execution.action import buildAction +from core import executeContract def manageLifecycle(module, state): + print(state) + if state["mode"] == "continuous": while state["mode"] == "continuous": outputs = executeContract(module) diff --git a/lifecycleregistry.py b/lifecycleregistry.py new file mode 100644 index 0000000..86ddab0 --- /dev/null +++ b/lifecycleregistry.py @@ -0,0 +1,8 @@ +def registerLifecycle(module, lifecycles, registryname, registryvalue): + if module.name not in lifecycles: + lifecycles[module.name] = {} + + + lifecycles[module.name][registryname] = registryvalue + + return lifecycles diff --git a/server.py b/server.py index 4238e9e..dd7ecc9 100644 --- a/server.py +++ b/server.py @@ -1,13 +1,17 @@ import socket import json -from dispatch import buildDispatch +from dispatcher import dispatchRequest server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) -server.bind(("127.0.0.1", 19001)) +server.bind(("127.0.0.1", 19002)) + +lifecycles = {} server.listen() +#lifecycles = {} + while True: connection, address = server.accept() while True: @@ -18,7 +22,7 @@ while True: # if not data: # break - dispatch = buildDispatch(request) + dispatch = dispatchRequest(request, lifecycles) connection.close()