mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-14 07:24:22 -05:00
Sometimes, when filtering the view by template type, the message was saying the folder was empty, when really it should have been saying that there were no templates of the ‘type’ you’re looking for, eg: > There are no email templates in this folder This was because it was looking at the filtered list of templates, not all templates to determine whether a folder was really empty.
191 lines
4.7 KiB
Python
191 lines
4.7 KiB
Python
class TemplateList():
|
|
|
|
def __init__(
|
|
self,
|
|
service,
|
|
template_type='all',
|
|
template_folder_id=None,
|
|
):
|
|
self.service = service
|
|
self.template_type = template_type
|
|
self.template_folder_id = template_folder_id
|
|
|
|
def __iter__(self):
|
|
for item in self.get_templates_and_folders(
|
|
self.template_type, self.template_folder_id, ancestors=[]
|
|
):
|
|
yield item
|
|
|
|
def get_templates_and_folders(self, template_type, template_folder_id, ancestors):
|
|
|
|
for item in self.service.get_template_folders(
|
|
template_type, template_folder_id
|
|
):
|
|
yield TemplateListFolder(
|
|
item,
|
|
folders=self.service.get_template_folders(
|
|
template_type, item['id']
|
|
),
|
|
templates=self.service.get_templates(
|
|
template_type, item['id']
|
|
),
|
|
ancestors=ancestors,
|
|
service_id=self.service.id,
|
|
)
|
|
for sub_item in self.get_templates_and_folders(
|
|
template_type, item['id'], ancestors + [item]
|
|
):
|
|
yield sub_item
|
|
|
|
for item in self.service.get_templates(
|
|
template_type, template_folder_id
|
|
):
|
|
yield TemplateListTemplate(
|
|
item,
|
|
ancestors=ancestors,
|
|
service_id=self.service.id,
|
|
)
|
|
|
|
@property
|
|
def as_id_and_name(self):
|
|
return [(item.id, item.name) for item in self]
|
|
|
|
@property
|
|
def templates_to_show(self):
|
|
return any(self)
|
|
|
|
@property
|
|
def folder_is_empty(self):
|
|
return not any(self.get_templates_and_folders(
|
|
'all', self.template_folder_id, []
|
|
))
|
|
|
|
|
|
class TemplateLists():
|
|
|
|
def __init__(self, services):
|
|
self.services = sorted(
|
|
services,
|
|
key=lambda service: service.name.lower(),
|
|
)
|
|
|
|
def __iter__(self):
|
|
|
|
if len(self.services) == 1:
|
|
|
|
for template_or_folder in TemplateList(self.services[0]):
|
|
yield template_or_folder
|
|
|
|
return
|
|
|
|
for service in self.services:
|
|
|
|
template_list_service = TemplateListService(service)
|
|
|
|
yield template_list_service
|
|
|
|
for service_templates_and_folders in TemplateList(
|
|
service
|
|
).get_templates_and_folders(
|
|
template_type='all',
|
|
template_folder_id=None,
|
|
ancestors=[template_list_service],
|
|
):
|
|
yield service_templates_and_folders
|
|
|
|
@property
|
|
def templates_to_show(self):
|
|
return bool(self.services)
|
|
|
|
|
|
class TemplateListItem():
|
|
|
|
is_service = False
|
|
|
|
def __init__(
|
|
self,
|
|
template_or_folder,
|
|
ancestors,
|
|
):
|
|
self.id = template_or_folder['id']
|
|
self.name = template_or_folder['name']
|
|
self.ancestors = ancestors
|
|
|
|
|
|
class TemplateListTemplate(TemplateListItem):
|
|
|
|
is_folder = False
|
|
|
|
def __init__(
|
|
self,
|
|
template,
|
|
ancestors,
|
|
service_id,
|
|
):
|
|
super().__init__(template, ancestors)
|
|
self.service_id = service_id
|
|
self.hint = {
|
|
'email': 'Email template',
|
|
'sms': 'Text message template',
|
|
'letter': 'Letter template',
|
|
}.get(template['template_type'])
|
|
|
|
|
|
class TemplateListFolder(TemplateListItem):
|
|
|
|
is_folder = True
|
|
|
|
def __init__(
|
|
self,
|
|
folder,
|
|
templates,
|
|
folders,
|
|
ancestors,
|
|
service_id,
|
|
):
|
|
super().__init__(folder, ancestors)
|
|
self.service_id = service_id
|
|
self.number_of_templates = len(templates)
|
|
self.number_of_folders = len(folders)
|
|
|
|
@property
|
|
def _hint_parts(self):
|
|
|
|
if self.number_of_folders == self.number_of_templates == 0:
|
|
yield 'Empty'
|
|
|
|
if self.number_of_templates == 1:
|
|
yield '1 template'
|
|
elif self.number_of_templates > 1:
|
|
yield '{} templates'.format(self.number_of_templates)
|
|
|
|
if self.number_of_folders == 1:
|
|
yield '1 folder'
|
|
elif self.number_of_folders > 1:
|
|
yield '{} folders'.format(self.number_of_folders)
|
|
|
|
@property
|
|
def hint(self):
|
|
return ', '.join(self._hint_parts)
|
|
|
|
|
|
class TemplateListService(TemplateListFolder):
|
|
|
|
is_service = True
|
|
|
|
def __init__(
|
|
self,
|
|
service,
|
|
):
|
|
super().__init__(
|
|
folder=service._dict,
|
|
templates=service.get_templates(
|
|
template_folder_id=None,
|
|
),
|
|
folders=service.get_template_folders(
|
|
parent_folder_id=None,
|
|
),
|
|
ancestors=[],
|
|
service_id=service.id,
|
|
)
|