configureExperiments.py
135 lines
| 4.7 KiB
| text/x-python
|
PythonLexer
r0 | #!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') | ||||