|
|
@@ -5,6 +5,12 @@ import re |
|
|
|
import socket |
|
|
|
import sys |
|
|
|
|
|
|
|
ignored_links = [ |
|
|
|
'https://github.com/public-apis/public-apis/actions?query=workflow%3A%22Run+tests%22', |
|
|
|
'https://github.com/public-apis/public-apis/workflows/Validate%20links/badge.svg?branch=master', |
|
|
|
'https://github.com/public-apis/public-apis/actions?query=workflow%3A%22Validate+links%22', |
|
|
|
'https://github.com/davemachado/public-api', |
|
|
|
] |
|
|
|
|
|
|
|
def parse_links(filename): |
|
|
|
"""Returns a list of URLs from text file""" |
|
|
@@ -16,6 +22,30 @@ def parse_links(filename): |
|
|
|
links = [raw_link[0] for raw_link in raw_links] |
|
|
|
return links |
|
|
|
|
|
|
|
def dup_links(links): |
|
|
|
"""Check for duplicated links""" |
|
|
|
print(f'Checking for duplicated links...') |
|
|
|
hasError = False |
|
|
|
seen = {} |
|
|
|
dupes = [] |
|
|
|
|
|
|
|
for link in links: |
|
|
|
link = link.rstrip('/') |
|
|
|
if link in ignored_links: |
|
|
|
continue |
|
|
|
|
|
|
|
if link not in seen: |
|
|
|
seen[link] = 1 |
|
|
|
else: |
|
|
|
if seen[link] == 1: |
|
|
|
dupes.append(link) |
|
|
|
|
|
|
|
if not dupes: |
|
|
|
print(f"No duplicate links") |
|
|
|
else: |
|
|
|
print(f"Found duplicate links: {dupes}") |
|
|
|
hasError = True |
|
|
|
return hasError |
|
|
|
|
|
|
|
def validate_links(links): |
|
|
|
"""Checks each entry in JSON file for live link""" |
|
|
@@ -58,6 +88,9 @@ if __name__ == "__main__": |
|
|
|
if num_args < 2: |
|
|
|
print("No .md file passed") |
|
|
|
sys.exit(1) |
|
|
|
hasError = validate_links(parse_links(sys.argv[1])) |
|
|
|
links = parse_links(sys.argv[1]) |
|
|
|
hasError = dup_links(links) |
|
|
|
if not hasError: |
|
|
|
hasError = validate_links(links) |
|
|
|
if hasError: |
|
|
|
sys.exit(1) |