summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--module/config/ConfigManager.py10
-rw-r--r--module/config/default.py1
-rw-r--r--module/web/pyload_app.py16
-rw-r--r--module/web/templates/default/base.html4
-rw-r--r--module/web/webinterface.py11
-rw-r--r--pavement.py6
-rw-r--r--tests/helper/Stubs.py2
-rw-r--r--tests/manager/test_configManager.py5
9 files changed, 40 insertions, 16 deletions
diff --git a/.gitignore b/.gitignore
index c4a4deff0..e95306990 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,3 +63,4 @@ pyload/*
dist/*
build/*
env/*
+js-optimized/
diff --git a/module/config/ConfigManager.py b/module/config/ConfigManager.py
index 85088020b..3290ed4ec 100644
--- a/module/config/ConfigManager.py
+++ b/module/config/ConfigManager.py
@@ -4,7 +4,7 @@
from new_collections import OrderedDict
from module.Api import InvalidConfigSection
-from module.utils import from_string, primary_uid, json
+from module.utils import from_string, json
from ConfigParser import ConfigParser
@@ -60,8 +60,7 @@ class ConfigManager(ConfigParser):
# Check if this config exists
# Configs without meta data can not be loaded!
data = self.config[section].config[option]
- self.loadValues(user, section)
- return self.values[user, section][option]
+ return self.loadValues(user, section)[option]
except KeyError:
pass # Returns default value later
@@ -100,7 +99,10 @@ class ConfigManager(ConfigParser):
return changed
def saveValues(self, user, section):
- self.db.saveConfig(section, json.dumps(self.values[user, section]), user)
+ if section in self.parser and user is None:
+ self.save()
+ elif (user, section) in self.values:
+ self.db.saveConfig(section, json.dumps(self.values[user, section]), user)
def delete(self, section, user=None):
""" Deletes values saved in db and cached values for given user, NOT meta data
diff --git a/module/config/default.py b/module/config/default.py
index dfa967284..8a2044281 100644
--- a/module/config/default.py
+++ b/module/config/default.py
@@ -67,6 +67,7 @@ def make_config(config):
("host", "ip", _("IP"), _("Tooltip"), "0.0.0.0"),
("https", "bool", _("Use HTTPS"), _("Tooltip"), False),
("port", "int", _("Port"), _("Tooltip"), 8001),
+ ("develop", "str", _("Development mode"), _(""), False),
])
config.addConfigSection("proxy", _("Proxy"), _("Description"), _("Long description"),
diff --git a/module/web/pyload_app.py b/module/web/pyload_app.py
index 483a47f07..ca2484a00 100644
--- a/module/web/pyload_app.py
+++ b/module/web/pyload_app.py
@@ -17,12 +17,12 @@
@author: RaNaN
"""
import time
-from os.path import join
+from os.path import join, exists
from bottle import route, static_file, request, response, redirect, HTTPError, error
from jinja2 import TemplateNotFound
-from webinterface import PYLOAD, PROJECT_DIR, SETUP, env
+from webinterface import PYLOAD, PROJECT_DIR, SETUP, DEVELOP, env
from utils import render_to_response, login_required, set_session, get_user_api, is_mobile
@@ -31,6 +31,13 @@ from utils import render_to_response, login_required, set_session, get_user_api,
# Helper
##########
+# Use optimized js when available
+if exists(join(PROJECT_DIR, "static", "js-optimized")) and not DEVELOP:
+ js_path = "js-optimized"
+else:
+ js_path = "js"
+
+
# TODO: useful but needs a rewrite, too
def pre_processor():
s = request.environ.get('beaker.session')
@@ -45,7 +52,8 @@ def pre_processor():
return {"user": user,
'server': status,
'url': request.url ,
- 'ws': PYLOAD.getWSAddress()}
+ 'ws': PYLOAD.getWSAddress(),
+ 'js': js_path}
def base(messages):
@@ -61,7 +69,7 @@ def error500(error):
return base(["An error occurred while processing the request.", error,
error.traceback.replace("\n", "<br>") if error.traceback else "No Traceback"])
-# TODO: not working
+# TODO: not working, no i18n strings should be on js files
# @route("/static/js/<path:re:.+\.js>")
def js_dynamic(path):
response.headers['Expires'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT",
diff --git a/module/web/templates/default/base.html b/module/web/templates/default/base.html
index 7785da01b..45d72d104 100644
--- a/module/web/templates/default/base.html
+++ b/module/web/templates/default/base.html
@@ -14,12 +14,14 @@
<link href="/static/css/select2.css" rel="stylesheet" type="text/css"/>
<link href="/static/css/font.css" rel="stylesheet" type="text/css"/>
<link href="/static/css/fontawesome.css" rel="stylesheet" type="text/css"/>
+
+ {# TODO precompile less, use when not in devel mode #}
<link href="/static/css/default/style.less" rel="stylesheet/less" type="text/css" media="screen"/>
{% block css %}
{% endblock %}
<script src="/static/js/libs/less-1.3.0.min.js" type="text/javascript"></script>
- <script type="text/javascript" data-main="static/js/config" src="/static/js/libs/require-2.1.5.js"></script>
+ <script type="text/javascript" data-main="static/{{ js }}/config" src="/static/{{ js }}/libs/require-2.1.5.js"></script>
<script type="text/javascript">
window.dates = {
weeks: ['week', 'weeks'],
diff --git a/module/web/webinterface.py b/module/web/webinterface.py
index 2a9b5660b..c560bbc86 100644
--- a/module/web/webinterface.py
+++ b/module/web/webinterface.py
@@ -59,8 +59,8 @@ JS = JsEngine()
TEMPLATE = config.get('webinterface', 'template')
DL_ROOT = config.get('general', 'download_folder')
-LOG_ROOT = config.get('log', 'log_folder')
PREFIX = config.get('webinterface', 'prefix')
+DEVELOP = config.get('webinterface', 'develop')
if PREFIX:
PREFIX = PREFIX.rstrip("/")
@@ -81,11 +81,10 @@ loader = PrefixLoader({
'js': FileSystemLoader(join(PROJECT_DIR, 'media', 'js'))
})
-env = Environment(loader=loader, extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'], trim_blocks=True, auto_reload=True,
- bytecode_cache=bcc)
+env = Environment(loader=loader, extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'],
+ trim_blocks=True, auto_reload=DEVELOP is True, bytecode_cache=bcc)
# Filter
-
env.filters["type"] = lambda x: str(type(x))
env.filters["formatsize"] = format_size
env.filters["getitem"] = lambda x, y: x.__getitem__(y)
@@ -95,10 +94,9 @@ else:
env.filters["url"] = lambda x: PREFIX + x if x.startswith("/") else x
# Locale
-
gettext.setpaths([join(os.sep, "usr", "share", "pyload", "locale"), None])
translation = gettext.translation("django", join(PYLOAD_DIR, "locale"),
- languages=[config.get("general", "language"), "en"],fallback=True)
+ languages=[config.get("general", "language"), "en"], fallback=True)
translation.install(True)
env.install_gettext_translations(translation)
@@ -129,5 +127,6 @@ import api_app
def run_server(host, port, server):
run(app=web, host=host, port=port, quiet=True, server=server)
+
if __name__ == "__main__":
run(app=web, port=8001)
diff --git a/pavement.py b/pavement.py
index b10ebfd0c..deb8b8a2b 100644
--- a/pavement.py
+++ b/pavement.py
@@ -221,6 +221,12 @@ def optimize_js(options):
(webdir / "js-optimized").rmtree()
+ if not path(options.optimize_js.r).exists():
+ print "Loading r.js"
+ from urllib import urlretrieve
+ urlretrieve('http://requirejs.org/docs/release/2.1.6/r.js',
+ options.optimize_js.r)
+
cmd = ["node", options.optimize_js.r, "-o", target]
print "running", cmd
diff --git a/tests/helper/Stubs.py b/tests/helper/Stubs.py
index f0e8d0614..4c7c178ed 100644
--- a/tests/helper/Stubs.py
+++ b/tests/helper/Stubs.py
@@ -18,7 +18,7 @@ from module.threads.BaseThread import BaseThread
from module.config.ConfigParser import ConfigParser
from module.network.RequestFactory import RequestFactory
from module.PluginManager import PluginManager
-from module.common.JsEngine import JsEngine
+from module.utils.JsEngine import JsEngine
from logging import log, DEBUG, INFO, WARN, ERROR
diff --git a/tests/manager/test_configManager.py b/tests/manager/test_configManager.py
index 8ab607a87..af473a0d2 100644
--- a/tests/manager/test_configManager.py
+++ b/tests/manager/test_configManager.py
@@ -117,6 +117,11 @@ class TestConfigManager(TestCase):
self.addConfig()
assert self.config.getSection("plugin")[0].name == "Name"
+ # TODO: more save tests are needed
+ def test_saveValues(self):
+ self.addConfig()
+ self.config.saveValues(adminUser, "plugin")
+
@raises(InvalidConfigSection)
def test_restricted_access(self):
self.config.get("general", "language", normalUser)