Skip to content

Commit

Permalink
feat: upgrade wagtail version
Browse files Browse the repository at this point in the history
  • Loading branch information
joaquimds committed Sep 17, 2024
1 parent 2de3098 commit e7b66b4
Show file tree
Hide file tree
Showing 19 changed files with 384 additions and 372 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
dist/
venv/
build/
.vscode/
.vscode/
.venv
36 changes: 14 additions & 22 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,39 +3,31 @@
Install wagtail-linkchecker using setuptools
"""

with open('README.rst', 'r') as f:
with open("README.rst", "r") as f:
readme = f.read()

from setuptools import find_packages, setup

setup(
name='wagtail-linkchecker',
version='0.6.0',
name="wagtail-linkchecker",
version="0.7.1",
description="A tool to assist with finding broken links on your wagtail site.",
long_description=readme,
author='Neon Jungle',
author_email='[email protected]',
url='https://github.com/neon-jungle/wagtail-linkchecker/',

install_requires=[
'wagtail>=1.0',
'requests>=2.9.1',
'celery>=5.0,<6'
],
author="Neon Jungle",
author_email="[email protected]",
url="https://github.com/neon-jungle/wagtail-linkchecker/",
install_requires=["wagtail>=5.0,<6", "requests>=2.9.1", "celery>=5.0,<6"],
zip_safe=False,
license='BSD License',

license="BSD License",
packages=find_packages(),

include_package_data=True,
package_data={},

classifiers=[
'Environment :: Web Environment',
'Intended Audience :: Developers',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Framework :: Django',
'License :: OSI Approved :: BSD License',
"Environment :: Web Environment",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Framework :: Django",
"License :: OSI Approved :: BSD License",
],
)
188 changes: 87 additions & 101 deletions wagtaillinkchecker/__init__.py
Original file line number Diff line number Diff line change
@@ -1,105 +1,91 @@
__version__ = '0.1.0'
__version__ = "0.1.0"

default_app_config = 'wagtaillinkchecker.apps.WagtailLinkchekerAppConfig'
default_app_config = "wagtaillinkchecker.apps.WagtailLinkchekerAppConfig"

HTTP_STATUS_CODES = {
100: ('Continue', 'Request received, please continue'),
101: ('Switching Protocols',
'Switching to new protocol; obey Upgrade header'),
102: ('Processing', 'WebDAV; RFC 2518'),

200: ('OK', 'Request fulfilled, document follows'),
201: ('Created', 'Document created, URL follows'),
202: ('Accepted',
'Request accepted, processing continues off-line'),
203: ('Non-Authoritative Information', 'Request fulfilled from cache'),
204: ('No Content', 'Request fulfilled, nothing follows'),
205: ('Reset Content', 'Clear input form for further input.'),
206: ('Partial Content', 'Partial content follows.'),
207: ('Multi-Status', 'WebDAV; RFC 4918'),
208: ('Already Reported', 'WebDAV; RFC 5842'),
226: ('IM Used', 'RFC 3229'),

300: ('Multiple Choices',
'Object has several resources -- see URI list'),
301: ('Moved Permanently', 'Object moved permanently -- see URI list'),
302: ('Found', 'Object moved temporarily -- see URI list'),
303: ('See Other', 'Object moved -- see Method and URL list'),
304: ('Not Modified',
'Document has not changed since given time'),
305: ('Use Proxy',
'You must use proxy specified in Location to access this '
'resource.'),
306: ('Switch Proxy', 'Subsequent requests should use the specified proxy'),
307: ('Temporary Redirect',
'Object moved temporarily -- see URI list'),
308: ('Permanent Redirect', 'Object moved permanently'),

400: ('Bad Request',
'Bad request syntax or unsupported method'),
401: ('Unauthorized',
'No permission -- see authorization schemes'),
402: ('Payment Required',
'No payment -- see charging schemes'),
403: ('Forbidden',
'Request forbidden -- authorization will not help'),
404: ('Not Found', 'Nothing matches the given URI'),
405: ('Method Not Allowed',
'Specified method is invalid for this resource.'),
406: ('Not Acceptable', 'URI not available in preferred format.'),
407: ('Proxy Authentication Required', 'You must authenticate with '
'this proxy before proceeding.'),
408: ('Request Timeout', 'Request timed out; try again later.'),
409: ('Conflict', 'Request conflict.'),
410: ('Gone',
'URI no longer exists and has been permanently removed.'),
411: ('Length Required', 'Client must specify Content-Length.'),
412: ('Precondition Failed', 'Precondition in headers is false.'),
413: ('Payload Too Large', 'Payload is too large.'),
414: ('Request-URI Too Long', 'URI is too long.'),
415: ('Unsupported Media Type', 'Entity body in unsupported format.'),
416: ('Requested Range Not Satisfiable',
'Cannot satisfy request range.'),
417: ('Expectation Failed',
'Expect condition could not be satisfied.'),
418: ("I'm a teapot", 'The HTCPCP server is a teapot'),
419: ('Authentication Timeout', 'previously valid authentication has expired'),
420: ('Method Failure / Enhance Your Calm', 'Spring Framework / Twitter'),
422: ('Unprocessable Entity', 'WebDAV; RFC 4918'),
423: ('Locked', 'WebDAV; RFC 4918'),
424: ('Failed Dependency / Method Failure', 'WebDAV; RFC 4918'),
425: ('Unordered Collection', 'Internet draft'),
426: ('Upgrade Required', 'client should switch to a different protocol'),
428: ('Precondition Required', 'RFC 6585'),
429: ('Too Many Requests', 'RFC 6585'),
431: ('Request Header Fields Too Large', 'RFC 6585'),
440: ('Login Timeout', 'Microsoft'),
444: ('No Response', 'Nginx'),
449: ('Retry With', 'Microsoft'),
450: ('Blocked by Windows Parental Controls', 'Microsoft'),
451: ('Unavailable For Legal Reasons', 'RFC 7725'),
494: ('Request Header Too Large', 'Nginx'),
495: ('Cert Error', 'Nginx'),
496: ('No Cert', 'Nginx'),
497: ('HTTP to HTTPS', 'Nginx'),
498: ('Token expired/invalid', 'Esri'),
499: ('Client Closed Request', 'Nginx'),

500: ('Internal Server Error', 'Server got itself in trouble'),
501: ('Not Implemented',
'Server does not support this operation'),
502: ('Bad Gateway', 'Invalid responses from another server/proxy.'),
503: ('Service Unavailable',
'The server cannot process the request due to a high load'),
504: ('Gateway Timeout',
'The gateway server did not receive a timely response'),
505: ('HTTP Version Not Supported', 'Cannot fulfill request.'),
506: ('Variant Also Negotiates', 'RFC 2295'),
507: ('Insufficient Storage', 'WebDAV; RFC 4918'),
508: ('Loop Detected', 'WebDAV; RFC 5842'),
509: ('Bandwidth Limit Exceeded', 'Apache bw/limited extension'),
510: ('Not Extended', 'RFC 2774'),
511: ('Network Authentication Required', 'RFC 6585'),
598: ('Network read timeout error', 'Unknown'),
599: ('Network connect timeout error', 'Unknown'),
100: ("Continue", "Request received, please continue"),
101: ("Switching Protocols", "Switching to new protocol; obey Upgrade header"),
102: ("Processing", "WebDAV; RFC 2518"),
200: ("OK", "Request fulfilled, document follows"),
201: ("Created", "Document created, URL follows"),
202: ("Accepted", "Request accepted, processing continues off-line"),
203: ("Non-Authoritative Information", "Request fulfilled from cache"),
204: ("No Content", "Request fulfilled, nothing follows"),
205: ("Reset Content", "Clear input form for further input."),
206: ("Partial Content", "Partial content follows."),
207: ("Multi-Status", "WebDAV; RFC 4918"),
208: ("Already Reported", "WebDAV; RFC 5842"),
226: ("IM Used", "RFC 3229"),
300: ("Multiple Choices", "Object has several resources -- see URI list"),
301: ("Moved Permanently", "Object moved permanently -- see URI list"),
302: ("Found", "Object moved temporarily -- see URI list"),
303: ("See Other", "Object moved -- see Method and URL list"),
304: ("Not Modified", "Document has not changed since given time"),
305: (
"Use Proxy",
"You must use proxy specified in Location to access this " "resource.",
),
306: ("Switch Proxy", "Subsequent requests should use the specified proxy"),
307: ("Temporary Redirect", "Object moved temporarily -- see URI list"),
308: ("Permanent Redirect", "Object moved permanently"),
400: ("Bad Request", "Bad request syntax or unsupported method"),
401: ("Unauthorized", "No permission -- see authorization schemes"),
402: ("Payment Required", "No payment -- see charging schemes"),
403: ("Forbidden", "Request forbidden -- authorization will not help"),
404: ("Not Found", "Nothing matches the given URI"),
405: ("Method Not Allowed", "Specified method is invalid for this resource."),
406: ("Not Acceptable", "URI not available in preferred format."),
407: (
"Proxy Authentication Required",
"You must authenticate with " "this proxy before proceeding.",
),
408: ("Request Timeout", "Request timed out; try again later."),
409: ("Conflict", "Request conflict."),
410: ("Gone", "URI no longer exists and has been permanently removed."),
411: ("Length Required", "Client must specify Content-Length."),
412: ("Precondition Failed", "Precondition in headers is false."),
413: ("Payload Too Large", "Payload is too large."),
414: ("Request-URI Too Long", "URI is too long."),
415: ("Unsupported Media Type", "Entity body in unsupported format."),
416: ("Requested Range Not Satisfiable", "Cannot satisfy request range."),
417: ("Expectation Failed", "Expect condition could not be satisfied."),
418: ("I'm a teapot", "The HTCPCP server is a teapot"),
419: ("Authentication Timeout", "previously valid authentication has expired"),
420: ("Method Failure / Enhance Your Calm", "Spring Framework / Twitter"),
422: ("Unprocessable Entity", "WebDAV; RFC 4918"),
423: ("Locked", "WebDAV; RFC 4918"),
424: ("Failed Dependency / Method Failure", "WebDAV; RFC 4918"),
425: ("Unordered Collection", "Internet draft"),
426: ("Upgrade Required", "client should switch to a different protocol"),
428: ("Precondition Required", "RFC 6585"),
429: ("Too Many Requests", "RFC 6585"),
431: ("Request Header Fields Too Large", "RFC 6585"),
440: ("Login Timeout", "Microsoft"),
444: ("No Response", "Nginx"),
449: ("Retry With", "Microsoft"),
450: ("Blocked by Windows Parental Controls", "Microsoft"),
451: ("Unavailable For Legal Reasons", "RFC 7725"),
494: ("Request Header Too Large", "Nginx"),
495: ("Cert Error", "Nginx"),
496: ("No Cert", "Nginx"),
497: ("HTTP to HTTPS", "Nginx"),
498: ("Token expired/invalid", "Esri"),
499: ("Client Closed Request", "Nginx"),
500: ("Internal Server Error", "Server got itself in trouble"),
501: ("Not Implemented", "Server does not support this operation"),
502: ("Bad Gateway", "Invalid responses from another server/proxy."),
503: (
"Service Unavailable",
"The server cannot process the request due to a high load",
),
504: ("Gateway Timeout", "The gateway server did not receive a timely response"),
505: ("HTTP Version Not Supported", "Cannot fulfill request."),
506: ("Variant Also Negotiates", "RFC 2295"),
507: ("Insufficient Storage", "WebDAV; RFC 4918"),
508: ("Loop Detected", "WebDAV; RFC 5842"),
509: ("Bandwidth Limit Exceeded", "Apache bw/limited extension"),
510: ("Not Extended", "RFC 2774"),
511: ("Network Authentication Required", "RFC 6585"),
598: ("Network read timeout error", "Unknown"),
599: ("Network connect timeout error", "Unknown"),
}
2 changes: 1 addition & 1 deletion wagtaillinkchecker/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@


class WagtailLinkchekerAppConfig(AppConfig):
name = 'wagtaillinkchecker'
name = "wagtaillinkchecker"
verbose_name = "Wagtail Link Checker"
3 changes: 1 addition & 2 deletions wagtaillinkchecker/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@


class SitePreferencesForm(forms.ModelForm):

class Meta:
model = SitePreferences
exclude = ('site', )
exclude = ("site",)
57 changes: 29 additions & 28 deletions wagtaillinkchecker/management/commands/linkcheck.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,41 +6,39 @@

from wagtaillinkchecker.scanner import broken_link_scan
from wagtaillinkchecker.models import ScanLink
from wagtaillinkchecker import utils

if utils.is_wagtail_version_more_than_equal_to_2_0():
from wagtail.core.models import PageRevision, Site
else:
from wagtail.wagtailcore.models import PageRevision, Site
from wagtail.models import PageRevision, Site


class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument(
'--do-not-send-mail',
action='store_true',
help='Do not send mails when finding broken links',
"--do-not-send-mail",
action="store_true",
help="Do not send mails when finding broken links",
)
parser.add_argument(
'--run-synchronously',
action='store_true',
help='Run checks synchronously (avoid the need for Celery)',
"--run-synchronously",
action="store_true",
help="Run checks synchronously (avoid the need for Celery)",
)

def handle(self, *args, **kwargs):
site = Site.objects.filter(is_default_site=True).first()
pages = site.root_page.get_descendants(inclusive=True).live().public()
run_sync = kwargs.get('run_synchronously') or False
verbosity = kwargs.get('verbosity') or 1
run_sync = kwargs.get("run_synchronously") or False
verbosity = kwargs.get("verbosity") or 1

print(f'Scanning {len(pages)} pages...')
print(f"Scanning {len(pages)} pages...")
scan = broken_link_scan(site, run_sync, verbosity)
total_links = ScanLink.objects.filter(scan=scan, crawled=True)
broken_links = ScanLink.objects.filter(scan=scan, broken=True)
print(f'Found {len(total_links)} total links, with {len(broken_links)} broken links.')
print(
f"Found {len(total_links)} total links, with {len(broken_links)} broken links."
)

if kwargs.get('do_not_send_mail'):
print(f'Will not send any emails')
if kwargs.get("do_not_send_mail"):
print("Will not send any emails")
return

messages = []
Expand All @@ -49,27 +47,30 @@ def handle(self, *args, **kwargs):
user = None
user_email = settings.DEFAULT_FROM_EMAIL
if revisions:
revision = revisions.latest('created_at')
revision = revisions.latest("created_at")
user = revision.user
user_email = revision.user.email if revision.user else ''
user_email = revision.user.email if revision.user else ""
page_broken_links = []
for link in broken_links:
if link.page == page:
page_broken_links.append(link)
email_message = render_to_string(
'wagtaillinkchecker/emails/broken_links.html', {
'page_broken_links': page_broken_links,
'user': user,
'page': page,
'base_url': site.root_url,
'site_name': settings.WAGTAIL_SITE_NAME,
})
"wagtaillinkchecker/emails/broken_links.html",
{
"page_broken_links": page_broken_links,
"user": user,
"page": page,
"base_url": site.root_url,
"site_name": settings.WAGTAIL_SITE_NAME,
},
)
email = EmailMessage(
'Broken links on page "%s"' % (page.title),
email_message,
settings.DEFAULT_FROM_EMAIL,
[user_email])
email.content_subtype = 'html'
[user_email],
)
email.content_subtype = "html"
messages.append(email)

connection = mail.get_connection()
Expand Down
Loading

0 comments on commit e7b66b4

Please sign in to comment.