ArchiveBox/pyproject.toml
2025-12-24 23:41:29 -08:00

261 lines
9.3 KiB
TOML

[project]
name = "archivebox"
version = "0.9.0rc1"
requires-python = ">=3.14"
description = "Self-hosted internet archiving solution."
authors = [{name = "Nick Sweeting", email = "pyproject.toml@archivebox.io"}]
license = {text = "MIT"}
readme = "README.md"
keywords = ["internet archiving", "web archiving", "digipres", "warc", "preservation", "backups", "archiving", "web", "bookmarks", "puppeteer", "browser", "download"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Environment :: Web Environment",
"Framework :: Django",
"Intended Audience :: Developers",
"Intended Audience :: Education",
"Intended Audience :: End Users/Desktop",
"Intended Audience :: Information Technology",
"Intended Audience :: Legal Industry",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: MIT License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.14",
"Topic :: Internet :: WWW/HTTP",
"Topic :: Internet :: WWW/HTTP :: Indexing/Search",
"Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
"Topic :: Sociology :: History",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: System :: Archiving",
"Topic :: System :: Archiving :: Backup",
"Topic :: System :: Recovery Tools",
"Topic :: Utilities",
"Typing :: Typed",
]
dependencies = [
### Django libraries
"setuptools>=74.1.0", # for: django 5 on python >=3.12, distutils is no longer in stdlib but django 5.1 expects distutils (TODO: check if this can be removed eventually)
"django>=6.0",
"channels[daphne]>=4.1.0",
"django-ninja>=1.5.1",
"django-extensions>=3.2.3",
"django-signal-webhooks>=0.3.0",
"django-admin-data-views>=0.4.1",
"django-object-actions>=4.3.0",
"django-taggit==6.1.0", # TODO: remove this in favor of KVTags only
### State Management
"python-statemachine>=2.3.6",
### CLI / Logging
"click>=8.1.7", # for: nicer CLI command + argument definintions
"rich>=13.8.0", # for: pretty CLI output
"rich-click>=1.8.4", # for: pretty CLI command help text & output
"ipython>=8.27.0", # for: archivebox shell (TODO: replace with bpython?)
### Host OS / System
"supervisor>=4.2.5", # for: archivebox server starting daphne and workers
"psutil>=6.0.0", # for: monitoring orchestractor,actors,workers,etc. and machine.models.Process
"platformdirs>=4.3.6", # for: finding a xdg-config dir to store tmp/lib files in
"py-machineid>=0.6.0", # for: machine/detect.py calculating unique machine guid
"atomicwrites==1.4.1", # for: config file writes, index.json file writes, etc. (TODO: remove this deprecated lib in favor of archivebox.filestore.util/os.rename/os.replace)
"python-crontab>=3.2.0", # for: archivebox schedule (TODO: remove this in favor of our own custom archivebox scheduler)
"croniter>=3.0.3", # for: archivebox schedule (TODO: remove this in favor of our own custom archivebox scheduler)
### Base Types
"pydantic>=2.8.0", # for: archivebox.api (django-ninja), archivebox.config (pydantic-settings), and archivebox.index.schema (pydantic)
"pydantic-settings>=2.5.2", # for: archivebox.config
"python-benedict[io,parse]>=0.33.2", # for: dict replacement all over the codebase to allow .attr-style access
"base32-crockford>=0.3.0", # for: encoding UUIDs in base32
### Static Typing
"mypy-extensions>=1.0.0", # for: django-stubs type hints (TODO: remove in favor of pylance/pyright?)
"django-stubs>=5.0.4", # for: vscode type hints on models and common django APIs
### API clients
"requests>=2.32.3", # for: fetching title, static files, headers (TODO: replace with httpx?)
"sonic-client>=1.0.0",
"pocket>=0.3.6", # for: importing URLs from Pocket API
### Parsers
"feedparser>=6.0.11", # for: parsing pocket/pinboard/etc. RSS/bookmarks imports
"dateparser>=1.2.0", # for: parsing pocket/pinboard/etc. RSS/bookmark import dates
"tzdata>=2024.2", # needed for dateparser {TZ: UTC} on some systems: https://github.com/ArchiveBox/ArchiveBox/issues/1553
"w3lib>=2.2.1", # used for parsing content-type encoding from http response headers & html tags
### Extractor dependencies (optional binaries detected at runtime via shutil.which)
"yt-dlp>=2024.1.0", # for: media extractor
### Binary/Package Management
"abx-pkg>=0.1.0", # for: detecting, versioning, and installing binaries via apt/brew/pip/npm
]
[project.optional-dependencies]
sonic = [
# sonic client lib now included by default, sonic group is now a no-op:
# "sonic-client>=1.0.0",
# to use sonic make sure you have a sonic server running in docker (archivebox/sonic) or locally:
# echo "deb [signed-by=/usr/share/keyrings/valeriansaliou_sonic.gpg] https://packagecloud.io/valeriansaliou/sonic/debian/ bookworm main" > /etc/apt/sources.list.d/valeriansaliou_sonic.list
# curl -fsSL https://packagecloud.io/valeriansaliou/sonic/gpgkey | gpg --dearmor -o /usr/share/keyrings/valeriansaliou_sonic.gpg
# apt install sonic
]
ldap = [
# python-ldap depends on the openldap bindings which provide no prebuilt wheels becuase they link against tons of other system packages
# apt install build-essential python3-dev python3-ldap libsasl2-dev libldap2-dev libssl-dev
"python-ldap>=3.4.3",
"django-auth-ldap>=4.1.0",
]
debug = [
# packages needed for running with DEBUG=True
"django-debug-toolbar>=4.4.6",
"djdt_flamegraph>=0.2.13",
"ipdb>=0.13.13",
"requests-tracker>=0.3.3",
"django-autotyping>=0.5.1",
]
all = [
"archivebox[sonic,ldap,debug]"
]
[tool.uv]
environments = ["sys_platform == 'darwin'", "sys_platform == 'linux'"]
package = true
# compile-bytecode = true
dev-dependencies = [
### BUILD
"uv>=0.4.26",
"pip>=24.2",
"setuptools>=75.1.0",
"wheel>=0.44.0",
"bumpver>=2023.1129",
#"homebrew-pypi-poet>=0.10.0", # for: generating archivebox.rb brewfile list of python packages
### DOCS
"recommonmark>=0.7.1",
"sphinx>=8.1.3",
"sphinx-rtd-theme>=2.0.0",
"myst-parser>=4.0.0",
"sphinx-autodoc2>=0.5.0",
"linkify-it-py>=2.0.3",
### DEBUGGING
"django-debug-toolbar>=4.4.6",
"requests-tracker>=0.3.3",
"djdt_flamegraph>=0.2.13",
"ipdb>=0.13.13",
"logfire[django]>=0.51.0",
"opentelemetry-instrumentation-django>=0.47b0",
"opentelemetry-instrumentation-sqlite3>=0.47b0",
"viztracer>=0.17.0", # usage: viztracer ../.venv/bin/archivebox manage check
# "snakeviz", # usage: python -m cProfile -o flamegraph.prof ../.venv/bin/archivebox manage check
### TESTING
"pytest>=8.3.3",
"bottle>=0.13.1",
### LINTING
"ruff>=0.6.6",
"flake8>=7.1.1",
"mypy>=1.11.2",
]
[tool.uv.pip]
python-version = "3.14"
# compile-bytecode = true
[build-system]
requires = ["pdm-backend"]
build-backend = "pdm.backend"
# https://github.com/astral-sh/uv/issues/3957
[tool.setuptools]
packages = ["archivebox"]
package-dir = {"archivebox" = "archivebox"}
[tool.ruff]
line-length = 140
target-version = "py314"
src = ["archivebox"]
exclude = ["*.pyi", "typings/", "migrations/"]
# https://docs.astral.sh/ruff/rules/
[tool.ruff.lint]
ignore = ["E731", "E303", "E266", "E241", "E222"]
[tool.pytest.ini_options]
testpaths = [ "tests" ]
[tool.mypy]
mypy_path = "archivebox,archivebox/typings"
namespace_packages = true
explicit_package_bases = true
# follow_imports = "silent"
# ignore_missing_imports = true
# disallow_incomplete_defs = true
# disallow_untyped_defs = true
# disallow_untyped_decorators = true
# exclude = "tests/.*"
plugins = ["mypy_django_plugin.main"]
[tool.django-stubs]
django_settings_module = "core.settings"
[tool.pyright]
include = [
"archivebox",
]
exclude = [
".venv",
"**/*.pyi",
"**/__init__.pyi",
"**/node_modules",
"**/__pycache__",
"**/migrations",
]
stubPath = "./archivebox/typings"
venvPath = "."
venv = ".venv"
# ignore = ["src/oldstuff"]
# defineConstant = { DEBUG = true }
reportMissingImports = true
reportMissingTypeStubs = false
pythonVersion = "3.14"
pythonPlatform = "Linux"
[project.scripts]
archivebox = "archivebox.cli:main"
[project.urls]
Homepage = "https://github.com/ArchiveBox/ArchiveBox"
Source = "https://github.com/ArchiveBox/ArchiveBox"
Documentation = "https://github.com/ArchiveBox/ArchiveBox/wiki"
"Bug Tracker" = "https://github.com/ArchiveBox/ArchiveBox/issues"
Changelog = "https://github.com/ArchiveBox/ArchiveBox/releases"
Roadmap = "https://github.com/ArchiveBox/ArchiveBox/wiki/Roadmap"
Community = "https://github.com/ArchiveBox/ArchiveBox/wiki/Web-Archiving-Community"
Demo = "https://demo.archivebox.io"
Donate = "https://github.com/ArchiveBox/ArchiveBox/wiki/Donations"
[tool.bumpver]
current_version = "v0.8.5rc53"
version_pattern = "vMAJOR.MINOR.PATCH[PYTAGNUM]"
commit_message = "bump version {old_version} -> {new_version}"
tag_message = "{new_version}"
tag_scope = "default"
pre_commit_hook = ""
post_commit_hook = ""
commit = true
tag = true
push = true
[tool.bumpver.file_patterns]
"pyproject.toml" = [
'current_version = "{version}"',
'version = "{pep440_version}"',
]