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