class ReactHandler(StaticFileHandler):
    def initialize(self, path):
        self.root = os.path.abspath(path) + os.path.sep
        self.jsx = JSXTransformer()
        self.settings.setdefault('compiled_template_cache', False)

    def try_transform(self, abspath):
        try:
            self.jsx.transform(abspath + "x", js_path=abspath)
        except Exception as e:
            raise HTTPError(
                500, "Could not transform %s into a JS file. %s" %
                (os.path.basename(abspath + "x"), str(e)))

    def get(self, path, **kwargs):
        """
        Transform the JSX online as they change.
        """
        if os.path.sep != "/":
            path = path.replace("/", os.path.sep)
        abspath = os.path.abspath(os.path.join(self.root, path))
        self.absolute_path = abspath
        # some default errors:
        if not (abspath + os.path.sep).startswith(self.root):
            raise HTTPError(403, "%s is not in root static directory", path)
        if not os.path.exists(abspath):
            # special case, check if jsx file exists.
            if abspath.endswith(".js") and os.path.exists(abspath + "x"):
                self.try_transform(abspath)
                # transformation to JS was successful.
            else:
                raise HTTPError(404)
        if not os.path.isfile(abspath):
            raise HTTPError(403, "%s is not a file", path)

        if abspath.endswith(".js") and os.path.exists(abspath + "x"):
            if os.path.getmtime(abspath + "x") > os.path.getmtime(abspath):
                # more recent JSX file than JS
                self.try_transform(abspath)
            # else the generated file is recent enough
        template_path = self.get_template_path()
        if not template_path:
            template_path = os.path.dirname(os.path.abspath(__file__))
        loader = RequestHandler._template_loaders[template_path]
        return super(ReactHandler, self).get(path, **kwargs)

    @classmethod
    def _get_cached_version(cls, abs_path):
        return None
class JSXCompiler(CompilerBase):
    output_extension = 'js'

    def __init__(self, *args, **kwargs):
        CompilerBase.__init__(self, *args, **kwargs)
        self.transformer = JSXTransformer()

    def match_file(self, path):
        return path.endswith('.jsx')

    def compile_file(self, infile, outfile, outdated=False, force=False):
        if not outdated and not force:
            return

        try:
            harmony = settings.REACT_HARMONY
        except KeyError:
            harmony = False

        try:
            strip_types = settings.REACT_STRIP_TYPES
        except KeyError:
            strip_types = False

        try:
            return self.transformer.transform(
                infile,
                outfile,
                harmony=harmony,
                strip_types=strip_types,
            )
        except TransformError as e:
            raise CompilerError(str(e))
class JSXCompiler(CompilerBase):
    output_extension = 'js'

    def __init__(self, *args, **kwargs):
        CompilerBase.__init__(self, *args, **kwargs)
        self.transformer = JSXTransformer()

    def match_file(self, path):
        return path.endswith('.jsx')

    def compile_file(self, infile, outfile, outdated=False, force=False):
        if not outdated and not force:
            return

        try:
            harmony = settings.REACT_HARMONY
        except KeyError:
            harmony = False

        try:
            strip_types = settings.REACT_STRIP_TYPES
        except KeyError:
            strip_types = False

        try:
            return self.transformer.transform(
                infile,
                outfile,
                harmony=harmony,
                strip_types=strip_types,
            )
        except TransformError as e:
            raise CompilerError(str(e))
