diff --git a/src/python/dm/__init__.py b/src/python/dm/__init__.py index bdbb0843b9f02b7cb5042f7899110655e2a03b60..703bf5768c5ea40c1ec7220127146b5b7cabddf9 100644 --- a/src/python/dm/__init__.py +++ b/src/python/dm/__init__.py @@ -1 +1 @@ -__version__ = "Development Snapshot" +__version__ = "0.1 (2015.06.29)" diff --git a/src/python/dm/ds_web_service/api/userRestApi.py b/src/python/dm/ds_web_service/api/userRestApi.py index ee43ab2169cc0a211545973d3915d5a2e1d07b86..901182c1b9d933be6b2a42c3b53de5a7bf672303 100755 --- a/src/python/dm/ds_web_service/api/userRestApi.py +++ b/src/python/dm/ds_web_service/api/userRestApi.py @@ -7,6 +7,7 @@ from dm.common.utility.encoder import Encoder from dm.common.exceptions.dmException import DmException from dm.common.exceptions.invalidRequest import InvalidRequest from dm.common.objects.userInfo import UserInfo +from dm.common.objects.userExperimentRole import UserExperimentRole from dsRestApi import DsRestApi class UserRestApi(DsRestApi): @@ -36,6 +37,18 @@ class UserRestApi(DsRestApi): responseData = self.sendSessionRequest(url=url, method='GET') return UserInfo(responseData) + @DsRestApi.execute + def addUserExperimentRole(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='POST') + return UserExperimentRole(responseData) + ####################################################################### # Testing. diff --git a/src/python/dm/ds_web_service/cli/addUserExperimentRoleCli.py b/src/python/dm/ds_web_service/cli/addUserExperimentRoleCli.py new file mode 100755 index 0000000000000000000000000000000000000000..ff044163712828ffa602fd217e4164a6cdd39d37 --- /dev/null +++ b/src/python/dm/ds_web_service/cli/addUserExperimentRoleCli.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 AddUserExperimentRoleCli(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-add-user-experiment-role --username=USERNAME --experiment=EXPERIMENTNAME + --role=ROLENAME + +Description: + Assigns experiment role to the given user. + """) + self.checkArgs() + api = UserRestApi(self.getLoginUsername(), self.getLoginPassword(), self.getServiceHost(), self.getServicePort(), self.getServiceProtocol()) + userExperimentRole = api.addUserExperimentRole(self.getUsername(), self.getExperimentName(), self.getRoleName()) + print userExperimentRole.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat()) + +####################################################################### +# Run command. +if __name__ == '__main__': + cli = AddUserExperimentRoleCli() + cli.run() + diff --git a/src/python/dm/ds_web_service/service/impl/experimentSessionControllerImpl.py b/src/python/dm/ds_web_service/service/impl/experimentSessionControllerImpl.py index 426f26117b9e7f9b19986f94ec054230ebefe76a..cc060092bba327f2a36c7b75222aa5cce9b1d0a6 100755 --- a/src/python/dm/ds_web_service/service/impl/experimentSessionControllerImpl.py +++ b/src/python/dm/ds_web_service/service/impl/experimentSessionControllerImpl.py @@ -28,7 +28,7 @@ class ExperimentSessionControllerImpl(DmObjectManager): return experimentList def getExperimentByName(self, name): - experiment = self.experimentDbApi.getExperimentByName(name) + experiment = self.experimentDbApi.getExperimentWithUsers(name) ExperimentManager.getInstance().updateExperimentWithStorageDataDirectory(experiment) return experiment 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 2fbeb83a810f0b7badcf11e7a3306efe201c0faa..53baa1ed8f8e48f653f340fff3588434d015668a 100755 --- a/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py +++ b/src/python/dm/ds_web_service/service/impl/userInfoSessionControllerImpl.py @@ -24,3 +24,6 @@ class UserInfoSessionControllerImpl(DmObjectManager): def getUserByUsername(self, username): return self.userDbApi.getUserByUsername(username) + def addUserExperimentRole(self, username, experimentName, roleName): + return self.userDbApi.addUserExperimentRole(username, experimentName, roleName) + diff --git a/src/python/dm/ds_web_service/service/userInfoSessionController.py b/src/python/dm/ds_web_service/service/userInfoSessionController.py index 14e1d5e01c90799263975fcea8dbedbdb58a5202..2b9849a0472ba8bc49977be7a676a8cc0bc9e226 100755 --- a/src/python/dm/ds_web_service/service/userInfoSessionController.py +++ b/src/python/dm/ds_web_service/service/userInfoSessionController.py @@ -36,3 +36,16 @@ class UserInfoSessionController(DmSessionController): self.logger.debug('Returning user info for %s: %s' % (username,response)) return response + @cherrypy.expose + @DmSessionController.require(DmSessionController.isAdministrator()) + @DmSessionController.execute + def addUserExperimentRole(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.addUserExperimentRole(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 651727f177c5f50508fa448845470abe562d9713..eac2dbbdc6da0a0c6154468500a7414b954772d3 100755 --- a/src/python/dm/ds_web_service/service/userRouteDescriptor.py +++ b/src/python/dm/ds_web_service/service/userRouteDescriptor.py @@ -46,6 +46,15 @@ class UserRouteDescriptor: 'method' : ['GET'] }, + # Add user experiment role + { + 'name' : 'addUserExperimentRole', + 'path' : '%s/usersByExperiment/:(username)/:(experimentName)/:(roleName)' % contextRoot, + 'controller' : userInfoSessionController, + 'action' : 'addUserExperimentRole', + 'method' : ['POST'] + }, + ] return routes