Skip to content

Commit 2c4b8e4

Browse files
committed
Adiciona suporte à requisições JSONP
1 parent 2798b11 commit 2c4b8e4

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

PostmonServer.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from database import MongoDb as Database
88

99
app_v1 = bottle.Bottle()
10+
jsonp_query_key = 'callback'
1011

1112
def expired(record_date):
1213
from datetime import datetime, timedelta
@@ -26,6 +27,20 @@ def _get_info_from_source(cep):
2627
return info
2728

2829

30+
def format_result(result):
31+
# checa se foi solicitada resposta em JSONP
32+
js_func_name = bottle.request.query.get(jsonp_query_key)
33+
34+
if js_func_name:
35+
# se a resposta vai ser JSONP, o content type deve ser js e seu
36+
# conteudo deve ser JSON
37+
response.content_type = 'application/javascript'
38+
result = json.dumps(result)
39+
40+
result = '%s(%s);' % (js_func_name, result)
41+
return result
42+
43+
2944
@route('/cep/<cep:re:\d{5}-?\d{3}>')
3045
@app_v1.route('/cep/<cep:re:\d{5}-?\d{3}>')
3146
def verifica_cep(cep):
@@ -52,7 +67,7 @@ def verifica_cep(cep):
5267
if result:
5368

5469
response.headers['Cache-Control'] = 'public, max-age=2592000'
55-
return result
70+
return format_result(result)
5671
else:
5772
response.status = '404 O CEP %s informado nao pode ser localizado' % cep
5873
return
@@ -81,7 +96,7 @@ def track_pack(provider, track):
8196
resposta['codigo'] = track
8297
resposta['historico'] = result
8398

84-
return json.dumps(resposta)
99+
return format_result(resposta)
85100

86101
except AttributeError:
87102
response.status = '404 O pacote %s informado nao pode ser localizado' %track

test/postmon_test.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# encoding: utf-8
2+
import json
3+
import re
24
import unittest
35

46
import webtest
@@ -132,6 +134,27 @@ def assertCep(self, cep):
132134

133135
self.assertNotIn('v_date', result)
134136

137+
138+
class PostmonWebJSONPTest(PostmonWebTest):
139+
'''
140+
Teste de requisições JSONP no servidor do Postmon
141+
'''
142+
143+
def setUp(self):
144+
self.jsonp_query_key = PostmonServer.jsonp_query_key
145+
self.jsonp_func_name = 'func_name'
146+
super(PostmonWebJSONPTest, self).setUp()
147+
148+
def get_cep(self, cep):
149+
response = self.app.get('/cep/%s?%s=%s' %
150+
(cep, self.jsonp_query_key, self.jsonp_func_name))
151+
152+
regexp = re.compile('^%s\((.*)\);$' % self.jsonp_func_name)
153+
json_data = re.findall(regexp, response.body)[0]
154+
155+
return json.loads(json_data)
156+
157+
135158
class PostmonV1WebTest(PostmonWebTest):
136159

137160
'''

0 commit comments

Comments
 (0)