Jelajahi Sumber

qapi: Lift error reporting from QAPISchema.__init__() to callers

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20180211093607.27351-14-armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
Markus Armbruster 7 tahun lalu
induk
melakukan
181feaf355
3 mengubah file dengan 23 tambahan dan 18 penghapusan
  1. 6 2
      scripts/qapi-gen.py
  2. 9 14
      scripts/qapi/common.py
  3. 8 2
      tests/qapi-schema/test-qapi.py

+ 6 - 2
scripts/qapi-gen.py

@@ -8,7 +8,7 @@
 import argparse
 import argparse
 import re
 import re
 import sys
 import sys
-from qapi.common import QAPISchema
+from qapi.common import QAPIError, QAPISchema
 from qapi.types import gen_types
 from qapi.types import gen_types
 from qapi.visit import gen_visit
 from qapi.visit import gen_visit
 from qapi.commands import gen_commands
 from qapi.commands import gen_commands
@@ -39,7 +39,11 @@ def main(argv):
               file=sys.stderr)
               file=sys.stderr)
         sys.exit(1)
         sys.exit(1)
 
 
-    schema = QAPISchema(args.schema)
+    try:
+        schema = QAPISchema(args.schema)
+    except QAPIError as err:
+        print(err, file=sys.stderr)
+        exit(1)
 
 
     gen_types(schema, args.output_dir, args.prefix, args.builtins)
     gen_types(schema, args.output_dir, args.prefix, args.builtins)
     gen_visit(schema, args.output_dir, args.prefix, args.builtins)
     gen_visit(schema, args.output_dir, args.prefix, args.builtins)

+ 9 - 14
scripts/qapi/common.py

@@ -16,7 +16,6 @@
 import os
 import os
 import re
 import re
 import string
 import string
-import sys
 try:
 try:
     from collections import OrderedDict
     from collections import OrderedDict
 except:
 except:
@@ -1459,19 +1458,15 @@ def visit(self, visitor):
 
 
 class QAPISchema(object):
 class QAPISchema(object):
     def __init__(self, fname):
     def __init__(self, fname):
-        try:
-            parser = QAPISchemaParser(open(fname, 'r'))
-            exprs = check_exprs(parser.exprs)
-            self.docs = parser.docs
-            self._entity_dict = {}
-            self._predefining = True
-            self._def_predefineds()
-            self._predefining = False
-            self._def_exprs(exprs)
-            self.check()
-        except QAPIError as err:
-            print(err, file=sys.stderr)
-            exit(1)
+        parser = QAPISchemaParser(open(fname, 'r'))
+        exprs = check_exprs(parser.exprs)
+        self.docs = parser.docs
+        self._entity_dict = {}
+        self._predefining = True
+        self._def_predefineds()
+        self._predefining = False
+        self._def_exprs(exprs)
+        self.check()
 
 
     def _def_entity(self, ent):
     def _def_entity(self, ent):
         # Only the predefined types are allowed to not have info
         # Only the predefined types are allowed to not have info

+ 8 - 2
tests/qapi-schema/test-qapi.py

@@ -12,7 +12,7 @@
 
 
 from __future__ import print_function
 from __future__ import print_function
 import sys
 import sys
-from qapi.common import QAPISchema, QAPISchemaVisitor
+from qapi.common import QAPIError, QAPISchema, QAPISchemaVisitor
 
 
 
 
 class QAPISchemaTestVisitor(QAPISchemaVisitor):
 class QAPISchemaTestVisitor(QAPISchemaVisitor):
@@ -52,7 +52,13 @@ def _print_variants(variants):
             for v in variants.variants:
             for v in variants.variants:
                 print('    case %s: %s' % (v.name, v.type.name))
                 print('    case %s: %s' % (v.name, v.type.name))
 
 
-schema = QAPISchema(sys.argv[1])
+
+try:
+    schema = QAPISchema(sys.argv[1])
+except QAPIError as err:
+    print(err, file=sys.stderr)
+    exit(1)
+
 schema.visit(QAPISchemaTestVisitor())
 schema.visit(QAPISchemaTestVisitor())
 
 
 for doc in schema.docs:
 for doc in schema.docs: