specs conversion minor update

Update for structure change introduced in revision #007b214 of asterix-specs.
This commit is contained in:
Zoran Bošnjak 2023-03-06 12:26:43 +01:00 committed by Jaap Keuter
parent 1e5514061d
commit 3cbb560102
1 changed files with 31 additions and 0 deletions

View File

@ -683,6 +683,36 @@ class Output(object):
else:
self.f.write(line+'\n')
def is_valid(spec):
"""Check spec"""
def check_item(item):
if item['spare']:
return True
return check_variation(item['variation'])
def check_variation(variation):
t = variation['type']
if t == 'Element':
return True
elif t == 'Group':
return all([check_item(i) for i in variation['items']])
elif t == 'Extended':
n1 = variation['first']
n2 = variation['extents']
fx = variation['fx']
if fx != 'regular':
return False # 'iregular extended item'
return all([check_item(i) for i in variation['items']])
elif t == 'Repetitive':
return check_variation(variation['variation'])
elif t == 'Explicit':
return True
elif t == 'Compound':
items = [i for i in variation['items'] if i is not None]
return all([check_item(i) for i in items])
else:
raise Exception('unexpected variation type {}'.format(t))
return all([check_item(i) for i in spec['catalogue']])
def main():
parser = argparse.ArgumentParser(description='Process asterix specs files.')
parser.add_argument('paths', metavar='PATH', nargs='*',
@ -703,6 +733,7 @@ def main():
jsons = [json.loads(i) for i in jsons]
jsons = sorted(jsons, key = lambda x: (x['number'], x['edition']['major'], x['edition']['minor']))
jsons = [spec for spec in jsons if spec['type'] == 'Basic']
jsons = [spec for spec in jsons if is_valid(spec)]
cats = list(set([x['number'] for x in jsons]))
latest_editions = {cat: sorted(