瀏覽代碼

Stripped the modelverse_coded

Yentl Van Tendeloo 8 年之前
父節點
當前提交
04915c502c
共有 1 個文件被更改,包括 1 次插入683 次删除
  1. 1 683
      wrappers/modelverse_coded.py

+ 1 - 683
wrappers/modelverse_coded.py

@@ -12,9 +12,6 @@ COMPILER_PATH = "interface/HUTN"
 MODE_UNCONNECTED = 0
 MODE_UNAUTHORIZED = 1
 MODE_MODELLING = 2
-MODE_MODIFY = 3
-MODE_DIALOG = 4
-MODE_MANUAL = 5
 MODE_SERVICE = 6
 
 # Bind to the compiler (might have to update path manually!)
@@ -67,13 +64,6 @@ prev_mode = None
 current_model = None
 registered_metamodels = {}
 
-def _get_metamodel(model):
-    global registered_metamodels
-    try:
-        return registered_metamodels[model]
-    except KeyError:
-        raise UnknownMetamodellingHierarchy(model)
-
 def _check_type(value):
     if not isinstance(value, (int, long, float, str, unicode, bool)):
         raise UnsupportedValue("%s : %s" % (value, str(type(value))))
@@ -84,31 +74,10 @@ def _check_type_list(value):
     else:
         _check_type(value)
 
-def _dict_to_list(python_dict):
-    lst = []
-    for k, v in python_dict.items():
-        lst += [k, v]
-    return lst
-
 def _goto_mode(new_mode, model_name=None):
     global mode
 
-    if mode == MODE_MANUAL and new_mode == MODE_MODIFY:
-        if model_name != None and current_model != model_name:
-            raise InvalidMode("Mode error: cannot modify other models!")
-        else:
-            return
-    elif mode == MODE_MODELLING and new_mode == MODE_MODIFY:
-        # Are in root view, but want to modify a model
-        _model_modify(model_name, _get_metamodel(model_name))
-    elif mode == MODE_MODIFY and new_mode == MODE_MODIFY and model_name != None and current_model != model_name:
-        # Are in modify mode, but want to modify a different model
-        mm = _get_metamodel(model_name)
-        _model_exit()
-        _model_modify(model_name, mm)
-    elif mode == MODE_MODIFY and new_mode == MODE_MODELLING:
-        _model_exit()
-    elif mode == new_mode:
+    if mode == new_mode:
         return
     else:
         # Go to a mode that we have no automatic transfer to: raise exception
@@ -116,7 +85,6 @@ def _goto_mode(new_mode, model_name=None):
 
 def _input(value, port=None):
     # Ugly json encoding of primitives
-    #print("[IN] %s" % value)
     if port is None:
         port = taskname
     if isinstance(value, type([])):
@@ -131,8 +99,6 @@ def _input_raw(value, taskname):
     # Ugly json encoding of primitives
     urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "set_input", "value": value, "taskname": taskname}))).read()
 
-    #TODO check that this is actually a Modelverse!
-
 def _compile_AL(code):
     # Compile an action language file and send the compiled code
     code_fragments = code.split("\n")
@@ -305,582 +271,6 @@ def login(username, password):
     else:
         raise InterfaceMismatch(_last_output())
 
