Projet

Général

Profil

0001-api-add-json-view-of-visualization-data-26847.patch

Frédéric Péters, 24 février 2019 09:49

Télécharger (4,37 ko)

Voir les différences:

Subject: [PATCH] api: add json view of visualization data (#26847)

 bijoe/visualization/urls.py  |  1 +
 bijoe/visualization/views.py | 16 ++++++++++++++++
 tests/test_views.py          | 23 +++++++++++++++++++++++
 3 files changed, 40 insertions(+)
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
-