__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
"""Enhanced Thread with support for return values and exception propagation."""
# Copyright (C) 2007 Canonical Ltd.
# Author: Martin Pitt <martin.pitt@ubuntu.com>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version. See http://www.gnu.org/copyleft/gpl.html for
# the full text of the license.
# pylint: disable=invalid-name
# pylint: enable=invalid-name
import sys
import threading
class REThread(threading.Thread):
"""Thread with return values and exception propagation.
The thread is marked as daemon thread. The entire Python program exits
when no alive non-daemon threads are left.
"""
def __init__(self, group=None, target=None, name=None, args=(), kwargs=None):
"""Initialize Thread, identical to threading.Thread.__init__()."""
if kwargs is None:
kwargs = {}
threading.Thread.__init__(self, group, target, name, args, kwargs, daemon=True)
self.__target = target
self.__args = args
self.__kwargs = kwargs
self._retval = None
self._exception = None
def run(self):
"""Run target function, identical to threading.Thread.run()."""
if self.__target:
try:
self._retval = self.__target(*self.__args, **self.__kwargs)
except BaseException: # pylint: disable=broad-except
if sys: # pylint: disable=using-constant-test
self._exception = sys.exc_info()
def return_value(self):
"""Return value from target function.
This can only be called after the thread has finished, i. e. when
is_alive() is False and did not terminate with an exception.
"""
assert not self.is_alive()
assert not self._exception
return self._retval
def exc_info(self):
"""Return (type, value, traceback) of the exception caught in run()."""
return self._exception
def exc_raise(self):
"""Raise the exception caught in the thread.
Do nothing if no exception was caught.
"""
if self._exception:
raise self._exception[1].with_traceback(self._exception[2])
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| crashdb_impl | Folder | 0755 |
|
|
| packaging_impl | Folder | 0755 |
|
|
| REThread.py | File | 2.3 KB | 0644 |
|
| __init__.py | File | 657 B | 0644 |
|
| crashdb.py | File | 34.17 KB | 0644 |
|
| fileutils.py | File | 21.9 KB | 0644 |
|
| hookutils.py | File | 35.42 KB | 0644 |
|
| logging.py | File | 1.41 KB | 0644 |
|
| packaging.py | File | 12.81 KB | 0644 |
|
| report.py | File | 74.28 KB | 0644 |
|
| sandboxutils.py | File | 12.72 KB | 0644 |
|
| ui.py | File | 77.96 KB | 0644 |
|
| user_group.py | File | 933 B | 0644 |
|