Ver código fonte

Document permission related exceptions in wrapper

Yentl Van Tendeloo 7 anos atrás
pai
commit
be117ddcf7
2 arquivos alterados com 121 adições e 93 exclusões
  1. 52 13
      doc/wrappers.rst
  2. 69 80
      wrappers/modelverse_SCCD.py

+ 52 - 13
doc/wrappers.rst

@@ -528,7 +528,7 @@ User Access Control
      >>> read_permissions("user/user/my_pn")
      "RW"
 
-   * To determine the permissions for the *formalisms/SimpleClassDiagrams" metamodel, for which we have read permissions, but no write permissions.
+   * To determine the permissions for the *formalisms/SimpleClassDiagrams* metamodel, for which we have read permissions, but no write permissions.
 
      >>> read_permissions("formalisms/SimpleClassDiagrams")
      "R"
@@ -1576,51 +1576,90 @@ For each exception, its superclasses are also indicated after the colon.
 
 .. exception:: ReadPermissionDenied : PermissionDenied
 
+   Current user has no permissions to read the specified model or folder.
+
    Examples:
 
-   * 
+   * When reading the administration model, for which we have no permission as it contains user password hashes.
 
-     >>>
+     >>> element_list("administration/core")
+     ReadPermissionDenied()
+
+   * When instantiating a non-readable metamodel, as we require access to the enclosed information.
+
+     >>> model_add("my_model", "non-readable-model")
+     ReadPermissionDenied()
+
+   * When listing a folder that we do not have read permissions for.
+
+     >>> model_list("users/admin/")
+     ReadPermissionDenied()
 
 .. exception:: WritePermissionDenied : PermissionDenied
 
+   Current user has no permissions to write to the specified model or folder.
+
    Examples:
 
-   * 
+   * When writing changes to a core formalism, which ordinary users cannot modify.
 
-     >>>
+     >>> instantiate("formalisms/SimpleClassDiagrams", "Class")
+     WritePermissionDenied()
+
+   * When creating a model in a non-writeable folder.
+
+     >>> model_add("formalisms/abc", "formalisms/SimpleClassDiagrams")
+     WritePermissionDenied()
 
 .. exception:: ExecutePermissionDenied : PermissionDenied
 
+   Current user has no permissions to execute the specified activity or process.
+   For now, execute permissions equal read permissions, although this is prone to change in the future.
+
    Examples:
 
-   * 
+   * When executing a model transformation that we are not allowed to execute.
 
-     >>>
+     >>> transformation_execute_MT("users/admin/my_transformation", {}, {})
+     ExecutePermissionDenied()
 
 .. exception:: UserPermissionDenied : PermissionDenied
 
+   Current user has no permission to make changes to the specified user or to the permissions of models (which can only be modified by the owner).
+
    Examples:
 
-   * 
+   * When changing the password of another user.
 
-     >>>
+     >>> user_password("admin", "other_one")
+     UserPermissionDenied()
+
+   * When modifying the permissions of a non-owned model.
+
+     >>> permission_modify("formalisms/SimpleClassDiagrams", "222")
+     UserPermissionDenied()
 
 .. exception:: GroupPermissionDenied : PermissionDenied
 
+   Current user has no permission to modify properties of the specified group.
+
    Examples:
 
-   * 
+   * When adding a member to a group that we are not an administrator of.
 
-     >>>
+     >>> group_join("some_group", "other_user")
+     GroupPermissionDenied()
 
 .. exception:: AdminPermissionDenied : PermissionDenied
 
+   Current user has no administrator privileges and cannot change the administrator level of another user.
+
    Examples:
 
-   * 
+   * When promoting another user as admin, while we are not an administrator ourselves.
 
-     >>>
+     >>> admin_promote("other_user")
+     AdminPermissionDenied()
 
 .. exception:: InterfaceMismatch : ModelverseException
 

+ 69 - 80
wrappers/modelverse_SCCD.py

@@ -1953,11 +1953,6 @@ class Modelverse(RuntimeClassBase):
         _initialized_behaviour_operations_38.setTrigger(None)
         _initialized_behaviour_operations_38.setGuard(self._initialized_behaviour_operations_38_guard)
         self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_38)
