Spaces:
Runtime error
Runtime error
| # Xlib.error -- basic error classes | |
| # | |
| # Copyright (C) 2000 Peter Liljenberg <petli@ctrl-c.liu.se> | |
| # | |
| # This library is free software; you can redistribute it and/or | |
| # modify it under the terms of the GNU Lesser General Public License | |
| # as published by the Free Software Foundation; either version 2.1 | |
| # of the License, or (at your option) any later version. | |
| # | |
| # This library is distributed in the hope that it will be useful, | |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| # See the GNU Lesser General Public License for more details. | |
| # | |
| # You should have received a copy of the GNU Lesser General Public | |
| # License along with this library; if not, write to the | |
| # Free Software Foundation, Inc., | |
| # 59 Temple Place, | |
| # Suite 330, | |
| # Boston, MA 02111-1307 USA | |
| # Xlib modules | |
| from . import X | |
| # Xlib.protocol modules | |
| from .protocol import rq | |
| class DisplayError(Exception): | |
| def __init__(self, display): | |
| self.display = display | |
| def __str__(self): | |
| return 'Display error "%s"' % self.display | |
| class DisplayNameError(DisplayError): | |
| def __str__(self): | |
| return 'Bad display name "%s"' % self.display | |
| class DisplayConnectionError(DisplayError): | |
| def __init__(self, display, msg): | |
| self.display = display | |
| self.msg = msg | |
| def __str__(self): | |
| return 'Can\'t connect to display "%s": %s' % (self.display, self.msg) | |
| class ConnectionClosedError(Exception): | |
| def __init__(self, whom): | |
| self.whom = whom | |
| def __str__(self): | |
| return 'Display connection closed by %s' % self.whom | |
| class XauthError(Exception): pass | |
| class XNoAuthError(Exception): pass | |
| class ResourceIDError(Exception): pass | |
| class XError(rq.GetAttrData, Exception): | |
| _fields = rq.Struct( rq.Card8('type'), # Always 0 | |
| rq.Card8('code'), | |
| rq.Card16('sequence_number'), | |
| rq.Card32('resource_id'), | |
| rq.Card16('minor_opcode'), | |
| rq.Card8('major_opcode'), | |
| rq.Pad(21) | |
| ) | |
| def __init__(self, display, data): | |
| self._data, _ = self._fields.parse_binary(data, display, rawdict = True) | |
| def __str__(self): | |
| s = [] | |
| for f in ('code', 'resource_id', 'sequence_number', | |
| 'major_opcode', 'minor_opcode'): | |
| s.append('{0} = {1}'.format(f, self._data[f])) | |
| return '{0}: {1}'.format(self.__class__, ', '.join(s)) | |
| class XResourceError(XError): | |
| _fields = rq.Struct( rq.Card8('type'), # Always 0 | |
| rq.Card8('code'), | |
| rq.Card16('sequence_number'), | |
| rq.Resource('resource_id'), | |
| rq.Card16('minor_opcode'), | |
| rq.Card8('major_opcode'), | |
| rq.Pad(21) | |
| ) | |
| class BadRequest(XError): pass | |
| class BadValue(XError): pass | |
| class BadWindow(XResourceError): pass | |
| class BadPixmap(XResourceError): pass | |
| class BadAtom(XError): pass | |
| class BadCursor(XResourceError): pass | |
| class BadFont(XResourceError): pass | |
| class BadMatch(XError): pass | |
| class BadDrawable(XResourceError): pass | |
| class BadAccess(XError): pass | |
| class BadAlloc(XError): pass | |
| class BadColor(XResourceError): pass | |
| class BadGC(XResourceError): pass | |
| class BadIDChoice(XResourceError): pass | |
| class BadName(XError): pass | |
| class BadLength(XError): pass | |
| class BadImplementation(XError): pass | |
| xerror_class = { | |
| X.BadRequest: BadRequest, | |
| X.BadValue: BadValue, | |
| X.BadWindow: BadWindow, | |
| X.BadPixmap: BadPixmap, | |
| X.BadAtom: BadAtom, | |
| X.BadCursor: BadCursor, | |
| X.BadFont: BadFont, | |
| X.BadMatch: BadMatch, | |
| X.BadDrawable: BadDrawable, | |
| X.BadAccess: BadAccess, | |
| X.BadAlloc: BadAlloc, | |
| X.BadColor: BadColor, | |
| X.BadGC: BadGC, | |
| X.BadIDChoice: BadIDChoice, | |
| X.BadName: BadName, | |
| X.BadLength: BadLength, | |
| X.BadImplementation: BadImplementation, | |
| } | |
| class CatchError(object): | |
| def __init__(self, *errors): | |
| self.error_types = errors | |
| self.error = None | |
| self.request = None | |
| def __call__(self, error, request): | |
| if self.error_types: | |
| for etype in self.error_types: | |
| if isinstance(error, etype): | |
| self.error = error | |
| self.request = request | |
| return 1 | |
| return 0 | |
| else: | |
| self.error = error | |
| self.request = request | |
| return 1 | |
| def get_error(self): | |
| return self.error | |
| def get_request(self): | |
| return self.request | |
| def reset(self): | |
| self.error = None | |
| self.request = None | |