-def model_add(model_name, metamodel_name, model_code=None):
-    """Instantiate a new model."""
-    _goto_mode(MODE_MODELLING)
-
-    # Do this before creating the model, as otherwise compilation errors would make us inconsistent
-    if model_code is not None:
-        try:
-            compiled = _compile_model(model_code)
-        except Exception as e:
-            raise CompilationError(e)
-    else:
-        compiled = [0]
-
-    _input(["model_add", metamodel_name, model_name])
-    _handle_output("Waiting for model constructors...")
-    _input(compiled)
-    _output("Success")
-
-    global registered_metamodels
-    registered_metamodels[model_name] = metamodel_name
-
-def upload_code(code):
-    try:
-        compiled = _compile_AL(code)
-    except Exception as e:
-        raise CompilationError(e)
-
-    _input(compiled)
-
-def model_delete(model_name):
-    """Delete an existing model."""
-    _goto_mode(MODE_MODELLING)
-
-    _input(["model_delete", model_name])
-    _handle_output("Success")
-
-def model_list(location):
-    """List all models."""
-    _goto_mode(MODE_MODELLING)
-    _input(["model_list", location])
-    return set(_handle_output("Success: ", split=" ").split("\n"))
-
-def model_list_full(location):
-    """List full information on all models."""
-    _goto_mode(MODE_MODELLING)
-    _input(["model_list_full", location])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-
-    lst = set([])
-    value = output.strip().split("\n")
-    for v in value:
-        m = v.strip()
-        perm, own, grp, m = m.split(" ", 3)
-        lst.add((m, own, grp, perm))
-
-    return lst
-
-def verify(model_name, metamodel_name=None):
-    """Verify if a model conforms to its metamodel."""
-    _goto_mode(MODE_MODELLING)
-
-    if metamodel_name is None:
-        metamodel_name = _get_metamodel(model_name)
-
-    _input(["verify", model_name, metamodel_name])
-    return _handle_output("Success: ", split=" ")
-
-def model_overwrite(model_name, new_model=None, metamodel_name=None):
-    """Upload a new model and overwrite an existing model."""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    if new_model is not None:
-        try:
-            compiled = _compile_model(new_model)
-        except Exception as e:
-            raise CompilationError(e)
-    else:
-        compiled = [0]
-
-    _input("upload")
-    _handle_output("Waiting for model constructors...")
-    _input(compiled)
-    _output("Success")
-
-    if metamodel_name is not None:
-        global registered_metamodels
-        registered_metamodels[model_name] = metamodel_name
-
-def user_logout():
-    """Log out the current user and break the connection."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-    _input("exit")
-    mode = MODE_UNCONNECTED
-
-def user_delete():
-    """Removes the current user and break the connection."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-    _input("self-destruct")
-    mode = MODE_UNCONNECTED
-
-def model_render(model_name, mapper_name):
-    """Fetch a rendered verion of a model."""
-    _goto_mode(MODE_MODELLING)
-
-    _input(["model_render", model_name, mapper_name])
-    return json.loads(_handle_output("Success: ", split=" "))
-
-def transformation_between(source, target):
-    _goto_mode(MODE_MODELLING)
-
-    _input(["transformation_between", source, target])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-    return set([v for v in output.split("\n")])
-
-def transformation_add_MT(source_metamodels, target_metamodels, operation_name, code, callback=lambda: None):
-    """Create a new model transformation."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-    import time
-
-    start = time.time()
-    try:
-        compiled = _compile_model(code)
-    except Exception as e:
-        raise CompilationError(e)
-    #print("Compilation took: %ss" % (time.time() - start))
-    start = time.time()
-
-    mv_dict_rep = _dict_to_list(source_metamodels) + [""] + _dict_to_list(target_metamodels) + [""]
-    _input(["transformation_add_MT"] + mv_dict_rep + [operation_name])
-
-    # Possibly modify the merged metamodel first (add tracability links)
-    if len(source_metamodels) + len(target_metamodels) > 0:
-        mode = MODE_MANUAL
-        _output("Model loaded, ready for commands!")
-        callback()
-        _input("exit")
-        mode = MODE_MODELLING
-    #print("Callbacks took: %ss" % (time.time() - start))
-    start = time.time()
-
-    # Done, so RAMify and upload the model
-    _handle_output("Waiting for model constructors...")
-    _input(compiled)
-    _handle_output("Success")
-    #print("Upload and RAMify took: %ss" % (time.time() - start))
-
-def transformation_add_AL(source_metamodels, target_metamodels, operation_name, code, callback=lambda: None):
-    """Create a new action language model, which can be executed."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-
-    try:
-        compiled = _compile_AL(code)
-    except Exception as e:
-        raise CompilationError(e)
-
-    mv_dict_rep = _dict_to_list(source_metamodels) + [""] + _dict_to_list(target_metamodels) + [""]
-    _input(["transformation_add_AL"] + mv_dict_rep + [operation_name])
-
-    # Possibly modify the merged metamodel first (add tracability links)
-    if len(source_metamodels) + len(target_metamodels) > 0:
-        mode = MODE_MANUAL
-        _output("Model loaded, ready for commands!")
-        callback()
-        _input("exit")
-        mode = MODE_MODELLING
-
-    _handle_output("Waiting for code constructors...")
-    _input(compiled)
-    _output("Success")
-
-def transformation_add_MANUAL(source_metamodels, target_metamodels, operation_name, callback=lambda: None):
-    """Create a new manual model operation."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-
-    mv_dict_rep = _dict_to_list(source_metamodels) + [""] + _dict_to_list(target_metamodels) + [""]
-    _input(["transformation_add_MANUAL"] + mv_dict_rep + [operation_name])
-
-    # Possibly modify the merged metamodel first (add tracability links)
-    if len(source_metamodels) + len(target_metamodels) > 0:
-        mode = MODE_MANUAL
-        _output("Model loaded, ready for commands!")
-        callback()
-        _input("exit")
-        mode = MODE_MODELLING
-
-    _handle_output("Success")
-
-def transformation_execute_AL(operation_name, input_models_dict, output_models_dict, callback=lambda i: None):
-    """Execute an existing model operation."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-
-    mv_dict_rep = _dict_to_list(input_models_dict) + [""] + _dict_to_list(output_models_dict) + [""]
-
-    _input(["transformation_execute", operation_name] + mv_dict_rep)
-    _handle_output("Success: ready for AL execution")
-
-    # We are now executing, so everything we get is part of the dialog, except if it is the string for transformation termination
-    while _output() not in ["Success", "Failure"]:
-        mode = MODE_DIALOG
-        reply = callback(_last_output())
-        mode = MODE_MODELLING
-        if reply is not None:
-            _input(reply)
-
-    # Got termination message, so we are done!
-    if _last_output() == "Success":
-        return True
-    else:
-        return False
-
-def transformation_execute_MANUAL(operation_name, input_models_dict, output_models_dict, callback=lambda i: None):
-    """Execute an existing model operation."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-
-    mv_dict_rep = _dict_to_list(input_models_dict) + [""] + _dict_to_list(output_models_dict) + [""]
-
-    _input(["transformation_execute", operation_name] + mv_dict_rep)
-    _handle_output("Success: ready for MANUAL execution")
-
-    # Skip over the begin of mini_modify
-    _handle_output("Please perform manual operation ")
-    _output("Model loaded, ready for commands!")
-
-    # We are now executing, so everything we get is part of the dialog, except if it is the string for transformation termination
-    mode = MODE_MANUAL
-    callback()
-    # Finished, so leave
-    _input("exit")
-    mode = MODE_MODELLING
-
-    # Got termination message, so we are done!
-    if _output() == "Success":
-        return True
-    else:
-        return False
-
-def transformation_execute_MT(operation_name, input_models_dict, output_models_dict, callback=lambda i: None):
-    """Execute an existing model operation."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-
-    mv_dict_rep = _dict_to_list(input_models_dict) + [""] + _dict_to_list(output_models_dict) + [""]
-
-    _input(["transformation_execute", operation_name] + mv_dict_rep)
-    _handle_output("Success: ready for MT execution")
-
-    # We are now executing, so everything we get is part of the dialog, except if it is the string for transformation termination
-    while _output() not in ["Success", "Failure"]:
-        mode = MODE_DIALOG
-        reply = callback(_last_output())
-        mode = MODE_MODELLING
-        if reply is not None:
-            _input(reply)
-
-    # Got termination message, so we are done!
-    if _last_output() == "Success":
-        return True
-    else:
-        return False
-
-def transformation_list():
-    """List existing model operations."""
-    _goto_mode(MODE_MODELLING)
-
-    _input("transformation_list")
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-
-    lst = set([])
-    value = output.strip().split("\n")
-    for v in value:
-        t, m = v.strip().split(" ", 1)
-        t = t[1:-1].strip()
-        m = m.strip().split(":")[0].strip()
-        lst.add((t, m))
-
-    return lst
-
-def process_execute(process_name, prefix, callbacks):
-    """Execute a process model."""
-    global mode
-    _goto_mode(MODE_MODELLING)
-
-    _input(["process_execute", process_name, prefix])
-    _handle_output("Success")
-
-    reuse = False
-    while reuse or _output() != "Success":
-        reuse = False
-        output = _last_output()
-        if output.startswith("Enacting "):
-            # Next activity!
-            t = output.split(" ", 1)[1].split(":", 1)[0]
-            name = output.split(": ", 1)[1]
-            if name in callbacks:
-                callback = callbacks[name]
-                if t == "ModelTransformation" or t == "ActionLanguage":
-                    while not (_output().startswith("Enacting ") or _last_output() == "Success"):
-                        mode = MODE_DIALOG
-                        reply = callback(_last_output())
-                        mode = MODE_MODELLING
-                        if reply is not None:
-                            _input(reply)
-                    if _last_output().startswith("Enacting "):
-                        reuse = True
-                elif t == "ManualOperation":
-                    _handle_output("Please perform manual operation ")
-                    _output("Model loaded, ready for commands!")
-                    mode = MODE_MANUAL
-                    callback()
-                    _input("exit")
-                    mode = MODE_MODELLING
-
-def permission_modify(model_name, permissions):
-    """Modify permissions of a model."""
-    _goto_mode(MODE_MODELLING)
-    _input(["permission_modify", model_name, permissions])
-    _handle_output("Success")
-
-def permission_owner(model_name, owner):
-    """Modify the owning user of a model."""
-    _goto_mode(MODE_MODELLING)
-    _input(["permission_owner", model_name, owner])
-    _handle_output("Success")
-
-def permission_group(model_name, group):
-    """Modify the owning group of a model."""
-    _goto_mode(MODE_MODELLING)
-    _input(["permission_group", model_name, group])
-    _handle_output("Success")
-
-def group_create(group_name):
-    """Create a new group."""
-    _goto_mode(MODE_MODELLING)
-    _input(["group_create", group_name])
-    _handle_output("Success")
-
-def group_delete(group_name):
-    """Delete a group of which you are an owner."""
-    _goto_mode(MODE_MODELLING)
-    _input(["group_delete", group_name])
-    _handle_output("Success")
-
-def group_owner_add(group_name, user_name):
-    """Add a new owning user to a group you own."""
-    _goto_mode(MODE_MODELLING)
-    _input(["owner_add", group_name, user_name])
-    _handle_output("Success")
-
-def group_owner_delete(group_name, user_name):
-    """Delete an owning user to a group you own."""
-    _goto_mode(MODE_MODELLING)
-    _input(["owner_delete", group_name, user_name])
-    _handle_output("Success")
-
-def group_join(group_name, user_name):
-    """Add a new user to a group you own."""
-    _goto_mode(MODE_MODELLING)
-    _input(["group_join", group_name, user_name])
-    _handle_output("Success")
-
-def group_kick(group_name, user_name):
-    """Delete a user from a group you own."""
-    _goto_mode(MODE_MODELLING)
-    _input(["group_kick", group_name, user_name])
-    _handle_output("Success")
-
-def group_list():
-    """List existing groups."""
-    _goto_mode(MODE_MODELLING)
-    _input(["group_list"])
-    _handle_output("Success")
-
-def admin_promote(user_name):
-    """Promote a user to admin status."""
-    _goto_mode(MODE_MODELLING)
-    _input(["admin_promote", user_name])
-    _handle_output("Success")
-
-def admin_demote():
-    """Demote a user from admin status."""
-    _goto_mode(MODE_MODELLING)
-    _input(["admin_demote", user_name])
-    _handle_output("Success")
-
-# Actual operations on the model
-def element_list(model_name):
-    """Return a list of all IDs and the type of the element"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input("list_full")
-    lst = set([])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-    for v in output.split("\n"):
-        m, mm = v.split(":")
-        m = m.strip()
-        mm = mm.strip()
-        lst.add((m, mm))
-    return lst
-
-def types(model_name):
-    """Return a list of all types usable in the model"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input("types")
-    lst = set([])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-    for v in output.split("\n"):
-        m, mm = v.split(":")
-        m = m.strip()
-        lst.add(m)
-    return lst
-
-def types_full(model_name):
-    """Return a list of full types usable in the model"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input("types")
-    lst = set([])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-    for v in output.split("\n"):
-        m, mm = v.split(":")
-        m = m.strip()
-        mm = mm.strip()
-        lst.add((m, mm))
-    return lst
-
-def read(model_name, ID):
-    """Return a tuple of information on the element: its type and source/target (None if not an edge)"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["read", ID])
-    output = _handle_output("Success: ", split=" ")
-    v = output.split("\n")
-    t = v[1].split(":")[1].strip()
-    if (not v[2].startswith("Source:")):
-        rval = (t, None)
-    else:
-        src = v[2].split(":")[1].strip()
-        trg = v[3].split(":")[1].strip()
-        rval = (t, (src, trg))
-    return rval
-
-def read_attrs(model_name, ID):
-    """Return a dictionary of attribute value pairs"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["read", ID])
-    output = _handle_output("Success: ", split=" ")
-    v = output.split("\n")
-    searching = True
-    rval = {}
-    for r in v:
-        if searching:
-            if r == "Attributes:":
-                # Start working on attributes
-                searching = False
-        else:
-            key, value = r.split(":", 1)
-            _, value = value.split("=", 1)
-            key = json.loads(key.strip())
-            value = value.strip()
-            if value == "None":
-                value = None
-            elif value == "True":
-                value = True
-            elif value == "False":
-                value = False
-            else:
-                value = json.loads(value)
-            rval[key] = value
-    return rval
-
-def instantiate(model_name, typename, edge=None, ID=""):
-    """Create a new instance of the specified typename, between the selected elements (if not None), and with the provided ID (if any)"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    if edge is None:
-        _input(["instantiate_node", typename, ID])
-    else:
-        _input(["instantiate_edge", typename, ID, edge[0], edge[1]])
-    return _handle_output("Success: ", split=" ")
-
-def delete_element(model_name, ID):
-    """Delete the element with the given ID"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["delete", ID])
-    _handle_output("Success")
-
-def attr_assign(model_name, ID, attr, value):
-    """Assign a value to an attribute"""
-    _check_type(value)
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["attr_add", ID, attr, value])
-    _handle_output("Success")
-
-def attr_assign_code(model_name, ID, attr, code):
-    """Assign a piece of Action Language code to the attribute"""
-    _check_type(code)
-    try:
-        compiled = _compile_AL(code)
-    except Exception as e:
-        raise CompilationError(e)
-
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["attr_add", ID, attr])
-    _handle_output("Waiting for code constructors...")
-    _input(compiled)
-    _output("Success")
-
-def attr_delete(model_name, ID, attr):
-    """Remove an attribute."""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["attr_del", ID, attr])
-    _handle_output("Success")
-
-def read_outgoing(model_name, ID, typename):
-    """Returns a list of all outgoing associations of a specific type ("" = all)"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["read_outgoing", ID, typename])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-    else:
-        return set(output.split("\n"))
-
-def read_incoming(model_name, ID, typename):
-    """Returns a list of all incoming associations of a specific type ("" = all)"""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["read_incoming", ID, typename])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-    else:
-        return set(output.split("\n"))
-
-def read_association_source(model_name, ID):
-    """Returns the source of an association."""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["read_association_source", ID])
-    return _handle_output("Success: ", split=" ")
-
-def read_association_destination(model_name, ID):
-    """Returns the destination of an association."""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["read_association_destination", ID])
-    return _handle_output("Success: ", split=" ")
-
-##### To document:
-
 def service_register(name, function):
     """Register a function as a service with a specific name."""
 
