import binascii
import os
+# Ensure we don't leave temporary files around
+sys.dont_write_bytecode = True
+
#
# VPP API language
#
def __init__(self, debug=False, filename='', logger=None):
self.lexer = lex.lex(module=VPPAPILexer(filename), debug=debug)
self.parser = yacc.yacc(module=VPPAPIParser(filename, logger),
- tabmodule='vppapigentab', debug=debug)
+ write_tables=False, debug=debug)
self.logger = logger
def parse_string(self, code, debug=0, lineno=1):
msgs = {d.name: d for d in s['defines']}
svcs = {s.caller: s for s in s['services']}
+ replies = {s.reply: s for s in s['services']}
seen_services = {}
for service in svcs:
raise ValueError('Service definition refers to unknown message'
' definition in reply: {}'
.format(svcs[service].reply))
+ if service in replies:
+ raise ValueError('Service definition refers to message'
+ ' marked as reply: {}'.format(service))
for event in svcs[service].events:
if event not in msgs:
raise ValueError('Service definition refers to unknown '
continue
if msgs[d].singular is True:
continue
- #if d.endswith('_counters'):
- # continue
- #if d.endswith('_event'):
- # continue
if d.endswith('_reply'):
if d[:-6] in svcs:
continue
if d[:-6] not in msgs:
- self.logger.warning('{} missing calling message'
- .format(d))
+ raise ValueError('{} missing calling message'
+ .format(d))
continue
if d.endswith('_dump'):
if d in svcs:
s['services'].append(Service(d, d[:-5]+'_details',
stream=True))
else:
- self.logger.error('{} missing details message'
- .format(d))
+ raise ValueError('{} missing details message'
+ .format(d))
continue
if d.endswith('_details'):
if d[:-8]+'_dump' not in msgs:
- self.logger.error('{} missing dump message'
- .format(d))
+ raise ValueError('{} missing dump message'
+ .format(d))
continue
if d in svcs:
if d+'_reply' in msgs:
s['services'].append(Service(d, d+'_reply'))
else:
- self.logger.warning('{} missing reply message ({})'
- .format(d, d+'_reply'))
- s['services'].append(Service(d, None))
+ raise ValueError('{} missing reply message ({}) or service definition'
+ .format(d, d+'_reply'))
return s