From 58b2b608d125519bcce8036f6046c8f131491b4f Mon Sep 17 00:00:00 2001 From: Mike Plis Date: Tue, 8 Aug 2017 08:51:35 -0400 Subject: [PATCH 01/15] Update render_server.py --- react/render_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react/render_server.py b/react/render_server.py index a7b1907..2cecaa2 100644 --- a/react/render_server.py +++ b/react/render_server.py @@ -47,7 +47,7 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, # Add a send/receive timeout with the request if not specified if not isinstance(timeout, (tuple, int, float)): - timeout = (5, 5) + timeout = 5.0 try: res = requests.post( From 5631e2b211be5b1a6f2b74893a1fab8b591c03df Mon Sep 17 00:00:00 2001 From: Mark Finger Date: Wed, 9 Aug 2017 10:14:35 +1000 Subject: [PATCH 02/15] 4.1.1 --- CHANGELOG.md | 8 ++++++++ react/__init__.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07f3f60..94fcd9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog ========= +### 4.1.1 (9/8/2017) + +- Update timeout in render_server.py. + ([Mike Plis](https://github.com/mplis)) + https://github.com/markfinger/python-react/pull/81 + + + ### 4.1.0 (1/3/2017) - `render_component` now accepts a `timeout` keyword argument which is passed to `RenderServer.render`. diff --git a/react/__init__.py b/react/__init__.py index 5e58b2f..2906628 100644 --- a/react/__init__.py +++ b/react/__init__.py @@ -1,3 +1,3 @@ -__version__ = '4.1.0' +__version__ = '4.1.1' default_app_config = 'react.apps.ReactConfig' \ No newline at end of file From f6a13d354f216f6e4792c84eb9f0f07b3572bd82 Mon Sep 17 00:00:00 2001 From: Sassan Haradji Date: Mon, 16 Jul 2018 11:19:11 +0430 Subject: [PATCH 03/15] API for returning extra items returned by render server --- react/render_server.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/react/render_server.py b/react/render_server.py index 2cecaa2..54f84c3 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, extra): self.markup = markup self.props = props + self.extra = extra def __str__(self): return self.markup @@ -67,8 +68,9 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, obj = res.json() - markup = obj.get('markup', None) - err = obj.get('error', None) + markup = obj.pop('markup', None) + err = obj.pop('error', None) + extra = obj if err: if 'message' in err and 'stack' in err: @@ -80,7 +82,7 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, if markup is None: raise ReactRenderingError('Render server failed to return markup. Returned: {}'.format(obj)) - return RenderedComponent(markup, serialized_props) + return RenderedComponent(markup, serialized_props, extra) render_server = RenderServer() From db30691d18656d81907eb5daaedf0d0d306cbf6c Mon Sep 17 00:00:00 2001 From: Sassan Haradji Date: Mon, 16 Jul 2018 20:44:21 +0430 Subject: [PATCH 04/15] Renamed extra to data --- react/render_server.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/react/render_server.py b/react/render_server.py index 54f84c3..13bbcae 100644 --- a/react/render_server.py +++ b/react/render_server.py @@ -8,10 +8,10 @@ class RenderedComponent(object): - def __init__(self, markup, props, extra): + def __init__(self, markup, props, data): self.markup = markup self.props = props - self.extra = extra + self.data = data def __str__(self): return self.markup @@ -70,7 +70,7 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, markup = obj.pop('markup', None) err = obj.pop('error', None) - extra = obj + data = obj if err: if 'message' in err and 'stack' in err: @@ -82,7 +82,7 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, if markup is None: raise ReactRenderingError('Render server failed to return markup. Returned: {}'.format(obj)) - return RenderedComponent(markup, serialized_props, extra) + return RenderedComponent(markup, serialized_props, data) render_server = RenderServer() From 1167ba033ee1747005dd3dba1643d22c83e04233 Mon Sep 17 00:00:00 2001 From: Sassan Haradji Date: Mon, 16 Jul 2018 22:44:55 +0430 Subject: [PATCH 05/15] Added new data api to the docs --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index da12786..31470e9 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,7 @@ The object returned has two properties: - `markup` - the rendered markup - `props` - the JSON-serialized props + - `data` - extra data returned by the render server If the object is coerced to a string, it will emit the value of the `markup` attribute. @@ -82,6 +83,8 @@ for a simple server that will cover most cases. The key files for the render ser - [render_server.js](examples/basic_rendering/render_server.js) - the server's source code - [package.json](examples/basic_rendering/package.json) - the server's dependencies, installable with [npm](http://npmjs.com) + +You can also return extra data from your render server and these data will be stored in `data` attribute of the response object. Using React on the front-end From cb554d974646a7ea17de35012668fd191c00e009 Mon Sep 17 00:00:00 2001 From: Mark Finger Date: Tue, 17 Jul 2018 10:23:41 +1000 Subject: [PATCH 06/15] Docs Added some more detail/example for the `data` prop. Fixed some mixed tabs/spaces in the docs. --- README.md | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 31470e9..a2d4e40 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ The object returned has two properties: - `markup` - the rendered markup - `props` - the JSON-serialized props - - `data` - extra data returned by the render server + - `data` - the data returned by the render server If the object is coerced to a string, it will emit the value of the `markup` attribute. @@ -83,8 +83,6 @@ for a simple server that will cover most cases. The key files for the render ser - [render_server.js](examples/basic_rendering/render_server.js) - the server's source code - [package.json](examples/basic_rendering/package.json) - the server's dependencies, installable with [npm](http://npmjs.com) - -You can also return extra data from your render server and these data will be stored in `data` attribute of the response object. Using React on the front-end @@ -258,7 +256,7 @@ from react.conf import settings DEBUG = True settings.configure( - RENDER=not DEBUG, + RENDER=not DEBUG, RENDER_URL='http://127.0.0.1:9009/render', ) ``` @@ -273,7 +271,7 @@ INSTALLED_APPS = ( ) REACT = { - 'RENDER': not DEBUG, + 'RENDER': not DEBUG, 'RENDER_URL': 'http://127.0.0.1:8001/render', } ``` @@ -303,6 +301,22 @@ Default: `'http://127.0.0.1:9009/render'` Frequently Asked Questions -------------------------- +### How do I return extra data from the render server? + +You can edit the render server's code and annotate the returned payload with whatever data +that you like. The payload provided by the render server is available under the `data` attribute +of the response object. + +For example: + +```python +from react.render import render_component + +rendered = render_component('path/to/component.js') + +print(rendered.data) +``` + ### Can python-react integrate with Django? python-react can integrate with Django's settings and the renderer integration can From 6211e3147c4d680440f47eb8060fe5e3385da239 Mon Sep 17 00:00:00 2001 From: Mark Finger Date: Tue, 17 Jul 2018 10:34:54 +1000 Subject: [PATCH 07/15] 4.2.0 --- CHANGELOG.md | 7 +++++++ react/__init__.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 94fcd9d..7ed3c3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ Changelog ========= +### 4.2.0 (17/6/2018) + +- API for returning extra items returned by render server. + ([Sassan Haradji](https://github.com/sassanh)) + https://github.com/markfinger/python-react/pull/87 + + ### 4.1.1 (9/8/2017) - Update timeout in render_server.py. diff --git a/react/__init__.py b/react/__init__.py index 2906628..4eed8e1 100644 --- a/react/__init__.py +++ b/react/__init__.py @@ -1,3 +1,3 @@ -__version__ = '4.1.1' +__version__ = '4.2.0' default_app_config = 'react.apps.ReactConfig' \ No newline at end of file From 8853887b9ad69004713fcf1d5dc921d4e006f4e1 Mon Sep 17 00:00:00 2001 From: Mark Finger Date: Tue, 17 Jul 2018 10:51:59 +1000 Subject: [PATCH 08/15] Fixed a missing argument bug when using RENDER = False --- react/render_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react/render_server.py b/react/render_server.py index 13bbcae..679cc8b 100644 --- a/react/render_server.py +++ b/react/render_server.py @@ -30,7 +30,7 @@ def render(self, path, props=None, to_static_markup=False, request_headers=None, serialized_props = None if not conf.settings.RENDER: - return RenderedComponent('', serialized_props) + return RenderedComponent('', serialized_props, {}) options = { 'path': path, From e33781f8efb553ecc07de99a4f1d68fe43ca478a Mon Sep 17 00:00:00 2001 From: Mark Finger Date: Tue, 17 Jul 2018 10:52:08 +1000 Subject: [PATCH 09/15] 4.2.1 --- CHANGELOG.md | 6 ++++++ react/__init__.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ed3c3e..b21d1ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ Changelog ========= +### 4.2.1 (17/6/2018) + +- Fix for a missing argument bug that could occur with rendering deactivated. + + + ### 4.2.0 (17/6/2018) - API for returning extra items returned by render server. diff --git a/react/__init__.py b/react/__init__.py index 4eed8e1..0910eff 100644 --- a/react/__init__.py +++ b/react/__init__.py @@ -1,3 +1,3 @@ -__version__ = '4.2.0' +__version__ = '4.2.1' default_app_config = 'react.apps.ReactConfig' \ No newline at end of file From b3826c1dc115400749a57233eac94cf06d49af71 Mon Sep 17 00:00:00 2001 From: Jaylum Chen Date: Wed, 8 Aug 2018 18:16:12 -0700 Subject: [PATCH 10/15] take url as an arg --- react/render_server.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/react/render_server.py b/react/render_server.py index 679cc8b..b7d7d48 100644 --- a/react/render_server.py +++ b/react/render_server.py @@ -21,8 +21,9 @@ def __unicode__(self): class RenderServer(object): - def render(self, path, props=None, to_static_markup=False, request_headers=None, timeout=None): - url = conf.settings.RENDER_URL + def render(self, path, props=None, to_static_markup=False, request_headers=None, timeout=None, url=None): + if not url: + url = conf.settings.RENDER_URL if props is not None: serialized_props = json.dumps(props, cls=JSONEncoder) From 8a44adf0d9d2bb1078d759c1fae219b75005a024 Mon Sep 17 00:00:00 2001 From: Mark Finger Date: Mon, 8 Oct 2018 20:54:46 +1100 Subject: [PATCH 11/15] 4.3.0 --- CHANGELOG.md | 20 ++++++++++++++++++-- react/__init__.py | 2 +- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b21d1ad..2d309cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,19 @@ Changelog ========= + +### 4.3.0 (8/10/2018) + +- Add option to pass a URL explicitly instead of reading from settings. + ([jchen-eb](https://github.com/jchen-eb)) + https://github.com/markfinger/python-react/pull/88 + + ### 4.2.1 (17/6/2018) - Fix for a missing argument bug that could occur with rendering deactivated. - ### 4.2.0 (17/6/2018) - API for returning extra items returned by render server. @@ -21,7 +28,6 @@ Changelog https://github.com/markfinger/python-react/pull/81 - ### 4.1.0 (1/3/2017) - `render_component` now accepts a `timeout` keyword argument which is passed to `RenderServer.render`. @@ -40,6 +46,7 @@ Changelog rendering. - Documentation updates regarding `RenderServer` API. + ### 3.0.1 (6/4/2016) - Documentation updates. @@ -65,6 +72,7 @@ Changelog ([Pringels](https://github.com/Pringels)) https://github.com/markfinger/python-react/pull/55 + ### 2.0.0 (22/9/2015) - **Breaking change** The base renderer's __init__ no longer accepts the RENDER_URL setting as an argument. @@ -89,6 +97,7 @@ Changelog - Fixed a potential path issue in config files - Replaced the webpack-service dependency with webpack-wrapper. + ### 0.8.0 (26/1/2015) - Boosting render performance by using a dedicated render server. @@ -97,6 +106,7 @@ Changelog render server, 'django_react.render_server.ReactRenderServer'. The legacy renderer is useable by setting DJANGO_REACT['RENDERER'] = 'django_react.renderer.ReactRenderer'. + ### 0.7.0 (2/1/2015) - Changed `django_react.exceptions.ReactComponentMissingSourceAttribute` to `django_react.exceptions.ReactComponentMissingSource` @@ -107,10 +117,12 @@ Changelog - The Python<->JS bridge used to render components now relies on a `--serialized-props-file` argument, formerly it was `--serialized-props`. - Switched the JSX loader to a fork which improves the debug information provided during error handling + ### 0.6.0 (24/12/2014) - The NODE_ENV environment setting is now controlled by the `DJANGO_REACT['DEBUG']` setting. Activating it will provides some improvements to the rendering performance. + ### 0.5.0 (14/12/2014) - Renamed `django_react.exceptions.PropSerialisationError` to `django_react.exceptions.PropSerializationError`. @@ -132,6 +144,7 @@ Changelog - Added a test suite and harness. - Added basic documentation. + ### 0.4.0 (11/12/2014) - Fixed a bug where errors caused during a component's prop serialization could silently fail. @@ -144,6 +157,7 @@ Changelog - `ReactComponent.get_component_variable` is now `ReactComponent.get_library`. - Moved the Webpack configuration into the ReactComponent class. + ### 0.3.0 (3/12/2014) - `django_react.exceptions.ReactComponentSourceFileNotFound` is now `django_react.exceptions.SourceFileNotFound` @@ -154,10 +168,12 @@ Changelog - `django_react.utils.render` no longer accepts a `ReactComponent` as an argument, it now takes `path_to_source`, `serialised_props`, and `to_static_markup`. - `django_react/render.js` no longer accepts the `--path-to-component` argument, instead it takes `--path-to-source`. + ### 0.2.0 (3/12/2014) - Replaced the post-install step in setup.py with django-node's dependency and package resolver. + ### 0.1.0 (2/12/2014) - Initial release diff --git a/react/__init__.py b/react/__init__.py index 0910eff..66cf931 100644 --- a/react/__init__.py +++ b/react/__init__.py @@ -1,3 +1,3 @@ -__version__ = '4.2.1' +__version__ = '4.3.0' default_app_config = 'react.apps.ReactConfig' \ No newline at end of file From 787a17a2fc82ce56e67b2f731154cefe59388efc Mon Sep 17 00:00:00 2001 From: Emilio Tagua Date: Mon, 14 Sep 2020 11:48:57 -0300 Subject: [PATCH 12/15] Test on travis with newer versions of Python and Django --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2308405..7fcdacb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,11 +2,13 @@ language: python python: - "2.7" - - "3.4" + - "3.8" env: - DJANGO_VERSION=1.7.8 - DJANGO_VERSION=1.8.1 + - DJANGO_VERSION=2.2.16 + - DJANGO_VERSION=3.1.1 install: # Install node 6 (current LTS as of January 2017) From c68dacc4d53449e5e1f049f317b1f542cabe33c0 Mon Sep 17 00:00:00 2001 From: Tim Gates Date: Mon, 28 Dec 2020 21:46:38 +1100 Subject: [PATCH 13/15] docs: fix simple typo, browswer -> browser There is a small typo in examples/frontend-rendering-with-webpack/README.md. Should read `browser` rather than `browswer`. --- examples/frontend-rendering-with-webpack/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/frontend-rendering-with-webpack/README.md b/examples/frontend-rendering-with-webpack/README.md index f7b9908..05f9421 100644 --- a/examples/frontend-rendering-with-webpack/README.md +++ b/examples/frontend-rendering-with-webpack/README.md @@ -1,7 +1,7 @@ Running the example =================== -As mentioned in the ***Using React on the front-end*** section, [Webpack](https://webpack.github.io/) is used to bundle the respective js files into `dist.js` and included in `index.html`. To make React attributes like `onClick` etc. work, the app has to be re-rendered (along with all the props passed down) when it loads on the browswer. React is intelligent enough to not re-paint the browser and only update the changes, thus adding all the component properties. +As mentioned in the ***Using React on the front-end*** section, [Webpack](https://webpack.github.io/) is used to bundle the respective js files into `dist.js` and included in `index.html`. To make React attributes like `onClick` etc. work, the app has to be re-rendered (along with all the props passed down) when it loads on the browser. React is intelligent enough to not re-paint the browser and only update the changes, thus adding all the component properties. In this example, the basic_rendering example is modified to submit the Comment Form through ajax and update the Comment List by fetching the updated comments and rendering the application with new props. From fe54b3e78fda2952d22fb32d89bf91bdebc393b9 Mon Sep 17 00:00:00 2001 From: lolivera-eb <80480298+lolivera-eb@users.noreply.github.com> Date: Mon, 5 Jul 2021 14:50:42 -0300 Subject: [PATCH 14/15] update python version --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 7fcdacb..a61f73b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,8 @@ language: python python: - "2.7" + - "3.5" + - "3.7" - "3.8" env: @@ -9,6 +11,7 @@ env: - DJANGO_VERSION=1.8.1 - DJANGO_VERSION=2.2.16 - DJANGO_VERSION=3.1.1 + - DJANGO_VERSION=1.8.19 install: # Install node 6 (current LTS as of January 2017) From 1703ebe0805fd187f54a945ca03796ece518fca1 Mon Sep 17 00:00:00 2001 From: xav <73826012+gravybrux@users.noreply.github.com> Date: Thu, 29 Jun 2023 15:25:41 +0100 Subject: [PATCH 15/15] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a2d4e40..b73e30c 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ rendered = render_component('path/to/component.jsx', {'foo': 'bar'}) print(rendered) ``` -The object returned has two properties: +The object returned has three properties: - `markup` - the rendered markup - `props` - the JSON-serialized props