diff options
Diffstat (limited to 'pyload/manager')
-rw-r--r-- | pyload/manager/Addon.py | 2 | ||||
-rw-r--r-- | pyload/manager/Scheduler.py (renamed from pyload/manager/event/Scheduler.py) | 0 | ||||
-rw-r--r-- | pyload/manager/Thread.py | 6 | ||||
-rw-r--r-- | pyload/manager/event/__init__.py | 1 | ||||
-rw-r--r-- | pyload/manager/thread/Addon.py | 70 | ||||
-rw-r--r-- | pyload/manager/thread/Decrypter.py | 105 | ||||
-rw-r--r-- | pyload/manager/thread/Download.py | 213 | ||||
-rw-r--r-- | pyload/manager/thread/Info.py | 221 | ||||
-rw-r--r-- | pyload/manager/thread/Plugin.py | 132 | ||||
-rw-r--r-- | pyload/manager/thread/Server.py | 122 | ||||
-rw-r--r-- | pyload/manager/thread/__init__.py | 1 |
11 files changed, 3 insertions, 870 deletions
diff --git a/pyload/manager/Addon.py b/pyload/manager/Addon.py index 2b3d1c456..98b66189a 100644 --- a/pyload/manager/Addon.py +++ b/pyload/manager/Addon.py @@ -9,7 +9,7 @@ import traceback from types import MethodType -from pyload.manager.thread.Addon import AddonThread +from pyload.Thread import AddonThread from pyload.manager.Plugin import literal_eval from pyload.utils import lock diff --git a/pyload/manager/event/Scheduler.py b/pyload/manager/Scheduler.py index d7098ae10..d7098ae10 100644 --- a/pyload/manager/event/Scheduler.py +++ b/pyload/manager/Scheduler.py diff --git a/pyload/manager/Thread.py b/pyload/manager/Thread.py index ecfcb3e26..6df8ab622 100644 --- a/pyload/manager/Thread.py +++ b/pyload/manager/Thread.py @@ -13,10 +13,8 @@ from random import choice from subprocess import Popen from time import sleep, time -from pyload.datatype.File import PyFile -from pyload.manager.thread.Decrypter import DecrypterThread -from pyload.manager.thread.Download import DownloadThread -from pyload.manager.thread.Info import InfoThread +from pyload.Datatype import PyFile +from pyload.Thread import DecrypterThread, DownloadThread, InfoThread from pyload.network.RequestFactory import getURL from pyload.utils import freeSpace, lock diff --git a/pyload/manager/event/__init__.py b/pyload/manager/event/__init__.py deleted file mode 100644 index 40a96afc6..000000000 --- a/pyload/manager/event/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- diff --git a/pyload/manager/thread/Addon.py b/pyload/manager/thread/Addon.py deleted file mode 100644 index 3cda99950..000000000 --- a/pyload/manager/thread/Addon.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -# @author: RaNaN - -import traceback - -from Queue import Queue -from copy import copy -from os import listdir, stat -from os.path import join -from pprint import pformat -from sys import exc_info, exc_clear -from time import sleep, time, strftime, gmtime -from types import MethodType - -from pyload.manager.thread.Plugin import PluginThread - - -class AddonThread(PluginThread): - """thread for addons""" - - def __init__(self, m, function, args, kwargs): - """Constructor""" - PluginThread.__init__(self, m) - - self.f = function - self.args = args - self.kwargs = kwargs - - self.active = [] - - m.localThreads.append(self) - - self.start() - - - def getActiveFiles(self): - return self.active - - - def addActive(self, pyfile): - """ Adds a pyfile to active list and thus will be displayed on overview""" - if pyfile not in self.active: - self.active.append(pyfile) - - - def finishFile(self, pyfile): - if pyfile in self.active: - self.active.remove(pyfile) - - pyfile.finishIfDone() - - - def run(self): - try: - try: - self.kwargs['thread'] = self - self.f(*self.args, **self.kwargs) - except TypeError, e: - # dirty method to filter out exceptions - if "unexpected keyword argument 'thread'" not in e.args[0]: - raise - - del self.kwargs['thread'] - self.f(*self.args, **self.kwargs) - finally: - local = copy(self.active) - for x in local: - self.finishFile(x) - - self.m.localThreads.remove(self) diff --git a/pyload/manager/thread/Decrypter.py b/pyload/manager/thread/Decrypter.py deleted file mode 100644 index 3554feac4..000000000 --- a/pyload/manager/thread/Decrypter.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -# @author: RaNaN - -import traceback - -from Queue import Queue -from copy import copy -from os import listdir, stat -from os.path import join -from pprint import pformat -from sys import exc_info, exc_clear -from time import sleep, time, strftime, gmtime -from types import MethodType - -from pyload.manager.thread.Plugin import PluginThread -from pyload.plugin.Plugin import Abort, Fail, Retry - - -class DecrypterThread(PluginThread): - - """thread for decrypting""" - - def __init__(self, manager, pyfile): - """constructor""" - PluginThread.__init__(self, manager) - - self.active = pyfile - manager.localThreads.append(self) - - pyfile.setStatus("decrypting") - - self.start() - - - def getActiveFiles(self): - return [self.active] - - - def run(self): - """run method""" - - pyfile = self.active - retry = False - - try: - self.m.core.log.info(_("Decrypting starts: %s") % pyfile.name) - pyfile.error = "" - pyfile.plugin.preprocessing(self) - - except NotImplementedError: - self.m.core.log.error(_("Plugin %s is missing a function.") % pyfile.pluginname) - return - - except Fail, e: - msg = e.args[0] - - if msg == "offline": - pyfile.setStatus("offline") - self.m.core.log.warning( - _("Download is offline: %s") % pyfile.name) - else: - pyfile.setStatus("failed") - self.m.core.log.error( - _("Decrypting failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": msg}) - pyfile.error = msg - - if self.m.core.debug: - traceback.print_exc() - return - - except Abort: - self.m.core.log.info(_("Download aborted: %s") % pyfile.name) - pyfile.setStatus("aborted") - - if self.m.core.debug: - traceback.print_exc() - return - - except Retry: - self.m.core.log.info(_("Retrying %s") % pyfile.name) - retry = True - return self.run() - - except Exception, e: - pyfile.setStatus("failed") - self.m.core.log.error(_("Decrypting failed: %(name)s | %(msg)s") % { - "name": pyfile.name, "msg": str(e)}) - pyfile.error = str(e) - - if self.m.core.debug: - traceback.print_exc() - self.writeDebugReport(pyfile) - - return - - finally: - if not retry: - pyfile.release() - self.active = False - self.m.core.files.save() - self.m.localThreads.remove(self) - exc_clear() - - if not retry: - pyfile.delete() diff --git a/pyload/manager/thread/Download.py b/pyload/manager/thread/Download.py deleted file mode 100644 index 04f73b2ed..000000000 --- a/pyload/manager/thread/Download.py +++ /dev/null @@ -1,213 +0,0 @@ -# -*- coding: utf-8 -*- -# @author: RaNaN - -import traceback - -import pycurl - -from Queue import Queue -from copy import copy -from os import listdir, stat -from os.path import join -from pprint import pformat -from sys import exc_info, exc_clear -from time import sleep, time, strftime, gmtime -from types import MethodType - -from pyload.manager.thread.Plugin import PluginThread -from pyload.plugin.Plugin import Abort, Fail, Reconnect, Retry, SkipDownload - - -class DownloadThread(PluginThread): - """thread for downloading files from 'real' hoster plugins""" - - def __init__(self, manager): - """Constructor""" - PluginThread.__init__(self, manager) - - self.queue = Queue() #: job queue - self.active = False - - self.start() - - - #-------------------------------------------------------------------------- - - def run(self): - """run method""" - pyfile = None - - while True: - del pyfile - self.active = False #: sets the thread inactive when it is ready to get next job - self.active = self.queue.get() - pyfile = self.active - - if self.active == "quit": - self.active = False - self.m.threads.remove(self) - return True - - try: - if not pyfile.hasPlugin(): - continue - # this pyfile was deleted while queueing - - pyfile.plugin.checkForSameFiles(starting=True) - self.m.core.log.info(_("Download starts: %s" % pyfile.name)) - - # start download - self.m.core.addonManager.downloadPreparing(pyfile) - pyfile.error = "" - pyfile.plugin.preprocessing(self) - - self.m.core.log.info(_("Download finished: %s") % pyfile.name) - self.m.core.addonManager.downloadFinished(pyfile) - self.m.core.files.checkPackageFinished(pyfile) - - except NotImplementedError: - self.m.core.log.error(_("Plugin %s is missing a function.") % pyfile.pluginname) - pyfile.setStatus("failed") - pyfile.error = "Plugin does not work" - self.clean(pyfile) - continue - - except Abort: - try: - self.m.core.log.info(_("Download aborted: %s") % pyfile.name) - except Exception: - pass - - pyfile.setStatus("aborted") - - if self.m.core.debug: - traceback.print_exc() - - self.clean(pyfile) - continue - - except Reconnect: - self.queue.put(pyfile) - # pyfile.req.clearCookies() - - while self.m.reconnecting.isSet(): - sleep(0.5) - - continue - - except Retry, e: - reason = e.args[0] - self.m.core.log.info(_("Download restarted: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": reason}) - self.queue.put(pyfile) - continue - - except Fail, e: - msg = e.args[0] - - if msg == "offline": - pyfile.setStatus("offline") - self.m.core.log.warning(_("Download is offline: %s") % pyfile.name) - elif msg == "temp. offline": - pyfile.setStatus("temp. offline") - self.m.core.log.warning(_("Download is temporary offline: %s") % pyfile.name) - else: - pyfile.setStatus("failed") - self.m.core.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": msg}) - pyfile.error = msg - - if self.m.core.debug: - traceback.print_exc() - - self.m.core.addonManager.downloadFailed(pyfile) - self.clean(pyfile) - continue - - except pycurl.error, e: - if len(e.args) == 2: - code, msg = e.args - else: - code = 0 - msg = e.args - - self.m.core.log.debug("pycurl exception %s: %s" % (code, msg)) - - if code in (7, 18, 28, 52, 56): - self.m.core.log.warning(_("Couldn't connect to host or connection reset, waiting 1 minute and retry.")) - wait = time() + 60 - - pyfile.waitUntil = wait - pyfile.setStatus("waiting") - while time() < wait: - sleep(1) - if pyfile.abort: - break - - if pyfile.abort: - self.m.core.log.info(_("Download aborted: %s") % pyfile.name) - pyfile.setStatus("aborted") - - self.clean(pyfile) - else: - self.queue.put(pyfile) - - continue - - else: - pyfile.setStatus("failed") - self.m.core.log.error("pycurl error %s: %s" % (code, msg)) - if self.m.core.debug: - traceback.print_exc() - self.writeDebugReport(pyfile) - - self.m.core.addonManager.downloadFailed(pyfile) - - self.clean(pyfile) - continue - - except SkipDownload, e: - pyfile.setStatus("skipped") - - self.m.core.log.info(_("Download skipped: %(name)s due to %(plugin)s") % {"name": pyfile.name, "plugin": e.message}) - - self.clean(pyfile) - - self.m.core.files.checkPackageFinished(pyfile) - - self.active = False - self.m.core.files.save() - - continue - - except Exception, e: - pyfile.setStatus("failed") - self.m.core.log.warning(_("Download failed: %(name)s | %(msg)s") % {"name": pyfile.name, "msg": str(e)}) - pyfile.error = str(e) - - if self.m.core.debug: - traceback.print_exc() - self.writeDebugReport(pyfile) - - self.m.core.addonManager.downloadFailed(pyfile) - self.clean(pyfile) - continue - - finally: - self.m.core.files.save() - pyfile.checkIfProcessed() - exc_clear() - - # pyfile.plugin.req.clean() - - self.active = False - pyfile.finishIfDone() - self.m.core.files.save() - - - def put(self, job): - """assing job to thread""" - self.queue.put(job) - - - def stop(self): - """stops the thread""" - self.put("quit") diff --git a/pyload/manager/thread/Info.py b/pyload/manager/thread/Info.py deleted file mode 100644 index 856c8facf..000000000 --- a/pyload/manager/thread/Info.py +++ /dev/null @@ -1,221 +0,0 @@ -# -*- coding: utf-8 -*- -# @author: RaNaN - -import traceback - -from Queue import Queue -from copy import copy -from os import listdir, stat -from os.path import join -from pprint import pformat -from sys import exc_info, exc_clear -from time import sleep, time, strftime, gmtime -from types import MethodType - -from pyload.api import OnlineStatus -from pyload.datatype.File import PyFile -from pyload.manager.thread.Plugin import PluginThread - - -class InfoThread(PluginThread): - - def __init__(self, manager, data, pid=-1, rid=-1, add=False): - """Constructor""" - PluginThread.__init__(self, manager) - - self.data = data - self.pid = pid #: package id - # [ .. (name, plugin) .. ] - - self.rid = rid #: result id - self.add = add #: add packages instead of return result - - self.cache = [] #: accumulated data - - self.start() - - - def run(self): - """run method""" - - plugins = {} - container = [] - - for url, plugintype, pluginname in self.data: - # filter out container plugins - if plugintype == 'container': - container.appen((pluginname, url)) - else: - if (plugintype, pluginname) in plugins: - plugins[(plugintype, pluginname)].append(url) - else: - plugins[(plugintype, pluginname)] = [url] - - # directly write to database - if self.pid > -1: - for (plugintype, pluginname), urls in plugins.iteritems(): - plugin = self.m.core.pluginManager.getPlugin(plugintype, pluginname, True) - if hasattr(plugin, "getInfo"): - self.fetchForPlugin(pluginname, plugin, urls, self.updateDB) - self.m.core.files.save() - - elif self.add: - for (plugintype, pluginname), urls in plugins.iteritems(): - plugin = self.m.core.pluginManager.getPlugin(plugintype, pluginname, True) - if hasattr(plugin, "getInfo"): - self.fetchForPlugin(pluginname, plugin, urls, self.updateCache, True) - - else: - # generate default result - result = [(url, 0, 3, url) for url in urls] - - self.updateCache(pluginname, result) - - packs = parseNames([(name, url) for name, x, y, url in self.cache]) - - self.m.log.debug("Fetched and generated %d packages" % len(packs)) - - for k, v in packs: - self.m.core.api.addPackage(k, v) - - # empty cache - del self.cache[:] - - else: #: post the results - - for name, url in container: - # attach container content - try: - data = self.decryptContainer(name, url) - except Exception: - traceback.print_exc() - self.m.log.error("Could not decrypt container.") - data = [] - - for url, plugintype, pluginname in data: - try: - plugins[plugintype][pluginname].append(url) - except Exception: - plugins[plugintype][pluginname] = [url] - - self.m.infoResults[self.rid] = {} - - for plugintype, pluginname, urls in plugins.iteritems(): - plugin = self.m.core.pluginManager.getPlugin(plugintype, pluginname, True) - if hasattr(plugin, "getInfo"): - self.fetchForPlugin(pluginname, plugin, urls, self.updateResult, True) - - # force to process cache - if self.cache: - self.updateResult(pluginname, [], True) - - else: - # generate default result - result = [(url, 0, 3, url) for url in urls] - - self.updateResult(pluginname, result, True) - - self.m.infoResults[self.rid]['ALL_INFO_FETCHED'] = {} - - self.m.timestamp = time() + 5 * 60 - - - def updateDB(self, plugin, result): - self.m.core.files.updateFileInfo(result, self.pid) - - - def updateResult(self, plugin, result, force=False): - # parse package name and generate result - # accumulate results - - self.cache.extend(result) - - if len(self.cache) >= 20 or force: - # used for package generating - tmp = [(name, (url, OnlineStatus(name, plugin, "unknown", status, int(size)))) for name, size, status, url in self.cache] - - data = parseNames(tmp) - result = {} - for k, v in data.iteritems(): - for url, status in v: - status.packagename = k - result[url] = status - - self.m.setInfoResults(self.rid, result) - - self.cache = [] - - - def updateCache(self, plugin, result): - self.cache.extend(result) - - - def fetchForPlugin(self, pluginname, plugin, urls, cb, err=None): - try: - result = [] #: result loaded from cache - process = [] #: urls to process - for url in urls: - if url in self.m.infoCache: - result.append(self.m.infoCache[url]) - else: - process.append(url) - - if result: - self.m.log.debug("Fetched %d values from cache for %s" % (len(result), pluginname)) - cb(pluginname, result) - - if process: - self.m.log.debug("Run Info Fetching for %s" % pluginname) - for result in plugin.getInfo(process): - # result = [ .. (name, size, status, url) .. ] - if not type(result) == list: - result = [result] - - for res in result: - self.m.infoCache[res[3]] = res # : why don't assign res dict directly? - - cb(pluginname, result) - - self.m.log.debug("Finished Info Fetching for %s" % pluginname) - except Exception, e: - self.m.log.warning(_("Info Fetching for %(name)s failed | %(err)s") % {"name": pluginname, "err": str(e)}) - if self.m.core.debug: - traceback.print_exc() - - # generate default results - if err: - result = [(url, 0, 3, url) for url in urls] - cb(pluginname, result) - - - def decryptContainer(self, plugin, url): - data = [] - # only works on container plugins - - self.m.log.debug("Pre decrypting %s with %s" % (url, plugin)) - - # dummy pyfile - pyfile = PyFile(self.m.core.files, -1, url, url, 0, 0, "", plugin, -1, -1) - - pyfile.initPlugin() - - # little plugin lifecycle - try: - pyfile.plugin.setup() - pyfile.plugin.loadToDisk() - pyfile.plugin.decrypt(pyfile) - pyfile.plugin.deleteTmp() - - for pack in pyfile.plugin.packages: - pyfile.plugin.urls.extend(pack[1]) - - data = self.m.core.pluginManager.parseUrls(pyfile.plugin.urls) - - self.m.log.debug("Got %d links." % len(data)) - - except Exception, e: - self.m.log.debug("Pre decrypting error: %s" % str(e)) - finally: - pyfile.release() - - return data diff --git a/pyload/manager/thread/Plugin.py b/pyload/manager/thread/Plugin.py deleted file mode 100644 index 0163152f3..000000000 --- a/pyload/manager/thread/Plugin.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# @author: RaNaN - -from __future__ import with_statement - -import threading -import traceback - -from Queue import Queue -from copy import copy -from os import listdir, stat -from os.path import join -from pprint import pformat -from sys import exc_info, exc_clear -from time import sleep, time, strftime, gmtime -from types import MethodType - -from pyload.api import OnlineStatus -from pyload.datatype.File import PyFile -from pyload.plugin.Plugin import Abort, Fail, Reconnect, Retry, SkipDownload -from pyload.utils.packagetools import parseNames -from pyload.utils import fs_join - - -class PluginThread(threading.Thread): - """abstract base class for thread types""" - - def __init__(self, manager): - """Constructor""" - threading.Thread.__init__(self) - self.setDaemon(True) - self.m = manager #: thread manager - - - def writeDebugReport(self, pyfile): - """ writes a - :return: - """ - - dump_name = "debug_%s_%s.zip" % (pyfile.pluginname, strftime("%d-%m-%Y_%H-%M-%S")) - dump = self.getDebugDump(pyfile) - - try: - import zipfile - - zip = zipfile.ZipFile(dump_name, "w") - - for f in listdir(join("tmp", pyfile.pluginname)): - try: - # avoid encoding errors - zip.write(join("tmp", pyfile.pluginname, f), fs_join(pyfile.pluginname, f)) - except Exception: - pass - - info = zipfile.ZipInfo(fs_join(pyfile.pluginname, "debug_Report.txt"), gmtime()) - info.external_attr = 0644 << 16L #: change permissions - - zip.writestr(info, dump) - zip.close() - - if not stat(dump_name).st_size: - raise Exception("Empty Zipfile") - - except Exception, e: - self.m.log.debug("Error creating zip file: %s" % e) - - dump_name = dump_name.replace(".zip", ".txt") - with open(dump_name, "wb") as f: - f.write(dump) - - self.m.core.log.info("Debug Report written to %s" % dump_name) - - - def getDebugDump(self, pyfile): - dump = "pyLoad %s Debug Report of %s %s \n\nTRACEBACK:\n %s \n\nFRAMESTACK:\n" % ( - self.m.core.api.getServerVersion(), pyfile.pluginname, pyfile.plugin.__version, traceback.format_exc()) - - tb = exc_info()[2] - stack = [] - while tb: - stack.append(tb.tb_frame) - tb = tb.tb_next - - for frame in stack[1:]: - dump += "\nFrame %s in %s at line %s\n" % (frame.f_code.co_name, - frame.f_code.co_filename, - frame.f_lineno) - - for key, value in frame.f_locals.items(): - dump += "\t%20s = " % key - try: - dump += pformat(value) + "\n" - except Exception, e: - dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" - - del frame - - del stack #: delete it just to be sure... - - dump += "\n\nPLUGIN OBJECT DUMP: \n\n" - - for name in dir(pyfile.plugin): - attr = getattr(pyfile.plugin, name) - if not name.endswith("__") and type(attr) != MethodType: - dump += "\t%20s = " % name - try: - dump += pformat(attr) + "\n" - except Exception, e: - dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" - - dump += "\nPYFILE OBJECT DUMP: \n\n" - - for name in dir(pyfile): - attr = getattr(pyfile, name) - if not name.endswith("__") and type(attr) != MethodType: - dump += "\t%20s = " % name - try: - dump += pformat(attr) + "\n" - except Exception, e: - dump += "<ERROR WHILE PRINTING VALUE> " + str(e) + "\n" - - if pyfile.pluginname in self.m.core.config.plugin: - dump += "\n\nCONFIG: \n\n" - dump += pformat(self.m.core.config.plugin[pyfile.pluginname]) + "\n" - - return dump - - - def clean(self, pyfile): - """ set thread unactive and release pyfile """ - self.active = True #: release pyfile but lets the thread active - pyfile.release() diff --git a/pyload/manager/thread/Server.py b/pyload/manager/thread/Server.py deleted file mode 100644 index a26ffe6a1..000000000 --- a/pyload/manager/thread/Server.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- - -from __future__ import with_statement - -import logging -import os -import threading - -core = None -setup = None -log = logging.getLogger("log") - - -class WebServer(threading.Thread): - - def __init__(self, pycore): - global core - - threading.Thread.__init__(self) - self.core = pycore - core = pycore - self.running = True - self.server = pycore.config.get("webui", "server") - self.https = pycore.config.get("webui", "https") - self.cert = pycore.config.get("ssl", "cert") - self.key = pycore.config.get("ssl", "key") - self.host = pycore.config.get("webui", "host") - self.port = pycore.config.get("webui", "port") - - self.setDaemon(True) - - - def run(self): - import pyload.webui as webinterface - global webinterface - - reset = False - - if self.https and (not os.exists(self.cert) or not os.exists(self.key)): - log.warning(_("SSL certificates not found.")) - self.https = False - - if self.server in ("lighttpd", "nginx"): - log.warning(_("Sorry, we dropped support for starting %s directly within pyLoad") % self.server) - log.warning(_("You can use the threaded server which offers good performance and ssl,")) - log.warning(_("of course you can still use your existing %s with pyLoads fastcgi server") % self.server) - log.warning(_("sample configs are located in the pyload/web/servers directory")) - reset = True - elif self.server == "fastcgi": - try: - import flup - except Exception: - log.warning(_("Can't use %(server)s, python-flup is not installed!") % { - "server": self.server}) - reset = True - - if reset or self.server == "lightweight": - if os.name != "nt": - try: - import bjoern - except Exception, e: - log.error(_("Error importing lightweight server: %s") % e) - log.warning(_("You need to download and compile bjoern, https://github.com/jonashaag/bjoern")) - log.warning(_("Copy the boern.so file to lib/Python/Lib or use setup.py install")) - log.warning(_("Of course you need to be familiar with linux and know how to compile software")) - self.server = "auto" - else: - self.core.log.info(_("Server set to threaded, due to known performance problems on windows.")) - self.core.config.set("webui", "server", "threaded") - self.server = "threaded" - - if self.server == "threaded": - self.start_threaded() - elif self.server == "fastcgi": - self.start_fcgi() - elif self.server == "lightweight": - self.start_lightweight() - else: - self.start_auto() - - - def start_auto(self): - if self.https: - log.warning(_("This server offers no SSL, please consider using `threaded` instead")) - - self.core.log.info(_("Starting builtin webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - webinterface.run_auto(host=self.host, port=self.port) - - - def start_threaded(self): - if self.https: - self.core.log.info( - _("Starting threaded SSL webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - else: - self.cert = "" - self.key = "" - self.core.log.info( - _("Starting threaded webserver: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - - webinterface.run_threaded(host=self.host, port=self.port, cert=self.cert, key=self.key) - - - def start_fcgi(self): - self.core.log.info(_("Starting fastcgi server: %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - try: - webinterface.run_fcgi(host=self.host, port=self.port) - - except ValueError: #@TODO: Fix https://github.com/pyload/pyload/issues/1145 - pass - - - def start_lightweight(self): - if self.https: - log.warning(_("This server offers no SSL, please consider using `threaded` instead")) - - self.core.log.info( - _("Starting lightweight webserver (bjoern): %(host)s:%(port)d") % {"host": self.host, "port": self.port}) - webinterface.run_lightweight(host=self.host, port=self.port) - - - def quit(self): - self.running = False diff --git a/pyload/manager/thread/__init__.py b/pyload/manager/thread/__init__.py deleted file mode 100644 index 40a96afc6..000000000 --- a/pyload/manager/thread/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- |