Qiskit / qiskit-tutorials

A collection of Jupyter notebooks showing how to use the Qiskit SDK
Apache License 2.0
2.28k stars 1.28k forks source link

Fixes Broken links #1488

Closed divshacker closed 11 months ago

divshacker commented 1 year ago

Summary

I have coded a script which (when directory is specified) checks for the broken links in the Jupyter notebooks and tells its exact place and the error it shows.

import os
import nbformat as nbf
import re
import requests
# Code to populate file_list with relevant .ipynb files
file_list = []

for root, dirs, files in os.walk("qiskit-tutorials/tutorials/"):
    for file in files:
        if file.endswith(".ipynb"):
            file_list.append(os.path.join(root, file))  # Including the relative path of the file

INLINE_LINK_RE = re.compile(r'\[([^\]]+)\]\(([^)]+)\)')
for file_path in file_list:
    try:
        with open(file_path) as file:
            nb = nbf.read(file, 4)
    except OSError as e:
        print(f"Error occurred while reading file: {file_path}")
        print("Error message:", str(e))
        print()
        continue

    for cell in nb["cells"]:
        if cell["cell_type"] != "markdown":
            continue
        links = list(INLINE_LINK_RE.findall(cell["source"]))
        for link in links:
            if not link:
                continue
            link_text, link_url = link
            if link_url.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')):
                continue  # Skip image links
            try:
                response = requests.get(link_url)
                if response.status_code != 200:
                    print(f"Broken link found in file: {file_path}")
                    print(f"Link: {link_text}")
                    print(f"URL: {link_url}")
                    print("HTTP status code:", response.status_code)
                    print()
            except requests.RequestException as e:
                print(f"Error occurred while checking link in file: {file_path}")
                print(f"Link: {link_text}")
                print(f"URL: {link_url}")
                print("Error message:", str(e))
                print()

Details and comments

This code is part of QAMP Project Issues in Qiskit Tutorials #37 which can read many files at once and can find broken links with their exact position and error code it is showing.

I ran this above code throughout the repo and checked each and every Jupyter notebook files, based on the output I have fixed many links. This PR is just the Last PR of the of project, which fixes the remaining broken links. All the other broken links are already fixed in the past PRs which are made throughout this project. #1445 #1446 #1467 #1483 #1484. This project also fixes #1402

review-notebook-app[bot] commented 1 year ago

Check out this pull request on  ReviewNB

See visual diffs & provide feedback on Jupyter Notebooks.


Powered by ReviewNB

divshacker commented 11 months ago

I changed two files in this PR, but as the second file is not needed by maintainers, so they deleted it. I somehow resolved the conflict and now it looks fine. As the file is deleted from main repo so there is no point in improving it so I removed my commit too. Thanks.