"""handle riesling frontend's '-c config' option
PLI_SOCKET
= 'pli-socket'
TYPE_NIAGARA2
= 'niagara2'
TYPE_SYS_CONFIG
= 'sys_config'
"""handle -c config option
# data[objType][objId][dataType]
# object[objId] = data[objType][objId]
#buffer = [ '-----ReadConfigDiag.py-----\n' ]
klist1
= self
.data
.keys()
#for tkey in self.data.keys():
klist2
= self
.data
[tkey
].keys()
#for okey in self.data[tkey].keys():
buffer.append('%s %s %s %s {\n' % (OBJECT
, okey
, TYPE
, tkey
))
klist3
= self
.data
[tkey
][okey
].keys()
buffer.append('\t%s : %s\n' % (ikey
, self
.data
[tkey
][okey
][ikey
]))
def readConfig (self
, fname
):
self
.fd
= open(fname
, 'r')
line
= self
.fd
.readline()
if line
.startswith(OBJECT
):
self
.data
[OTHER
].append(line
)
line
= self
.fd
.readline()
except IOError, (errno
, strerror
):
print "readConfig : (%s): %s %s" % (errno
, strerror
,fname
)
def readObject (self
, line
):
"""read an OBJECT description of format like:
OBJECT th00 TYPE niagara2 {
if (not tokens
[0] == OBJECT
) or (not tokens
[2] == TYPE
):
raise RuntimeError, 'ERROR: wrong format %s' % (line
)
if not self
.data
.has_key(type):
if self
.data
[type].has_key(key
):
raise RuntimeError, 'ERROR: %s already defined in %s' % (key
, type)
self
.data
[type][key
] = { }
line
= self
.fd
.readline()
while line
.strip() != '}':
value
= line
[i
+1:].strip()
self
.data
[type][key
][kword
] = value
# a continue data from previous line
self
.data
[type][key
][kword
] += ' ' + line
.strip()
line
= self
.fd
.readline()
# when done with the object, create a shortcut
self
.object[key
] = self
.data
[type][key
]
def getCount (self
, type):
if self
.count
.has_key(type):
"""return a list of object types available in the configuration
def getObjIds (self
, objType
, silent
=0):
"""return a list of object ids of the specified type
return self
.data
[objType
].keys()
sys
.stderr
.write('WARNING: ReadConfigDiag: wrong keyword (%s), ex=%s\n' % (objType
, ex
))
def getObjKeys (self
, objType
, objId
, silent
=0):
"""return a list of data keywords of the specified object type+id
return self
.data
[objType
][objId
].keys()
sys
.stderr
.write('WARNING: ReadConfigDiag: wrong keyword(s) (%s,%s), ex=%s\n' % (objType
, objId
, ex
))
def getObjData (self
, objType
, objId
, key
, silent
=0):
"""return the data field of the specified object type+id+keyword
data
= self
.data
[objType
][objId
][key
]
if data
.startswith('[') and data
.endswith(']'):
data
= self
.convertList(data
[1:-1])
sys
.stderr
.write('WARNING: ReadConfigDiag: wrong keyword(s) (%s,%s,%s), ex=%s\n' % (objType
, objId
, key
, ex
))
def getData (self
, objId
, key
, silent
=0):
"""return the data field of the specified object id+keyword
data
= self
.object[objId
][key
]
if data
.startswith('[') and data
.endswith(']'):
data
= self
.convertList(data
[1:-1])
sys
.stderr
.write('WARNING: ReadConfigDiag: wrong keyword(s) (%s,%s), ex=%s\n' % (objId
, key
, ex
))
def setDataLine (self
, line
):
@conf.mom0.setvar= "THREAD_BASED_STAT=1"
@conf.swvmem0.good_trap = get_addr('\.TRAPS\.T0_GoodTrap_0x100')
@conf.mom0.start_cycle= 1
if line
.startswith(AT_CONF
):
#sys.stderr.write('DBX: ReadConfigDiag: @conf: %s\n' % (line))
line
= line
[len(AT_CONF
):]
key
= line
[i
+1:j
].strip()
expr
= line
[j
+1:].strip()
expr
= line
[j
+2:].strip()
value
= expr
[k
+1:].strip()
value
= line
[j
+1:].strip()
value
= line
[j
+2:].strip()
self
.setData(objId
, key
, value
, append
=append
)
sys
.stderr
.write('WARNING: ReadConfigDiag: wrong %s syntax <%s>\n' % (AT_CONF
, line
))
def setData (self
, objId
, key
, value
, append
=0):
#sys.stderr.write('DBX: ReadConfigDiag: objId=%s, key=%s, value=%s, append=%s\n' % (objId, key, value, append))
if not self
.object.has_key(objId
):
# OBJECT config0 TYPE sys_config {
# # a default system config to store basic system config info
if not self
.data
.has_key(TYPE_SYS_CONFIG
):
self
.data
[TYPE_SYS_CONFIG
] = { }
self
.count
[TYPE_SYS_CONFIG
] = 0
self
.count
[TYPE_SYS_CONFIG
] += 1
self
.data
[TYPE_SYS_CONFIG
][objId
] = { }
self
.object[objId
] = self
.data
[TYPE_SYS_CONFIG
][objId
]
if self
.object[objId
].has_key(key
) and append
== 0:
sys
.stderr
.write('WARNING: ReadConfigDiag: overwrite (%s,%s)=%s, new value=%s\n' % (objId
, key
, self
.object[objId
][key
], value
))
self
.object[objId
][key
] = value
if not self
.object[objId
].has_key(key
):
self
.object[objId
][key
] = [ ]
self
.object[objId
][key
].append(value
)
sys
.stderr
.write('WARNING: ReadConfigDiag: wrong keyword(s) (%s,%s), ex=%s\n' % (objId
, key
, ex
))
def convertList(self
, data
):
"""convert string (of list syntax) to real list
#sys.stderr.write('#DBX: data=%s\n' % (data)) #DBX
token
= token
.strip().strip("'")
#sys.stderr.write('#DBX: token=%s\n' % (token)) #DBX
#sys.stderr.write('#DBX: datalist=%s\n' % (datalist)) #DBX
if __name__
== "__main__":
reader
= ReadConfigDiag()
reader
.readConfig(sys
.argv
[1])