@@ -924,78 +314,6 @@ def service_set(port, value):
 
     _input(value, port=port)
 
-def user_password(user, password):
-    """Change a user's password."""
-    raise NotImplementedError()
-
-def transformation_read_signature(transformation):
-    """Reads an operation's signature, specifying the names and their required types."""
-    raise NotImplementedError()
-
-def element_list_nice(model_name):
-    """Fetches a nice representation of models."""
-    _goto_mode(MODE_MODELLING)
-
-    _input(["element_list_nice", model_name, _get_metamodel(model_name)])
-
-    data = _handle_output("Success: ", split=" ")
-    try:
-        return json.loads(data)
-    except:
-        print(data)
-        raise
-
-def connections_between(model_name, source_element, target_element):
-    """Gets a list of all allowed connections between the source and target element in the model."""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["connections_between", source_element, target_element])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-    else:
-        return set(output.split("\n"))
-
-def define_attribute(model_name, node, attr_name, attr_type):
-    """Create a new attribute, which can be instantiated one meta-level below."""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["define_attribute", node, attr_name, attr_type])
-    return _handle_output("Success: ", split=" ")
-
-def all_instances(model_name, type_name):
-    """Returns a list of all elements of a specific type."""
-    _goto_mode(MODE_MODIFY, model_name)
-
-    _input(["all_instances", type_name])
-    output = _handle_output("Success: ", split=" ")
-    if output == "":
-        return set([])
-    else:
-        return set(output.split("\n"))
-
 def service_poll(port):
     """Checks whether or not the Modelverse side has any input ready to be processed."""
     raise NotImplementedError()
-
-def user_name(user, username):
-    """Change a user's name."""
-    raise NotImplementedError()
-
-def remove_conformance(model_name, metamodel_name):
-    """Remove a metamodel for a model."""
-    _goto_mode(MODE_MODELLING)
-    _input(["remove_conformance", model_name, metamodel_name])
-    _handle_output("Success")
-
-def add_conformance(model_name, metamodel_name, partial_type_mapping=None):
-    """Add a metamodel for a model."""
-    raise NotImplementedError()
-    _goto_mode(MODE_MODELLING)
-    _input(["add_conformance", model_name, metamodel_name])
-    _handle_output("Success")
-
-def folder_create(folder_name):
-    _goto_mode(MODE_MODELLING)
-    _input(["folder_create", folder_name])
-    _handle_output("Success")