/usr/lib/python2.7/dist-packages/DisplayCAL/debughelpers.py is in dispcalgui 3.1.0.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | # -*- coding: utf-8 -*-
import inspect
import sys
import traceback
import config
from config import fs_enc
from log import logbuffer, safe_print
from meta import name as appname
from options import debug
from util_str import safe_unicode
wxEventTypes = {}
def getevtobjname(event, window=None):
""" Get and return the event object's name. """
try:
event_object = event.GetEventObject()
if not event_object and window:
event_object = window.FindWindowById(event.GetId())
if event_object and hasattr(event_object, "GetName"):
return event_object.GetName()
except Exception, exception:
pass
def getevttype(event):
""" Get and return the event object's type. """
if not wxEventTypes:
from wxaddons import wx
try:
for name in dir(wx):
if name.find("EVT_") == 0:
attr = getattr(wx, name)
if hasattr(attr, "evtType"):
wxEventTypes[attr.evtType[0]] = name
except Exception, exception:
pass
typeId = event.GetEventType()
if typeId in wxEventTypes:
return wxEventTypes[typeId]
def handle_error(error, parent=None, silent=False):
""" Log an error string and show an error dialog. """
if isinstance(error, tuple):
# We got a tuple. Assume (etype, value, tb)
tbstr = "".join(traceback.format_exception(*error))
error = error[1]
else:
tbstr = traceback.format_exc()
if (tbstr.strip() != "None" and isinstance(error, Exception) and
(debug or not isinstance(error, EnvironmentError) or
not getattr(error, "filename", None))):
# Print a traceback if in debug mode, for non environment errors, and
# for environment errors not related to files
safe_print(tbstr)
else:
safe_print(error)
if not silent:
try:
from wxaddons import wx
app = wx.GetApp()
if app is None and parent is None:
app = wx.App(redirect=False)
# wxPython 3 bugfix: We also need a toplevel window
frame = wx.Frame(None)
parent = False
else:
frame = None
if parent is None:
parent = wx.GetActiveWindow()
if parent:
try:
parent.IsShownOnScreen()
except:
# If the parent is still being constructed, we can't use it
parent = None
if isinstance(error, Warning):
icon = wx.ICON_WARNING
elif isinstance(error, Exception):
icon = wx.ICON_ERROR
else:
icon = wx.ICON_INFORMATION
dlg = wx.MessageDialog(parent if parent not in (False, None) and
parent.IsShownOnScreen() else None,
safe_unicode(error), appname, wx.OK | icon)
if frame:
# wxPython 3 bugfix: We need to use CallLater and MainLoop
wx.CallLater(1, dlg.ShowModal)
wx.CallLater(1, frame.Close)
app.MainLoop()
else:
dlg.ShowModal()
dlg.Destroy()
except Exception, exception:
safe_print("Warning: handle_error():", safe_unicode(exception))
def print_callstack():
""" Print call stack """
stack = inspect.stack()
indent = ""
for frame, filename, linenum, funcname, line, exc in reversed(stack[1:]):
safe_print(indent, funcname, filename, linenum,
repr("".join(line).strip()))
indent += " "
class ResourceError(Exception):
pass
|