aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/qapi/error.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/qapi/error.py')
-rw-r--r--scripts/qapi/error.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/scripts/qapi/error.py b/scripts/qapi/error.py
new file mode 100644
index 000000000..e35e4ddb2
--- /dev/null
+++ b/scripts/qapi/error.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (c) 2017-2019 Red Hat Inc.
+#
+# Authors:
+# Markus Armbruster <armbru@redhat.com>
+# Marc-André Lureau <marcandre.lureau@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2.
+# See the COPYING file in the top-level directory.
+
+"""
+QAPI error classes
+
+Common error classes used throughout the package. Additional errors may
+be defined in other modules. At present, `QAPIParseError` is defined in
+parser.py.
+"""
+
+from typing import Optional
+
+from .source import QAPISourceInfo
+
+
+class QAPIError(Exception):
+ """Base class for all exceptions from the QAPI package."""
+
+
+class QAPISourceError(QAPIError):
+ """Error class for all exceptions identifying a source location."""
+ def __init__(self,
+ info: Optional[QAPISourceInfo],
+ msg: str,
+ col: Optional[int] = None):
+ super().__init__()
+ self.info = info
+ self.msg = msg
+ self.col = col
+
+ def __str__(self) -> str:
+ assert self.info is not None
+ loc = str(self.info)
+ if self.col is not None:
+ assert self.info.line is not None
+ loc += ':%s' % self.col
+ return loc + ': ' + self.msg
+
+
+class QAPISemError(QAPISourceError):
+ """Error class for semantic QAPI errors."""