##// END OF EJS Templates
Add BASE_URL in settings to work with proxys
Add BASE_URL in settings to work with proxys

File last commit:

r0:b84e1135c2c4
r18:5a8055e18e7b
Show More
updateExpTimes.py
159 lines | 5.9 KiB | text/x-python | PythonLexer
#!PYTHONEXE
#$Id: updateExpTimes.py 7046 2019-10-07 19:57:14Z brideout $
usage = """
updateExpTimes.py [experiment_directory]
updateExpTimes.py is a script that updates experiment start and end times in the metadata
file expTab.txt based on data found in the default files. If optional argument
experiment_directory given, then it will only update experiments found in that directory.
Default is to update the entire database.
"""
import sys
import os, os.path
import traceback
import datetime
import madrigal.metadata
import madrigal.data
import madrigal.admin
madDB = madrigal.metadata.MadrigalDB()
expRoot = os.path.join(madDB.getMadroot(), 'experiments')
if len(sys.argv) == 2:
expDir = sys.argv[1]
if not os.access(expDir, os.R_OK):
print('Unable to access directory %s' % (expDir))
print(usage)
if expDir.find(expRoot) == -1:
print('Specified directory must be under root directory %s, not %s' % (expRoot, expDir))
print(usage)
elif len(sys.argv) == 1:
expDir = None
else:
print('Too many arguments: %s' % (str(sys.argv[1:])))
print(usage)
# loop through every experiment
madExpObj = madrigal.metadata.MadrigalExperiment(madDB)
madFileObj = madrigal.metadata.MadrigalMetaFile(madDB)
expModifiedCount = 0
expSkippedCount = 0
for i in range(madExpObj.getExpCount()):
thisExpDir = madExpObj.getExpDirByPosition(i)
# check whether we need to skip it
if expDir != None:
if thisExpDir.find(expDir) == -1:
continue
expId = madExpObj.getExpIdByPosition(i)
sy, sm, sd, sh, sM, ss, v1, v2, v3 = madExpObj.getExpStartDateTimeByPosition(i)
expStartTime = datetime.datetime(sy, sm, sd, sh, sM, ss)
ey, em, ed, eh, eM, es, v1, v2, v3 = madExpObj.getExpEndDateTimeByPosition(i)
expEndTime = datetime.datetime(ey, em, ed, eh, eM, es)
# loop through every default or realtime experiment file
startTime = None
endTime = None
# use default if available
startTimeDefault = None
endTimeDefault = None
for j in range(madFileObj.getFileCount()):
if madFileObj.getExpIdByPosition(j) != expId:
continue
thisCategory = madFileObj.getCategoryByPosition(j)
if thisCategory not in (1, 4):
continue
filename = os.path.join(thisExpDir, madFileObj.getFilenameByPosition(j))
# get start and end time of file
try:
fileObj = madrigal.data.MadrigalFile(filename, madDB)
except:
print('Corrupt file %s - skipping' % (filename))
continue
sy, sm, sd, sh, sM, ss = fileObj.getEarliestTime()
ey, em, ed, eh, eM, es = fileObj.getLatestTime()
thisStartTime = datetime.datetime(sy, sm, sd, sh, sM, ss)
thisEndTime = datetime.datetime(ey, em, ed, eh, eM, es)
if startTime == None:
startTime = thisStartTime
endTime = thisEndTime
if thisCategory == 1:
startTimeDefault = thisStartTime
endTimeDefault = thisEndTime
continue
if thisStartTime < startTime:
startTime = thisStartTime
if thisEndTime > endTime:
endTime = thisEndTime
if thisCategory == 1:
if not startTimeDefault:
startTimeDefault = thisStartTime
endTimeDefault = thisEndTime
continue
if thisStartTime < startTimeDefault:
startTimeDefault = thisStartTime
if thisEndTime > endTimeDefault:
endTimeDefault = thisEndTime
if startTime == None:
print('No default or realtime files found in experiment %s - not setting times' % (thisExpDir))
expSkippedCount += 1
continue
# see if dates need resetting
if startTimeDefault != None:
if startTimeDefault != expStartTime or endTimeDefault != expEndTime:
print('Resetting dates from %s - %s to %s - %s in exp %s' % (expStartTime.strftime('%Y-%m-%d %H:%M:%S'),
expEndTime.strftime('%Y-%m-%d %H:%M:%S'),
startTimeDefault.strftime('%Y-%m-%d %H:%M:%S'),
endTimeDefault.strftime('%Y-%m-%d %H:%M:%S'),
thisExpDir))
expInfo = madrigal.metadata.MadrigalExperiment(madDB, os.path.join(thisExpDir, 'expTab.txt'))
expInfo.setExpStartDateTimeByPosition(startTimeDefault)
expInfo.setExpEndDateTimeByPosition(endTimeDefault)
expInfo.writeMetadata()
expModifiedCount += 1
else:
if startTime != expStartTime or endTime != expEndTime:
print('Resetting dates from %s - %s to %s - %s in exp %s' % (expStartTime.strftime('%Y-%m-%d %H:%M:%S'),
expEndTime.strftime('%Y-%m-%d %H:%M:%S'),
startTime.strftime('%Y-%m-%d %H:%M:%S'),
endTime.strftime('%Y-%m-%d %H:%M:%S'),
thisExpDir))
expInfo = madrigal.metadata.MadrigalExperiment(madDB, os.path.join(thisExpDir, 'expTab.txt'))
expInfo.setExpStartDateTimeByPosition(startTime)
expInfo.setExpEndDateTimeByPosition(endTime)
expInfo.writeMetadata()
expModifiedCount += 1
print('%i experiments modified, %i experiments skipped due to no default or realtime files' % (expModifiedCount,
expSkippedCount))