diff --git a/bin/dm-delete-user-experiment-role b/bin/dm-delete-user-experiment-role new file mode 100755 index 0000000000000000000000000000000000000000..43b771d47bfd2bfca810e316748f560b27e2383b --- /dev/null +++ b/bin/dm-delete-user-experiment-role @@ -0,0 +1,17 @@ +#!/bin/sh + +# Run command + +if [ -z $DM_ROOT_DIR ]; then + cd `dirname $0` && myDir=`pwd` + setupFile=$myDir/../setup.sh + if [ ! -f $setupFile ]; then + echo "Cannot find setup file: $setupFile" + exit 1 + fi + source $setupFile > /dev/null +fi + +$DM_ROOT_DIR/src/python/dm/ds_web_service/cli/deleteUserExperimentRoleCli.py $@ + + diff --git a/bin/dm-update-experiment b/bin/dm-update-experiment new file mode 100755 index 0000000000000000000000000000000000000000..787567b44a194a8b3f9c1c794ccb22b1b7e06216 --- /dev/null +++ b/bin/dm-update-experiment @@ -0,0 +1,17 @@ +#!/bin/sh + +# Run command + +if [ -z $DM_ROOT_DIR ]; then + cd `dirname $0` && myDir=`pwd` + setupFile=$myDir/../setup.sh + if [ ! -f $setupFile ]; then + echo "Cannot find setup file: $setupFile" + exit 1 + fi + source $setupFile > /dev/null +fi + +$DM_ROOT_DIR/src/python/dm/ds_web_service/cli/updateExperimentCli.py $@ + + diff --git a/src/python/dm/ds_web_service/api/userRestApi.py b/src/python/dm/ds_web_service/api/userRestApi.py index 901182c1b9d933be6b2a42c3b53de5a7bf672303..95dccf5a56a90da0f2be0ad7f1330cff7f4a458c 100755 --- a/src/python/dm/ds_web_service/api/userRestApi.py +++ b/src/python/dm/ds_web_service/api/userRestApi.py @@ -49,6 +49,18 @@ class UserRestApi(DsRestApi): responseData = self.sendSessionRequest(url=url, method='POST') return UserExperimentRole(responseData) + @DsRestApi.execute + def deleteUserExperimentRole(self, username, experimentName, roleName): + if not username: + raise InvalidRequest('Username must be provided.') + if not experimentName: + raise InvalidRequest('Experiment name must be provided.') + if not roleName: + raise InvalidRequest('Role name must be provided.') + url = '%s/usersByExperiment/%s/%s/%s' % (self.getContextRoot(), username, experimentName, roleName) + responseData = self.sendSessionRequest(url=url, method='DELETE') + return UserExperimentRole(responseData) + ####################################################################### # Testing. diff --git a/src/python/dm/ds_web_service/cli/deleteUserExperimentRoleCli.py b/src/python/dm/ds_web_service/cli/deleteUserExperimentRoleCli.py new file mode 100755 index 0000000000000000000000000000000000000000..520984522a87f7372117975b9b20d088e0435957 --- /dev/null +++ b/src/python/dm/ds_web_service/cli/deleteUserExperimentRoleCli.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +from dm.common.exceptions.invalidRequest import InvalidRequest +from dm.ds_web_service.api.userRestApi import UserRestApi +from dsWebServiceSessionCli import DsWebServiceSessionCli + +class DeleteUserExperimentRoleCli(DsWebServiceSessionCli): + def __init__(self): + DsWebServiceSessionCli.__init__(self) + self.addOption('', '--username', dest='username', help='User username.') + self.addOption('', '--experiment', dest='experimentName', help='Experiment name.') + self.addOption('', '--role', dest='roleName', help='Role name.') + + def checkArgs(self): + if not self.options.username: + raise InvalidRequest('Username must be provided.') + if not self.options.experimentName: + raise InvalidRequest('Experiment name must be provided.') + if not self.options.roleName: + raise InvalidRequest('Role name must be provided.') + + def getUsername(self): + return self.options.username + + def getExperimentName(self): + return self.options.experimentName + + def getRoleName(self): + return self.options.roleName + + def runCommand(self): + self.parseArgs(usage=""" + dm-delete-user-experiment-role --username=USERNAME + --experiment=EXPERIMENTNAME --role=ROLENAME + +Description: + Deletes experiment role from the given user. + """) + self.checkArgs() + api = UserRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol()) + userExperimentRole = api.deleteUserExperimentRole(self.getUsername(), self.getExperimentName(), self.getRoleName()) + #print 'Deleted User Experiment Role:\n\t%s' % userExperimentRole.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat()) + +####################################################################### +# Run command. +if __name__ == '__main__': + cli = DeleteUserExperimentRoleCli() + cli.run() + diff --git a/src/python/dm/ds_web_service/service/impl/experimentManager.py b/src/python/dm/ds_web_service/service/impl/experimentManager.py index 55ada3808e3fbb2b979a95c3e0c2ee2e9b2da46e..3dbeda7efb0c8bc7c05c8512459bb6640cefac8d 100755 --- a/src/python/dm/ds_web_service/service/impl/experimentManager.py +++ b/src/python/dm/ds_web_service/service/impl/experimentManager.py @@ -83,6 +83,13 @@ class ExperimentManager(Singleton): if os.path.exists(storageDirectory): self.platformUtility.addUserToGroup(username, experimentName) + def deleteUserFromGroup(self, username, experimentName): + experiment = self.experimentDbApi.getExperimentWithUsers(experimentName) + storageDirectory = self.__getExperimentStorageDataDirectory(experiment) + if os.path.exists(storageDirectory): + experimentUsers = experiment.get('experimentUsernameList', []) + self.platformUtility.setGroupUsers(experimentName, experimentUsers) + def createExperimentGroup(self, experiment): experimentName = experiment.get('name') storageDirectory = experiment.get('storageDirectory') @@ -98,8 +105,6 @@ class ExperimentManager(Singleton): experimentUsers = experiment.get('experimentUsernameList', []) self.logger.debug('Found experiment users: %s', experimentUsers) self.platformUtility.setGroupUsers(experimentName, experimentUsers) - #for username in experimentUsers: - # self.platformUtility.addUserToGroup(username, experimentName) def updateExperimentGroupUsers(self, experiment): experimentName = experiment.get('name') diff --git a/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py b/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py index efcb86765f2407ff0fe80aea446533d74e728682..1cc0aec63bd1eb96a6e29cecca39cb911b6fe542 100755 --- a/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py +++ b/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py @@ -30,3 +30,8 @@ class UserInfoSessionControllerImpl(DmObjectManager): ExperimentManager.getInstance().addUserToGroup(username, experimentName) return userInfo + def deleteUserExperimentRole(self, username, experimentName, roleName): + userInfo = self.userDbApi.deleteUserExperimentRole(username, experimentName, roleName) + ExperimentManager.getInstance().deleteUserFromGroup(username, experimentName) + return userInfo + diff --git a/src/python/dm/ds_web_service/service/userInfoSessionController.py b/src/python/dm/ds_web_service/service/userInfoSessionController.py index 2b9849a0472ba8bc49977be7a676a8cc0bc9e226..533c20801bfe186833f9a5387fba4a143b402168 100755 --- a/src/python/dm/ds_web_service/service/userInfoSessionController.py +++ b/src/python/dm/ds_web_service/service/userInfoSessionController.py @@ -49,3 +49,16 @@ class UserInfoSessionController(DmSessionController): response = self.userInfoSessionControllerImpl.addUserExperimentRole(username, experimentName, roleName).getFullJsonRep() return response + @cherrypy.expose + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute + def deleteUserExperimentRole(self, username, experimentName, roleName, **kwargs): + if not username: + raise InvalidRequest('Invalid username provided.') + if not experimentName: + raise InvalidRequest('Invalid experiment name provided.') + if not roleName: + raise InvalidRequest('Invalid role name provided.') + response = self.userInfoSessionControllerImpl.deleteUserExperimentRole(username, experimentName, roleName).getFullJsonRep() + return response + diff --git a/src/python/dm/ds_web_service/service/userRouteDescriptor.py b/src/python/dm/ds_web_service/service/userRouteDescriptor.py index eac2dbbdc6da0a0c6154468500a7414b954772d3..cb1e7595fc925ed5c97d41787ffebc90f9188152 100755 --- a/src/python/dm/ds_web_service/service/userRouteDescriptor.py +++ b/src/python/dm/ds_web_service/service/userRouteDescriptor.py @@ -55,6 +55,14 @@ class UserRouteDescriptor: 'method' : ['POST'] }, + # Delete user experiment role + { + 'name' : 'deleteUserExperimentRole', + 'path' : '%s/usersByExperiment/:(username)/:(experimentName)/:(roleName)' % contextRoot, + 'controller' : userInfoSessionController, + 'action' : 'deleteUserExperimentRole', + 'method' : ['DELETE'] + }, ] return routes