checkParmsCodes.py
121 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
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}') | ||||