0001-api-add-json-view-of-visualization-data-26847.patch
bijoe/visualization/urls.py | ||
---|---|---|
30 | 30 |
url(r'warehouse/(?P<warehouse>[^/]*)/(?P<cube>[^/]*)/save/$', |
31 | 31 |
views.create_visualization, name='create-visualization'), |
32 | 32 |
url(r'(?P<pk>\d+)/$', views.visualization, name='visualization'), |
33 |
url(r'(?P<pk>\d+)/json/$', views.visualization_json, name='visualization-json'), |
|
33 | 34 |
url(r'(?P<pk>\d+)/geojson/$', views.visualization_geojson, name='visualization-geojson'), |
34 | 35 |
url(r'(?P<pk>\d+)/iframe/$', views.visualization_iframe, name='visualization-iframe'), |
35 | 36 |
url(r'(?P<pk>\d+)/rename/$', views.rename_visualization, name='rename-visualization'), |
bijoe/visualization/views.py | ||
---|---|---|
223 | 223 |
path = reverse('visualization-iframe', kwargs={'pk': visualization.pk}) |
224 | 224 |
sig = hashlib.sha1(path + settings.SECRET_KEY).hexdigest() |
225 | 225 |
path += '?signature=' + sig |
226 |
data_uri = reverse('visualization-json', kwargs={'pk': visualization.pk}) |
|
226 | 227 |
data.append({ |
227 | 228 |
'name': visualization.name, |
228 | 229 |
'path': request.build_absolute_uri(path), |
230 |
'data-url': request.build_absolute_uri(data_uri), |
|
229 | 231 |
}) |
230 | 232 |
response = HttpResponse(content_type='application/json') |
231 | 233 |
response.write(json.dumps(data)) |
... | ... | |
261 | 263 |
return Response(geojson) |
262 | 264 | |
263 | 265 | |
266 |
class VisualizationJSONView(generics.GenericAPIView): |
|
267 |
permission_classes = () |
|
268 |
queryset = models.Visualization.objects.all() |
|
269 | ||
270 |
def get(self, request, pk, format=None): |
|
271 |
instance = self.get_object() |
|
272 |
visualization = Visualization.from_json(instance.parameters, request=request) |
|
273 |
return Response({ |
|
274 |
'data': [x.data() for x in visualization], |
|
275 |
'format': '1', |
|
276 |
}) |
|
277 | ||
278 | ||
264 | 279 |
warehouse = WarehouseView.as_view() |
265 | 280 |
cube = CubeView.as_view() |
266 | 281 |
cube_iframe = xframe_options_exempt(CubeIframeView.as_view()) |
... | ... | |
272 | 287 |
visualization = VisualizationView.as_view() |
273 | 288 |
visualization_iframe = xframe_options_exempt(VisualizationIframeView.as_view()) |
274 | 289 |
visualization_geojson = VisualizationGeoJSONView.as_view() |
290 |
visualization_json = VisualizationJSONView.as_view() |
|
275 | 291 | |
276 | 292 |
cube_iframe.mellon_no_passive = True |
277 | 293 |
visualization_iframe.mellon_no_passive = True |
tests/test_views.py | ||
---|---|---|
14 | 14 |
# You should have received a copy of the GNU Affero General Public License |
15 | 15 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 | |
17 |
from django.core.urlresolvers import reverse |
|
18 | ||
19 |
from bijoe.visualization.models import Visualization |
|
20 | ||
17 | 21 |
from utils import login |
18 | 22 | |
19 | 23 | |
... | ... | |
29 | 33 |
assert len(resp.json) == 1 |
30 | 34 |
assert resp.json[0]['slug'] == 'statistics' |
31 | 35 |
app.get('/', status=200) |
36 | ||
37 | ||
38 |
def test_visualization_json_api(schema1, app, admin): |
|
39 |
visualization = Visualization( |
|
40 |
name='test', |
|
41 |
parameters={ |
|
42 |
'cube': 'facts1', |
|
43 |
'warehouse': 'schema1', |
|
44 |
'measure': 'simple_count', |
|
45 |
'representation': 'table', |
|
46 |
'loop': '', |
|
47 |
'filters': {}, |
|
48 |
'drilldown_x': 'date__yearmonth'}) |
|
49 |
visualization.save() |
|
50 | ||
51 |
login(app, admin) |
|
52 |
resp = app.get(reverse('visualization-json', kwargs={'pk': visualization.id})) |
|
53 |
# values from test_schem1/test_yearmonth_drilldown |
|
54 |
assert [x[-1]['value'] for x in resp.json['data'][0]] == [10, 1, 1, 1, 1, 1, 1, 1] |
|
32 |
- |