Browse Source

Patched interface of process_signature

Yentl Van Tendeloo 7 years ago
parent
commit
8554c0cef0
2 changed files with 43 additions and 19 deletions
  1. 22 19
      bootstrap/core_algorithm.alc
  2. 21 0
      unit/test_all.py

+ 22 - 19
bootstrap/core_algorithm.alc

@@ -1157,28 +1157,31 @@ String function cmd_process_signature(process : String):
 	process_id = get_entry_id(process)
 	if (process_id != ""):
 		if (allow_execute(current_user_id, process_id)):
-			Element pm
-			pm = get_full_model(process_id, get_entry_id("formalisms/ProcessModel"))
-			
-			if (element_eq(pm, read_root())):
-				return "Not a ProcessModel: " + process!
+			if (read_type(core, process_id) == "Model"):
+				Element pm
+				pm = get_full_model(process_id, get_entry_id("formalisms/ProcessModel"))
+				
+				if (element_eq(pm, read_root())):
+					return "Not a ProcessModel: " + process!
 
-			result = "Success: "
-			signature = PM_signature(pm)
-			keys = dict_keys(signature)
-			Element found_keys
-			found_keys = set_create()
-			while (set_len(keys) > 0):
-				key = set_pop(keys)
-				result = result + key + " : " + cast_string(signature[key]) + "\n"
-				if set_in(found_keys, key):
-					return "Not a valid ProcessModel: " + process!
-				else:
-					set_add(found_keys, key)
+				result = "Success: "
+				signature = PM_signature(pm)
+				keys = dict_keys(signature)
+				Element found_keys
+				found_keys = set_create()
+				while (set_len(keys) > 0):
+					key = set_pop(keys)
+					result = result + key + " : " + cast_string(signature[key]) + "\n"
+					if set_in(found_keys, key):
+						return "Not a valid ProcessModel: " + process!
+					else:
+						set_add(found_keys, key)
 
-			return result!
+				return result!
+			else:
+				return "Not a model: " + process!
 		else:
-			return "Execute permission denied to model: " + process!
+			return "Execute permission denied to: " + process!
 	else:
 		return "Model not found: " + process!
 

+ 21 - 0
unit/test_all.py

@@ -4869,6 +4869,27 @@ class TestModelverse(unittest.TestCase):
         except NotAProcess:
             pass
 
+        # Try non-existing model
+        try:
+            process_signature("users/user/test/g")
+            self.fail()
+        except UnknownModel:
+            pass
+
+        # Try folder
+        try:
+            process_signature("users")
+            self.fail()
+        except NotAModel:
+            pass
+
+        # Try unreadable model
+        try:
+            process_signature("administration/core")
+            self.fail()
+        except ExecutePermissionDenied:
+            pass
+
     """
     def test_op_model_render(self):
     def test_op_process_signature(self):