Example #1
0
    def test_load_file(self):
        # Load file
        renderer = MonoContext()
        self.assertEqual([], renderer.load_file(JS_FILE))

        # Load absent file
        self.assertRaises(V8Error, renderer.load_file, ABSENT_JS_FILE)
Example #2
0
    def test_load_file_no_wt(self):
        renderer = MonoContext(watch_templates=False)

        with open(TMP_JS_FILE, 'w') as f:
            f.write(self.js1)

        renderer.load_file(TMP_JS_FILE)
        out, errors = renderer.execute_file(JS_FILE, ';fn();', '')
        self.assertEqual('1', out)

        time.sleep(1)

        with open(TMP_JS_FILE, 'w') as f:
            f.write(self.js2)

        out, errors = renderer.execute_file(JS_FILE, ';fn();', '')
        self.assertEqual('1', out)
Example #3
0
class FestRenderer(object):
    _js_loaded = False

    def __init__(self, js_root='', js_files=None, js_files_autoload=False, **kwargs):
        self.renderer = MonoContext(**kwargs)
        self.js_root = js_root
        self.js_files = js_files
        self.js_files_autoload = js_files_autoload

        if self.js_files_autoload:
            self.load_js_files()

    def load_js_files(self):
        if not self._js_loaded:
            if self.js_files is not None:
                for js_file in self.js_files:
                    filepath = os.path.abspath(os.path.join(self.js_root, js_file))
                    self.renderer.load_file(filepath)
            self._js_loaded = True

    def render(self, template_name, json_str):
        if not self.js_files_autoload:
            self.load_js_files()

        template_name = force_bytes(template_name)
        json_str = force_bytes(json_str)

        try:
            bundle = template_name.split('/')[-2]
        except ValueError:
            raise ValueError('Wrong template name')

        filepath = os.path.abspath(os.path.join(self.js_root, template_name))
        append_str = ';fest["{}.xml"]( JSON.parse(__dataFetch()) );'.format(bundle)
        response, errors = self.renderer.execute_file(filepath, append_str, json_str)
        if errors:
            logger.warning('\n'.join(errors))
        return response