Skip to content

Commit 291a692

Browse files
committed
Decoupling from django
Moved react_render.render into react_render.django.render and split out core functionality into react_render.core.
1 parent c2e309b commit 291a692

File tree

16 files changed

+93
-69
lines changed

16 files changed

+93
-69
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Example
88
-------
99

1010
```python
11-
from react_render.render import render_component
11+
from react_render.django.render import render_component
1212

1313
props = {
1414
'foo': 'bar',
@@ -112,6 +112,7 @@ mkvirtualenv react-render
112112
pip install .
113113
cd tests
114114
npm install
115+
npm run react-render &
115116
cd ..
116117
python runtests.py
117118
```

example/example_app/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from django.core.urlresolvers import reverse
33
from django.http import HttpResponse
44
from django.shortcuts import render, redirect
5-
from react_render.render import render_component
5+
from react_render.django import render_component
66

77
comments = []
88

example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@
1212
"marked": "^0.3.3",
1313
"react": "^0.13.0",
1414
"webpack": "^1.6.0",
15-
"react-render-service": "^0.10.3"
15+
"react-render-service": "^0.11.0"
1616
}
1717
}

example/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
react-render-client==0.10.3
1+
react-render-client==0.11.0

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-render-service",
3-
"version": "0.10.3",
3+
"version": "0.11.0",
44
"description": "HTTP microservice for rendering React to HTML on the server side",
55
"main": "render.js",
66
"bin": {

react_render/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from react_render.core import render_component

react_render/core.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import os
2+
import json
3+
import requests
4+
from react_render.exceptions import ComponentSourceFileNotFound, ComponentRenderingError
5+
6+
DEFAULT_SERVICE_URL = 'http://localhost:63578/render'
7+
8+
def render_component(path_to_source, props=None, to_static_markup=False, json_encoder=None, service_url=None):
9+
if not os.path.exists(path_to_source):
10+
raise ComponentSourceFileNotFound(path_to_source)
11+
12+
if json_encoder is None:
13+
json_encoder = json.dumps
14+
15+
if service_url is None:
16+
service_url = DEFAULT_SERVICE_URL
17+
18+
response = requests.post(service_url,
19+
timeout=10.0,
20+
headers={'Content-Type': 'application/json'},
21+
data=json_encoder({
22+
'props': props,
23+
'path_to_source': path_to_source,
24+
'to_static_markup': to_static_markup,
25+
}))
26+
27+
if response.status_code != 200:
28+
raise ComponentRenderingError(response.text)
29+
30+
return response.text

react_render/django/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from react_render.django.render import render_component
File renamed without changes.

react_render/django/render.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from __future__ import absolute_import
2+
3+
import os
4+
from django.contrib.staticfiles import finders
5+
from django.core.serializers.json import DjangoJSONEncoder
6+
from django.utils.safestring import mark_safe
7+
from django.conf import settings
8+
from react_render.core import render_component as render_core
9+
from react_render.core import DEFAULT_SERVICE_URL
10+
11+
SERVICE_URL = getattr(settings, 'REACT_SERVICE_URL', DEFAULT_SERVICE_URL)
12+
13+
14+
class RenderedComponent(object):
15+
def __init__(self, output, path_to_source, props, json_encoder):
16+
self.output = output
17+
self.path_to_source = path_to_source
18+
self.props = props
19+
self.json_encoder = json_encoder
20+
21+
def __str__(self):
22+
return mark_safe(self.output)
23+
24+
def __unicode__(self):
25+
return mark_safe(self.output)
26+
27+
def render_props(self):
28+
if self.props:
29+
return mark_safe(self.json_encoder(self.props))
30+
return '{}'
31+
32+
33+
def render_component(path_to_source, props=None, to_static_markup=False, json_encoder=None):
34+
if not os.path.isabs(path_to_source):
35+
path_to_source = finders.find(path_to_source) or path_to_source
36+
37+
if json_encoder is None:
38+
json_encoder = DjangoJSONEncoder().encode
39+
40+
html = render_core(path_to_source, props, to_static_markup, json_encoder, service_url=SERVICE_URL)
41+
42+
return RenderedComponent(html, path_to_source, props, json_encoder)

0 commit comments

Comments
 (0)