From dbda04a2cd549875cc6c931ab180b9d519b4f90b Mon Sep 17 00:00:00 2001 From: Richard Tibbles Date: Wed, 24 Feb 2016 11:14:50 -0800 Subject: [PATCH 1/2] Don't load facilities into session object. Don't even bother caching a list of facilities on the central server. --- kalite/facility/api_resources.py | 26 +++++++++++++++++++++++--- kalite/facility/middleware.py | 4 ---- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/kalite/facility/api_resources.py b/kalite/facility/api_resources.py index c22cdb6a16..87c0ae2353 100644 --- a/kalite/facility/api_resources.py +++ b/kalite/facility/api_resources.py @@ -1,7 +1,6 @@ import datetime -import os from dateutil.tz import tzlocal - +from django.db.models.signals import post_save from tastypie import fields from tastypie.http import HttpUnauthorized from tastypie.resources import ModelResource, ALL_WITH_RELATIONS @@ -40,6 +39,27 @@ class Meta: resource_name = 'group' authorization = TeacherOrAdminCanReadWrite() +FACILITY_LIST = None + +def facility_list(): + global FACILITY_LIST + + if FACILITY_LIST is None: + if settings.CENTRAL_SERVER: + FACILITY_LIST = [] + else: + # To enable login, list the id and names of all facilities. + # This keeps it cached so that the status api call can return this to the client side + # without significantly increasing DB load on every status call. + FACILITY_LIST = [{"id": id, "name": name} for id, name in Facility.objects.values_list("id", "name")] + + return FACILITY_LIST + +def flag_facility_cache(**kwargs): + global FACILITY_LIST + FACILITY_LIST = None + +post_save.connect(flag_facility_cache, sender=Facility) class FacilityUserResource(ModelResource): facility = fields.ForeignKey(FacilityResource, 'facility') @@ -188,7 +208,7 @@ def generate_status(self, request, **kwargs): "messages": message_dicts, "status_timestamp": datetime.datetime.now(tzlocal()), "version": version.VERSION, - "facilities": request.session.get("facilities"), + "facilities": facility_list(), "simplified_login": settings.SIMPLIFIED_LOGIN, "docs_exist": getattr(settings, "DOCS_EXIST", False), "zone_id": getattr(Device.get_own_device().get_zone(), "id", "None"), diff --git a/kalite/facility/middleware.py b/kalite/facility/middleware.py index 21832a430f..c8f73bc07f 100644 --- a/kalite/facility/middleware.py +++ b/kalite/facility/middleware.py @@ -15,10 +15,6 @@ def refresh_session_facility_info(request, facility_count): request.session["facility_count"] = facility_count request.session["facility_exists"] = request.session["facility_count"] > 0 - # To enable simplified login, also list the id and names of all facilities in the session object. - # This keeps it cached so that the status api call can return this to the client side - # without significantly increasing DB load on every status call. - request.session["facilities"] = [{"id": id, "name": name} for id, name in Facility.objects.values_list("id", "name")] def flag_facility_cache(**kwargs): global FACILITY_CACHE_STALE From 8f29d8387a8da7f4b0ea8391898f0ccf5e0abc08 Mon Sep 17 00:00:00 2001 From: Richard Tibbles Date: Wed, 24 Feb 2016 17:45:23 -0800 Subject: [PATCH 2/2] Simplify the way we render FacilityGroup forms. --- kalite/facility/forms.py | 5 ++++- .../templates/facility/facility_group.html | 17 ----------------- kalite/facility/views.py | 1 - 3 files changed, 4 insertions(+), 19 deletions(-) diff --git a/kalite/facility/forms.py b/kalite/facility/forms.py index f684d23533..d0377403e2 100644 --- a/kalite/facility/forms.py +++ b/kalite/facility/forms.py @@ -165,14 +165,17 @@ def __init__(self, facility, *args, **kwargs): self.fields["facility"].initial = facility self.fields["facility"].queryset = Facility.objects.by_zone(facility.get_zone()) + if self.fields["facility"].queryset.count() < 2: + self.fields["facility"].widget = forms.HiddenInput() + class Meta: model = FacilityGroup fields = ("name", "description", "facility", "zone_fallback", ) widgets = { - "facility": forms.HiddenInput(), "zone_fallback": forms.HiddenInput(), # TODO(jamalex): this shouldn't be in here } + def clean_name(self): name = self.cleaned_data.get("name", "") ungrouped = re.compile("[uU]+ngrouped") diff --git a/kalite/facility/templates/facility/facility_group.html b/kalite/facility/templates/facility/facility_group.html index ac1ba6c68f..9cf8a99c29 100644 --- a/kalite/facility/templates/facility/facility_group.html +++ b/kalite/facility/templates/facility/facility_group.html @@ -1,29 +1,12 @@ {% extends "distributed/base_manage.html" %} {% load i18n %} -{% block headcss %}{{ block.super }} - -{% endblock headcss %} - {% block headjs %}{{ block.super }} {% endblock headjs %} diff --git a/kalite/facility/views.py b/kalite/facility/views.py index e9ef1ae1f9..20478e0009 100644 --- a/kalite/facility/views.py +++ b/kalite/facility/views.py @@ -184,7 +184,6 @@ def group_edit(request, facility, group_id): "form": form, "group_id": group_id, "facility": facility, - "singlefacility": request.session["facility_count"] == 1, "title": _("Add a new group") if group_id == 'new' else _("Edit group"), }