update build and release scripts to use uv

This commit is contained in:
Nick Sweeting 2024-10-05 01:17:23 -07:00
parent ce2e19a429
commit e29aff12bf
No known key found for this signature in database
10 changed files with 1292 additions and 2094 deletions

View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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 \

View file

@ -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

1855
pdm.lock

File diff suppressed because it is too large Load diff

View file

@ -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",

View file

@ -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

869
uv.lock

File diff suppressed because it is too large Load diff