class ReactHandler(StaticFileHandler):
    def initialize(self, path):
        self.root = os.path.abspath(path) + os.path.sep
        self.jsx  = JSXTransformer()
        self.settings.setdefault('compiled_template_cache', False)

    def try_transform(self, abspath):
        try:
            self.jsx.transform(abspath + "x", js_path=abspath)
        except Exception as e:
            raise HTTPError(500, "Could not transform %s into a JS file. %s" % (os.path.basename(abspath + "x"), str(e)))

    def get(self, path, **kwargs):
        """
        Transform the JSX online as they change.
        """
        if os.path.sep != "/":
            path = path.replace("/", os.path.sep)
        abspath = os.path.abspath(os.path.join(self.root, path))
        self.absolute_path = abspath
        # some default errors:
        if not (abspath + os.path.sep).startswith(self.root):
            raise HTTPError(403, "%s is not in root static directory", path)
        if not os.path.exists(abspath):
            # special case, check if jsx file exists.
            if abspath.endswith(".js") and os.path.exists(abspath + "x"):
                self.try_transform(abspath)
                # transformation to JS was successful.
            else:
                raise HTTPError(404)
        if not os.path.isfile(abspath):
            raise HTTPError(403, "%s is not a file", path)

        if abspath.endswith(".js") and os.path.exists(abspath + "x"):
            if os.path.getmtime(abspath + "x") > os.path.getmtime(abspath):
                # more recent JSX file than JS
                self.try_transform(abspath)
            # else the generated file is recent enough
        template_path = self.get_template_path()
        if not template_path:
            template_path = os.path.dirname(os.path.abspath(__file__))
        loader = RequestHandler._template_loaders[template_path]
        return super(ReactHandler, self).get(path, **kwargs)

    @classmethod
    def _get_cached_version(cls, abs_path):
        return None
Exemple #5
0
class JSXCompiler(FilterBase):

    def __init__(self, content, attrs=None, filter_type=None, charset=None,
                 filename=None):
        super(JSXCompiler, self).__init__(content, filter_type, filename)
        self.transformer = JSXTransformer()

    def input(self, **kwargs):
        if self.filename:
            return self.transformer.transform(self.filename)
        else:
            return self.transformer.transform_string(self.content)
Exemple #6
0
class JSXCompiler(FilterBase):
    def __init__(self,
                 content,
                 attrs=None,
                 filter_type=None,
                 charset=None,
                 filename=None):
        super(JSXCompiler, self).__init__(content, filter_type, filename)
        self.transformer = JSXTransformer()

    def input(self, **kwargs):
        if self.filename:
            return self.transformer.transform(self.filename)
        else:
            return self.transformer.transform_string(self.content)
class JSXCompiler(CompilerBase):
    output_extension = 'js'

    def __init__(self, *args, **kwargs):
        CompilerBase.__init__(self, *args, **kwargs)
        self.transformer = JSXTransformer()

    def match_file(self, path):
        return path.endswith('.jsx')

    def compile_file(self, infile, outfile, outdated=False, force=False):
        if not outdated and not force:
            return
        try:
            return self.transformer.transform(infile, outfile)
        except TransformError as e:
            raise CompilerError(e.message)
Exemple #8
0
class JSXCompiler(CompilerBase):
    output_extension = 'js'

    def __init__(self, *args, **kwargs):
        CompilerBase.__init__(self, *args, **kwargs)
        self.transformer = JSXTransformer()

    def match_file(self, path):
        return path.endswith('.jsx')

    def compile_file(self, infile, outfile, outdated=False, force=False):
        if not outdated and not force:
            return
        try:
            return self.transformer.transform(infile, outfile)
        except TransformError as e:
            raise CompilerError(str(e))
class JSXCompiler(CompilerBase):

    output_extension = 'js'

    def __init__(self, *args, **kwargs):
        super(JSXCompiler, self).__init__(*args, **kwargs)
        self.transformer = JSXTransformer()

    def match_file(self, path):
        return path.endswith('.jsx')

    def compile_file(self, infile, outfile, outdated=False, force=False):
        if outdated or force:
            try:
                return self.transformer.transform(infile, outfile)
            except TransformError as e:
                raise CompilerError(str(e))
Exemple #10
0
class JSXCompiler(CompilerBase):
    output_extension = ".js"

    def __init__(self):
        CompilerBase.__init__(self)
        self.transformer = JSXTransformer()

    def match_file(self, filename):
        return path.endswith(".jsx")

    def compile(self, infile, outfile, outdated=False, force=False):
        if not outdated and not force:
            return
        try:
            return self.transformer.transform(infile, outfile)
        except TransformError as e:
            raise CompilerError(e.message)