From 540c5daef039dc7382b78f59288e0828f3325900 Mon Sep 17 00:00:00 2001 From: anchpop Date: Thu, 5 Jul 2018 00:03:09 -0400 Subject: [PATCH 1/3] added css property that can get passed along --- react/render_server.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/react/render_server.py b/react/render_server.py index 2cecaa2..6b6b8ce 100644 --- a/react/render_server.py +++ b/react/render_server.py @@ -8,9 +8,10 @@ class RenderedComponent(object): - def __init__(self, markup, props): + def __init__(self, markup, props, css=None): self.markup = markup self.props = props + self.css = css def __str__(self): return self.markup @@ -37,7 +38,8 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, 'toStaticMarkup': to_static_markup } serialized_options = json.dumps(options) - options_hash = hashlib.sha1(serialized_options.encode('utf-8')).hexdigest() + options_hash = hashlib.sha1( + serialized_options.encode('utf-8')).hexdigest() all_request_headers = {'content-type': 'application/json'} @@ -58,29 +60,34 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, timeout=timeout ) except requests.ConnectionError: - raise RenderServerError('Could not connect to render server at {}'.format(url)) + raise RenderServerError( + 'Could not connect to render server at {}'.format(url)) if res.status_code != 200: raise RenderServerError( - 'Unexpected response from render server at {} - {}: {}'.format(url, res.status_code, res.text) + 'Unexpected response from render server at {} - {}: {}'.format( + url, res.status_code, res.text) ) obj = res.json() markup = obj.get('markup', None) err = obj.get('error', None) + css = obj.get('css', None) if err: if 'message' in err and 'stack' in err: raise ReactRenderingError( - 'Message: {}\n\nStack trace: {}'.format(err['message'], err['stack']) + 'Message: {}\n\nStack trace: {}'.format( + err['message'], err['stack']) ) raise ReactRenderingError(err) if markup is None: - raise ReactRenderingError('Render server failed to return markup. Returned: {}'.format(obj)) + raise ReactRenderingError( + 'Render server failed to return markup. Returned: {}'.format(obj)) - return RenderedComponent(markup, serialized_props) + return RenderedComponent(markup, serialized_props, css) render_server = RenderServer() From 4e0bd436e43aff38f40101e34565c3e4258d9492 Mon Sep 17 00:00:00 2001 From: anchpop Date: Sat, 7 Jul 2018 12:47:09 -0400 Subject: [PATCH 2/3] added path_to_react_loadable parameter --- react/render.py | 4 ++-- react/render_server.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/react/render.py b/react/render.py index 447c340..eca98ae 100644 --- a/react/render.py +++ b/react/render.py @@ -4,7 +4,7 @@ from .render_server import render_server -def render_component(path, props=None, to_static_markup=False, renderer=render_server, request_headers=None, timeout=None): +def render_component(path, props=None, to_static_markup=False, renderer=render_server, request_headers=None, timeout=None, path_to_react_loadable=None): if not os.path.isabs(path): abs_path = staticfiles.find(path) if not abs_path: @@ -14,4 +14,4 @@ def render_component(path, props=None, to_static_markup=False, renderer=render_s if not os.path.exists(path): raise ComponentSourceFileNotFound(path) - return renderer.render(path, props, to_static_markup, request_headers, timeout=timeout) + return renderer.render(path, props, to_static_markup, request_headers, timeout=timeout, path_to_react_loadable=path_to_react_loadable) diff --git a/react/render_server.py b/react/render_server.py index 6b6b8ce..e51059b 100644 --- a/react/render_server.py +++ b/react/render_server.py @@ -21,7 +21,7 @@ def __unicode__(self): class RenderServer(object): - def render(self, path, props=None, to_static_markup=False, request_headers=None, timeout=None): + def render(self, path: str, props: dict=None, to_static_markup: bool=False, request_headers=None, timeout=None, path_to_react_loadable: str=None): url = conf.settings.RENDER_URL if props is not None: @@ -35,7 +35,8 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, options = { 'path': path, 'serializedProps': serialized_props, - 'toStaticMarkup': to_static_markup + 'toStaticMarkup': to_static_markup, + 'pathToReactLoadable': path_to_react_loadable } serialized_options = json.dumps(options) options_hash = hashlib.sha1( From 73d0ac825d9c8a7808bcad530a4eaf72b0de3c37 Mon Sep 17 00:00:00 2001 From: anchpop Date: Sun, 8 Jul 2018 02:00:12 -0400 Subject: [PATCH 3/3] added slots for custom data to be passed through --- react/exceptions.py | 2 +- react/render.py | 4 ++-- react/render_server.py | 10 ++++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/react/exceptions.py b/react/exceptions.py index 4253253..8fc1197 100644 --- a/react/exceptions.py +++ b/react/exceptions.py @@ -7,4 +7,4 @@ class ReactRenderingError(Exception): class RenderServerError(Exception): - pass \ No newline at end of file + pass diff --git a/react/render.py b/react/render.py index eca98ae..08ae918 100644 --- a/react/render.py +++ b/react/render.py @@ -4,7 +4,7 @@ from .render_server import render_server -def render_component(path, props=None, to_static_markup=False, renderer=render_server, request_headers=None, timeout=None, path_to_react_loadable=None): +def render_component(path, props=None, to_static_markup=False, renderer=render_server, request_headers=None, timeout=None, extra_data: dict=None): if not os.path.isabs(path): abs_path = staticfiles.find(path) if not abs_path: @@ -14,4 +14,4 @@ def render_component(path, props=None, to_static_markup=False, renderer=render_s if not os.path.exists(path): raise ComponentSourceFileNotFound(path) - return renderer.render(path, props, to_static_markup, request_headers, timeout=timeout, path_to_react_loadable=path_to_react_loadable) + return renderer.render(path, props, to_static_markup, request_headers, timeout=timeout, extra_data=extra_data) diff --git a/react/render_server.py b/react/render_server.py index e51059b..9e8fd8e 100644 --- a/react/render_server.py +++ b/react/render_server.py @@ -8,10 +8,11 @@ class RenderedComponent(object): - def __init__(self, markup, props, css=None): + def __init__(self, markup, props, css=None, extra_data: dict={}): self.markup = markup self.props = props self.css = css + self.extra_data = extra_data def __str__(self): return self.markup @@ -21,7 +22,7 @@ def __unicode__(self): class RenderServer(object): - def render(self, path: str, props: dict=None, to_static_markup: bool=False, request_headers=None, timeout=None, path_to_react_loadable: str=None): + def render(self, path: str, props: dict=None, to_static_markup: bool=False, request_headers=None, timeout=None, extra_data: dict={}): url = conf.settings.RENDER_URL if props is not None: @@ -36,7 +37,7 @@ def render(self, path: str, props: dict=None, to_static_markup: bool=False, requ 'path': path, 'serializedProps': serialized_props, 'toStaticMarkup': to_static_markup, - 'pathToReactLoadable': path_to_react_loadable + 'extraData': extra_data } serialized_options = json.dumps(options) options_hash = hashlib.sha1( @@ -75,6 +76,7 @@ def render(self, path: str, props: dict=None, to_static_markup: bool=False, requ markup = obj.get('markup', None) err = obj.get('error', None) css = obj.get('css', None) + extra_data = obj.get('extra_data', {}) if err: if 'message' in err and 'stack' in err: @@ -88,7 +90,7 @@ def render(self, path: str, props: dict=None, to_static_markup: bool=False, requ raise ReactRenderingError( 'Render server failed to return markup. Returned: {}'.format(obj)) - return RenderedComponent(markup, serialized_props, css) + return RenderedComponent(markup, serialized_props, css, extra_data) render_server = RenderServer()