add ability to skip email report generation for empty update list

This commit is contained in:
Evgenii Alekseev 2021-04-06 05:51:50 +03:00
parent 50f532a48a
commit 4ed0a49a44
5 changed files with 31 additions and 0 deletions

View File

@ -56,6 +56,7 @@ Group name must refer to architecture, e.g. it should be `email:x86_64` for x86_
* `homepage` - link to homepage, string, optional. * `homepage` - link to homepage, string, optional.
* `host` - SMTP host for sending emails, string, required. * `host` - SMTP host for sending emails, string, required.
* `link_path` - prefix for HTML links, string, required. * `link_path` - prefix for HTML links, string, required.
* `no_empty_report` - skip report generation for empty packages list, boolean, optional, default `yes`.
* `password` - SMTP password to authenticate, string, optional. * `password` - SMTP password to authenticate, string, optional.
* `port` - SMTP port for sending emails, int, required. * `port` - SMTP port for sending emails, int, required.
* `receivers` - SMTP receiver addresses, space separated list of strings, required. * `receivers` - SMTP receiver addresses, space separated list of strings, required.

View File

@ -26,6 +26,7 @@ target =
target = target =
[email] [email]
no_empty_report = yes
template_path = /usr/share/ahriman/repo-index.jinja2 template_path = /usr/share/ahriman/repo-index.jinja2
ssl = disabled ssl = disabled

View File

@ -36,6 +36,7 @@ class Email(Report, JinjaTemplate):
""" """
email report generator email report generator
:ivar host: SMTP host to connect :ivar host: SMTP host to connect
:ivar no_empty_report: skip empty report generation
:ivar password: password to authenticate via SMTP :ivar password: password to authenticate via SMTP
:ivar port: SMTP port to connect :ivar port: SMTP port to connect
:ivar receivers: list of receivers emails :ivar receivers: list of receivers emails
@ -55,6 +56,7 @@ class Email(Report, JinjaTemplate):
# base smtp settings # base smtp settings
self.host = configuration.get("email", "host") self.host = configuration.get("email", "host")
self.no_empty_report = configuration.getboolean("email", "no_empty_report", fallback=True)
self.password = configuration.get("email", "password", fallback=None) self.password = configuration.get("email", "password", fallback=None)
self.port = configuration.getint("email", "port") self.port = configuration.getint("email", "port")
self.receivers = configuration.getlist("email", "receivers") self.receivers = configuration.getlist("email", "receivers")
@ -96,6 +98,8 @@ class Email(Report, JinjaTemplate):
:param packages: list of packages to generate report :param packages: list of packages to generate report
:param built_packages: list of packages which has just been built :param built_packages: list of packages which has just been built
""" """
if self.no_empty_report and not built_packages:
return
text = self.make_html(built_packages, False) text = self.make_html(built_packages, False)
attachments = {"index.html": self.make_html(packages, True)} attachments = {"index.html": self.make_html(packages, True)}
self._send(text, attachments) self._send(text, attachments)

View File

@ -103,3 +103,27 @@ def test_generate_with_built(configuration: Configuration, package_ahriman: Pack
report = Email("x86_64", configuration) report = Email("x86_64", configuration)
report.generate([package_ahriman], [package_ahriman]) report.generate([package_ahriman], [package_ahriman])
send_mock.assert_called_once() send_mock.assert_called_once()
def test_generate_no_empty(configuration: Configuration, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must not generate report with built packages if no_empty_report is set
"""
configuration.set("email", "no_empty_report", "yes")
send_mock = mocker.patch("ahriman.core.report.email.Email._send")
report = Email("x86_64", configuration)
report.generate([package_ahriman], [])
send_mock.assert_not_called()
def test_generate_no_empty_with_built(configuration: Configuration, package_ahriman: Package, mocker: MockerFixture) -> None:
"""
must generate report with built packages if no_empty_report is set
"""
configuration.set("email", "no_empty_report", "yes")
send_mock = mocker.patch("ahriman.core.report.email.Email._send")
report = Email("x86_64", configuration)
report.generate([package_ahriman], [package_ahriman])
send_mock.assert_called_once()

View File

@ -28,6 +28,7 @@ target =
[email] [email]
host = 0.0.0.0 host = 0.0.0.0
link_path = link_path =
no_empty_report = no
port = 587 port = 587
receivers = mail@example.com receivers = mail@example.com
sender = mail@example.com sender = mail@example.com