Skip to content
Snippets Groups Projects
Commit 5bff091d authored by sveseli's avatar sveseli
Browse files

add api/cli for assigning user a role with experiment

parent d633c124
No related branches found
No related tags found
No related merge requests found
__version__ = "Development Snapshot" __version__ = "0.1 (2015.06.29)"
...@@ -7,6 +7,7 @@ from dm.common.utility.encoder import Encoder ...@@ -7,6 +7,7 @@ from dm.common.utility.encoder import Encoder
from dm.common.exceptions.dmException import DmException from dm.common.exceptions.dmException import DmException
from dm.common.exceptions.invalidRequest import InvalidRequest from dm.common.exceptions.invalidRequest import InvalidRequest
from dm.common.objects.userInfo import UserInfo from dm.common.objects.userInfo import UserInfo
from dm.common.objects.userExperimentRole import UserExperimentRole
from dsRestApi import DsRestApi from dsRestApi import DsRestApi
class UserRestApi(DsRestApi): class UserRestApi(DsRestApi):
...@@ -36,6 +37,18 @@ class UserRestApi(DsRestApi): ...@@ -36,6 +37,18 @@ class UserRestApi(DsRestApi):
responseData = self.sendSessionRequest(url=url, method='GET') responseData = self.sendSessionRequest(url=url, method='GET')
return UserInfo(responseData) 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. # Testing.
......
#!/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()
...@@ -28,7 +28,7 @@ class ExperimentSessionControllerImpl(DmObjectManager): ...@@ -28,7 +28,7 @@ class ExperimentSessionControllerImpl(DmObjectManager):
return experimentList return experimentList
def getExperimentByName(self, name): def getExperimentByName(self, name):
experiment = self.experimentDbApi.getExperimentByName(name) experiment = self.experimentDbApi.getExperimentWithUsers(name)
ExperimentManager.getInstance().updateExperimentWithStorageDataDirectory(experiment) ExperimentManager.getInstance().updateExperimentWithStorageDataDirectory(experiment)
return experiment return experiment
......
...@@ -24,3 +24,6 @@ class UserInfoSessionControllerImpl(DmObjectManager): ...@@ -24,3 +24,6 @@ class UserInfoSessionControllerImpl(DmObjectManager):
def getUserByUsername(self, username): def getUserByUsername(self, username):
return self.userDbApi.getUserByUsername(username) return self.userDbApi.getUserByUsername(username)
def addUserExperimentRole(self, username, experimentName, roleName):
return self.userDbApi.addUserExperimentRole(username, experimentName, roleName)
...@@ -36,3 +36,16 @@ class UserInfoSessionController(DmSessionController): ...@@ -36,3 +36,16 @@ class UserInfoSessionController(DmSessionController):
self.logger.debug('Returning user info for %s: %s' % (username,response)) self.logger.debug('Returning user info for %s: %s' % (username,response))
return 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
...@@ -46,6 +46,15 @@ class UserRouteDescriptor: ...@@ -46,6 +46,15 @@ class UserRouteDescriptor:
'method' : ['GET'] 'method' : ['GET']
}, },
# Add user experiment role
{
'name' : 'addUserExperimentRole',
'path' : '%s/usersByExperiment/:(username)/:(experimentName)/:(roleName)' % contextRoot,
'controller' : userInfoSessionController,
'action' : 'addUserExperimentRole',
'method' : ['POST']
},
] ]
return routes return routes
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment