Compare commits
5 commits
Author | SHA1 | Date | |
---|---|---|---|
da271dcd52 | |||
4bc9d7bd9b | |||
0c69977e61 | |||
63e8059e94 | |||
b589dd70f3 |
9 changed files with 57 additions and 21 deletions
2
setup.py
2
setup.py
|
@ -1,6 +1,6 @@
|
|||
from setuptools import setup, find_packages
|
||||
|
||||
version = "0.1.1"
|
||||
version = "0.1.2"
|
||||
|
||||
setup(
|
||||
name='warped',
|
||||
|
|
|
@ -90,7 +90,7 @@ class ActionContainer():
|
|||
internal_dict = {}
|
||||
internal_dict['uuid'] = str(self.uuid)
|
||||
internal_dict['actions'] = [action.as_dict() for action in self.actions]
|
||||
internal_dict['groups'] = [[action.as_dict() for action in group] for group in self.groups]
|
||||
internal_dict['groups'] = [group.as_dict() for group in self.groups]
|
||||
return internal_dict
|
||||
|
||||
class StoreAction(Action):
|
||||
|
@ -98,6 +98,8 @@ class StoreAction(Action):
|
|||
|
||||
class StoreConstAction(Action):
|
||||
def store_type_function(self, x):
|
||||
if x == 'false':
|
||||
x = None
|
||||
return self.const if x is not None else self.on_none
|
||||
|
||||
def __init__(self, action, **kwargs):
|
||||
|
@ -110,4 +112,4 @@ class MutuallyExclusiveGroup(ActionContainer):
|
|||
super().__init__()
|
||||
|
||||
def __repr__(self):
|
||||
return "Group Object: ( Actions: {}, Groups: {} )".format(self.actions, self.mutex_groups)
|
||||
return "Group Object: ( Actions: {}, Groups: {} )".format(self.actions, self.groups)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import argparse
|
||||
import sys
|
||||
import io
|
||||
import runpy
|
||||
from traceback import print_exc
|
||||
from contextlib import redirect_stdout, redirect_stderr
|
||||
|
@ -24,9 +23,10 @@ class Context(Process):
|
|||
sys.argv = [''] + self.arguments
|
||||
else:
|
||||
sys.argv = ['']
|
||||
#if not self.original_modules is None:
|
||||
# sys.modules = self.original_modules
|
||||
# print(sys.modules)
|
||||
# if not self.original_modules is None:
|
||||
# sys.modules.clear()
|
||||
# sys.modules.update(self.original_modules)
|
||||
|
||||
sys.modules.update(self.overwritten_modules)
|
||||
with redirect_stdout(self.stdout):
|
||||
with redirect_stderr(self.stderr):
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
from . import savemodules
|
||||
import sys
|
||||
|
||||
import io
|
||||
|
@ -24,9 +25,15 @@ class QueuedOut(io.StringIO):
|
|||
lines = b.split('\n')
|
||||
for line in lines[:-1]:
|
||||
super().write(line)
|
||||
self.flush()
|
||||
self.explflush()
|
||||
super().write(lines[-1])
|
||||
|
||||
def explflush(self):
|
||||
value = self.getvalue()
|
||||
self.queue.put((self.name, value))
|
||||
self.seek(0)
|
||||
self.truncate(0)
|
||||
|
||||
def flush(self):
|
||||
value = self.getvalue()
|
||||
if len(value) > 1:
|
||||
|
@ -100,7 +107,7 @@ def start_module(name, is_module):
|
|||
ioerr,
|
||||
overwritten_modules={'argparse': argparser},
|
||||
is_module = is_module,
|
||||
#original_modules = emptymodules
|
||||
original_modules = savemodules.savedmodules
|
||||
)
|
||||
views.app.module_process.start()
|
||||
views.app.output.start()
|
||||
|
@ -112,6 +119,7 @@ def start_module(name, is_module):
|
|||
views.app.output.stop()
|
||||
|
||||
ioerr.write("Process stopped ({})\n".format(views.app.module_process.exitcode))
|
||||
views.app.output.queue.put(("sig", "stop"))
|
||||
views.app.restart.wait()
|
||||
|
||||
|
||||
|
|
|
@ -11,3 +11,4 @@ if __name__ == "__main__":
|
|||
args = parser.parse_args()
|
||||
|
||||
print("Subparser %s was selected" % args.command)
|
||||
print(args)
|
||||
|
|
2
warped/savemodules.py
Normal file
2
warped/savemodules.py
Normal file
|
@ -0,0 +1,2 @@
|
|||
import sys
|
||||
savedmodules = dict(sys.modules)
|
|
@ -7,6 +7,15 @@
|
|||
display: block;
|
||||
}
|
||||
|
||||
.checkbox {
|
||||
height:100%;
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
-moz-appearance: none;
|
||||
}
|
||||
|
||||
#output {
|
||||
flex:1;
|
||||
|
|
|
@ -21,6 +21,9 @@ function createSubparserAction(action) {
|
|||
|
||||
var content_div = $("<div/>", { id: choice['uuid'] })
|
||||
.addClass("tabs-panel").appendTo(tab_content);
|
||||
choice['groups'].forEach(function(group) {
|
||||
content_div.append(createGroup(group));
|
||||
});
|
||||
choice['actions'].forEach(function(action) {
|
||||
content_div.append(createAction(action));
|
||||
});
|
||||
|
@ -31,13 +34,14 @@ function createSubparserAction(action) {
|
|||
}
|
||||
|
||||
function createCheckboxAction(action) {
|
||||
var switch_div = $("<div/>").addClass("switch");
|
||||
//var switch_div = $("<div/>").addClass("switch");
|
||||
var switch_div = $("<div/>").addClass("checkbox");
|
||||
var input = $("<input/>", {
|
||||
id: action["uuid"],
|
||||
type: 'checkbox',
|
||||
name: action['uuid']
|
||||
}).addClass('switch-input').data("name", action['dest']).appendTo(switch_div);
|
||||
var paddle = $("<label/>", {for: action["uuid"]}).addClass("switch-paddle")
|
||||
}).data("name", action['dest']).appendTo(switch_div);
|
||||
var paddle = $("<label/>", {for: action["uuid"]}).addClass("css-label")
|
||||
.appendTo(switch_div);
|
||||
if(action['checked'] === true) {
|
||||
input.attr('checked', true);
|
||||
|
|
|
@ -12,21 +12,33 @@ from flask import Flask, render_template, request, Response, \
|
|||
app = Flask(__name__)
|
||||
app.mutex_groups=[]
|
||||
|
||||
def parse_argument(name, json, action):
|
||||
def parse_argument(name, json, action, namespace):
|
||||
try:
|
||||
argument = json[name]
|
||||
if type(argument) == list:
|
||||
if len(argument) == 1:
|
||||
return action.type_function(argument[0])
|
||||
setattr(namespace, action.name, action.type_function(argument[0]))
|
||||
else:
|
||||
return [action.type_function(elem) for elem in argument]
|
||||
setattr(namespace, action.name, [action.type_function(elem) for elem in argument])
|
||||
else:
|
||||
return action.type_function(argument)
|
||||
setattr(namespace, action.name, action.type_function(argument))
|
||||
except (KeyError, ValueError):
|
||||
if name.endswith("[]"):
|
||||
return action.on_none
|
||||
setattr(namespace, action.name, action.on_none)
|
||||
else:
|
||||
return parse_argument(name + "[]", json, action)
|
||||
parse_argument(name + "[]", json, action, namespace)
|
||||
|
||||
try:
|
||||
for name, choice in action.choices.items():
|
||||
actions = choice.actions
|
||||
for group in choice.groups:
|
||||
actions.extend(group.actions)
|
||||
for act in actions:
|
||||
parse_argument(act.name, json, act, namespace)
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
@app.route("/arguments", methods=['POST'])
|
||||
|
@ -39,8 +51,7 @@ def fill_namespace():
|
|||
all_actions.extend(group.actions)
|
||||
|
||||
for action in all_actions:
|
||||
value = parse_argument(action.name, json, action)
|
||||
setattr(namespace, action.name, value)
|
||||
parse_argument(action.name, json, action, namespace)
|
||||
|
||||
app.namespaceQueue.put(namespace)
|
||||
app.output.queue.put(("sig", "start"))
|
||||
|
@ -57,7 +68,6 @@ def get_arguments():
|
|||
def stop():
|
||||
os.kill(app.module_process.pid, signal.SIGCONT)
|
||||
app.module_process.terminate()
|
||||
app.output.queue.put(("sig", "stop"))
|
||||
return "OK"
|
||||
|
||||
@app.route("/resume")
|
||||
|
|
Loading…
Add table
Reference in a new issue