Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Commit 289a385

Browse files
committed
Add Email reporting
1 parent 1383a74 commit 289a385

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

wagtaillinkchecker/management/commands/linkcheck.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,5 @@ def handle(self, *args, **kwargs):
2020
site = Site.objects.filter(is_default_site=True).first()
2121
pages = site.root_page.get_descendants(inclusive=True).live().public()
2222
print(f'Scanning {len(pages)} pages...')
23-
scan = broken_link_scan(site)
24-
broken_links = ScanLink.objects.filter(scan=scan, crawled=True)
23+
broken_link_scan(site)
2524
print('Links enqueued on Redis')

wagtaillinkchecker/models.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import django_rq
22

3+
from django.core import mail
34
from django.conf import settings
45
from django.db import models
56
from django.db.models.signals import pre_delete
67
from django.dispatch import receiver
8+
from django.template.loader import render_to_string
79
from django.utils.translation import ugettext_lazy as _
810
from wagtail import __version__ as WAGTAIL_VERSION
911

@@ -45,6 +47,36 @@ def result(self):
4547
def __str__(self):
4648
return 'Scan - {0}'.format(self.scan_started.strftime('%d/%m/%Y'))
4749

50+
def reporting(self):
51+
email_message = ''
52+
pages = self.site.root_page.get_descendants(
53+
inclusive=True).live().public()
54+
broken_links = self.links.broken_links()
55+
for page in pages:
56+
page_broken_links = []
57+
for link in broken_links:
58+
if link.page == page:
59+
page_broken_links.append(link)
60+
61+
if page_broken_links:
62+
email_message += render_to_string(
63+
'wagtaillinkchecker/emails/broken_links.html', {
64+
'page_broken_links': page_broken_links,
65+
'user': '',
66+
'page': page,
67+
'base_url': self.site.root_url,
68+
'site_name': settings.WAGTAIL_SITE_NAME,
69+
})
70+
71+
with mail.get_connection() as connection:
72+
email = mail.EmailMessage(
73+
'Broken links for {}'.format(self),
74+
email_message,
75+
settings.DEFAULT_FROM_EMAIL,
76+
[settings.DEFAULT_FROM_EMAIL])
77+
email.content_subtype = 'html'
78+
email.send()
79+
4880

4981
class ScanLinkQuerySet(models.QuerySet):
5082

wagtaillinkchecker/tasks.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,6 @@ def check_link(link_pk):
5353
scan = link.scan
5454
scan.scan_finished = timezone.now()
5555
scan.save()
56+
scan.reporting()
5657

5758
return True

0 commit comments

Comments
 (0)