def list_js_runtimes(): # AttributeError: module 'execjs' has no attribute 'available_runtimes' try: ajsr = execjs.available_runtimes() except AttributeError: # Newer execjs does not have available_runtimes() method? ajsr = [] supported_runtimes = execjs.runtimes() for sr in supported_runtimes: if supported_runtimes[sr].is_available(): ajsr.append(sr) if len(ajsr) > 0: print('Detected {0} JavaScript runtimes:'.format(len(ajsr))) for js in ajsr: jsr = execjs.get(js) pref_str = '' if js == 'Node': pref_str = ' <== I prefer this one!' print(' {0}: {1}{2}'.format(js, jsr.name, pref_str)) else: print('No JS runtimes detected! Install Node.js, spidermonkey or something!') sys.exit(0)
def __call__(self, parser, namespace, values, option_string=None): buffer = io.StringIO() for name, runtime in sorted(execjs.runtimes().items()): if runtime.is_available(): buffer.write(name + "\n") parser.exit(message=buffer.getvalue())
def __call__(self, parser, namespace, values, option_string=None): message = "".join(name + "\n" for name, runtime in list(execjs.runtimes().items()) if runtime.is_available()) parser.exit(message=message)
def test_thrown_exception(self): with self.assertRaises(execjs.ProgramError): self.runtime.exec_("throw 'hello'") def test_broken_substitutions(self): s = '#{source}#{encoded_source}#{json2_source}' self.assertEqual(s, self.runtime.eval('"' + s + '"')) class DefaultRuntimeTest(unittest.TestCase, RuntimeTestBase): def setUp(self): self.runtime = execjs for name, runtime in execjs.runtimes().items(): if not runtime.is_available(): continue class_name = name.capitalize() + "RuntimeTest" def f(runtime=runtime): class RuntimeTest(unittest.TestCase, RuntimeTestBase): def setUp(self): self.runtime = runtime RuntimeTest.__name__ = str(class_name) # 2.x compatibility return RuntimeTest exec("{class_name} = f()".format(class_name=class_name)) class CommonTest(unittest.TestCase): def test_empty_path_environ(self):
def __call__(self, parser, namespace, values, option_string=None): message = "".join(name + "\n" for name, runtime in execjs.runtimes().items() if runtime.is_available()) parser.exit(message=message)
def test_thrown_exception(self): with self.assertRaises(execjs.ProgramError): self.runtime.exec_("throw 'hello'") def test_broken_substitutions(self): s = '#{source}#{encoded_source}#{json2_source}' self.assertEqual(s, self.runtime.eval('"' + s + '"')) class DefaultRuntimeTest(unittest.TestCase, RuntimeTestBase): def setUp(self): self.runtime = execjs for name, runtime in list(execjs.runtimes().items()): if not runtime.is_available(): continue class_name = name.capitalize() + "RuntimeTest" def f(runtime=runtime): class RuntimeTest(unittest.TestCase, RuntimeTestBase): def setUp(self): self.runtime = runtime RuntimeTest.__name__ = str(class_name) # 2.x compatibility return RuntimeTest exec("{class_name} = f()".format(class_name=class_name))