visualization: add warehouse slug support (#38596)

This commit is contained in:
Valentin Deniaud 2019-12-24 16:47:46 +01:00
parent 9004d49fb7
commit ebb9cb3e39
4 changed files with 27 additions and 3 deletions

View File

@ -395,9 +395,10 @@ class Cube(Base):
class Warehouse(Base):
__slots__ = ['name', 'label', 'pg_dsn', 'search_path', 'cubes', 'path']
__slots__ = ['name', 'slug', 'label', 'pg_dsn', 'search_path', 'cubes', 'path']
__types__ = {
'name': str,
'slug': str,
'label': unicode,
'pg_dsn': str,
'search_path': [str],
@ -406,6 +407,7 @@ class Warehouse(Base):
}
path = None
slug = None
def check(self):
names = collections.Counter(cube.name for cube in self.cubes)

View File

@ -61,6 +61,7 @@ class Visualization(object):
def to_json(self):
return {
'warehouse': self.cube.engine.warehouse.name,
'warehouse_slug': self.cube.engine.warehouse.slug,
'cube': self.cube.name,
'representation': self.representation,
'measure': self.measure and self.measure.name,
@ -80,7 +81,10 @@ class Visualization(object):
if not warehouses:
warehouses = get_warehouses()
for warehouse in warehouses:
if d['warehouse'] == warehouse.name:
if warehouse.slug and 'warehouse_slug' in d:
if d['warehouse_slug'] == warehouse.slug:
break
elif d['warehouse'] == warehouse.name: # legacy
break
else:
raise Http404('warehouse %s not found' % d['warehouse'])

View File

@ -241,6 +241,7 @@
],
"label": "test schema1",
"name": "schema1",
"slug": "schema1_slug",
"pg_dsn": "fixme",
"search_path": [
"schema1"

View File

@ -40,9 +40,10 @@ def test_visualizations_json_api(schema1, app, admin):
Visualization(name='test', parameters={'warehouse': 'schema1', 'cube': 'test'}).save()
Visualization(name='test', parameters={'warehouse': 'schema1', 'cube': 'test'}).save()
Visualization(name='test', parameters={'warehouse': 'schema1', 'cube': 'test'}).save()
Visualization(name='test', parameters={'warehouse_slug': 'schema1_slug', 'cube': 'test'}).save()
login(app, admin)
resp = app.get(reverse('visualizations-json'))
assert set([x['slug'] for x in resp.json]) == set(['test', 'test-2', 'test-3'])
assert set([x['slug'] for x in resp.json]) == set(['test', 'test-2', 'test-3', 'test-4'])
def test_visualization_json_api(schema1, app, admin):
@ -110,3 +111,19 @@ def test_missing_data(schema1, app, admin):
response = app.get('/')
assert response.pyquery('ul li a.disabled').text() == visualization.name
def test_visualization_creation_view(schema1, app, admin):
login(app, admin)
response = app.get('/').follow()
response = response.click('Facts 1')
form = response.form
form.set('representation', 'table')
form.set('measure', 'simple_count')
response = form.submit('visualize')
response = response.click(href='save')
response.form['name'] = 'test'
response.form.submit()
visu = Visualization.objects.get(name='test')
assert visu.parameters['warehouse_slug'] == 'schema1_slug'