changeExpStatus.py
195 lines
| 5.5 KiB
| text/x-python
|
PythonLexer
r0 | #!PYTHONEXE | |||
#$Id: changeExpStatus.py 7045 2019-10-07 19:56:46Z brideout $ | ||||
usage = """ | ||||
changeExpStatus.py is a script used to change the status of an | ||||
existing Madrigal experiment. The following attributes can be changed: | ||||
expUrl | ||||
experiment name | ||||
siteID | ||||
start date | ||||
start time | ||||
end date | ||||
end time | ||||
instrument code | ||||
security (public, private. ignore) | ||||
PI (optional - overrides default for instrument) | ||||
PIEmail (optional - overrides default for instrument) | ||||
Required argument: | ||||
--expDir - full path to experiment directory. Example: | ||||
"/opt/madrigal/experiments/1998/mlh/20jan98" | ||||
Optional arguments - set these to change an experiment attribute: | ||||
--expUrl - must be in form <cgi base>/madtoc/YYYY/<3 letter lower case inst code>/<expDir> or | ||||
<cgi base>/madtoc/experiments[0-9]*/YYYY/<3 letter lower case inst code>/<expDir> | ||||
example: http://www.haystack.mit.edu/cgi-bin/experiments2/madtoc/1997/mlh/03dec97g | ||||
--expName - experiment name. Quotes required if contains spaces. Example: "World Day" | ||||
--siteID - Madrigal siteID of where data will be stored. Error raised if not the siteID | ||||
of the local Madrigal site. Example: 4 | ||||
--startDate - new start date of experiment (UT). In form YYYY-MM-DD. Example: 1998-01-20 | ||||
--startTime - new start time of experiment (UT). In form HH:MM:DD. Example: 12:30:00 | ||||
--endDate - new end date of experiment (UT). In form YYYY-MM-DD. Example: 1998-01-21 | ||||
--endTime - new end time of experiment (UT). In form HH:MM:DD. Example: 23:30:00 | ||||
--inst - new instrument code. Example: 30 | ||||
--security - new security code. Allowed values are 0 for public, 1 for private (limited IP range access) | ||||
-1 for ignore, 2 for archived experiment, 3 for private (limited IP range access) archived | ||||
experiment. | ||||
--PI - set Principal Investigator for this experiment | ||||
--PIEmail - set PI email for this experiment | ||||
""" | ||||
import sys | ||||
import os, os.path | ||||
import getopt | ||||
import traceback | ||||
import datetime | ||||
import madrigal.admin | ||||
# parse command line | ||||
arglist = '' | ||||
longarglist = ['expDir=', | ||||
'expUrl=', | ||||
'expName=', | ||||
'siteID=', | ||||
'startDate=', | ||||
'startTime=', | ||||
'endDate=', | ||||
'endTime=', | ||||
'inst=', | ||||
'security=', | ||||
'PI=', | ||||
'PIEmail='] | ||||
optlist, args = getopt.getopt(sys.argv[1:], arglist, longarglist) | ||||
# set default values | ||||
expDir = None | ||||
expUrl = None | ||||
expName = None | ||||
siteID = None | ||||
startDate = None | ||||
startTime = None | ||||
endDate = None | ||||
endTime = None | ||||
inst = None | ||||
security = None | ||||
PI = None | ||||
PIEmail = None | ||||
for opt in optlist: | ||||
if opt[0] == '--expDir': | ||||
expDir = opt[1] | ||||
elif opt[0] == '--expUrl': | ||||
expUrl = opt[1] | ||||
elif opt[0] == '--expName': | ||||
expName = opt[1] | ||||
elif opt[0] == '--siteID': | ||||
siteID = int(opt[1]) | ||||
elif opt[0] == '--startDate': | ||||
startDate = opt[1] | ||||
elif opt[0] == '--startTime': | ||||
startTime = opt[1] | ||||
elif opt[0] == '--endDate': | ||||
endDate = opt[1] | ||||
elif opt[0] == '--endTime': | ||||
endTime = opt[1] | ||||
elif opt[0] == '--inst': | ||||
inst = int(opt[1]) | ||||
elif opt[0] == '--security': | ||||
security = opt[1] | ||||
elif opt[0] == '--PI': | ||||
PI = opt[1] | ||||
elif opt[0] == '--PIEmail': | ||||
PIEmail = opt[1] | ||||
else: | ||||
print(usage) | ||||
raise ValueError('Illegal option %s\n%s' % (opt[0], opt[1])) | ||||
# check that all required arguments passed in | ||||
if expDir == None: | ||||
print('--expDir argument required - must be full path to experiment directory') | ||||
print(usage) | ||||
sys.exit(0) | ||||
if expUrl == None and expName == None and siteID == None and \ | ||||
startDate == None and startTime == None and endDate == None and \ | ||||
endTime == None and inst == None and security == None and \ | ||||
PI == None and PIEmail == None: | ||||
print('No experiment attributes are being changed') | ||||
print(usage) | ||||
sys.exit(0) | ||||
# create startDatetime | ||||
if startDate == None and startTime == None: | ||||
startDatetime = None | ||||
else: | ||||
if startDate == None or startTime == None: | ||||
raise ValueError('Both startDate and startTime must be set if either set') | ||||
items = startDate.split('-') | ||||
year = int(items[0]) | ||||
month = int(items[1]) | ||||
day = int(items[2]) | ||||
items = startTime.split(':') | ||||
hour = int(items[0]) | ||||
minute = int(items[1]) | ||||
second = int(items[2]) | ||||
startDatetime = datetime.datetime(year, month, day, hour, minute, second) | ||||
# create endDatetime | ||||
if endDate == None and endTime == None: | ||||
endDatetime = None | ||||
else: | ||||
if endDate == None or endTime == None: | ||||
raise ValueError('Both endDate and endTime must be set if either set') | ||||
items = endDate.split('-') | ||||
year = int(items[0]) | ||||
month = int(items[1]) | ||||
day = int(items[2]) | ||||
items = endTime.split(':') | ||||
hour = int(items[0]) | ||||
minute = int(items[1]) | ||||
second = int(items[2]) | ||||
endDatetime = datetime.datetime(year, month, day, hour, minute, second) | ||||
adminObj = madrigal.admin.MadrigalDBAdmin() | ||||
adminObj.changeExpStatus(expDir, | ||||
expUrl, | ||||
expName, | ||||
siteID, | ||||
startDatetime, | ||||
endDatetime, | ||||
inst, | ||||
security, | ||||
PI, | ||||
PIEmail) | ||||
print('Status of experiment %s changed in local metadata - run updateMaster to register' % (expDir)) | ||||