Skip to content
Snippets Groups Projects
Commit 79d5f059 authored by sveseli's avatar sveseli
Browse files

adding CLIs for BSS integration

parent 45222f1c
No related branches found
No related tags found
No related merge requests found
#!/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/aps_bss/cli/getProposalCli.py $@
#!/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/aps_bss/cli/listProposalsCli.py $@
#!/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/aps_bss/cli/listRunsCli.py $@
...@@ -7,17 +7,20 @@ from dm.aps_bss.impl.bssClient import BssClient ...@@ -7,17 +7,20 @@ from dm.aps_bss.impl.bssClient import BssClient
class ApsBssApi(DmApi): class ApsBssApi(DmApi):
''' Data Management API for APS Beamline Scheduling System. ''' ''' Data Management API for APS Beamline Scheduling System. '''
def __init__(self, beamlineName=None, username=None, password=None): def __init__(self, beamlineName=None, username=None, password=None, loginFile=None):
''' '''
Constructor. Constructor.
:param beamlineName: beamline name (if not provided, environment variable DM_BEAMLINE_NAME must be set) :param beamlineName: beamline name (if not provided, environment variable DM_BEAMLINE_NAME must be set)
:type beamlineName: str :type beamlineName: str
:param username: BSS username (if not provided, environment variable DM_BSS_LOGIN_FILE must be set) :param username: BSS username (if not provided, loginFile must be specified, or environment variable DM_BSS_LOGIN_FILE must be set)
:type username: str :type username: str
:param password: BSS password (if not provided, environment variable DM_BSS_LOGIN_FILE must be set) :param password: BSS password (if not provided, loginFile must be specified, environment variable DM_BSS_LOGIN_FILE must be set)
:type password: str
:param loginFile: BSS login file (not used if username/password are provided; it can be replaced by environment variable DM_BSS_LOGIN_FILE)
:type password: str :type password: str
:raises ConfigurationError: in case beamline name or username/password are not provided, and corresponding environment variables are not set :raises ConfigurationError: in case beamline name or username/password are not provided, and corresponding environment variables are not set
...@@ -30,7 +33,8 @@ class ApsBssApi(DmApi): ...@@ -30,7 +33,8 @@ class ApsBssApi(DmApi):
''' '''
DmApi.__init__(self) DmApi.__init__(self)
if not username or not password: if not username or not password:
loginFile = os.environ.get('DM_BSS_LOGIN_FILE') if not loginFile:
loginFile = os.environ.get('DM_BSS_LOGIN_FILE')
if loginFile: if loginFile:
try: try:
# Assume form <username>|<password> # Assume form <username>|<password>
...@@ -60,9 +64,9 @@ class ApsBssApi(DmApi): ...@@ -60,9 +64,9 @@ class ApsBssApi(DmApi):
:raises DmException: for any error :raises DmException: for any error
>> runs = api.listRuns() >>> runs = api.listRuns()
>> for run in runs: >>> for run in runs:
>> print run['name'] >>> print run['name']
''' '''
return self.bssClient.listRuns() return self.bssClient.listRuns()
...@@ -75,7 +79,7 @@ class ApsBssApi(DmApi): ...@@ -75,7 +79,7 @@ class ApsBssApi(DmApi):
:raises DmException: for any error :raises DmException: for any error
>> run = api.getCurrentRun() >>> run = api.getCurrentRun()
''' '''
return self.bssClient.getCurrentRun() return self.bssClient.getCurrentRun()
...@@ -91,9 +95,9 @@ class ApsBssApi(DmApi): ...@@ -91,9 +95,9 @@ class ApsBssApi(DmApi):
:raises DmException: for any error :raises DmException: for any error
>> proposals = api.listBeamlineProposals() >>> proposals = api.listBeamlineProposals()
>> for proposal in proposals: >>> for proposal in proposals:
>> print proposal['title'] >>> print proposal['title']
''' '''
if not runName: if not runName:
runName = self.getCurrentRun()['name'] runName = self.getCurrentRun()['name']
...@@ -116,9 +120,9 @@ class ApsBssApi(DmApi): ...@@ -116,9 +120,9 @@ class ApsBssApi(DmApi):
:raises DmException: for any other error :raises DmException: for any other error
>> proposal = api.getBeamlineProposal(42096) >>> proposal = api.getBeamlineProposal(42096)
>> for experimenter in proposal['experimenters']: >>> for experimenter in proposal['experimenters']:
>> print experimenter['badge'], experimenter['lastName'] >>> print experimenter['badge'], experimenter['lastName']
''' '''
if not runName: if not runName:
runName = self.getCurrentRun()['name'] runName = self.getCurrentRun()['name']
......
#!/usr/bin/env python
from dm.common.exceptions.invalidRequest import InvalidRequest
from dm.common.cli.dmCli import DmCli
from dm.aps_bss.api.apsBssApi import ApsBssApi
class GetProposalCli(DmCli):
def __init__(self):
DmCli.__init__(self)
self.addOption('', '--id', dest='proposalId', help='Proposal id.')
self.addOption('', '--run', dest='runName', help='Run name. If not provided, current run will be used.')
self.addOption('', '--login-file', dest='loginFile', help='BSS login file. It may be provided via environment variable DM_BSS_LOGIN_FILE.')
def checkArgs(self):
if not self.options.proposalId:
raise InvalidRequest('Missing proposal id.')
def runCommand(self):
self.parseArgs(usage="""
dm-get-proposal --id=PROPOSALID
[--run=RUNNAME]
[--login-file=LOGINFILE]
Description:
Retrieves beamline proposal for the given id.
""")
self.checkArgs()
proposalId = int(self.options.proposalId)
api = ApsBssApi(loginFile=self.options.loginFile)
proposal = api.getBeamlineProposal(proposalId=proposalId, runName=self.options.runName)
print proposal.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = GetProposalCli()
cli.run()
#!/usr/bin/env python
from dm.common.cli.dmCli import DmCli
from dm.aps_bss.api.apsBssApi import ApsBssApi
class ListProposalsCli(DmCli):
def __init__(self):
DmCli.__init__(self)
self.addOption('', '--run', dest='runName', help='Run name. If not provided, current run will be used.')
self.addOption('', '--login-file', dest='loginFile', help='BSS login file. It may be provided via environment variable DM_BSS_LOGIN_FILE.')
def checkArgs(self):
pass
def runCommand(self):
self.parseArgs(usage="""
dm-list-proposals
[--run=RUNNAME]
[--login-file=LOGINFILE]
Description:
Retrieves list of beamline proposals for the given run.
""")
self.checkArgs()
api = ApsBssApi(loginFile=self.options.loginFile)
proposals = api.listBeamlineProposals(runName=self.options.runName)
for proposal in proposals:
print proposal.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = ListProposalsCli()
cli.run()
#!/usr/bin/env python
from dm.common.cli.dmCli import DmCli
from dm.aps_bss.api.apsBssApi import ApsBssApi
class ListRunsCli(DmCli):
def __init__(self):
DmCli.__init__(self)
self.addOption('', '--login-file', dest='loginFile', help='BSS login file. It may be provided via environment variable DM_BSS_LOGIN_FILE.')
def checkArgs(self):
pass
def runCommand(self):
self.parseArgs(usage="""
dm-list-runs [--login-file=LOGINFILE]
Description:
Retrieves list of available runs.
""")
self.checkArgs()
api = ApsBssApi(loginFile=self.options.loginFile)
runs = api.listRuns()
for run in runs:
print run.getDisplayString(self.getDisplayKeys(), self.getDisplayFormat())
#######################################################################
# Run command.
if __name__ == '__main__':
cli = ListRunsCli()
cli.run()
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