Source
import os
import time
import copy
from casatools import agentflagger
from casatasks import casalog
def flagmanager(
vis=None,
mode=None,
versionname=None,
oldname=None,
comment=None,
merge=None,
):
casalog.origin('flagmanager')
aflocal = agentflagger()
try:
if type(vis) == str and os.path.exists(vis):
if mode != 'rename':
aflocal.open(vis)
else:
raise ValueError('Visibility data set not found - please verify the name')
if mode == 'list':
flist = []
flist = aflocal.getflagversionlist()
# Get the name of the MS and properly add it to the dictionary
if "\nMS : " in flist[0]:
MS = flist.pop(0)
MS = MS.strip("\nMS : ")
flist.remove('main : working copy in main table')
fdict = dict(enumerate(flist))
fversionsdict = copy.deepcopy(fdict)
for k in fdict:
singleversion = {}
# split each flagversion into versionname and comment
# The below partitioning is a big fragile. If the string contains
# other entries of the character ':', the spliting will fail
(versionname, middle, comment) = fdict[k].partition(':')
singleversion['name'] = versionname.rstrip()
singleversion['comment'] = comment.lstrip()
fversionsdict[k] = singleversion
fversionsdict['MS'] = MS
return fversionsdict
elif mode == 'save':
if versionname == '':
raise ValueError("Illegal empty versionname: ''")
newdir = vis+'.flagversions/flags.'+versionname
if os.path.exists(newdir):
tt = int(time.time())
tmpname = versionname+'.old.'+str(tt)
casalog.post("Version name \'%s\' already exist. Will rename it to %s"%(versionname,tmpname), 'WARN')
tmpdir = newdir+'.old.'+str(tt)
# Rename existing versionname to old name
os.rename(newdir, tmpdir)