feat: add threading

This commit is contained in:
0xMRTT 2023-05-25 21:15:08 +02:00
parent 1b048b229d
commit 201ede414a
Signed by: 0xMRTT
GPG Key ID: 910B287304120902
3 changed files with 36 additions and 31 deletions

View File

@ -47,42 +47,15 @@ import tempfile
import re
import requests
from .threading import KillableThread
from enum import auto, IntEnum
class Step(IntEnum):
CONVERT_HTML = auto()
LOAD_WEBVIEW = auto()
RENDER = auto()
class KillableThread(threading.Thread):
def __init__(self, *args, **keywords):
threading.Thread.__init__(self, *args, **keywords)
self.killed = False
def start(self):
self.__run_backup = self.run
self.run = self.__run
threading.Thread.start(self)
def __run(self):
sys.settrace(self.globaltrace)
self.__run_backup()
self.run = self.__run_backup
def globaltrace(self, frame, event, arg):
if event == 'call':
return self.localtrace
else:
return None
def localtrace(self, frame, event, arg):
if self.killed:
if event == 'line':
raise SystemExit()
return self.localtrace
def kill(self):
self.killed = True
ANNOUCEMENT_URL = "https://bavarder.codeberg.page/annoucements.json"

View File

@ -24,6 +24,7 @@ configure_file(
bavarder_sources = [
'__init__.py',
'main.py',
'threading.py',
]
PY_INSTALLDIR.install_sources(bavarder_sources, subdir: moduledir)

31
src/threading.py Normal file
View File

@ -0,0 +1,31 @@
import threading
class KillableThread(threading.Thread):
def __init__(self, *args, **keywords):
threading.Thread.__init__(self, *args, **keywords)
self.killed = False
def start(self):
self.__run_backup = self.run
self.run = self.__run
threading.Thread.start(self)
def __run(self):
sys.settrace(self.globaltrace)
self.__run_backup()
self.run = self.__run_backup
def globaltrace(self, frame, event, arg):
if event == 'call':
return self.localtrace
else:
return None
def localtrace(self, frame, event, arg):
if self.killed:
if event == 'line':
raise SystemExit()
return self.localtrace
def kill(self):
self.killed = True