+class AutorandrException(Exception):
+ def __init__(self, message, original_exception=None, report_bug=False):
+ self.message = message
+ self.report_bug = report_bug
+ if original_exception:
+ self.original_exception = original_exception
+ trace = sys.exc_info()[2]
+ while trace.tb_next:
+ trace = trace.tb_next
+ self.line = trace.tb_lineno
+ else:
+ try:
+ import inspect
+ self.line = inspect.currentframe().f_back.f_lineno
+ except:
+ self.line = None
+ self.original_exception = None
+
+ def __str__(self):
+ retval = [ self.message ]
+ if self.line:
+ retval.append(" (line %d)" % self.line)
+ if self.original_exception:
+ retval.append(":\n ")
+ retval.append(str(self.original_exception).replace("\n", "\n "))
+ if self.report_bug:
+ retval.append("\nThis appears to be a bug. Please help improving autorandr by reporting it upstream."
+ "\nPlease attach the output of `xrandr --verbose` to your bug report if appropriate.")
+ return "".join(retval)
+