##// END OF EJS Templates
Test fix upload
Test fix upload

File last commit:

r0:b84e1135c2c4
r16:a7d6f530f4cf
Show More
configureExperiments.py
135 lines | 4.7 KiB | text/x-python | PythonLexer
/ source / madpy / scripts / bin / configureExperiments.py
#!PYTHONEXE
"""configureExperiments is a script to allow experiments to be imported from
other Madrigal installations or moved between experiments[0-9]* directories. Verifies both siteId and cgiUrl.
Checks that all three geophysical files are in experiments directory
Replaces the tcl version of the same name
No arguments.
For each non-hidden local experiment, will make the following changes if needed:
1. expTab.txt -> expId: set to new siteId x 10,000,000
2. expTab.txt -> url: set to new url
3. expTab.txt -> siteId: set to new siteId
4. fileTab.txt -> fileId: set to new siteId x 10,000,000
$Id: configureExperiments.py 7045 2019-10-07 19:56:46Z brideout $
"""
import os, os.path, sys
import madrigal.metadata
print('configureExperiments is converting any experiment from a different' + \
' Madrigal site into a local experiment. Will also convert experiments moved into different experiments[0-9]* directories.')
madDB = madrigal.metadata.MadrigalDB()
siteId = madDB.getSiteID()
thisId = siteId*10000000
cgiUrl = madDB.getTopLevelUrl()
cgiUrlTest = os.path.join(cgiUrl, 'madtoc')
# be sure experiments/stage exists and is world-writable
madroot = madDB.getMadroot()
stageDir = os.path.join(madroot, 'experiments/stage')
if not os.access(stageDir, os.R_OK):
os.makedirs(stageDir)
try:
os.chmod(stageDir, 0o777)
except:
pass
hasGeo = False
hasDst = False
hasImf = False
expConvertedNum = 0
# get a list of every Madrigal experiment directory
madExpDirs = madDB.getExpList()
for thisDir in madExpDirs:
# create experiment object
try:
madExpObj = madrigal.metadata.MadrigalExperiment(madDB,
os.path.join(thisDir,
'expTab.txt'))
except:
print('WARNING - error with experiment %s expTab.txt file' % (thisDir))
continue
# if siteId is and cgiUrl is correct, continue
# create list of valid urls
validUrlList = []
startIndex = thisDir.find('/experiments')
if thisDir.find('/experiments/') != -1:
# it is valid to skip experiment part of url
validUrlList.append(cgiUrlTest + thisDir[startIndex+len('/experiments'):])
if thisDir.find('1950/gpi/01jan50') != -1:
hasGeo = True
if thisDir.find('1957/dst/01jan57') != -1:
hasDst = True
if thisDir.find('1963/imf/27nov63') != -1:
hasImf = True
else:
if thisDir.find('1950/gpi/01jan50') != -1:
raise IOError('The experiment 1950/gpi/01jan50 must be located in the experiments directory only!')
if thisDir.find('1957/dst/01jan57') != -1:
raise IOError('The experiment 1957/dst/01jan57 must be located in the experiments directory only!')
if thisDir.find('1963/imf/27nov63') != -1:
raise IOError('The experiment 1963/imf/27nov63 must be located in the experiments directory only!')
validUrlList.append(cgiUrlTest + thisDir[startIndex:])
if madExpObj.getExpSiteIdByPosition(0) == siteId and \
madExpObj.getExpUrlByPosition(0) in validUrlList:
continue
print('Modifying exp %s to be local' % (thisDir))
expConvertedNum += 1
# get baseDir
baseDir = thisDir[len(madroot):]
if baseDir[0] == '/':
baseDir = baseDir[1:]
# modify expTab.txt
madExpObj.setExpIdByPosition(0, thisId)
thisUrl = madExpObj.getExpUrlByPosition(0)
newUrl = os.path.join(cgiUrl, 'madtoc', baseDir)
madExpObj.setExpUrlByPosition(0, newUrl)
madExpObj.setExpSiteIdByPosition(0, siteId)
madExpObj.writeMetadata()
if os.access(os.path.join(thisDir,'fileTab.txt'), os.R_OK):
try:
madFileObj = madrigal.metadata.MadrigalMetaFile(madDB,
os.path.join(thisDir,
'fileTab.txt'))
if madFileObj.getFileCount() == 0:
raise IOError('')
except:
print('WARNING - error with experiment %s fileTab.txt' % (thisDir))
continue
# modify fileTab.txt
madFileObj.setExpIdByPosition(0, thisId)
madFileObj.writeMetadata()
if not hasGeo:
raise IOError('The experiment 1950/gpi/01jan50 not found in the experiments directory!')
if not hasDst:
raise IOError('The experiment 1957/dst/01jan57 not found in the experiments directory!')
if not hasImf:
raise IOError('The experiment 1963/imf/27nov63 not found in the experiments directory!')
if expConvertedNum == 0:
print('No non-local experiments found')
else:
cmd = 'chmod -Rf %s' % (os.path.join(madroot, 'experiments*'))
print('configureExperiments done')