diff options
Diffstat (limited to 'pyload/webui/__init__.py')
-rw-r--r-- | pyload/webui/__init__.py | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/pyload/webui/__init__.py b/pyload/webui/__init__.py new file mode 100644 index 000000000..a0e849a11 --- /dev/null +++ b/pyload/webui/__init__.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- +# @author: RaNaN, vuolter + +import os +import sys + +import beaker +import bottle +import jinja2 + +import pyload.utils.pylgettext as gettext + +from pyload.Thread import Server +from pyload.utils.middlewares import StripPathMiddleware, GZipMiddleWare, PrefixMiddleware +from pyload.network.JsEngine import JsEngine +from pyload.utils import decode, formatSize + + +THEME_DIR = os.path.abspath(os.path.join(dirname(__file__), "themes")) +PYLOAD_DIR = os.path.abspath(os.path.join(THEME_DIR, "..", "..", "..")) + +sys.path.append(PYLOAD_DIR) + +SETUP = None +PYLOAD = None + +if not Server.core: + if Server.setup: + SETUP = Server.setup + config = SETUP.config + JS = JsEngine(SETUP) + else: + raise Exception("Could not access pyLoad Core") +else: + PYLOAD = Server.core.api + config = Server.core.config + JS = JsEngine(Server.core) + +THEME = config.get('webui', 'theme') +DL_ROOT = config.get('general', 'download_folder') +LOG_ROOT = config.get('log', 'log_folder') +PREFIX = config.get('webui', 'prefix') + +if PREFIX: + PREFIX = PREFIX.rstrip("/") + if not PREFIX.startswith("/"): + PREFIX = "/" + PREFIX + +DEBUG = config.get("general", "debug_mode") or "-d" in sys.argv or "--debug" in sys.argv +bottle.debug(DEBUG) + +cache = os.path.join("tmp", "jinja_cache") +if not os.path.exists(cache): + os.makedirs(cache) + +bcc = jinja2.FileSystemBytecodeCache(cache, '%s.cache') + +loader = jinja2.FileSystemLoader([THEME_DIR, os.path.join(THEME_DIR, THEME)]) + +env = jinja2.Environment(loader=loader, extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'], trim_blocks=True, auto_reload=False, + bytecode_cache=bcc) + +from pyload.utils.filters import quotepath, path_make_relative, path_make_absolute, truncate, date + +env.filters['quotepath'] = quotepath +env.filters['truncate'] = truncate +env.filters['date'] = date +env.filters['path_make_relative'] = path_make_relative +env.filters['path_make_absolute'] = path_make_absolute +env.filters['decode'] = decode +env.filters['type'] = lambda x: str(type(x)) +env.filters['formatsize'] = formatSize +env.filters['getitem'] = lambda x, y: x.__getitem__(y) +if PREFIX: + env.filters['url'] = lambda x: x +else: + env.filters['url'] = lambda x: PREFIX + x if x.startswith("/") else x + +gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None]) +translation = gettext.translation("django", os.path.join(PYLOAD_DIR, "locale"), + languages=[config.get("general", "language"), "en"],fallback=True) +translation.install(True) +env.install_gettext_translations(translation) + +session_opts = { + 'session.type': 'file', + 'session.cookie_expires': False, + 'session.data_dir': './tmp', + 'session.auto': False +} + +web = StripPathMiddleware(beaker.middleware.SessionMiddleware(bottle.app(), session_opts)) +web = GZipMiddleWare(web) + +if PREFIX: + web = PrefixMiddleware(web, prefix=PREFIX) + +import pyload.webui.app + + +def run_auto(host="0.0.0.0", port="8000"): + bottle.run(app=web, host=host, port=port, server="auto", quiet=True) + + +def run_lightweight(host="0.0.0.0", port="8000"): + bottle.run(app=web, host=host, port=port, server="bjoern", quiet=True) + + +def run_threaded(host="0.0.0.0", port="8000", theads=3, cert="", key=""): + from wsgiserver import CherryPyWSGIServer + + if cert and key: + CherryPyWSGIServer.ssl_certificate = cert + CherryPyWSGIServer.ssl_private_key = key + + CherryPyWSGIServer.numthreads = theads + + from pyload.webui.app.utils import CherryPyWSGI + + bottle.run(app=web, host=host, port=port, server=CherryPyWSGI, quiet=True) + + +def run_fcgi(host="0.0.0.0", port="8000"): + bottle.run(app=web, host=host, port=port, server=bottle.FlupFCGIServer, quiet=True) |