From 4d4c9c0db29ee851599afde70597659567cdaa81 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Mon, 27 Sep 2021 14:44:29 +0100 Subject: [PATCH 1/7] Make services natively sortable --- app/models/organisation.py | 3 +++ app/models/service.py | 3 +++ app/models/user.py | 8 ++------ 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/models/organisation.py b/app/models/organisation.py index 5ddffaf88..d9480f9c3 100644 --- a/app/models/organisation.py +++ b/app/models/organisation.py @@ -59,6 +59,9 @@ class Organisation(JSONModel): return cls({}) return cls(organisations_client.get_organisation(org_id)) + def __lt__(self, other): + return self.name.lower() < other.name.lower() + @classmethod def from_domain(cls, domain): return cls(organisations_client.get_organisation_by_domain(domain)) diff --git a/app/models/service.py b/app/models/service.py index b6012c5ad..659e3e8e9 100644 --- a/app/models/service.py +++ b/app/models/service.py @@ -77,6 +77,9 @@ class Service(JSONModel): def from_id(cls, service_id): return cls(service_api_client.get_service(service_id)['data']) + def __lt__(self, other): + return self.name.lower() < other.name.lower() + @property def permissions(self): return self._dict.get('permissions', self.TEMPLATE_TYPES) diff --git a/app/models/user.py b/app/models/user.py index f314d278c..43cd9a231 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -290,16 +290,12 @@ class User(JSONModel, UserMixin): def orgs_and_services(self): return user_api_client.get_organisations_and_services_for_user(self.id) - @staticmethod - def sort_services(services): - return sorted(services, key=lambda service: service.name.lower()) - @property def services(self): from app.models.service import Service - return self.sort_services([ + return sorted( Service(service) for service in self.orgs_and_services['services'] - ]) + ) @property def services_with_organisation(self): From 9281ca7d50986c8a19940313f0b4283058a3b518 Mon Sep 17 00:00:00 2001 From: Chris Hill-Scott Date: Mon, 27 Sep 2021 15:20:56 +0100 Subject: [PATCH 2/7] Sort services and orgs in presentation layer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The model layer shouldn’t need to be concerned with sorting. For services this means we can make a `SerialisedModelCollection` rather than writing a manual loop. --- app/models/user.py | 4 ++-- app/templates/views/choose-account.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/user.py b/app/models/user.py index 43cd9a231..39dcd5d86 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -293,9 +293,9 @@ class User(JSONModel, UserMixin): @property def services(self): from app.models.service import Service - return sorted( + return [ Service(service) for service in self.orgs_and_services['services'] - ) + ] @property def services_with_organisation(self): diff --git a/app/templates/views/choose-account.html b/app/templates/views/choose-account.html index c5f3f78df..6c96efb84 100644 --- a/app/templates/views/choose-account.html +++ b/app/templates/views/choose-account.html @@ -19,7 +19,7 @@ {% else %}