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
class ApsBssApi(DmApi):
''' 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.
:param beamlineName: beamline name (if not provided, environment variable DM_BEAMLINE_NAME must be set)
: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
: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
: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):
'''
DmApi.__init__(self)
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:
try:
# Assume form <username>|<password>
......@@ -60,9 +64,9 @@ class ApsBssApi(DmApi):
:raises DmException: for any error
>> runs = api.listRuns()
>> for run in runs:
>> print run['name']
>>> runs = api.listRuns()
>>> for run in runs:
>>> print run['name']
'''
return self.bssClient.listRuns()
......@@ -75,7 +79,7 @@ class ApsBssApi(DmApi):
:raises DmException: for any error
>> run = api.getCurrentRun()
>>> run = api.getCurrentRun()
'''
return self.bssClient.getCurrentRun()
......@@ -91,9 +95,9 @@ class ApsBssApi(DmApi):
:raises DmException: for any error
>> proposals = api.listBeamlineProposals()
>> for proposal in proposals:
>> print proposal['title']
>>> proposals = api.listBeamlineProposals()
>>> for proposal in proposals:
>>> print proposal['title']
'''
if not runName:
runName = self.getCurrentRun()['name']
......@@ -116,9 +120,9 @@ class ApsBssApi(DmApi):
:raises DmException: for any other error
>> proposal = api.getBeamlineProposal(42096)
>> for experimenter in proposal['experimenters']:
>> print experimenter['badge'], experimenter['lastName']
>>> proposal = api.getBeamlineProposal(42096)
>>> for experimenter in proposal['experimenters']:
>>> print experimenter['badge'], experimenter['lastName']
'''
if not runName:
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