utils: get tenant from import rather than request (#27412)

This commit is contained in:
Valentin Deniaud 2019-11-21 11:53:27 +01:00
parent 6716a7594f
commit 7a5373c91e
4 changed files with 13 additions and 13 deletions

View File

@ -19,18 +19,19 @@ import glob
import json
from django.conf import settings
from django.db import connection
from django.utils.translation import ugettext as _
from .schemas import Warehouse
def get_warehouses(request=None):
def get_warehouses():
warehouses = []
for pattern in settings.BIJOE_SCHEMAS:
for path in glob.glob(pattern):
warehouses.append(Warehouse.from_json(json.load(open(path))))
if hasattr(request, 'tenant'):
pattern = os.path.join(request.tenant.get_directory(), 'schemas', '*.model')
if hasattr(connection, 'tenant'):
pattern = os.path.join(connection.tenant.get_directory(), 'schemas', '*.model')
for path in glob.glob(pattern):
warehouses.append(Warehouse.from_json(json.load(open(path))))
return warehouses

View File

@ -59,7 +59,7 @@ class HomepageView(AuthorizationMixin, TemplateView):
def get_context_data(self, **kwargs):
ctx = super(HomepageView, self).get_context_data(**kwargs)
ctx['visualizations'] = Visualization.objects.all()
ctx['warehouses'] = sorted((Engine(w) for w in get_warehouses(self.request)),
ctx['warehouses'] = sorted((Engine(w) for w in get_warehouses()),
key=lambda w: w.label)
return ctx

View File

@ -75,8 +75,8 @@ class Visualization(object):
filters=copy.deepcopy(self.filters), loop=self.loop)
@classmethod
def from_json(cls, d, request=None):
for warehouse in get_warehouses(request=request):
def from_json(cls, d):
for warehouse in get_warehouses():
if d['warehouse'] == warehouse.name:
break
else:

View File

@ -46,7 +46,7 @@ class WarehouseView(views.AuthorizationMixin, TemplateView):
def get_context_data(self, **kwargs):
ctx = super(WarehouseView, self).get_context_data(**kwargs)
try:
warehouse = [warehouse for warehouse in get_warehouses(self.request)
warehouse = [warehouse for warehouse in get_warehouses()
if warehouse.name == self.kwargs['warehouse']][0]
except IndexError:
raise Http404
@ -72,7 +72,7 @@ class CubeMixin(object):
def dispatch(self, request, *args, **kwargs):
try:
self.warehouse = Engine([warehouse for warehouse in get_warehouses(self.request)
self.warehouse = Engine([warehouse for warehouse in get_warehouses()
if warehouse.name == self.kwargs['warehouse']][0])
except IndexError:
raise Http404
@ -123,8 +123,7 @@ class VisualizationView(views.AuthorizationMixin, CubeDisplayMixin, DetailView):
def get_object(self):
named_visualization = super(VisualizationView, self).get_object()
if not hasattr(self, 'visualization'):
self.visualization = Visualization.from_json(named_visualization.parameters,
request=self.request)
self.visualization = Visualization.from_json(named_visualization.parameters)
self.cube = self.visualization.cube
self.warehouse = self.cube.engine
return named_visualization
@ -235,7 +234,7 @@ class VisualizationODSView(views.AuthorizationMixin, DetailView):
def get(self, request, *args, **kwargs):
instance = self.get_object()
visualization = Visualization.from_json(instance.parameters, request=request)
visualization = Visualization.from_json(instance.parameters)
response = HttpResponse(content_type='application/vnd.oasis.opendocument.spreadsheet')
response['Content-Disposition'] = 'attachment; filename=%s.ods' % slugify(instance.name)
workbook = visualization.ods()
@ -249,7 +248,7 @@ class VisualizationGeoJSONView(generics.GenericAPIView):
def get(self, request, pk, format=None):
instance = self.get_object()
visualization = Visualization.from_json(instance.parameters, request=request)
visualization = Visualization.from_json(instance.parameters)
visualization.measure = visualization.cube.measures['geolocation']
drilldown = visualization.drilldown
geojson = []
@ -282,7 +281,7 @@ class VisualizationJSONView(generics.GenericAPIView):
instance = self.get_object()
loop = []
all_visualizations = Visualization.from_json(instance.parameters, request=request)
all_visualizations = Visualization.from_json(instance.parameters)
for visualization in all_visualizations:
drilldowns = visualization.drilldown
if len(drilldowns) == 2: