mirror of
https://github.com/deadc0de6/dotdrop.git
synced 2026-02-10 21:59:16 +00:00
adding doc links tests (ext and int)
This commit is contained in:
97
scripts/check_links.py
Executable file
97
scripts/check_links.py
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
author: deadc0de6 (https://github.com/deadc0de6)
|
||||||
|
Copyright (c) 2023, deadc0de6
|
||||||
|
|
||||||
|
URL checking script
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
TIMEOUT = 3
|
||||||
|
VALID_RET = [
|
||||||
|
200,
|
||||||
|
302,
|
||||||
|
]
|
||||||
|
IGNORES = [
|
||||||
|
'badgen.net',
|
||||||
|
]
|
||||||
|
USER_AGENT = (
|
||||||
|
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
|
||||||
|
'AppleWebKit/537.36 (KHTML, like Gecko) '
|
||||||
|
'Chrome/58.0.3029.110 Safari/537.36'
|
||||||
|
)
|
||||||
|
HEADERS = {
|
||||||
|
'User-Agent': USER_AGENT,
|
||||||
|
}
|
||||||
|
PATTERN = (
|
||||||
|
r"https?://[a-zA-Z0-9][a-zA-Z0-9-]{1,61}"
|
||||||
|
r"[a-zA-Z0-9]\.[=a-zA-Z0-9\_\/\?\&\%\+\#\.\-]+"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_links(path):
|
||||||
|
"""get a list of URLS"""
|
||||||
|
with open(path, encoding='utf-8') as file:
|
||||||
|
content = file.read()
|
||||||
|
entries = re.findall(PATTERN, content)
|
||||||
|
urls = list(set(entries))
|
||||||
|
return urls
|
||||||
|
|
||||||
|
|
||||||
|
def check_links(urls):
|
||||||
|
"""check urls"""
|
||||||
|
cnt = 0
|
||||||
|
ign = 0
|
||||||
|
for url in urls:
|
||||||
|
cnt += 1
|
||||||
|
hostname = urlparse(url).hostname
|
||||||
|
if hostname in IGNORES:
|
||||||
|
print(f' [IGN] {url}')
|
||||||
|
ign += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
verb = 'head'
|
||||||
|
ret = requests.head(url,
|
||||||
|
timeout=TIMEOUT,
|
||||||
|
allow_redirects=True,
|
||||||
|
headers=HEADERS).status_code
|
||||||
|
if ret not in VALID_RET:
|
||||||
|
verb = 'get'
|
||||||
|
ret = requests.get(url,
|
||||||
|
timeout=TIMEOUT,
|
||||||
|
allow_redirects=True,
|
||||||
|
headers=HEADERS).status_code
|
||||||
|
if ret not in VALID_RET:
|
||||||
|
print(f' [ERROR] {url} returned {ret}')
|
||||||
|
return False
|
||||||
|
print(f' [OK-{verb}-{ret}] {url}')
|
||||||
|
print(f'OK - total {cnt} links checked ({ign} ignored)')
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print(f'usage: {sys.argv[0]} <path>')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print(f'checking {sys.argv[1]} for links...')
|
||||||
|
links = get_links(sys.argv[1])
|
||||||
|
print(f' found {len(links)} links')
|
||||||
|
try:
|
||||||
|
if not check_links(links):
|
||||||
|
sys.exit(1)
|
||||||
|
except ValueError as exc:
|
||||||
|
print(f'error {exc}')
|
||||||
|
sys.exit(1)
|
||||||
|
except urlparse.URLError as exc:
|
||||||
|
print(f'urlparse error {exc}')
|
||||||
|
sys.exit(1)
|
||||||
|
except requests.exceptions.RequestException as exc:
|
||||||
|
print(f'requests error {exc}')
|
||||||
|
sys.exit(1)
|
||||||
|
sys.exit(0)
|
||||||
47
test-doc.sh
vendored
47
test-doc.sh
vendored
@@ -2,46 +2,25 @@
|
|||||||
# author: deadc0de6 (https://github.com/deadc0de6)
|
# author: deadc0de6 (https://github.com/deadc0de6)
|
||||||
# Copyright (c) 2022, deadc0de6
|
# Copyright (c) 2022, deadc0de6
|
||||||
|
|
||||||
## test the doc with linkcheckMarkdown
|
## test doc external links
|
||||||
## pip install --user linkcheckmd
|
find . -type f -iname '*.md' | while read -r line; do
|
||||||
|
./scripts/check_links.py "${line}"
|
||||||
|
done
|
||||||
|
|
||||||
|
## test the doc internal links
|
||||||
|
## https://github.com/remarkjs/remark-validate-links
|
||||||
|
## https://github.com/tcort/markdown-link-check
|
||||||
set +e
|
set +e
|
||||||
which linkcheckMarkdown >/dev/null 2>&1
|
which remark >/dev/null 2>&1
|
||||||
r="$?"
|
r="$?"
|
||||||
set -e
|
set -e
|
||||||
if [ "$r" != "0" ]; then
|
if [ "$r" != "0" ]; then
|
||||||
echo "[ERROR] install \"linkcheckMarkdown\" to test for dead links"
|
echo "[WARNING] install \"remark\" to test the doc"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
find . -type f -iname '*.md' | while read line; do
|
|
||||||
echo "checking links in \"${line}\""
|
find . -type f -iname '*.md' | while read -r line; do
|
||||||
linkcheckMarkdown ${line}
|
remark -f -u validate-links "${line}"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
### test the doc with remark
|
|
||||||
### https://github.com/remarkjs/remark-validate-links
|
|
||||||
#set +e
|
|
||||||
#which remark >/dev/null 2>&1
|
|
||||||
#r="$?"
|
|
||||||
#set -e
|
|
||||||
#if [ "$r" != "0" ]; then
|
|
||||||
# echo "[WARNING] install \"remark\" to test the doc"
|
|
||||||
#else
|
|
||||||
# remark -f -u validate-links docs/
|
|
||||||
# remark -f -u validate-links *.md
|
|
||||||
#fi
|
|
||||||
|
|
||||||
### test the doc with markdown-link-check
|
|
||||||
### https://github.com/tcort/markdown-link-check
|
|
||||||
#set +e
|
|
||||||
#which markdown-link-check >/dev/null 2>&1
|
|
||||||
#r="$?"
|
|
||||||
#set -e
|
|
||||||
#if [ "$r" != "0" ]; then
|
|
||||||
# echo "[WARNING] install \"markdown-link-check\" to test the doc"
|
|
||||||
#else
|
|
||||||
# for i in `find docs -iname '*.md'`; do markdown-link-check $i; done
|
|
||||||
# markdown-link-check README.md
|
|
||||||
#fi
|
|
||||||
|
|
||||||
echo "documentation OK"
|
echo "documentation OK"
|
||||||
1
tests-requirements.txt
vendored
1
tests-requirements.txt
vendored
@@ -6,4 +6,3 @@ pyflakes; python_version > '3.5'
|
|||||||
pylint; python_version > '3.5'
|
pylint; python_version > '3.5'
|
||||||
halo; python_version > '3.5'
|
halo; python_version > '3.5'
|
||||||
distro; python_version > '3.5'
|
distro; python_version > '3.5'
|
||||||
linkcheckmd; python_version > '3.5'
|
|
||||||
Reference in New Issue
Block a user