Переглянути джерело

Throw a correct exception when accessing an unregistered metamodel

Yentl Van Tendeloo 8 роки тому
батько
коміт
0238dbfe20
2 змінених файлів з 15 додано та 18 видалено
  1. 2 2
      bootstrap/object_operations.alc
  2. 13 16
      wrappers/modelverse.py

+ 2 - 2
bootstrap/object_operations.alc

@@ -35,7 +35,7 @@ Element function selectPossibleIncoming(model : Element, target : String, limit_
 	Element target_element
 	result = set_create()
 	model_dict = model["model"]
-	while (0 < list_len(limit_set)):
+	while (list_len(limit_set) > 0):
 		type = set_pop(limit_set)
 		elem = model_dict[type]
 		if (is_nominal_subtype(model, target, reverseKeyLookup(model_dict, read_edge_dst(elem)))):
@@ -55,7 +55,7 @@ Element function selectPossibleOutgoing(model : Element, source : String, limit_
 	result = set_create()
 	model_dict = model["model"]
 	
-	while (0 < list_len(limit_set)):
+	while (list_len(limit_set) > 0):
 		type = set_pop(limit_set)
 		elem = model_dict[type]
 		if (is_nominal_subtype(model, source, reverseKeyLookup(model_dict, read_edge_src(elem)))):

+ 13 - 16
wrappers/modelverse.py

@@ -67,6 +67,13 @@ prev_mode = None
 current_model = None
 registered_metamodels = {}
 
+def _get_metamodel(model):
+    global registered_metamodels
+    try:
+        return registered_metamodels[model]
+    except KeyError:
+        raise UnkownMetamodellingHierarchy(model)
+
 def _check_type(value):
     if not isinstance(value, (int, long, float, str, unicode, bool)):
         raise UnsupportedValue("%s : %s" % (value, str(type(value))))
@@ -79,7 +86,6 @@ def _dict_to_list(python_dict):
 
 def _goto_mode(new_mode, model_name=None):
     global mode
-    global registered_metamodels
 
     if mode == MODE_MANUAL and new_mode == MODE_MODIFY:
         if model_name != None and current_model != model_name:
@@ -88,15 +94,12 @@ def _goto_mode(new_mode, model_name=None):
             return
     elif mode == MODE_MODELLING and new_mode == MODE_MODIFY:
         # Are in root view, but want to modify a model
-        if model_name not in registered_metamodels:
-            raise UnfamiliarMetamodel(model_name)
-        _model_modify(model_name, registered_metamodels[model_name])
+        _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
-        if model_name not in registered_metamodels:
-            raise UnfamiliarMetamodel(model_name)
+        mm = _get_metamodel(model_name)
         _model_exit()
-        _model_modify(model_name, registered_metamodels[model_name])
+        _model_modify(model_name, mm)
     elif mode == MODE_MODIFY and new_mode == MODE_MODELLING:
         _model_exit()
     elif mode == new_mode:
@@ -374,19 +377,13 @@ def verify(model_name, metamodel_name=None):
     _goto_mode(MODE_MODELLING)
 
     if metamodel_name is None:
-        global registered_metamodels
-
-        if model_name not in registered_metamodels:
-            raise UnknownMetamodellingHierarchy(model_name)
-
-        metamodel_name = registered_metamodels[model_name]
+        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."""
-    global registered_metamodels
     _goto_mode(MODE_MODIFY, model_name)
 
     if new_model is not None:
@@ -403,6 +400,7 @@ def model_overwrite(model_name, new_model=None, metamodel_name=None):
     _output("Success")
 
     if metamodel_name is not None:
+        global registered_metamodels
         registered_metamodels[model_name] = metamodel_name
 
 def user_logout():
@@ -942,8 +940,7 @@ def element_list_nice(model_name):
     """Fetches a nice representation of models."""
     _goto_mode(MODE_MODELLING)
 
-    global registered_metamodels
-    _input(["element_list_nice", model_name, registered_metamodels[model_name]])
+    _input(["element_list_nice", model_name, _get_metamodel(model_name)])
 
     return json.loads(_handle_output("Success: ", split=" "))