diff --git a/management/univention-management-console/src/univention/management/console/base.py b/management/univention-management-console/src/univention/management/console/base.py index e198a10..ec2d903 100644 --- a/management/univention-management-console/src/univention/management/console/base.py +++ b/management/univention-management-console/src/univention/management/console/base.py @@ -289,7 +289,7 @@ def thread_finished_callback(self, thread, result, request): self.finished(request.id, result) return method = '%s: %s' % (thread.name, ' '.join(request.arguments)) - self.__error_handling(request, method, *thread.exc_info) + self.__error_handling(request, method, thread.exc_info[0], thread.exc_info[1], thread.trace) def error_handling(self, etype, exc, etraceback): if isinstance(exc, udm_errors.ldapError) and isinstance(getattr(exc, 'original_exception', None), ldap.SERVER_DOWN): @@ -309,6 +309,9 @@ def __error_handling(self, request, method, etype, exc, etraceback): result = None headers = None error = None + trace = etraceback + if isinstance(etraceback, list): + etraceback = None try: try: self.error_handling(etype, exc, etraceback) @@ -329,9 +332,13 @@ def __error_handling(self, request, method, etype, exc, etraceback): } except: status = MODULE_ERR_COMMAND_FAILED + if etraceback is None: # thread.exc_info doesn't contain a traceback object anymore: Bug #47114 + trace = ''.join(trace + traceback.format_exception_only(sys.exc_info()[:2])) + else: + trace = traceback.format_exc() error = { 'command': ('%s %s' % (' '.join(request.arguments), '(%s)' % (request.flavor,) if request.flavor else '')).strip().decode('utf-8', 'replace'), - 'traceback': traceback.format_exc().decode('utf-8', 'replace') + 'traceback': trace.decode('utf-8', 'replace') } message = self._('Internal server error during "%(command)s".') % error MODULE.process(str(message))