Make user model return a service model, not JSON

This makes it:
- nicer, by having access to sensibly named things like
  `Service.trial_mode` instead of `service['restricted']`.
- less likely to write Jinja code like `service.trail_mode`, which would
  fail silently if `service` was a dictionary
This commit is contained in:
Chris Hill-Scott
2019-06-07 12:38:48 +01:00
parent 062f42b769
commit 71dc650db6
4 changed files with 34 additions and 16 deletions

View File

@@ -367,10 +367,7 @@ def choose_template_to_copy(
else: else:
return render_template( return render_template(
'views/templates/copy.html', 'views/templates/copy.html',
services_templates_and_folders=TemplateLists([ services_templates_and_folders=TemplateLists(current_user),
Service(service) for service in
current_user.services
], user=current_user),
search_form=SearchByNameForm(), search_form=SearchByNameForm(),
) )

View File

@@ -56,7 +56,6 @@ class Service(JSONModel):
def __init__(self, _dict): def __init__(self, _dict):
super().__init__(_dict) super().__init__(_dict)
if 'permissions' not in self._dict: if 'permissions' not in self._dict:
self.permissions = {'email', 'sms', 'letter'} self.permissions = {'email', 'sms', 'letter'}
@@ -94,6 +93,10 @@ class Service(JSONModel):
def trial_mode(self): def trial_mode(self):
return self._dict['restricted'] return self._dict['restricted']
@property
def live(self):
return not self.trial_mode
def has_permission(self, permission): def has_permission(self, permission):
return permission in self.permissions return permission in self.permissions

View File

@@ -65,9 +65,9 @@ class TemplateList():
class TemplateLists(): class TemplateLists():
def __init__(self, services, user=None): def __init__(self, user):
self.services = sorted( self.services = sorted(
services, user.services,
key=lambda service: service.name.lower(), key=lambda service: service.name.lower(),
) )
self.user = user self.user = user

View File

@@ -242,10 +242,28 @@ class User(JSONModel, UserMixin):
@property @property
def services(self): def services(self):
all_services = self.orgs_and_services['services_without_organisations'] + next(chain( return sorted(
org['services'] for org in self.orgs_and_services['organisations'] self.services_with_organisation + self.services_without_organisations,
), []) key=lambda service: service.name.lower(),
return sorted(all_services, key=lambda service: service['name'].lower()) )
@property
def services_with_organisation(self):
from app.models.service import Service
return [
Service(service) for service in
next(chain(
org['services'] for org in self.orgs_and_services['organisations']
), [])
]
@property
def services_without_organisations(self):
from app.models.service import Service
return [
Service(service) for service in
self.orgs_and_services['services_without_organisations']
]
@property @property
def service_ids(self): def service_ids(self):
@@ -254,21 +272,21 @@ class User(JSONModel, UserMixin):
@property @property
def trial_mode_services(self): def trial_mode_services(self):
return [ return [
service for service in self.services service for service in self.services if service.trial_mode
if service['restricted']
] ]
@property @property
def live_services(self): def live_services(self):
return [ return [
service for service in self.services service for service in self.services if service.live
if not service['restricted']
] ]
@property @property
def live_services_not_belonging_to_users_organisations(self): def live_services_not_belonging_to_users_organisations(self):
from app.models.service import Service
return [ return [
service for service in self.orgs_and_services['services_without_organisations'] Service(service)
for service in self.orgs_and_services['services_without_organisations']
if not service['restricted'] if not service['restricted']
] ]