perf: optimize badge checking
This commit is contained in:
parent
d736942516
commit
615c215870
|
@ -381,23 +381,30 @@ class CellBase(models.Model):
|
|||
return self.__class__.__name__.lower() + ' ' + self.extra_css_class
|
||||
|
||||
@classmethod
|
||||
def get_all_cell_types(cls):
|
||||
cell_types = []
|
||||
def get_cell_classes(cls, class_filter=lambda x: True):
|
||||
for klass in get_cell_classes():
|
||||
if not class_filter(klass):
|
||||
continue
|
||||
if not klass.is_enabled():
|
||||
continue
|
||||
if klass.visible is False:
|
||||
continue
|
||||
yield klass
|
||||
|
||||
@classmethod
|
||||
def get_all_cell_types(cls):
|
||||
cell_types = []
|
||||
for klass in cls.get_cell_classes():
|
||||
cell_types.extend(klass.get_cell_types())
|
||||
return cell_types
|
||||
|
||||
@classmethod
|
||||
def get_cells(cls, concrete=True, **kwargs):
|
||||
def get_cells(cls, concrete=True, subclasses=(), **kwargs):
|
||||
"""Returns a queryset of cells of various classes matching **kwargs"""
|
||||
queryset = cls.objects.filter(**kwargs).order_by('order')
|
||||
if not concrete:
|
||||
return queryset
|
||||
return queryset.select_subclasses()
|
||||
return queryset.select_subclasses(*subclasses)
|
||||
|
||||
def get_reference(self):
|
||||
"Returns a string that can serve as a unique reference to a cell"""
|
||||
|
|
|
@ -218,14 +218,13 @@ def skeleton(request):
|
|||
cells = list(cells)
|
||||
extend_with_parent_cells(cells)
|
||||
|
||||
cell_with_badges = [x for x in CellBase.get_cells() if bool(x.get_badge)]
|
||||
ctx = {
|
||||
'page': selected_page,
|
||||
'page_cells': cells,
|
||||
'pages': pages,
|
||||
'request': request,
|
||||
'render_skeleton': True,
|
||||
'check_badges': bool(cell_with_badges),
|
||||
'check_badges': should_check_badges(),
|
||||
'site_base': request.build_absolute_uri('/')[:-1],
|
||||
}
|
||||
|
||||
|
@ -337,6 +336,14 @@ def page(request):
|
|||
|
||||
return publish_page(request, page)
|
||||
|
||||
def should_check_badges():
|
||||
check_badges = False
|
||||
for klass in CellBase.get_cell_classes(lambda x: bool(x.get_badge)):
|
||||
check_badges = klass.objects.all().exists()
|
||||
if check_badges:
|
||||
break
|
||||
return check_badges
|
||||
|
||||
def publish_page(request, page, status=200, template_name=None):
|
||||
pages = page.get_parents_and_self()
|
||||
|
||||
|
@ -352,10 +359,9 @@ def publish_page(request, page, status=200, template_name=None):
|
|||
cells = list(CellBase.get_cells(page_id=page.id))
|
||||
extend_with_parent_cells(cells)
|
||||
cells = [x for x in cells if x.is_visible(user=request.user)]
|
||||
cell_with_badges = [x for x in CellBase.get_cells() if bool(x.get_badge)]
|
||||
|
||||
ctx = {
|
||||
'check_badges': bool(cell_with_badges),
|
||||
'check_badges': should_check_badges(),
|
||||
'page': page,
|
||||
'page_cells': cells,
|
||||
'pages': pages,
|
||||
|
|
Loading…
Reference in New Issue