|  | # -*- 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.""" |