-        _initialized_behaviour_operations_39 = Transition(self, self.states["/initialized/behaviour/operations"], [self.states["/initialized/behaviour/wait_for_action/history"]])
-        _initialized_behaviour_operations_39.setAction(self._initialized_behaviour_operations_39_exec)
-        _initialized_behaviour_operations_39.setTrigger(None)
-        _initialized_behaviour_operations_39.setGuard(self._initialized_behaviour_operations_39_guard)
-        self.states["/initialized/behaviour/operations"].addTransition(_initialized_behaviour_operations_39)
         
         # transition /initialized/behaviour/operations/store_on_scripted/transformation_add
         _initialized_behaviour_operations_store_on_scripted_transformation_add_0 = Transition(self, self.states["/initialized/behaviour/operations/store_on_scripted/transformation_add"], [self.states["/initialized/behaviour/wait_for_action/megamodelling"]])
@@ -2367,220 +2362,214 @@ class Modelverse(RuntimeClassBase):
         return self.expect_response_partial('Model is not an operation: ', pop=False)
     
     def _initialized_behaviour_operations_4_exec(self, parameters):
-        self.raiseInternalEvent(Event("exception", None, ['ManualActivityRequiresIO', 'Manual activities require at least one input or output metamodel to be specified in order to create a meaningful metamodel.']))
-    
-    def _initialized_behaviour_operations_4_guard(self, parameters):
-        return self.expect_response_partial('Manual activity needs at least one formalism in its input or output signature', pop=True)
-    
-    def _initialized_behaviour_operations_5_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['SourceModelNotBound', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_5_guard(self, parameters):
+    def _initialized_behaviour_operations_4_guard(self, parameters):
         return self.expect_response_partial('Source model not bound: ', pop=False)
     
-    def _initialized_behaviour_operations_6_exec(self, parameters):
+    def _initialized_behaviour_operations_5_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['TargetModelNotBound', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_6_guard(self, parameters):
+    def _initialized_behaviour_operations_5_guard(self, parameters):
         return self.expect_response_partial('Target model not bound: ', pop=False)
     
-    def _initialized_behaviour_operations_7_exec(self, parameters):
+    def _initialized_behaviour_operations_6_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['DifferingModelsForKey', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_7_guard(self, parameters):
+    def _initialized_behaviour_operations_6_guard(self, parameters):
         return self.expect_response_partial('Input and output signature differ for same key: ', pop=False)
     
-    def _initialized_behaviour_operations_8_exec(self, parameters):
+    def _initialized_behaviour_operations_7_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['IncorrectFormat', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_8_guard(self, parameters):
+    def _initialized_behaviour_operations_7_guard(self, parameters):
         return self.expect_response_partial('Incorrect format: ', pop=False)
     
-    def _initialized_behaviour_operations_9_exec(self, parameters):
+    def _initialized_behaviour_operations_8_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['NotAModel', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_9_guard(self, parameters):
+    def _initialized_behaviour_operations_8_guard(self, parameters):
         return self.expect_response_partial('Not a model: ', pop=False)
     
-    def _initialized_behaviour_operations_10_exec(self, parameters):
+    def _initialized_behaviour_operations_9_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownAttribute', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_10_guard(self, parameters):
+    def _initialized_behaviour_operations_9_guard(self, parameters):
         return self.expect_response_partial('Attribute not found: ', pop=False)
     
-    def _initialized_behaviour_operations_11_exec(self, parameters):
+    def _initialized_behaviour_operations_10_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['SuperclassAttribute', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_11_guard(self, parameters):
+    def _initialized_behaviour_operations_10_guard(self, parameters):
         return self.expect_response_partial('Attribute not defined here: ', pop=False)
     
-    def _initialized_behaviour_operations_12_exec(self, parameters):
+    def _initialized_behaviour_operations_11_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownLocation', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_12_guard(self, parameters):
+    def _initialized_behaviour_operations_11_guard(self, parameters):
         return self.expect_response_partial('Unknown location: ', pop=False)
     
-    def _initialized_behaviour_operations_13_exec(self, parameters):
+    def _initialized_behaviour_operations_12_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownGroup', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_13_guard(self, parameters):
+    def _initialized_behaviour_operations_12_guard(self, parameters):
         return self.expect_response_partial('Unknown group: ', pop=False)
     
-    def _initialized_behaviour_operations_14_exec(self, parameters):
+    def _initialized_behaviour_operations_13_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownUser', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_14_guard(self, parameters):
+    def _initialized_behaviour_operations_13_guard(self, parameters):
         return self.expect_response_partial('Unknown user: ', pop=False)
     
-    def _initialized_behaviour_operations_15_exec(self, parameters):
+    def _initialized_behaviour_operations_14_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['NotAnAssociation', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_15_guard(self, parameters):
+    def _initialized_behaviour_operations_14_guard(self, parameters):
         return self.expect_response_partial('Not an association: ', pop=False)
     
-    def _initialized_behaviour_operations_16_exec(self, parameters):
+    def _initialized_behaviour_operations_15_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UserExists', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_16_guard(self, parameters):
+    def _initialized_behaviour_operations_15_guard(self, parameters):
         return self.expect_response_partial('User exists: ', pop=False)
     
-    def _initialized_behaviour_operations_17_exec(self, parameters):
+    def _initialized_behaviour_operations_16_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['ModelExists', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_17_guard(self, parameters):
+    def _initialized_behaviour_operations_16_guard(self, parameters):
         return self.expect_response_partial('Model exists: ', pop=False)
     
-    def _initialized_behaviour_operations_18_exec(self, parameters):
+    def _initialized_behaviour_operations_17_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['GroupExists', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_18_guard(self, parameters):
+    def _initialized_behaviour_operations_17_guard(self, parameters):
         return self.expect_response_partial('Group exists: ', pop=False)
     
-    def _initialized_behaviour_operations_19_exec(self, parameters):
+    def _initialized_behaviour_operations_18_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['FolderExists', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_19_guard(self, parameters):
+    def _initialized_behaviour_operations_18_guard(self, parameters):
         return self.expect_response_partial('Folder exists: ', pop=False)
     
-    def _initialized_behaviour_operations_20_exec(self, parameters):
+    def _initialized_behaviour_operations_19_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['AttributeExists', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_20_guard(self, parameters):
+    def _initialized_behaviour_operations_19_guard(self, parameters):
         return self.expect_response_partial('Attribute exists: ', pop=False)
     
-    def _initialized_behaviour_operations_21_exec(self, parameters):
+    def _initialized_behaviour_operations_20_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownM3', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_21_guard(self, parameters):
+    def _initialized_behaviour_operations_20_guard(self, parameters):
         return self.expect_response_partial('Type cannot be typed as formalisms/SimpleClassDiagrams: ', pop=False)
     
-    def _initialized_behaviour_operations_22_exec(self, parameters):
+    def _initialized_behaviour_operations_21_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['ElementExists', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_22_guard(self, parameters):
+    def _initialized_behaviour_operations_21_guard(self, parameters):
         return self.expect_response_partial('Element exists: ', pop=False)
     
-    def _initialized_behaviour_operations_23_exec(self, parameters):
+    def _initialized_behaviour_operations_22_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['ReadPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_23_guard(self, parameters):
+    def _initialized_behaviour_operations_22_guard(self, parameters):
         return self.expect_response_partial('Read permission denied to: ', pop=False)
     
-    def _initialized_behaviour_operations_24_exec(self, parameters):
+    def _initialized_behaviour_operations_23_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['WritePermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_24_guard(self, parameters):
+    def _initialized_behaviour_operations_23_guard(self, parameters):
         return self.expect_response_partial('Write permission denied to: ', pop=False)
     
-    def _initialized_behaviour_operations_25_exec(self, parameters):
+    def _initialized_behaviour_operations_24_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['WritePermissionDenied', self.current_model]))
     
-    def _initialized_behaviour_operations_25_guard(self, parameters):
+    def _initialized_behaviour_operations_24_guard(self, parameters):
         return self.expect_response('Write permission denied', pop=True)
     
-    def _initialized_behaviour_operations_26_exec(self, parameters):
+    def _initialized_behaviour_operations_25_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownM3', 'Model is not a Simple Class Diagrams model and has no notion of defined attributes']))
     
-    def _initialized_behaviour_operations_26_guard(self, parameters):
+    def _initialized_behaviour_operations_25_guard(self, parameters):
         return self.expect_response_partial('Not a SimpleClassDiagrams model!', pop=True)
     
-    def _initialized_behaviour_operations_27_exec(self, parameters):
+    def _initialized_behaviour_operations_26_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['EmptySignature', 'Model transformation activity cannot have an empty signature!']))
     
-    def _initialized_behaviour_operations_27_guard(self, parameters):
+    def _initialized_behaviour_operations_26_guard(self, parameters):
         return self.expect_response_partial('Model transformation needs at least one formalism in its input or output signature!', pop=True)
     
-    def _initialized_behaviour_operations_28_exec(self, parameters):
+    def _initialized_behaviour_operations_27_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['ExecutePermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_28_guard(self, parameters):
+    def _initialized_behaviour_operations_27_guard(self, parameters):
         return self.expect_response_partial('Execute permission denied to: ', pop=False)
     
-    def _initialized_behaviour_operations_29_exec(self, parameters):
+    def _initialized_behaviour_operations_28_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['GroupPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_29_guard(self, parameters):
+    def _initialized_behaviour_operations_28_guard(self, parameters):
         return self.expect_response_partial('Group permission denied to: ', pop=False)
     
-    def _initialized_behaviour_operations_30_exec(self, parameters):
+    def _initialized_behaviour_operations_29_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UserPermissionDenied', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_30_guard(self, parameters):
+    def _initialized_behaviour_operations_29_guard(self, parameters):
         return self.expect_response_partial('User permission denied to: ', pop=False)
     
-    def _initialized_behaviour_operations_31_exec(self, parameters):
+    def _initialized_behaviour_operations_30_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UserNotInGroup', '']))
     
-    def _initialized_behaviour_operations_31_guard(self, parameters):
+    def _initialized_behaviour_operations_30_guard(self, parameters):
         return self.expect_response_partial('User is not a member of the group!', pop=True)
     
-    def _initialized_behaviour_operations_32_exec(self, parameters):
+    def _initialized_behaviour_operations_31_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['AdminPermissionDenied', 'Admin permissions are required for this operation!']))
     
-    def _initialized_behaviour_operations_32_guard(self, parameters):
+    def _initialized_behaviour_operations_31_guard(self, parameters):
         return self.expect_response_partial('Admin permission denied', pop=True)
     
-    def _initialized_behaviour_operations_33_exec(self, parameters):
+    def _initialized_behaviour_operations_32_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['InterfaceMismatch', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_33_guard(self, parameters):
+    def _initialized_behaviour_operations_32_guard(self, parameters):
         return self.expect_response_partial('Incorrect format: ', pop=False)
     
-    def _initialized_behaviour_operations_34_exec(self, parameters):
+    def _initialized_behaviour_operations_33_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownElement', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_34_guard(self, parameters):
+    def _initialized_behaviour_operations_33_guard(self, parameters):
         return self.expect_response_partial('Element not found: ', pop=False)
     
-    def _initialized_behaviour_operations_35_exec(self, parameters):
+    def _initialized_behaviour_operations_34_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownModel', self.split_response(self.responses.pop(0))[0]]))
     
-    def _initialized_behaviour_operations_35_guard(self, parameters):
+    def _initialized_behaviour_operations_34_guard(self, parameters):
         return self.expect_response_partial('Model not found: ', pop=False)
     
-    def _initialized_behaviour_operations_36_exec(self, parameters):
+    def _initialized_behaviour_operations_35_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['UnknownMetamodellingHierarchy', 'Metamodelling hierarchy could not be resolved or automatically inferred: there is no typing relation between your specified model and metamodel (%s)' % self.responses.pop(0)]))
     
-    def _initialized_behaviour_operations_36_guard(self, parameters):
+    def _initialized_behaviour_operations_35_guard(self, parameters):
         return self.expect_response_partial('Conformance hierarchy unknown for: ', pop=False)
     
-    def _initialized_behaviour_operations_37_exec(self, parameters):
+    def _initialized_behaviour_operations_36_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['TypeMismatch', self.responses.pop(0)]))
     
-    def _initialized_behaviour_operations_37_guard(self, parameters):
+    def _initialized_behaviour_operations_36_guard(self, parameters):
         return self.expect_response_partial('Signature mismatch in operation for tag: ', pop=False)
     
-    def _initialized_behaviour_operations_38_exec(self, parameters):
+    def _initialized_behaviour_operations_37_exec(self, parameters):
         self.raiseInternalEvent(Event("exception", None, ['SignatureMismatch', self.responses.pop(0)]))
     
-    def _initialized_behaviour_operations_38_guard(self, parameters):
+    def _initialized_behaviour_operations_37_guard(self, parameters):
         return self.expect_response_partial('Signature mismatch: ', pop=False)
     
-    def _initialized_behaviour_operations_39_exec(self, parameters):
+    def _initialized_behaviour_operations_38_exec(self, parameters):
         print("Unknown Error: " + self.responses[0])
         self.raiseInternalEvent(Event("exception", None, ['UnknownError', 'Error: %s' % self.responses.pop(0)]))
     
-    def _initialized_behaviour_operations_39_guard(self, parameters):
+    def _initialized_behaviour_operations_38_guard(self, parameters):
         return self.expect_response_partial('', pop=False)
     
     def _initialized_behaviour_operations_store_on_scripted_transformation_add_0_exec(self, parameters):