diff options
| author | 2014-12-12 00:50:38 +0100 | |
|---|---|---|
| committer | 2014-12-12 00:50:38 +0100 | |
| commit | a9a8e54dac44021a60844dd457a725b1f126126f (patch) | |
| tree | 202dc4685e87dbdba560cf2a3107bfe268007826 /pyload | |
| parent | Spare code fixes (diff) | |
| download | pyload-a9a8e54dac44021a60844dd457a725b1f126126f.tar.xz | |
Fix JsEngine
Diffstat (limited to 'pyload')
| -rw-r--r-- | pyload/Core.py | 10 | ||||
| -rw-r--r-- | pyload/config/default.conf | 1 | ||||
| -rw-r--r-- | pyload/network/JsEngine.py (renamed from pyload/utils/JsEngine.py) | 59 | ||||
| -rw-r--r-- | pyload/webui/__init__.py | 2 | 
4 files changed, 43 insertions, 29 deletions
diff --git a/pyload/Core.py b/pyload/Core.py index e6f4a0b5a..4d07bfe0f 100644 --- a/pyload/Core.py +++ b/pyload/Core.py @@ -30,7 +30,7 @@ from pyload.manager.event.PullEvents import PullManager  from pyload.network.RequestFactory import RequestFactory  from pyload.manager.thread.ServerThread import WebServer  from pyload.manager.event.Scheduler import Scheduler -from pyload.utils.JsEngine import JsEngine +from pyload.network.JsEngine import JsEngine  from pyload import remote  from pyload.manager.RemoteManager import RemoteManager  from pyload.database import DatabaseBackend, FileHandler @@ -84,21 +84,21 @@ class Core(object):                          from pyload.config.Setup import SetupAssistant as Setup                          self.config = ConfigParser() -                        s = Setup(pypath, self.config) +                        s = Setup(self.config)                          s.set_user()                          exit()                      elif option in ("-s", "--setup"):                          from pyload.config.Setup import SetupAssistant as Setup                          self.config = ConfigParser() -                        s = Setup(pypath, self.config) +                        s = Setup(self.config)                          s.start()                          exit()                      elif option == "--changedir":                          from pyload.config.Setup import SetupAssistant as Setup                          self.config = ConfigParser() -                        s = Setup(pypath, self.config) +                        s = Setup(self.config)                          s.conf_path(True)                          exit()                      elif option in ("-q", "--quit"): @@ -249,7 +249,7 @@ class Core(object):              print "This is your first start, running configuration assistent now."              self.config = ConfigParser() -            s = Setup(pypath, self.config) +            s = Setup(self.config)              res = False              try:                  res = s.start() diff --git a/pyload/config/default.conf b/pyload/config/default.conf index d1f39f481..773e800af 100644 --- a/pyload/config/default.conf +++ b/pyload/config/default.conf @@ -30,6 +30,7 @@ general - "General":      int min_free_space : "Min Free Space (MB)" = 200      bool folder_per_package : "Create folder for each package" = True      int renice : "CPU Priority" = 0 +    auto;common;pyv8;node;rhino;jsc jsengine : "JS Engine" = auto  download - "Download":      int chunks : "Max connections for one download" = 3      int max_downloads : "Max Parallel Downloads" = 3 diff --git a/pyload/utils/JsEngine.py b/pyload/network/JsEngine.py index 459c53971..dfee29530 100644 --- a/pyload/utils/JsEngine.py +++ b/pyload/network/JsEngine.py @@ -12,14 +12,9 @@ from pyload.utils import encode, decode, uniqify  class JsEngine(object):      """ JS Engine superclass """ -    def __init__(self, core, engine=None):  #: engine can be a jse name """string""" or an AbstractEngine """class""" - -        self.core = core -        self.engine = None  #: Default engine Instance - -        if not ENGINES: -            self.core.log.critical("No JS Engine found!") -            return +    def __init__(self, core, engine=None): +        self.core   = core +        self.engine = None  #: Engine Instance          if not engine:              engine = self.core.config.get("general", "jsengine") @@ -42,42 +37,47 @@ class JsEngine(object):          return [E for E in ENGINES if E.find()] -    def get(self, engine): +    def get(self, engine=None):          """ Convert engine name (string) to relative JSE class (AbstractEngine extended) """ -        if isinstance(engine, basestring): +        if not engine: +            JSE = self.engine + +        elif isinstance(engine, basestring):              engine_name = engine.lower()              for E in ENGINES:                  if E.__name == engine_name:  #: doesn't check if E(NGINE) is available, just convert string to class                      JSE = E                      break              else: -                JSE = None +                raise ValueError("JSE") +          elif issubclass(engine, AbstractEngine):              JSE = engine +          else: -            JSE = None +            raise TypeError("engine") +          return JSE      def set(self, engine):          """ Set engine name (string) or JSE class (AbstractEngine extended) as default engine """          if isinstance(engine, basestring): -            self.set(self.get(engine)) +            return self.set(self.get(engine)) +          elif issubclass(engine, AbstractEngine) and engine.find():              self.engine = engine              return True +          else:              return False      def eval(self, script, engine=None):  #: engine can be a jse name """string""" or an AbstractEngine """class""" -        if not engine: -            JSE = self.engine -        else: -            JSE = self.get(engine) +        JSE = self.get(engine)          if not JSE: -            return None +            raise TypeError("engine")          script = encode(script) @@ -108,19 +108,22 @@ class AbstractEngine(object):      __name = "" +      def __init__(self):          self.setup()          self.available = self.find() +      def setup(self):          pass +      @classmethod      def find(cls):          """ Check if the engine is available """          try:              __import__(cls.__name) -        except ImportError: +        except Exception:              try:                  out, err = cls().eval("print(23+19)")              except Exception: @@ -129,8 +132,9 @@ class AbstractEngine(object):                  res = out == "42"          else:              res = True -        finally: -            return res + +        return res +      def _eval(args):          if not self.available: @@ -154,6 +158,7 @@ class Pyv8Engine(AbstractEngine):      __name = "pyv8" +      def eval(self, script):          if not self.available:              return None, "JS Engine \"%s\" not found" % self.__name @@ -164,17 +169,19 @@ class Pyv8Engine(AbstractEngine):              res = rt.eval(script), None  #@TODO: parse stderr          except Exception, e:              res = None, e -        finally: -            return res + +        return res  class CommonEngine(AbstractEngine):      __name = "js" +      def setup(self):          subprocess.Popen(["js", "-v"], bufsize=-1).communicate() +      def eval(self, script):          script = "print(eval(unescape('%s')))" % quote(script)          args = ["js", "-e", script] @@ -185,9 +192,11 @@ class NodeEngine(AbstractEngine):      __name = "nodejs" +      def setup(self):          subprocess.Popen(["node", "-v"], bufsize=-1).communicate() +      def eval(self, script):          script = "console.log(eval(unescape('%s')))" % quote(script)          args = ["node", "-e", script] @@ -198,6 +207,7 @@ class RhinoEngine(AbstractEngine):      __name = "rhino" +      def setup(self):          jspath = [              "/usr/share/java*/js.jar", @@ -211,6 +221,7 @@ class RhinoEngine(AbstractEngine):          else:              self.path = "" +      def eval(self, script):          script = "print(eval(unescape('%s')))" % quote(script)          args = ["java", "-cp", self.path, "org.mozilla.javascript.tools.shell.Main", "-e", script] @@ -225,10 +236,12 @@ class JscEngine(AbstractEngine):      __name = "javascriptcore" +      def setup(self):          jspath = "/System/Library/Frameworks/JavaScriptCore.framework/Resources/jsc"          self.path = jspath if path.exists(jspath) else "" +      def eval(self, script):          script = "print(eval(unescape('%s')))" % quote(script)          args = [self.path, "-e", script] diff --git a/pyload/webui/__init__.py b/pyload/webui/__init__.py index 045c78e70..4f06d160e 100644 --- a/pyload/webui/__init__.py +++ b/pyload/webui/__init__.py @@ -26,7 +26,7 @@ SETUP = None  PYLOAD = None  from pyload.manager.thread import ServerThread -from pyload.utils.JsEngine import JsEngine +from pyload.network.JsEngine import JsEngine  if not ServerThread.core:      if ServerThread.setup:  | 
