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
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.
......
#!/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):
return experimentList
def getExperimentByName(self, name):
experiment = self.experimentDbApi.getExperimentByName(name)
experiment = self.experimentDbApi.getExperimentWithUsers(name)
ExperimentManager.getInstance().updateExperimentWithStorageDataDirectory(experiment)
return experiment
......
......@@ -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)
......@@ -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
......@@ -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
......
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