Skip to content

Commit 997187f

Browse files
authored
Merge pull request #51 from hadpro24/develop
add json render
2 parents ecf0774 + 027e2c7 commit 997187f

File tree

7 files changed

+87
-9
lines changed

7 files changed

+87
-9
lines changed

codecov.yml

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
codecov:
2+
require_ci_to_pass: false
3+
coverage:
4+
precision: 2
5+
round: down
6+
range: "70...100"
7+
status:
8+
project:
9+
default:
10+
# basic
11+
target: auto
12+
threshold: 1%
13+
base: auto
14+
patch:
15+
default:
16+
# basic
17+
target: 75%
18+
threshold: 1%
19+
base: auto

examples/awesome_app/app/views.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from nimba.http import router, render
1+
from nimba.http import router, render, json_render
22

33
films = [
44
{
@@ -74,3 +74,16 @@ def film_detail(request, id):
7474
}
7575
return render('awesome_app/detail_film.html', contexts)
7676

77+
78+
@router('/users')
79+
def users(request):
80+
return json_render({'users': [
81+
{
82+
'id': 4,
83+
'name': 'harouna'
84+
},
85+
{
86+
'id': 2,
87+
'name': 'diallo'
88+
},
89+
]})

nimba/http/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from .utils import router, render, reverse
2-
from .utils import redirect
2+
from .utils import redirect, json_render
33
from .utils import ROUTES
44

55
all = [

nimba/http/utils.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from jinja2 import select_autoescape
1919
from jinja2 import BaseLoader
2020
import tempfile
21+
import json
2122

2223
from nimba.http.request import Request
2324
from nimba.http.response import Response
@@ -39,6 +40,21 @@
3940
REVERSE_ROUTE_INFO = {}
4041
PROJECT_MASK = 'PROJECT_MASK_PATH'
4142

43+
def json_render(data, status=200):
44+
"""
45+
render json data
46+
"""
47+
data = json.dumps(data)
48+
headers = Headers()
49+
headers.add_header('Content-Type', 'application/json')
50+
status_string = http.client.responses.get(status, 'UNKNOWN')
51+
response = {
52+
'status': f'{status} {status_string}',
53+
'content': [data.encode('utf-8')],
54+
'headers': headers,
55+
}
56+
return response
57+
4258
def reverse(name_path, *args, **kwargs):
4359
"""
4460
Reverse path using name or function name str
@@ -116,7 +132,6 @@ def redirect(to, partial=False):
116132
'content': [b''],
117133
'headers': headers,
118134
}
119-
print('kkkkkkkkkkkkkkkkkkk', response)
120135
return response
121136

122137
def load_static(value):

nimba/test/client.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ def _run(self):
4646
self.host, self.port, self.app
4747
)
4848
# Don't to log
49-
# log_request = httpd.RequestHandlerClass.log_request
50-
# no_logging = lambda *args, **kwargs: None
51-
# httpd.RequestHandlerClass.log_request = no_logging
49+
log_request = httpd.RequestHandlerClass.log_request
50+
no_logging = lambda *args, **kwargs: None
51+
httpd.RequestHandlerClass.log_request = no_logging
5252

5353
self.ready.set()
5454
while True:
@@ -60,7 +60,7 @@ def _run(self):
6060

6161
if self.stop_read in ready:
6262
os.read(self.stop_read, len(self.__stop_marker))
63-
# httpd.RequestHandlerClass.log_request = log_request
63+
httpd.RequestHandlerClass.log_request = log_request
6464
break
6565

6666

setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = nimba
3-
version = 0.0.11
3+
version = 0.0.13
44
description = Nimba is a fast coding, web framework with Python.
55
long_description = file: README.rst
66
keywords = python, python3, framework, nimba, nimba-solution, web

tests/test_router.py

+32-1
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66
import sys
77
import time
88
import shutil
9+
import json
910
from unittest.mock import patch
1011

11-
from nimba.http import router, render, reverse, redirect
12+
from nimba.http import (
13+
router, render, reverse, redirect,
14+
json_render
15+
)
1216
from nimba.core.server import Application
1317
from nimba.core.exceptions import NoReverseFound
1418

@@ -51,6 +55,19 @@ def move_partial(request):
5155
def move(request):
5256
return redirect('redirect_to')
5357

58+
@router('/jsonify-post')
59+
def post_data(request):
60+
return json_render(
61+
{'success': True, 'message': 'Email send successfuly!'},
62+
status=201
63+
)
64+
65+
@router('/jsonify-get')
66+
def get_data(request):
67+
return json_render(
68+
{'success': True, 'data': [4, 5, 6]},
69+
)
70+
5471
class TestRouterRender(TestCase):
5572
def setUp(self):
5673
os.environ['PROJECT_MASK_PATH'] = str(pathlib.Path(
@@ -156,6 +173,20 @@ def test_redirect_permanente(self):
156173
self.assertEqual(200, response['status_code'])
157174
self.assertEqual('Test direct', response['text'])
158175

176+
def test_json_render(self):
177+
response = self.get(reverse('post_data'))
178+
self.assertEqual(response['status_code'], 201)
179+
data = json.loads(response['text'])
180+
self.assertEqual(data['success'], True)
181+
self.assertTrue(data['message'])
182+
183+
def test_json_render(self):
184+
response = self.get(reverse('get_data'))
185+
self.assertEqual(response['status_code'], 200)
186+
data = json.loads(response['text'])
187+
self.assertEqual(data['success'], True)
188+
self.assertTrue(data['data'])
189+
159190
def tearDown(self):
160191
try:
161192
shutil.rmtree('tests/templates')

0 commit comments

Comments
 (0)