def run(arguments, event): arguments = json.loads(arguments) script_uid = arguments["script_uid"] task_id = arguments["task_id"] script = Script(script_uid) process = Popen( ["bash", script.install_requirements_path], stdin=PIPE, stdout=PIPE, stderr=PIPE, bufsize=-1, ) process_output = "" exitcode = 0 while True: output = process.stdout.readline().decode("utf-8") if process.poll() is not None: exitcode = process.poll() break if output: process_output += output event.trigger( "task_output", { "task_id": task_id, "output": output, "script_uid": script.uid, "task": "install_requirements", }, ) output, error = process.communicate() event.trigger( "task_output", { "task_id": task_id, "output": "", "script_uid": script.uid, "task": "install_requirements", }, ) event.trigger("pip_requirements_installed", script.to_dict()) event.trigger("action_complete", { "action": "install_requirements", "uid": script.uid }) return process_output
def run(arguments, event): arguments = json.loads(arguments) script_uid = arguments["script_uid"] task_id = arguments["task_id"] event.trigger("action_started", {"uid": script_uid, "action": "execute"}) script = Script(script_uid) process = Popen(["bash", script.execute_path], stdout=PIPE, stderr=PIPE, shell=False) exitcode = 0 process_output = "" while True: output = process.stdout.readline() process_output += output.decode("utf-8") if process.poll() is not None: break if output: event.trigger( "task_output", { "task_id": task_id, "script_uid": script_uid, "output": output.decode("utf-8"), "task": "execute", }, ) exitcode = process.poll() stdout, stderr = process.communicate() if stderr: event.trigger( "task_output", { "task_id": task_id, "script_uid": script_uid, "output": stderr.decode("utf-8"), "task": "execute", }, ) session = Session() log = Log(script=script_uid, text=process_output, error=stderr, exitcode=exitcode) session.add(log) session.commit() session.close() event.trigger( "task_output", { "task_id": task_id, "output": "", "script_uid": script.uid, "task": "execute" }, ) script = script.to_dict() # Decode bytes to string try: stderr = stderr.decode("utf-8") except AttributeError: pass try: process_output = process_output.decode("utf-8") except AttributeError: pass script["logs"].insert( 0, { "date": maya.now().rfc2822(), "stderr": stderr, "stdout": process_output, "exitcode": exitcode, }, ) event.trigger("script_executed", script) event.trigger("script_updated", script) event.trigger("action_complete", { "action": "execute", "uid": script["uid"] }) return stdout