mirror of
https://github.com/ArchiveBox/ArchiveBox
synced 2024-11-21 19:53:06 +00:00
update build and release scripts to use uv
This commit is contained in:
parent
ce2e19a429
commit
e29aff12bf
10 changed files with 1292 additions and 2094 deletions
|
@ -9,7 +9,7 @@ set -o errexit
|
||||||
set -o errtrace
|
set -o errtrace
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
IFS=$'\n'
|
IFS=$' '
|
||||||
|
|
||||||
REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
|
REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
|
@ -18,15 +18,34 @@ which docker > /dev/null || exit 1
|
||||||
which jq > /dev/null || exit 1
|
which jq > /dev/null || exit 1
|
||||||
# which pdm > /dev/null || exit 1
|
# which pdm > /dev/null || exit 1
|
||||||
|
|
||||||
SUPPORTED_PLATFORMS="linux/amd64,linux/arm64"
|
declare -a TAG_NAMES="$*"
|
||||||
|
BRANCH_NAME="${1:-$(git rev-parse --abbrev-ref HEAD)}"
|
||||||
TAG_NAME="${1:-$(git rev-parse --abbrev-ref HEAD)}"
|
|
||||||
VERSION="$(jq -r '.version' < "$REPO_DIR/package.json")"
|
VERSION="$(jq -r '.version' < "$REPO_DIR/package.json")"
|
||||||
SHORT_VERSION="$(echo "$VERSION" | perl -pe 's/(\d+)\.(\d+)\.(\d+)/$1.$2/g')"
|
|
||||||
GIT_SHA=sha-"$(git rev-parse --short HEAD)"
|
GIT_SHA=sha-"$(git rev-parse --short HEAD)"
|
||||||
SELECTED_PLATFORMS="${2:-$SUPPORTED_PLATFORMS}"
|
SELECTED_PLATFORMS="linux/amd64,linux/arm64"
|
||||||
|
|
||||||
echo "[+] Building Docker image: tag=$TAG_NAME version=$SHORT_VERSION arch=$SELECTED_PLATFORMS"
|
# if not already in TAG_NAMES, add GIT_SHA and BRANCH_NAME
|
||||||
|
if ! echo "${TAG_NAMES[@]}" | grep -q "$GIT_SHA"; then
|
||||||
|
TAG_NAMES+=("$GIT_SHA")
|
||||||
|
fi
|
||||||
|
if ! echo "${TAG_NAMES[@]}" | grep -q "$BRANCH_NAME"; then
|
||||||
|
TAG_NAMES+=("$BRANCH_NAME")
|
||||||
|
fi
|
||||||
|
if ! echo "${TAG_NAMES[@]}" | grep -q "$VERSION"; then
|
||||||
|
TAG_NAMES+=("$VERSION")
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[+] Building Docker image for $SELECTED_PLATFORMS: branch=$BRANCH_NAME version=$VERSION tags=${TAG_NAMES[*]}"
|
||||||
|
|
||||||
|
declare -a FULL_TAG_NAMES
|
||||||
|
# for each tag in TAG_NAMES, add archivebox/archivebox:tag and nikisweeting/archivebox:tag to FULL_TAG_NAMES
|
||||||
|
for TAG_NAME in "${TAG_NAMES[@]}"; do
|
||||||
|
[[ "$TAG_NAME" == "" ]] && continue
|
||||||
|
FULL_TAG_NAMES+=("-t archivebox/archivebox:$TAG_NAME")
|
||||||
|
FULL_TAG_NAMES+=("-t nikisweeting/archivebox:$TAG_NAME")
|
||||||
|
FULL_TAG_NAMES+=("-t ghcr.io/archivebox/archivebox:$TAG_NAME")
|
||||||
|
done
|
||||||
|
echo "${FULL_TAG_NAMES[@]}"
|
||||||
|
|
||||||
function check_platforms() {
|
function check_platforms() {
|
||||||
INSTALLED_PLATFORMS="$(docker buildx inspect | grep 'Platforms:' )"
|
INSTALLED_PLATFORMS="$(docker buildx inspect | grep 'Platforms:' )"
|
||||||
|
@ -72,30 +91,13 @@ check_platforms || (recreate_builder && check_platforms) || exit 1
|
||||||
|
|
||||||
|
|
||||||
# Make sure pyproject.toml, pdm{.dev}.lock, requirements{-dev}.txt, package{-lock}.json are all up-to-date
|
# Make sure pyproject.toml, pdm{.dev}.lock, requirements{-dev}.txt, package{-lock}.json are all up-to-date
|
||||||
echo "[!] Make sure you've run ./bin/lock_pkgs.sh recently!"
|
# echo "[!] Make sure you've run ./bin/lock_pkgs.sh recently!"
|
||||||
sleep 1
|
bash ./bin/lock_pkgs.sh
|
||||||
# bash ./bin/lock_pkgs.sh
|
|
||||||
|
|
||||||
|
|
||||||
echo "[+] Building archivebox:$VERSION docker image..."
|
echo "[+] Building archivebox:$VERSION docker image..."
|
||||||
# docker builder prune
|
# docker builder prune
|
||||||
# docker build . --no-cache -t archivebox-dev \
|
# docker build . --no-cache -t archivebox-dev \
|
||||||
# replace --load with --push to deploy
|
# replace --load with --push to deploy
|
||||||
docker buildx build --platform "$SELECTED_PLATFORMS" --load . \
|
# shellcheck disable=SC2068
|
||||||
-t archivebox/archivebox:$TAG_NAME \
|
docker buildx build --platform "$SELECTED_PLATFORMS" --load . ${FULL_TAG_NAMES[@]}
|
||||||
-t archivebox/archivebox:$GIT_SHA \
|
|
||||||
-t nikisweeting/archivebox:$TAG_NAME \
|
|
||||||
-t nikisweeting/archivebox:$GIT_SHA \
|
|
||||||
-t ghcr.io/archivebox/archivebox:$TAG_NAME \
|
|
||||||
-t ghcr.io/archivebox/archivebox:$GIT_SHA
|
|
||||||
# -t archivebox/archivebox \
|
|
||||||
# -t archivebox/archivebox:$VERSION \
|
|
||||||
# -t archivebox/archivebox:$SHORT_VERSION \
|
|
||||||
# -t archivebox/archivebox:latest \
|
|
||||||
# -t nikisweeting/archivebox \
|
|
||||||
# -t nikisweeting/archivebox:$VERSION \
|
|
||||||
# -t nikisweeting/archivebox:$SHORT_VERSION \
|
|
||||||
# -t nikisweeting/archivebox:latest \
|
|
||||||
# -t ghcr.io/archivebox/archivebox:$VERSION \
|
|
||||||
# -t ghcr.io/archivebox/archivebox:$SHORT_VERSION \
|
|
||||||
# -t ghcr.io/archivebox/archivebox:latest
|
|
||||||
|
|
|
@ -26,8 +26,8 @@ git pull
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
|
|
||||||
echo "[+] Building docs"
|
echo "[+] Building docs"
|
||||||
sphinx-apidoc -o docs archivebox
|
|
||||||
cd "$REPO_DIR/docs"
|
cd "$REPO_DIR/docs"
|
||||||
|
make clean
|
||||||
make html
|
make html
|
||||||
# open docs/_build/html/index.html to see the output
|
# open docs/_build/html/index.html to see the output
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
|
|
|
@ -11,21 +11,15 @@ set -o pipefail
|
||||||
IFS=$'\n'
|
IFS=$'\n'
|
||||||
|
|
||||||
REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
|
REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
|
||||||
|
|
||||||
if [[ -f "$REPO_DIR/.venv/bin/activate" ]]; then
|
|
||||||
source "$REPO_DIR/.venv/bin/activate"
|
|
||||||
else
|
|
||||||
echo "[!] Warning: No virtualenv presesnt in $REPO_DIR/.venv, creating one now..."
|
|
||||||
python3 -m venv --system-site-packages --symlinks $REPO_DIR/.venv
|
|
||||||
fi
|
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
|
|
||||||
# Generate pdm.lock, requirements.txt, and package-lock.json
|
# Generate pdm.lock, requirements.txt, and package-lock.json
|
||||||
bash ./bin/lock_pkgs.sh
|
bash ./bin/lock_pkgs.sh
|
||||||
|
source .venv/bin/activate
|
||||||
|
|
||||||
echo "[+] Building sdist, bdist_wheel, and egg_info"
|
echo "[+] Building sdist, bdist_wheel, and egg_info"
|
||||||
rm -Rf build dist
|
rm -Rf build dist
|
||||||
pdm build
|
uv build
|
||||||
cp dist/* ./pip_dist/
|
cp dist/* ./pip_dist/
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
|
|
@ -32,52 +32,40 @@ echo
|
||||||
echo "[*] Cleaning up old lockfiles and build files"
|
echo "[*] Cleaning up old lockfiles and build files"
|
||||||
deactivate 2>/dev/null || true
|
deactivate 2>/dev/null || true
|
||||||
rm -Rf build dist
|
rm -Rf build dist
|
||||||
rm -f pdm.lock
|
rm -f uv.lock
|
||||||
rm -f pdm.dev.lock
|
|
||||||
rm -f requirements.txt
|
rm -f requirements.txt
|
||||||
rm -f requirements-dev.txt
|
|
||||||
rm -f package-lock.json
|
rm -f package-lock.json
|
||||||
rm -f archivebox/package.json
|
rm -f archivebox/package.json
|
||||||
rm -f archivebox/package-lock.json
|
rm -f archivebox/package-lock.json
|
||||||
rm -Rf ./.venv
|
# rm -Rf ./.venv
|
||||||
rm -Rf ./node_modules
|
# rm -Rf ./node_modules
|
||||||
rm -Rf ./archivebox/node_modules
|
# rm -Rf ./archivebox/node_modules
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo
|
echo
|
||||||
|
|
||||||
echo "[+] Generating dev & prod requirements.txt & pdm.lock from pyproject.toml..."
|
echo "[+] Generating dev & prod requirements.txt & pdm.lock from pyproject.toml..."
|
||||||
pip install --upgrade pip setuptools
|
uv venv --python 3.12
|
||||||
pdm self update >/dev/null 2>&1 || true
|
source .venv/bin/activate
|
||||||
pdm venv create 3.12
|
|
||||||
echo
|
echo
|
||||||
echo "pyproject.toml: archivebox $(grep 'version = ' pyproject.toml | awk '{print $3}' | jq -r)"
|
echo "pyproject.toml: archivebox $(grep 'version = ' pyproject.toml | awk '{print $3}' | jq -r)"
|
||||||
echo "$(which python): $(python --version | head -n 1)"
|
echo "$(which python): $(python --version | head -n 1)"
|
||||||
echo "$(which pdm): $(pdm --version | head -n 1)"
|
echo "$(which uv): $(uv --version | head -n 1)"
|
||||||
pdm info --env
|
|
||||||
pdm info
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
# https://pdm-project.org/latest/usage/lockfile/
|
# https://pdm-project.org/latest/usage/lockfile/
|
||||||
# prod
|
# prod
|
||||||
pdm lock --group=':all' --production --lockfile pdm.lock --python="==3.12.*" --platform=linux
|
uv lock
|
||||||
pdm lock --group=':all' --production --lockfile pdm.lock --python="==3.12.*" --platform=macos --append
|
uv pip compile pyproject.toml --all-extras -o requirements.txt >/dev/null
|
||||||
pdm sync --group=':all' --production --lockfile pdm.lock --clean
|
uv sync --all-extras --frozen 2>/dev/null
|
||||||
pdm export --group=':all' --production --lockfile pdm.lock --without-hashes -o requirements.txt
|
|
||||||
# cp ./pdm.lock ./pip_dist/
|
|
||||||
# cp ./requirements.txt ./pip_dist/
|
|
||||||
|
|
||||||
# dev
|
|
||||||
pdm lock --group=':all' --dev --lockfile pdm.dev.lock --python="==3.12.*" --platform=linux
|
|
||||||
pdm lock --group=':all' --dev --lockfile pdm.dev.lock --python="==3.12.*" --platform=macos --append
|
|
||||||
pdm sync --group=':all' --dev --lockfile pdm.dev.lock --clean
|
|
||||||
pdm export --group=':all' --dev --lockfile pdm.dev.lock --without-hashes -o requirements-dev.txt
|
|
||||||
# cp ./pdm.dev.lock ./pip_dist/
|
|
||||||
# cp ./requirements-dev.txt ./pip_dist/
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "[+] Generating package-lock.json from package.json..."
|
echo "[+] Generating package-lock.json from package.json..."
|
||||||
npm install -g npm
|
npm install -g npm
|
||||||
|
npm config set fund false --location=global &
|
||||||
|
npm config set fund false &
|
||||||
|
npm config set audit false --location=global &
|
||||||
|
npm config set audit false &
|
||||||
echo
|
echo
|
||||||
echo "package.json: archivebox $(jq -r '.version' package.json)"
|
echo "package.json: archivebox $(jq -r '.version' package.json)"
|
||||||
echo
|
echo
|
||||||
|
@ -85,7 +73,7 @@ echo "$(which node): $(node --version | head -n 1)"
|
||||||
echo "$(which npm): $(npm --version | head -n 1)"
|
echo "$(which npm): $(npm --version | head -n 1)"
|
||||||
|
|
||||||
echo
|
echo
|
||||||
npm install --package-lock-only
|
npm install --package-lock-only --prefer-offline
|
||||||
cp package.json archivebox/package.json
|
cp package.json archivebox/package.json
|
||||||
cp package-lock.json archivebox/package-lock.json
|
cp package-lock.json archivebox/package-lock.json
|
||||||
|
|
||||||
|
@ -93,10 +81,8 @@ echo
|
||||||
echo "[√] Finished. Don't forget to commit the new lockfiles:"
|
echo "[√] Finished. Don't forget to commit the new lockfiles:"
|
||||||
echo
|
echo
|
||||||
ls "pyproject.toml" | cat
|
ls "pyproject.toml" | cat
|
||||||
ls "pdm.lock" | cat
|
|
||||||
ls "pdm.dev.lock" | cat
|
|
||||||
ls "requirements.txt" | cat
|
ls "requirements.txt" | cat
|
||||||
ls "requirements-dev.txt" | cat
|
ls "uv.lock" | cat
|
||||||
echo
|
echo
|
||||||
ls "package.json" | cat
|
ls "package.json" | cat
|
||||||
ls "package-lock.json" | cat
|
ls "package-lock.json" | cat
|
||||||
|
|
|
@ -8,43 +8,47 @@ set -o errexit
|
||||||
set -o errtrace
|
set -o errtrace
|
||||||
set -o nounset
|
set -o nounset
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
IFS=$'\n'
|
IFS=$' '
|
||||||
|
|
||||||
REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
|
REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && pwd )"
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
|
|
||||||
SUPPORTED_PLATFORMS="linux/amd64,linux/arm64" # no longer supported: linux/arm/v7
|
declare -a TAG_NAMES="$*"
|
||||||
|
BRANCH_NAME="${1:-$(git rev-parse --abbrev-ref HEAD)}"
|
||||||
TAG_NAME="${1:-$(git rev-parse --abbrev-ref HEAD)}"
|
|
||||||
VERSION="$(jq -r '.version' < "$REPO_DIR/package.json")"
|
VERSION="$(jq -r '.version' < "$REPO_DIR/package.json")"
|
||||||
SHORT_VERSION="$(echo "$VERSION" | perl -pe 's/(\d+)\.(\d+)\.(\d+)/$1.$2/g')"
|
|
||||||
GIT_SHA=sha-"$(git rev-parse --short HEAD)"
|
GIT_SHA=sha-"$(git rev-parse --short HEAD)"
|
||||||
SELECTED_PLATFORMS="${2:-$SUPPORTED_PLATFORMS}"
|
SELECTED_PLATFORMS="linux/amd64,linux/arm64"
|
||||||
|
|
||||||
|
# if not already in TAG_NAMES, add GIT_SHA and BRANCH_NAME
|
||||||
|
if ! echo "${TAG_NAMES[@]}" | grep -q "$GIT_SHA"; then
|
||||||
|
TAG_NAMES+=("$GIT_SHA")
|
||||||
|
fi
|
||||||
|
if ! echo "${TAG_NAMES[@]}" | grep -q "$BRANCH_NAME"; then
|
||||||
|
TAG_NAMES+=("$BRANCH_NAME")
|
||||||
|
fi
|
||||||
|
if ! echo "${TAG_NAMES[@]}" | grep -q "$VERSION"; then
|
||||||
|
TAG_NAMES+=("$VERSION")
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[+] Building + releasing Docker image for $SELECTED_PLATFORMS: branch=$BRANCH_NAME version=$VERSION tags=${TAG_NAMES[*]}"
|
||||||
|
|
||||||
|
declare -a FULL_TAG_NAMES
|
||||||
|
# for each tag in TAG_NAMES, add archivebox/archivebox:tag and nikisweeting/archivebox:tag to FULL_TAG_NAMES
|
||||||
|
for TAG_NAME in "${TAG_NAMES[@]}"; do
|
||||||
|
[[ "$TAG_NAME" == "" ]] && continue
|
||||||
|
FULL_TAG_NAMES+=("-t archivebox/archivebox:$TAG_NAME")
|
||||||
|
FULL_TAG_NAMES+=("-t nikisweeting/archivebox:$TAG_NAME")
|
||||||
|
FULL_TAG_NAMES+=("-t ghcr.io/archivebox/archivebox:$TAG_NAME")
|
||||||
|
done
|
||||||
|
echo "${FULL_TAG_NAMES[@]}"
|
||||||
|
|
||||||
|
|
||||||
|
./bin/lock_pkgs.sh
|
||||||
|
|
||||||
# echo "[*] Logging in to Docker Hub & Github Container Registry"
|
# echo "[*] Logging in to Docker Hub & Github Container Registry"
|
||||||
# docker login --username=nikisweeting
|
# docker login --username=nikisweeting
|
||||||
# docker login ghcr.io --username=pirate
|
# docker login ghcr.io --username=pirate
|
||||||
|
|
||||||
# echo "[^] Building docker image"
|
|
||||||
# ./bin/build_docker.sh "$TAG_NAME" "$SELECTED_PLATFORMS"
|
|
||||||
|
|
||||||
echo "[^] Uploading docker image"
|
echo "[^] Uploading docker image"
|
||||||
docker buildx build --platform "$SELECTED_PLATFORMS" --push . \
|
# shellcheck disable=SC2068
|
||||||
-t archivebox/archivebox:"$TAG_NAME" \
|
docker buildx build --platform "$SELECTED_PLATFORMS" --push . ${FULL_TAG_NAMES[@]}
|
||||||
-t archivebox/archivebox:"$GIT_SHA" \
|
|
||||||
-t nikisweeting/archivebox:"$TAG_NAME" \
|
|
||||||
-t nikisweeting/archivebox:"$GIT_SHA" \
|
|
||||||
-t ghcr.io/archivebox/archivebox:"$TAG_NAME" \
|
|
||||||
-t ghcr.io/archivebox/archivebox:"$GIT_SHA"
|
|
||||||
# -t archivebox/archivebox \
|
|
||||||
# -t archivebox/archivebox:$VERSION \
|
|
||||||
# -t archivebox/archivebox:$SHORT_VERSION \
|
|
||||||
# -t archivebox/archivebox:latest \
|
|
||||||
# -t nikisweeting/archivebox \
|
|
||||||
# -t nikisweeting/archivebox:$VERSION \
|
|
||||||
# -t nikisweeting/archivebox:$SHORT_VERSION \
|
|
||||||
# -t nikisweeting/archivebox:latest \
|
|
||||||
# -t ghcr.io/archivebox/archivebox:$VERSION \
|
|
||||||
# -t ghcr.io/archivebox/archivebox:$SHORT_VERSION \
|
|
||||||
|
|
||||||
|
|
|
@ -14,8 +14,5 @@ REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && cd .. && p
|
||||||
cd "$REPO_DIR"
|
cd "$REPO_DIR"
|
||||||
source "$REPO_DIR/.venv/bin/activate"
|
source "$REPO_DIR/.venv/bin/activate"
|
||||||
|
|
||||||
echo "[^] Publishing to Test PyPI..."
|
|
||||||
pdm publish --repository testpypi
|
|
||||||
|
|
||||||
echo "[^] Publishing to PyPI..."
|
echo "[^] Publishing to PyPI..."
|
||||||
pdm publish --no-build
|
uv publish
|
||||||
|
|
|
@ -110,23 +110,19 @@ all = [
|
||||||
"archivebox[sonic,ldap]"
|
"archivebox[sonic,ldap]"
|
||||||
]
|
]
|
||||||
|
|
||||||
# pdm lock --group=':all' --dev
|
[tool.uv]
|
||||||
# pdm install -G:all --dev
|
dev-dependencies = [
|
||||||
# pdm update --dev --unconstrained
|
### BUILD
|
||||||
[tool.pdm.dev-dependencies]
|
|
||||||
build = [
|
|
||||||
# "pdm", # usually installed by apt/brew, dont double-install with pip
|
# "pdm", # usually installed by apt/brew, dont double-install with pip
|
||||||
"pip>=24.2",
|
"pip>=24.2",
|
||||||
"setuptools>=75.1.0",
|
"setuptools>=75.1.0",
|
||||||
"wheel>=0.44.0",
|
"wheel>=0.44.0",
|
||||||
"homebrew-pypi-poet>=0.10.0", # for: generating archivebox.rb brewfile list of python packages
|
"homebrew-pypi-poet>=0.10.0", # for: generating archivebox.rb brewfile list of python packages
|
||||||
]
|
### DOCS
|
||||||
docs = [
|
|
||||||
"recommonmark>=0.7.1",
|
"recommonmark>=0.7.1",
|
||||||
"sphinx",
|
"sphinx",
|
||||||
"sphinx-rtd-theme>=2.0.0",
|
"sphinx-rtd-theme>=2.0.0",
|
||||||
]
|
### DEBUGGING
|
||||||
debug = [
|
|
||||||
"django-debug-toolbar>=4.4.6",
|
"django-debug-toolbar>=4.4.6",
|
||||||
"djdt_flamegraph>=0.2.13",
|
"djdt_flamegraph>=0.2.13",
|
||||||
"ipdb>=0.13.13",
|
"ipdb>=0.13.13",
|
||||||
|
@ -136,12 +132,10 @@ debug = [
|
||||||
"opentelemetry-instrumentation-sqlite3>=0.47b0",
|
"opentelemetry-instrumentation-sqlite3>=0.47b0",
|
||||||
"viztracer", # usage: viztracer ../.venv/bin/archivebox manage check
|
"viztracer", # usage: viztracer ../.venv/bin/archivebox manage check
|
||||||
# "snakeviz", # usage: python -m cProfile -o flamegraph.prof ../.venv/bin/archivebox manage check
|
# "snakeviz", # usage: python -m cProfile -o flamegraph.prof ../.venv/bin/archivebox manage check
|
||||||
]
|
### TESTING
|
||||||
test = [
|
|
||||||
"pytest>=8.3.3",
|
"pytest>=8.3.3",
|
||||||
"bottle>=0.13.1",
|
"bottle>=0.13.1",
|
||||||
]
|
### LINTING
|
||||||
lint = [
|
|
||||||
"ruff>=0.6.6",
|
"ruff>=0.6.6",
|
||||||
"flake8>=7.1.1",
|
"flake8>=7.1.1",
|
||||||
"mypy>=1.11.2",
|
"mypy>=1.11.2",
|
||||||
|
|
463
requirements.txt
463
requirements.txt
|
@ -1,127 +1,336 @@
|
||||||
# This file is @generated by PDM.
|
# This file was autogenerated by uv via the following command:
|
||||||
# Please do not edit it manually.
|
# uv pip compile pyproject.toml --all-extras -o requirements.txt
|
||||||
|
annotated-types==0.7.0
|
||||||
annotated-types==0.7.0; python_version == "3.12"
|
# via pydantic
|
||||||
anyio==4.6.0; python_version == "3.12"
|
anyio==4.6.0
|
||||||
asgiref==3.8.1; python_version == "3.12"
|
# via httpx
|
||||||
asttokens==2.4.1; python_version == "3.12"
|
asgiref==3.8.1
|
||||||
atomicwrites==1.4.1; python_version == "3.12"
|
# via
|
||||||
attrs==24.2.0; python_version == "3.12"
|
# channels
|
||||||
autobahn==24.4.2; python_version == "3.12"
|
# daphne
|
||||||
automat==24.8.1; python_version == "3.12"
|
# django
|
||||||
base32-crockford==0.3.0; python_version == "3.12"
|
# django-signal-webhooks
|
||||||
beautifulsoup4==4.12.3; python_version == "3.12"
|
# django-stubs
|
||||||
brotli==1.1.0; implementation_name == "cpython" and python_version == "3.12"
|
asttokens==2.4.1
|
||||||
brotlicffi==1.1.0.0; implementation_name != "cpython" and python_version == "3.12"
|
# via stack-data
|
||||||
bx-django-utils==79; python_version == "3.12"
|
atomicwrites==1.4.1
|
||||||
bx-py-utils==104; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
certifi==2024.8.30; python_version == "3.12"
|
attrs==24.2.0
|
||||||
cffi==1.17.1; platform_python_implementation != "PyPy" and python_version == "3.12" or implementation_name != "cpython" and python_version == "3.12"
|
# via
|
||||||
channels[daphne]==4.1.0; python_version == "3.12"
|
# service-identity
|
||||||
charset-normalizer==3.3.2; python_version == "3.12"
|
# twisted
|
||||||
constantly==23.10.4; python_version == "3.12"
|
autobahn==24.4.2
|
||||||
croniter==3.0.3; python_version == "3.12"
|
# via daphne
|
||||||
cryptography==43.0.1; python_version == "3.12"
|
automat==24.8.1
|
||||||
daphne==4.1.2; python_version == "3.12"
|
# via twisted
|
||||||
dateparser==1.2.0; python_version == "3.12"
|
base32-crockford==0.3.0
|
||||||
decorator==5.1.1; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
django==5.1.1; python_version == "3.12"
|
beautifulsoup4==4.12.3
|
||||||
django-admin-data-views==0.4.1; python_version == "3.12"
|
# via python-benedict
|
||||||
django-auth-ldap==4.8.0; python_version == "3.12"
|
brotli==1.1.0
|
||||||
django-charid-field==0.4; python_version == "3.12"
|
# via yt-dlp
|
||||||
django-extensions==3.2.3; python_version == "3.12"
|
bx-django-utils==79
|
||||||
django-huey==1.2.1; python_version == "3.12"
|
# via django-huey-monitor
|
||||||
django-huey-monitor==0.9.0; python_version == "3.12"
|
bx-py-utils==104
|
||||||
django-jsonform==2.23.0; python_version == "3.12"
|
# via
|
||||||
django-ninja==1.3.0; python_version == "3.12"
|
# bx-django-utils
|
||||||
django-object-actions==4.3.0; python_version == "3.12"
|
# django-huey-monitor
|
||||||
django-pydantic-field==0.3.10; python_version == "3.12"
|
certifi==2024.8.30
|
||||||
django-settings-holder==0.1.2; python_version == "3.12"
|
# via
|
||||||
django-signal-webhooks==0.3.0; python_version == "3.12"
|
# httpcore
|
||||||
django-stubs==5.1.0; python_version == "3.12"
|
# httpx
|
||||||
django-stubs-ext==5.1.0; python_version == "3.12"
|
# requests
|
||||||
django-taggit==1.3.0; python_version == "3.12"
|
# yt-dlp
|
||||||
et-xmlfile==1.1.0; python_version == "3.12"
|
cffi==1.17.1
|
||||||
executing==2.1.0; python_version == "3.12"
|
# via cryptography
|
||||||
feedparser==6.0.11; python_version == "3.12"
|
channels==4.1.0
|
||||||
ftfy==6.2.3; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
h11==0.14.0; python_version == "3.12"
|
charset-normalizer==3.3.2
|
||||||
httpcore==1.0.6; python_version == "3.12"
|
# via requests
|
||||||
httpx==0.27.2; python_version == "3.12"
|
constantly==23.10.4
|
||||||
huey==2.5.2; python_version == "3.12"
|
# via twisted
|
||||||
hyperlink==21.0.0; python_version == "3.12"
|
croniter==3.0.3
|
||||||
idna==3.10; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
incremental==24.7.2; python_version == "3.12"
|
cryptography==43.0.1
|
||||||
ipython==8.28.0; python_version == "3.12"
|
# via
|
||||||
jedi==0.19.1; python_version == "3.12"
|
# autobahn
|
||||||
mailchecker==6.0.11; python_version == "3.12"
|
# django-signal-webhooks
|
||||||
markdown-it-py==3.0.0; python_version == "3.12"
|
# pyopenssl
|
||||||
matplotlib-inline==0.1.7; python_version == "3.12"
|
# service-identity
|
||||||
mdurl==0.1.2; python_version == "3.12"
|
daphne==4.1.2
|
||||||
mutagen==1.47.0; python_version == "3.12"
|
# via channels
|
||||||
mypy-extensions==1.0.0; python_version == "3.12"
|
dateparser==1.2.0
|
||||||
openpyxl==3.1.5; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
parso==0.8.4; python_version == "3.12"
|
decorator==5.1.1
|
||||||
pexpect==4.9.0; (sys_platform != "win32" and sys_platform != "emscripten") and python_version == "3.12"
|
# via ipython
|
||||||
phonenumbers==8.13.47; python_version == "3.12"
|
django==5.1.1
|
||||||
pluggy==1.5.0; python_version == "3.12"
|
# via
|
||||||
prompt-toolkit==3.0.48; python_version == "3.12"
|
# archivebox (pyproject.toml)
|
||||||
psutil==6.0.0; python_version == "3.12"
|
# bx-django-utils
|
||||||
ptyprocess==0.7.0; (sys_platform != "win32" and sys_platform != "emscripten") and python_version == "3.12"
|
# channels
|
||||||
pure-eval==0.2.3; python_version == "3.12"
|
# django-admin-data-views
|
||||||
py-machineid==0.6.0; python_version == "3.12"
|
# django-auth-ldap
|
||||||
pyasn1==0.6.1; python_version == "3.12"
|
# django-charid-field
|
||||||
pyasn1-modules==0.4.1; python_version == "3.12"
|
# django-extensions
|
||||||
pycparser==2.22; platform_python_implementation != "PyPy" and python_version == "3.12" or implementation_name != "cpython" and python_version == "3.12"
|
# django-huey
|
||||||
pycryptodomex==3.21.0; python_version == "3.12"
|
# django-huey-monitor
|
||||||
pydantic==2.9.2; python_version == "3.12"
|
# django-jsonform
|
||||||
pydantic-core==2.23.4; python_version == "3.12"
|
# django-ninja
|
||||||
pydantic-pkgr==0.4.4; python_version == "3.12"
|
# django-pydantic-field
|
||||||
pydantic-settings==2.5.2; python_version == "3.12"
|
# django-signal-webhooks
|
||||||
pygments==2.18.0; python_version == "3.12"
|
# django-stubs
|
||||||
pyopenssl==24.2.1; python_version == "3.12"
|
# django-stubs-ext
|
||||||
python-benedict[html,toml,xls,xml,yaml]==0.33.2; python_version == "3.12"
|
# django-taggit
|
||||||
python-benedict[io,parse]==0.33.2; python_version == "3.12"
|
django-admin-data-views==0.4.1
|
||||||
python-benedict[xml]==0.33.2; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
python-crontab==3.2.0; python_version == "3.12"
|
django-auth-ldap==4.8.0
|
||||||
python-dateutil==2.9.0.post0; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
python-dotenv==1.0.1; python_version == "3.12"
|
django-charid-field==0.4
|
||||||
python-fsutil==0.14.1; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
python-ldap==3.4.4; python_version == "3.12"
|
django-extensions==3.2.3
|
||||||
python-slugify==8.0.4; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
python-stdnum==1.20; python_version == "3.12"
|
django-huey==1.2.1
|
||||||
pytz==2024.2; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
pyyaml==6.0.2; python_version == "3.12"
|
django-huey-monitor==0.9.0
|
||||||
regex==2024.9.11; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
requests==2.32.3; python_version == "3.12"
|
django-jsonform==2.23.0
|
||||||
rich==13.9.2; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
rich-argparse==1.5.2; python_version == "3.12"
|
django-ninja==1.3.0
|
||||||
service-identity==24.1.0; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
setuptools==75.1.0; python_version == "3.12"
|
django-object-actions==4.3.0
|
||||||
sgmllib3k==1.0.0; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
six==1.16.0; python_version == "3.12"
|
django-pydantic-field==0.3.10
|
||||||
sniffio==1.3.1; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
sonic-client==1.0.0; python_version == "3.12"
|
django-settings-holder==0.1.2
|
||||||
soupsieve==2.6; python_version == "3.12"
|
# via
|
||||||
sqlparse==0.5.1; python_version == "3.12"
|
# django-admin-data-views
|
||||||
stack-data==0.6.3; python_version == "3.12"
|
# django-signal-webhooks
|
||||||
supervisor==4.2.5; python_version == "3.12"
|
django-signal-webhooks==0.3.0
|
||||||
text-unidecode==1.3; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
toml==0.10.2; python_version == "3.12"
|
django-stubs==5.1.0
|
||||||
traitlets==5.14.3; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
twisted[tls]==24.7.0; python_version == "3.12"
|
django-stubs-ext==5.1.0
|
||||||
txaio==23.1.1; python_version == "3.12"
|
# via django-stubs
|
||||||
typeid-python==0.3.1; python_version == "3.12"
|
django-taggit==1.3.0
|
||||||
types-pyyaml==6.0.12.20240917; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
typing-extensions==4.12.2; python_version == "3.12"
|
et-xmlfile==1.1.0
|
||||||
tzlocal==5.2; python_version == "3.12"
|
# via openpyxl
|
||||||
ulid-py==1.1.0; python_version == "3.12"
|
executing==2.1.0
|
||||||
urllib3==2.2.3; python_version == "3.12"
|
# via stack-data
|
||||||
uuid6==2024.7.10; python_version == "3.12"
|
feedparser==6.0.11
|
||||||
w3lib==2.2.1; python_version == "3.12"
|
# via archivebox (pyproject.toml)
|
||||||
wcwidth==0.2.13; python_version == "3.12"
|
ftfy==6.2.3
|
||||||
websockets==13.1; python_version == "3.12"
|
# via python-benedict
|
||||||
xlrd==2.0.1; python_version == "3.12"
|
h11==0.14.0
|
||||||
xmltodict==0.13.0; python_version == "3.12"
|
# via httpcore
|
||||||
yt-dlp==2024.9.27; python_version == "3.12"
|
httpcore==1.0.6
|
||||||
zope-interface==7.0.3; python_version == "3.12"
|
# via httpx
|
||||||
|
httpx==0.27.2
|
||||||
|
# via django-signal-webhooks
|
||||||
|
huey==2.5.2
|
||||||
|
# via
|
||||||
|
# django-huey
|
||||||
|
# django-huey-monitor
|
||||||
|
hyperlink==21.0.0
|
||||||
|
# via
|
||||||
|
# autobahn
|
||||||
|
# twisted
|
||||||
|
idna==3.10
|
||||||
|
# via
|
||||||
|
# anyio
|
||||||
|
# httpx
|
||||||
|
# hyperlink
|
||||||
|
# requests
|
||||||
|
# twisted
|
||||||
|
incremental==24.7.2
|
||||||
|
# via twisted
|
||||||
|
ipython==8.28.0
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
jedi==0.19.1
|
||||||
|
# via ipython
|
||||||
|
mailchecker==6.0.11
|
||||||
|
# via python-benedict
|
||||||
|
markdown-it-py==3.0.0
|
||||||
|
# via rich
|
||||||
|
matplotlib-inline==0.1.7
|
||||||
|
# via ipython
|
||||||
|
mdurl==0.1.2
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0
|
||||||
|
# via yt-dlp
|
||||||
|
mypy-extensions==1.0.0
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
openpyxl==3.1.5
|
||||||
|
# via python-benedict
|
||||||
|
parso==0.8.4
|
||||||
|
# via jedi
|
||||||
|
pexpect==4.9.0
|
||||||
|
# via ipython
|
||||||
|
phonenumbers==8.13.47
|
||||||
|
# via python-benedict
|
||||||
|
pluggy==1.5.0
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
prompt-toolkit==3.0.48
|
||||||
|
# via ipython
|
||||||
|
psutil==6.0.0
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
ptyprocess==0.7.0
|
||||||
|
# via pexpect
|
||||||
|
pure-eval==0.2.3
|
||||||
|
# via stack-data
|
||||||
|
py-machineid==0.6.0
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
pyasn1==0.6.1
|
||||||
|
# via
|
||||||
|
# pyasn1-modules
|
||||||
|
# python-ldap
|
||||||
|
# service-identity
|
||||||
|
pyasn1-modules==0.4.1
|
||||||
|
# via
|
||||||
|
# python-ldap
|
||||||
|
# service-identity
|
||||||
|
pycparser==2.22
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.21.0
|
||||||
|
# via yt-dlp
|
||||||
|
pydantic==2.9.2
|
||||||
|
# via
|
||||||
|
# django-ninja
|
||||||
|
# django-pydantic-field
|
||||||
|
# pydantic-pkgr
|
||||||
|
# pydantic-settings
|
||||||
|
pydantic-core==2.23.4
|
||||||
|
# via
|
||||||
|
# pydantic
|
||||||
|
# pydantic-pkgr
|
||||||
|
pydantic-pkgr==0.4.4
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
pydantic-settings==2.5.2
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
pygments==2.18.0
|
||||||
|
# via
|
||||||
|
# ipython
|
||||||
|
# rich
|
||||||
|
pyopenssl==24.2.1
|
||||||
|
# via twisted
|
||||||
|
python-benedict==0.33.2
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
python-crontab==3.2.0
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
# via
|
||||||
|
# croniter
|
||||||
|
# dateparser
|
||||||
|
# python-benedict
|
||||||
|
# python-crontab
|
||||||
|
python-dotenv==1.0.1
|
||||||
|
# via pydantic-settings
|
||||||
|
python-fsutil==0.14.1
|
||||||
|
# via python-benedict
|
||||||
|
python-ldap==3.4.4
|
||||||
|
# via
|
||||||
|
# archivebox (pyproject.toml)
|
||||||
|
# django-auth-ldap
|
||||||
|
python-slugify==8.0.4
|
||||||
|
# via python-benedict
|
||||||
|
python-stdnum==1.20
|
||||||
|
# via bx-django-utils
|
||||||
|
pytz==2024.2
|
||||||
|
# via
|
||||||
|
# croniter
|
||||||
|
# dateparser
|
||||||
|
pyyaml==6.0.2
|
||||||
|
# via python-benedict
|
||||||
|
regex==2024.9.11
|
||||||
|
# via dateparser
|
||||||
|
requests==2.32.3
|
||||||
|
# via
|
||||||
|
# archivebox (pyproject.toml)
|
||||||
|
# python-benedict
|
||||||
|
# yt-dlp
|
||||||
|
rich==13.9.2
|
||||||
|
# via
|
||||||
|
# archivebox (pyproject.toml)
|
||||||
|
# rich-argparse
|
||||||
|
rich-argparse==1.5.2
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
service-identity==24.1.0
|
||||||
|
# via twisted
|
||||||
|
setuptools==75.1.0
|
||||||
|
# via
|
||||||
|
# archivebox (pyproject.toml)
|
||||||
|
# autobahn
|
||||||
|
# incremental
|
||||||
|
# supervisor
|
||||||
|
# zope-interface
|
||||||
|
sgmllib3k==1.0.0
|
||||||
|
# via feedparser
|
||||||
|
six==1.16.0
|
||||||
|
# via
|
||||||
|
# asttokens
|
||||||
|
# python-dateutil
|
||||||
|
sniffio==1.3.1
|
||||||
|
# via
|
||||||
|
# anyio
|
||||||
|
# httpx
|
||||||
|
sonic-client==1.0.0
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
soupsieve==2.6
|
||||||
|
# via beautifulsoup4
|
||||||
|
sqlparse==0.5.1
|
||||||
|
# via django
|
||||||
|
stack-data==0.6.3
|
||||||
|
# via ipython
|
||||||
|
supervisor==4.2.5
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
text-unidecode==1.3
|
||||||
|
# via python-slugify
|
||||||
|
toml==0.10.2
|
||||||
|
# via python-benedict
|
||||||
|
traitlets==5.14.3
|
||||||
|
# via
|
||||||
|
# ipython
|
||||||
|
# matplotlib-inline
|
||||||
|
twisted==24.7.0
|
||||||
|
# via daphne
|
||||||
|
txaio==23.1.1
|
||||||
|
# via autobahn
|
||||||
|
typeid-python==0.3.1
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
types-pyyaml==6.0.12.20240917
|
||||||
|
# via django-stubs
|
||||||
|
typing-extensions==4.12.2
|
||||||
|
# via
|
||||||
|
# django-pydantic-field
|
||||||
|
# django-stubs
|
||||||
|
# django-stubs-ext
|
||||||
|
# pydantic
|
||||||
|
# pydantic-core
|
||||||
|
# pydantic-pkgr
|
||||||
|
# twisted
|
||||||
|
tzlocal==5.2
|
||||||
|
# via dateparser
|
||||||
|
ulid-py==1.1.0
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
urllib3==2.2.3
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
uuid6==2024.7.10
|
||||||
|
# via typeid-python
|
||||||
|
w3lib==2.2.1
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
wcwidth==0.2.13
|
||||||
|
# via
|
||||||
|
# ftfy
|
||||||
|
# prompt-toolkit
|
||||||
|
websockets==13.1
|
||||||
|
# via yt-dlp
|
||||||
|
xlrd==2.0.1
|
||||||
|
# via python-benedict
|
||||||
|
xmltodict==0.13.0
|
||||||
|
# via python-benedict
|
||||||
|
yt-dlp==2024.9.27
|
||||||
|
# via archivebox (pyproject.toml)
|
||||||
|
zope-interface==7.0.3
|
||||||
|
# via twisted
|
||||||
|
|
Loading…
Reference in a new issue