pax_global_header 0000666 0000000 0000000 00000000064 14535663452 0014527 g ustar 00root root 0000000 0000000 52 comment=12e47c98776990dc93fe74a4095ece392ce87303
linkchecker-10.4.0/ 0000775 0000000 0000000 00000000000 14535663452 0014073 5 ustar 00root root 0000000 0000000 linkchecker-10.4.0/.flake8 0000664 0000000 0000000 00000002771 14535663452 0015255 0 ustar 00root root 0000000 0000000 [flake8]
filename =
*.py
extend-exclude =
build/
_LinkChecker_configdata.py
# Derived from published packages
linkcheck/better_exchook2.py
linkcheck/colorama.py
builtins =
_
_n
max-line-length = 88
per-file-ignores =
# In several files imports intentionally cause:
# E402: module level import not at top of file
# F401: module imported but unused
doc/src/conf.py: E402,F821
linkcheck/__init__.py: E402,F401
linkcheck/checker/httpurl.py: E402
linkcheck/htmlutil/htmlsoup.py: E402
linkcheck/parser/__init__.py: E402
tests/__init__.py: F401
# E501: line too long
linkcheck/ftpparse.py: E501
linkcheck/checker/unknownurl.py: E501
linkcheck/command/arg_parser.py: E501
scripts/update_iana_uri_schemes.py: E501
tests/test_ftpparse.py: E501
# F821 undefined name
# https://github.com/PyCQA/pyflakes/issues/548
linkcheck/logger/__init__.py: F821
extend-ignore =
# https://pep8.readthedocs.org/en/latest/intro.html#error-codes
# these are ignored by default:
# E121: continuation line under-indented for hanging indent
# E123: closing bracket does not match indentation of opening bracket’s line
# E126: continuation line over-indented for hanging indent
# E133: closing bracket does not match visual indentation
# E226: missing whitespace around arithmetic operator
# E241: multiple spaces after ‘,’
# E242: tab after ‘,’
# E704: multiple statements on one line (def)
# W503: line break before binary operator
# W504: line break after binary operator
linkchecker-10.4.0/.git_archival.txt 0000664 0000000 0000000 00000000237 14535663452 0017350 0 ustar 00root root 0000000 0000000 node: 12e47c98776990dc93fe74a4095ece392ce87303
node-date: 2023-12-11T19:46:50+00:00
describe-name: v10.4.0
ref-names: tag: v10.4.0, origin/master, origin/HEAD
linkchecker-10.4.0/.github/ 0000775 0000000 0000000 00000000000 14535663452 0015433 5 ustar 00root root 0000000 0000000 linkchecker-10.4.0/.github/ISSUE_TEMPLATE.md 0000664 0000000 0000000 00000002617 14535663452 0020146 0 ustar 00root root 0000000 0000000
## Summary
## Steps to reproduce
1.
2.
3.
## Actual result
## Expected result
## Environment
* Operating system:
* Linkchecker version:
* Python version:
* Install method:
## Configuration
## Logs
## Other notes
linkchecker-10.4.0/.github/workflows/ 0000775 0000000 0000000 00000000000 14535663452 0017470 5 ustar 00root root 0000000 0000000 linkchecker-10.4.0/.github/workflows/branch-man.yml 0000664 0000000 0000000 00000003361 14535663452 0022224 0 ustar 00root root 0000000 0000000 name: Create a branch with updated man pages and application translations
on: workflow_dispatch
jobs:
run:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v3
with:
repository: linkchecker/linkchecker
ref: master
# Needed for hatch-vcs to extract LinkChecker version from tag
# https://github.com/actions/checkout/issues/249
fetch-depth: 0
- name: Install Ubuntu packages
run: sudo apt install gettext git
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install Python packages
run: >
pip3 install dnspython beautifulsoup4 requests \
hatchling hatch-vcs sphinx sphinx_epytext \
sphinx_rtd_theme sphinx-sitemap sphinx-intl
- name: Prepare git environment
run: |
git config user.email "linkchecker@linkchecker.github.io"
git config user.name "LinkChecker"
git checkout -b man-updates
git remote add local ${{ github.server_url }}/${{ github.repository }}
- name: Build man pages
run: |
python3 -m hatchling build -t sdist --hooks-only
make -C doc locale
git commit -a -m "Update doc translation catalogs"
make -C doc man
git commit -a -m "Update man pages"
- name: Build application translations catalogs
run: |
rm -f po/linkchecker.pot
make -C po
git commit -a -m "Update application translation catalogs"
- name: Push changes
run: >
git push --set-upstream local man-updates
linkchecker-10.4.0/.github/workflows/build.yml 0000664 0000000 0000000 00000011741 14535663452 0021316 0 ustar 00root root 0000000 0000000 # NB: this name is used in the status badge, where we want to see "build: passing"
name: build
permissions:
contents: read
on:
push:
branches:
- master
pull_request:
branches:
- master
workflow_dispatch: # allow manual triggering from GitHub UI
schedule:
- cron: "0 5 * * 6" # 5:00 UTC every Saturday
jobs:
build:
name: Python ${{ matrix.python-version }}
runs-on: ubuntu-latest
strategy:
matrix:
python-version:
- "3.10"
- "3.11"
- "3.12"
toxenv: [py]
include:
- python-version: "3.9"
toxenv: minreqs
services:
httpbin:
image: kennethreitz/httpbin
ports:
- 8080:80
steps:
- name: Install OS dependencies
run: |
sudo apt-get update
sudo apt-get install -y clamav-daemon geoip-database libgeoip-dev gettext
- name: Make ClamAV cache directory writeable for cache action
run: |
sudo chown -R runner:docker /var/lib/clamav
- name: ClamAV cache
id: cache-clamav
uses: actions/cache@v3
with:
path: /var/lib/clamav
key: clamav-v1
- name: Restore ClamAV directory ownership
run: |
sudo chown -R clamav:clamav /var/lib/clamav
- name: Restart ClamAV Daemon
if: ${{ steps.cache-clamav.outputs.cache-hit == 'true' }}
run: |
sudo service clamav-daemon restart
- name: Download the ClamAV signature database
if: ${{ steps.cache-clamav.outputs.cache-hit != 'true' }}
run: |
sudo service clamav-freshclam stop
sudo freshclam
sudo service clamav-daemon restart
sudo service clamav-daemon status
- name: Git clone
uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: "${{ matrix.python-version }}"
- name: Pip cache
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('tox.ini', 'pyproject.toml') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.python-version }}-
${{ runner.os }}-pip-
- name: Install Python dependencies
run: |
python -m pip install -U pip
python -m pip install -U hatchling hatch-vcs polib
python -m pip install -U tox
- name: Wait for ClamAV to be ready
run: |
while ! test -S /run/clamav/clamd.ctl; do printf "."; sleep 1; done
- name: Run tests
run: |
python -m hatchling build -t sdist --hooks-only
python -m tox -e ${{ matrix.toxenv }}
- name: Report to coveralls
uses: coverallsapp/github-action@f350da2c033043742f89e8c0b7b5145a1616da6d
docs:
# there's some overlap with publish-pages.yml, but this one runs on pull
# requests, doesn't publish, and runs more doc checks
name: docs
runs-on: ubuntu-latest
steps:
- name: Git clone
uses: actions/checkout@v3
- name: Install Ubuntu packages
run: |
sudo apt-get install -y graphviz mandoc
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Pip cache
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-docs-${{ hashFiles('tox.ini') }}
restore-keys: |
${{ runner.os }}-pip-docs-
${{ runner.os }}-pip-
- name: Install Python packages
run: |
pip install -U dnspython beautifulsoup4 requests \
hatchling hatch-vcs sphinx sphinx-epytext \
sphinx-intl sphinx-rtd-theme sphinx-sitemap
- name: Build
run: |
python3 -m hatchling build -t sdist --hooks-only
make -C doc html
make -C doc locale
make -C doc man
make -C doc check
lint:
name: ${{ matrix.toxenv }}
runs-on: ubuntu-latest
strategy:
matrix:
toxenv:
- flake8
- check-python-versions
- pylint
- yamllint
steps:
- name: Git clone
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Pip cache
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ matrix.toxenv }}-${{ hashFiles('tox.ini') }}
restore-keys: |
${{ runner.os }}-pip-${{ matrix.toxenv }}-
${{ runner.os }}-pip-
- name: Install dependencies
run: |
python -m pip install -U pip
python -m pip install -U hatchling hatch-vcs polib
python -m pip install -U tox
- name: Run ${{ matrix.toxenv }}
run: python -m tox -e ${{ matrix.toxenv }}
linkchecker-10.4.0/.github/workflows/publish-docker.yml 0000664 0000000 0000000 00000003054 14535663452 0023130 0 ustar 00root root 0000000 0000000 # https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#publishing-a-package-using-an-action
name: Create and publish a Docker image
on:
push:
branches: ['master']
tags: 'v*'
workflow_dispatch:
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Log in to the Container registry
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@57396166ad8aefe6098280995947635806a0e6ea
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
flavor: latest=true
tags: |
type=semver,pattern={{version}}
type=sha,prefix=
- name: Build and push Docker image
uses: docker/build-push-action@c56af957549030174b10d6867f20e78cfd7debc5
with:
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: Delete oldest Docker images
uses: actions/delete-package-versions@v4
with:
package-name: 'linkchecker'
package-type: 'container'
min-versions-to-keep: 20
linkchecker-10.4.0/.github/workflows/publish-pages.yml 0000664 0000000 0000000 00000002561 14535663452 0022762 0 ustar 00root root 0000000 0000000 name: Publish LinkChecker Documentation on GitHub Pages
on:
push:
branches: ["master"]
release:
types: [released]
jobs:
run:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v3
# Needed for hatch-vcs to extract LinkChecker version from tag
# https://github.com/actions/checkout/issues/249
with:
fetch-depth: 0
- name: Install Ubuntu packages
run: sudo apt install graphviz
# Ensure sphinx-autogen is installed in PATH
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install Python packages
run: |
pip install dnspython beautifulsoup4 requests \
hatchling hatch-vcs
# Allow sphinx-rtd-theme to choose the versions of sphinx & docutils
pip install sphinx-rtd-theme
pip install sphinx-epytext sphinx-sitemap
- name: Build
run: |
python3 -m hatchling build -t sdist --hooks-only
make -C doc html
- name: Publish
uses: peaceiris/actions-gh-pages@de7ea6f8efb354206b205ef54722213d99067935
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./doc/html
commit_message: ${{ github.event.head_commit.message }}
linkchecker-10.4.0/.github/workflows/release-files.yml 0000664 0000000 0000000 00000002637 14535663452 0022743 0 ustar 00root root 0000000 0000000 name: Create distribution files for a new release
on:
release:
types: [released]
jobs:
run:
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v3
# Needed for hatch-vcs to extract LinkChecker version from tag
# https://github.com/actions/checkout/issues/249
with:
fetch-depth: 0
- name: Install Ubuntu packages
run: sudo apt install git
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.x"
- name: Install Python packages
run: >
pip3 install -U hatchling hatch-vcs polib twine
- name: Set SOURCE_DATE_EPOCH
run: >
echo "SOURCE_DATE_EPOCH=$(git log -n 1 ${{ github.sha }} --format=%ct)" >> $GITHUB_ENV
- name: Create distribution files
run: >
python3 -m hatchling build
- name: Check distribution files
run: >
twine check dist/*.{tar.gz,whl}
- name: Calculate checksums for distribution files
run: >
sha256sum dist/*.{tar.gz,whl}
- name: Add files to release
run: >
gh release upload ${{ github.ref_name }} dist/*
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
- name: Publish distribution files to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
linkchecker-10.4.0/.project 0000664 0000000 0000000 00000000555 14535663452 0015547 0 ustar 00root root 0000000 0000000
linkchecker
org.python.pydev.PyDevBuilder
org.python.pydev.pythonNature
linkchecker-10.4.0/.pydevproject 0000664 0000000 0000000 00000000645 14535663452 0016617 0 ustar 00root root 0000000 0000000
Default
python 2.7
/linkchecker-git
linkchecker-10.4.0/.pylintrc 0000664 0000000 0000000 00000000142 14535663452 0015735 0 ustar 00root root 0000000 0000000 [TYPECHECK]
ignored-modules=meliae, win32com.client, yappi
[VARIABLES]
additional-builtins=_, _n
linkchecker-10.4.0/.yamllint 0000664 0000000 0000000 00000000150 14535663452 0015721 0 ustar 00root root 0000000 0000000 extends: default
rules:
document-start: disable
line-length: disable
truthy: {check-keys: false}
linkchecker-10.4.0/CODE_OF_CONDUCT.rst 0000664 0000000 0000000 00000010242 14535663452 0017101 0 ustar 00root root 0000000 0000000 Contributor Covenant Code of Conduct
====================================
Our Pledge
----------
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our
project and our community a harassment-free experience for everyone,
regardless of age, body size, disability, ethnicity, gender identity and
expression, level of experience, nationality, personal appearance, race,
religion, or sexual identity and orientation.
Our Standards
-------------
Examples of behavior that contributes to creating a positive environment
include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual
attention or advances
- Trolling, insulting/derogatory comments, and personal or political
attacks
- Public or private harassment
- Publishing others’ private information, such as a physical or
electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
Our Responsibilities
--------------------
Project maintainers are responsible for clarifying the standards of
acceptable behavior and are expected to take appropriate and fair
corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit,
or reject comments, commits, code, wiki edits, issues, and other
contributions that are not aligned to this Code of Conduct, or to ban
temporarily or permanently any contributor for other behaviors that they
deem inappropriate, threatening, offensive, or harmful.
Scope
-----
This Code of Conduct applies both within project spaces and in public
spaces when an individual is representing the project or its community.
Examples of representing a project or community include using an
official project e-mail address, posting via an official social media
account, or acting as an appointed representative at an online or
offline event. Representation of a project may be further defined and
clarified by project maintainers.
Enforcement
-----------
Instances of abusive, harassing, or otherwise unacceptable behavior may
be reported by contacting one of the persons listed below. All
complaints will be reviewed and investigated and will result in a
response that is deemed necessary and appropriate to the circumstances.
The project maintainers is obligated to maintain confidentiality with
regard to the reporter of an incident. Further details of specific
enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in
good faith may face temporary or permanent repercussions as determined
by other members of the project’s leadership.
Project maintainers are encouraged to follow the spirit of the `Django
Code of Conduct Enforcement
Manual `__
when receiving reports.
Contacts
--------
The following people have volunteered to be available to respond to Code
of Conduct reports. They have reviewed existing literature and agree to
follow the aforementioned process in good faith. They also accept
OpenPGP-encrypted email:
- Antoine Beaupré anarcat@debian.org
Attribution
-----------
This Code of Conduct is adapted from the `Contributor
Covenant `__, version 1.4, available at
`http://contributor-covenant.org/version/1/4 `__
Changes
-------
The Code of Conduct was modified to refer to *project maintainers*
instead of *project team* and small paragraph was added to refer to the
Django enforcement manual.
Note: We have so far determined that writing an explicit enforcement
policy is not necessary, considering the available literature already
available online and the relatively small size of the community. This
may change in the future if the community grows larger.
linkchecker-10.4.0/CONTRIBUTING.rst 0000664 0000000 0000000 00000013413 14535663452 0016536 0 ustar 00root root 0000000 0000000 Contribution Guide
==================
This document outlines how to contribute to this project. It details
instructions on how to submit issues, bug reports and patches.
Before you participate in the community, you should also agree to
respect the code of conduct, shipped in
:doc:`CODE_OF_CONDUCT.rst ` in the source code.
Positive feedback
-----------------
Even if you have no changes, suggestions, documentation or bug reports
to submit, even just positive feedback like “it works” goes a long way.
It shows the project is being used and gives instant gratification to
contributors. So we welcome emails that tell us of your positive
experiences with the project or just thank you notes. Contact
maintainers directly or submit a closed issue with your story. You can
also send your “thanks” through https://saythanks.io/.
Issues and bug reports
----------------------
We want you to report issues you find in the software. It is a
recognized and important part of contributing to this project. All
issues will be read and replied to politely and professionally. Issues
and bug reports should be filed on the `issue
tracker `__.
Issue triage
^^^^^^^^^^^^
Issue triage is a useful contribution as well. You can review the
`issues `__ in the
`project page `__ and, for
each issue:
- try to reproduce the issue, if it is not reproducible, label it with
``help-wanted`` and explain the steps taken to reproduce
- if information is missing, label it with ``invalid`` and request
specific information
- if the feature request is not within the scope of the project or
should be refused for other reasons, use the ``wontfix`` label and
close the issue
- mark feature requests with the ``enhancement`` label, bugs with
``bug``, duplicates with ``duplicate`` and so on…
Note that some of those operations are available only to project
maintainers, see below for the different statuses.
Security issues
^^^^^^^^^^^^^^^
Security issues should first be disclosed privately to the project
maintainers, which support receiving encrypted emails through the usual
OpenPGP key discovery mechanisms.
This project cannot currently afford bounties for security issues. We
would still ask that you coordinate disclosure, giving the project a
reasonable delay to produce a fix and prepare a release before public
disclosure.
Public recognition will be given to reporters security issues if
desired. We otherwise agree with the `Disclosure
Guidelines `__ of the
`HackerOne project `__, at the time of
writing.
Patches
-------
Patches can be submitted through `pull
requests `__ on the
`project page `__.
Some guidelines for patches:
- A patch should be a minimal and accurate answer to exactly one
identified and agreed problem.
- A patch must compile cleanly and pass project self-tests on all
target platforms.
- A patch commit message must consist of a single short (less than 50
characters) line stating a summary of the change, followed by a blank
line and then a description of the problem being solved and its
solution, or a reason for the change. Write more information, not
less, in the commit log.
- Patches should be reviewed by at least one maintainer before being
merged.
Project maintainers should merge their own patches only when they have
been approved by other maintainers, unless there is no response within a
reasonable timeframe (roughly one week) or there is an urgent change to
be done (e.g. security or data loss issue).
As an exception to this rule, this specific document cannot be changed
without the consensus of all administrators of the project.
Note: Those guidelines were inspired by the `Collective Code
Construction Contract `__. The
document was found to be a little too complex and hard to read and
wasn’t adopted in its entirety. See this
`discussion `__
for more information.
Patch triage
^^^^^^^^^^^^
You can also review existing pull requests, by cloning the contributor’s
repository and testing it. If the tests do not pass (either locally or
in Travis), if the patch is incomplete or otherwise does not respect the
above guidelines, submit a review with “changes requested” with
reasoning.
Membership
----------
There are three levels of membership in the project, Administrator (also
known as “Owner” in GitHub), Maintainer (also known as “Member”), or
regular users (everyone with or without a GitHub account). Anyone is
welcome to contribute to the project within the guidelines outlined in
this document, regardless of their status, and that includes regular
users.
Maintainers can:
- do everything regular users can
- review, push and merge pull requests
- edit and close issues
Administrators can:
- do everything maintainers can
- add new maintainers
- promote maintainers to administrators
Regular users can be promoted to maintainers if they contribute to the
project, either by participating in issues, documentation or pull
requests.
Maintainers can be promoted to administrators when they have given
significant contributions for a sustained timeframe, by consensus of the
current administrators. This process should be open and decided as any
other issue.
Maintainers can be demoted by administrators and administrators can be
demoted by the other administrators’ consensus. Unresponsive maintainers
or administrators can be removed after a month unless they specifically
announced a leave.
linkchecker-10.4.0/COPYING 0000664 0000000 0000000 00000043103 14535663452 0015127 0 ustar 00root root 0000000 0000000 GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
linkchecker-10.4.0/Dockerfile 0000664 0000000 0000000 00000001360 14535663452 0016065 0 ustar 00root root 0000000 0000000 # Use the maximum Python version tested
FROM python:3.12-slim
# linkchecker creates $XDG_CONFIG_HOME/linkchecker/ (700) containing linkcheckerrc et al
ENV HOME /tmp
# Enables access to local files when run with -v "$PWD":/mnt
VOLUME /mnt
WORKDIR /mnt
# Dependencies change on their own schedule so install them separately
RUN pip install --no-cache-dir beautifulsoup4 dnspython requests polib
RUN set -x \
&& apt-get update -qq \
&& apt-get install -y -qq --no-install-recommends git \
&& pip install --no-cache-dir git+https://github.com/linkchecker/linkchecker.git \
&& apt-get -y -qq purge git \
&& apt-get autoremove -y -qq \
&& apt-get clean -y -qq all \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["linkchecker"]
linkchecker-10.4.0/Makefile 0000664 0000000 0000000 00000001411 14535663452 0015530 0 ustar 00root root 0000000 0000000 # This Makefile is only used by developers.
PAGER ?= less
all:
@echo "Read the file doc/install.txt to see how to build and install this package."
clean:
git clean -fdx
locale:
$(MAKE) -C po
linkcheck/_release.py:
hatchling build -t sdist --hooks-only
test: linkcheck/_release.py
tox -e py
upload:
twine upload dist/LinkChecker*
homepage: linkcheck/_release.py
make -C doc html
dist:
hatchling build
check:
flake8
yamllint .github
make -C doc check
make -C po check
releasecheck: check
@if egrep -i "xx\.|xxxx|\.xx|^[[:digit:]]+\.x" doc/changelog.txt > /dev/null; then \
echo "Could not release: edit doc/changelog.txt release date"; false; \
fi
count:
@sloccount linkcheck tests
.PHONY: test count upload all clean
.PHONY: locale dist homepage
linkchecker-10.4.0/README.rst 0000664 0000000 0000000 00000004541 14535663452 0015566 0 ustar 00root root 0000000 0000000 LinkChecker
============
|Build Status|_ |License|_
.. |Build Status| image:: https://github.com/linkchecker/linkchecker/actions/workflows/build.yml/badge.svg?branch=master
.. _Build Status: https://github.com/linkchecker/linkchecker/actions/workflows/build.yml
.. |License| image:: https://img.shields.io/badge/license-GPL2-d49a6a.svg
.. _License: https://opensource.org/licenses/GPL-2.0
Check for broken links in web sites.
Features
---------
- recursive and multithreaded checking and site crawling
- output in colored or normal text, HTML, SQL, CSV, XML or a sitemap graph in different formats
- HTTP/1.1, HTTPS, FTP, mailto: and local file links support
- restrict link checking with regular expression filters for URLs
- proxy support
- username/password authorization for HTTP and FTP
- honors robots.txt exclusion protocol
- Cookie support
- HTML5 support
- a command line and web interface
- various check plugins available
Installation
-------------
Python 3.9 or later is needed. Using pip to install LinkChecker:
``pip3 install linkchecker``
pipx can also be used to install LinkChecker.
The version in the pip repository may be old, to find out how to get the latest
code, plus platform-specific information and other advice see `doc/install.txt`_
in the source code archive.
.. _doc/install.txt: https://linkchecker.github.io/linkchecker/install.html
Usage
------
Execute ``linkchecker https://www.example.com``.
For other options see ``linkchecker --help``, and for more information the
manual pages `linkchecker(1)`_ and `linkcheckerrc(5)`_.
.. _linkchecker(1): https://linkchecker.github.io/linkchecker/man/linkchecker.html
.. _linkcheckerrc(5): https://linkchecker.github.io/linkchecker/man/linkcheckerrc.html
Docker usage
-------------
If you do not want to install any additional libraries/dependencies you can use
the Docker image which is published on GitHub Packages.
Example for external web site check::
docker run --rm -it -u $(id -u):$(id -g) ghcr.io/linkchecker/linkchecker:latest --verbose https://www.example.com
Local HTML file check::
docker run --rm -it -u $(id -u):$(id -g) -v "$PWD":/mnt ghcr.io/linkchecker/linkchecker:latest --verbose index.html
In addition to the rolling latest image, uniquely tagged images can also be found
on the `packages`_ page.
.. _packages: https://github.com/linkchecker/linkchecker/pkgs/container/linkchecker
linkchecker-10.4.0/cgi-bin/ 0000775 0000000 0000000 00000000000 14535663452 0015403 5 ustar 00root root 0000000 0000000 linkchecker-10.4.0/cgi-bin/README 0000664 0000000 0000000 00000000263 14535663452 0016264 0 ustar 00root root 0000000 0000000 For the HTML files in the lconline directory to work, your web server
must have mod_negotiation enabled.
Or you can just remove the .XY suffixes from the language-specific files.
linkchecker-10.4.0/cgi-bin/lc.wsgi 0000664 0000000 0000000 00000001447 14535663452 0016702 0 ustar 00root root 0000000 0000000 #!/usr/bin/python3
# Copyright (C) 2012 Bastian Kleineidam
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from linkcheck.lc_cgi import application
linkchecker-10.4.0/cgi-bin/lconline/ 0000775 0000000 0000000 00000000000 14535663452 0017206 5 ustar 00root root 0000000 0000000 linkchecker-10.4.0/cgi-bin/lconline/check.js 0000664 0000000 0000000 00000001122 14535663452 0020615 0 ustar 00root root 0000000 0000000 // check url validity
function isValid (thisForm) {
if (thisForm.url.value=="" || thisForm.url.value=="http://") {
alert(gettext("Empty URL was given."));
thisForm.url.select();
thisForm.url.focus();
return false;
}
if (!checkSyntax(thisForm.url.value)) {
alert(gettext("Invalid URL was given."));
thisForm.url.select();
thisForm.url.focus();
return false;
}
return true;
}
// check url syntax
function checkSyntax (url) {
var syntax = /^https?:\/\/[-_a-zA-Z0-9.\/=%?~]+$/;
return syntax.test(url);
}
linkchecker-10.4.0/cgi-bin/lconline/favicon.ico 0000664 0000000 0000000 00000007066 14535663452 0021340 0 ustar 00root root 0000000 0000000 h &