##// 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
checkParmsCodes.py
121 lines | 3.4 KiB | text/x-python | PythonLexer
Initial
r0 #!/opt/madrigal/bin/python
"""checkParmsCodes.py checks a parmCodes.txt file for errors
$Id: checkParmsCodes.py 7275 2020-11-23 19:27:02Z brideout $
"""
usage = 'python checkParmsCodes.py <parmCodesFile>'
import sys
# duplicates
dup_dict = {225:[5000],
245:[5001],
410:[411],
414:[415],
420:[421],
510:[512],
800:[802,803],
805:[806],
1240:[1241,1242],
1250:[1251,1252],
1270:[1272],
1280:[1282],
1430:[1431],
1455:[1456]}
if len(sys.argv) != 2:
print(usage)
sys.exit(-1)
parm_codes = [] # make sure all codes are unique
mnem_list = [] # make sure all mnemonics are unique
units = [] # Keep a list of all units occurring in the file
f = open(sys.argv[1])
lines = f.readlines()
f.close()
for line in lines:
if line[0] == '#':
continue
if len(line.strip()) == 0:
continue
items = line.split(',')
try:
code = int(items[0])
except:
raise IOError('line <%s> does not start with a numeric code' % (line))
if len(items) != 9:
if len(items) != 10:
raise IOError('Illegal number of items in line <%s>' % (line))
else:
main_code = int(items[9])
if main_code not in list(dup_dict.keys()):
raise IOError('Line <%s> is not a legal duplicate parameter' % (line))
if code not in dup_dict[main_code]:
raise IOerror('Line <%s> is not a legal duplicate parameter' % (line))
if code != 0:
if code in parm_codes:
raise IOError('duplicate code %i in line <%s>' % (code, line))
parm_codes.append(code)
# Columns 1 and 2 are free-form text
descr = items[1].strip()
if len(descr) > 80:
print(f"Line {line}: Description length > 80, consider shortening")
unit = items[2].strip()
if unit not in units:
units.append(unit) # Unique units
mnem = items[3].strip().upper()
if mnem in mnem_list:
raise IOError('duplicate mnem %s in line <%s>' % (mnem, line))
mnem_list.append(mnem)
format = items[4]
try:
s = format % (1)
except:
raise IOError('Illegal format <%s> in line <%s>' % (format, line))
try:
width = int(items[5])
except:
raise IOError('Illegal width field in line %s' % (line))
if width < 3:
raise IOError('Width less than 3 in line <%s>' % (line))
try:
categoryId = int(items[6])
except:
raise IOError('Illegal categoryId field in line %s' % (line))
#if categoryId < 0:
if categoryId < -2 or categoryId > 18:
# 0 is valid time variable category
# -1, -2 are valid HDF5 preamble parameter categories
raise IOError('categoryId in line <%s> out of range' % (line))
try:
hasDesc = int(items[7])
except:
raise IOError('Illegal hasDesc field in line %s' % (line))
if hasDesc not in (0,1):
raise IOError('Illegal hasDesc %i in line <%s>' % (hasDesc, line))
try:
hasErrDesc = int(items[8])
except:
raise IOError('Illegal hasErrDesc field in line %s' % (line))
if hasErrDesc not in (0,1):
raise IOError('Illegal hasErrDesc %i in line <%s>' % (hasErrDesc, line))
print('No problems found with parmCodes.txt file')
units.sort()
print(f'For info: Units occurring in the file are: {units}')