2023-10-19 17:49:06 -07:00
[ project ]
name = "archivebox"
2025-12-24 23:41:29 -08:00
version = "0.9.0rc1"
2025-12-27 01:07:30 +00:00
requires-python = ">=3.13"
2023-10-19 17:49:06 -07:00
description = "Self-hosted internet archiving solution."
2024-04-23 17:43:01 -07:00
authors = [ { name = "Nick Sweeting" , email = "pyproject.toml@archivebox.io" } ]
2024-01-15 17:27:36 -08:00
license = { text = "MIT" }
readme = "README.md"
2024-09-20 21:56:47 -07:00
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" ,
2025-12-27 01:07:30 +00:00
"Programming Language :: Python :: 3.13" ,
2025-12-24 06:13:49 -08:00
"Programming Language :: Python :: 3.14" ,
2024-09-20 21:56:47 -07:00
"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" ,
]
2024-04-23 17:43:01 -07:00
2023-10-19 17:49:06 -07:00
dependencies = [
2024-12-18 21:06:58 -05:00
### 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)
2025-12-24 06:13:49 -08:00
"django>=6.0" ,
2025-12-28 03:39:59 -08:00
"daphne>=4.2.0" , # ASGI server for Django (no channels needed - websockets not used)
2025-12-24 20:09:51 -08:00
"django-ninja>=1.5.1" ,
2024-04-23 17:43:01 -07:00
"django-extensions>=3.2.3" ,
2024-09-10 00:04:39 -07:00
"django-signal-webhooks>=0.3.0" ,
2024-09-11 17:08:10 -07:00
"django-admin-data-views>=0.4.1" ,
"django-object-actions>=4.3.0" ,
2024-12-18 21:06:58 -05:00
"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
2025-12-24 20:09:51 -08:00
"pydantic>=2.8.0" , # for: archivebox.api (django-ninja), archivebox.config (pydantic-settings), and archivebox.index.schema (pydantic)
2024-12-18 21:06:58 -05:00
"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
2025-12-24 20:09:51 -08:00
"base32-crockford>=0.3.0" , # for: encoding UUIDs in base32
2024-12-18 21:06:58 -05:00
### 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?)
2024-10-28 19:56:49 -07:00
"sonic-client>=1.0.0" ,
2024-12-18 21:06:58 -05:00
"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
2025-12-24 20:09:51 -08:00
### 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
2025-12-26 18:22:48 -08:00
"gallery-dl>=1.31.1" ,
2025-12-27 01:07:30 +00:00
### UUID7 backport for Python <3.14
"uuid7>=0.1.0; python_version < '3.14'" , # for: uuid7 support on Python 3.13 (provides uuid_extensions module)
2023-10-19 17:49:06 -07:00
]
2024-02-18 19:15:40 -08:00
2024-01-15 17:27:36 -08:00
[ project . optional-dependencies ]
sonic = [
2024-12-18 21:06:58 -05:00
# 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:
2024-01-15 17:27:36 -08:00
# 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
2024-03-26 15:22:40 -07:00
# apt install sonic
2024-01-15 17:27:36 -08:00
]
ldap = [
2024-12-18 21:06:58 -05:00
# 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
2024-01-15 17:27:36 -08:00
"python-ldap>=3.4.3" ,
"django-auth-ldap>=4.1.0" ,
]
2024-10-28 19:56:49 -07:00
debug = [
2024-10-24 15:30:51 -07:00
# packages needed for running with DEBUG=True
2024-10-28 19:56:49 -07:00
"django-debug-toolbar>=4.4.6" ,
"djdt_flamegraph>=0.2.13" ,
"ipdb>=0.13.13" ,
2024-10-24 15:30:51 -07:00
"requests-tracker>=0.3.3" ,
2024-10-24 15:32:37 -07:00
"django-autotyping>=0.5.1" ,
2024-10-28 19:56:49 -07:00
]
2024-09-20 21:56:47 -07:00
all = [
2024-10-28 19:56:49 -07:00
"archivebox[sonic,ldap,debug]"
2024-09-20 21:56:47 -07:00
]
2024-01-15 17:27:36 -08:00
2025-12-28 03:39:59 -08:00
[ dependency-groups ]
dev = [
2024-10-05 01:17:23 -07:00
### BUILD
2024-10-25 01:06:12 -07:00
"uv>=0.4.26" ,
2024-09-20 21:56:47 -07:00
"pip>=24.2" ,
"setuptools>=75.1.0" ,
"wheel>=0.44.0" ,
2024-10-24 15:30:51 -07:00
"bumpver>=2023.1129" ,
#"homebrew-pypi-poet>=0.10.0", # for: generating archivebox.rb brewfile list of python packages
2024-10-05 01:17:23 -07:00
### DOCS
2024-09-20 21:56:47 -07:00
"recommonmark>=0.7.1" ,
2024-10-25 01:06:12 -07:00
"sphinx>=8.1.3" ,
2024-09-20 21:56:47 -07:00
"sphinx-rtd-theme>=2.0.0" ,
2024-11-12 22:20:11 -08:00
"myst-parser>=4.0.0" ,
"sphinx-autodoc2>=0.5.0" ,
"linkify-it-py>=2.0.3" ,
2024-10-05 01:17:23 -07:00
### DEBUGGING
2024-09-20 21:56:47 -07:00
"django-debug-toolbar>=4.4.6" ,
2024-10-28 19:56:49 -07:00
"requests-tracker>=0.3.3" ,
2024-09-20 21:56:47 -07:00
"djdt_flamegraph>=0.2.13" ,
"ipdb>=0.13.13" ,
"logfire[django]>=0.51.0" ,
"opentelemetry-instrumentation-django>=0.47b0" ,
"opentelemetry-instrumentation-sqlite3>=0.47b0" ,
2024-10-25 01:06:12 -07:00
"viztracer>=0.17.0" , # usage: viztracer ../.venv/bin/archivebox manage check
2024-09-24 19:05:23 -07:00
# "snakeviz", # usage: python -m cProfile -o flamegraph.prof ../.venv/bin/archivebox manage check
2024-10-05 01:17:23 -07:00
### TESTING
2024-09-20 21:56:47 -07:00
"pytest>=8.3.3" ,
"bottle>=0.13.1" ,
2024-10-05 01:17:23 -07:00
### LINTING
2024-09-24 01:25:55 -07:00
"ruff>=0.6.6" ,
2024-09-20 21:56:47 -07:00
"flake8>=7.1.1" ,
"mypy>=1.11.2" ,
]
2025-12-28 03:39:59 -08:00
[ tool . uv ]
environments = [ "sys_platform == 'darwin'" , "sys_platform == 'linux'" ]
package = true
# compile-bytecode = true
2024-11-18 18:07:34 -08:00
[ tool . uv . pip ]
2025-12-27 01:07:30 +00:00
python-version = "3.13"
2024-11-18 18:07:34 -08:00
# compile-bytecode = true
2024-04-23 17:43:01 -07:00
[ build-system ]
requires = [ "pdm-backend" ]
build-backend = "pdm.backend"
2024-10-05 02:16:17 -07:00
# https://github.com/astral-sh/uv/issues/3957
2024-04-23 17:43:01 -07:00
2024-09-20 21:56:47 -07:00
[ tool . setuptools ]
packages = [ "archivebox" ]
package-dir = { "archivebox" = "archivebox" }
2024-04-23 17:43:01 -07:00
2024-09-05 21:44:18 -07:00
[ tool . ruff ]
line-length = 140
2025-12-27 01:07:30 +00:00
target-version = "py313"
2024-09-05 21:44:18 -07:00
src = [ "archivebox" ]
2024-10-28 19:56:49 -07:00
exclude = [ "*.pyi" , "typings/" , "migrations/" ]
2024-09-05 21:44:18 -07:00
2024-09-20 21:56:47 -07:00
# https://docs.astral.sh/ruff/rules/
2024-09-06 01:48:18 -07:00
[ tool . ruff . lint ]
2024-09-24 01:25:55 -07:00
ignore = [ "E731" , "E303" , "E266" , "E241" , "E222" ]
2024-09-06 01:48:18 -07:00
2024-03-01 12:43:53 -08:00
[ tool . pytest . ini_options ]
testpaths = [ "tests" ]
2023-10-19 17:49:06 -07:00
2024-04-23 17:43:01 -07:00
[ tool . mypy ]
2024-08-20 18:32:12 -07:00
mypy_path = "archivebox,archivebox/typings"
2024-04-23 17:43:01 -07:00
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
2024-10-05 02:16:17 -07:00
# exclude = "tests/.*"
2024-04-23 17:43:01 -07:00
plugins = [ "mypy_django_plugin.main" ]
2023-10-19 17:49:06 -07:00
2024-04-30 21:43:51 -07:00
[ tool . django-stubs ]
django_settings_module = "core.settings"
2023-10-19 17:49:06 -07:00
2024-05-17 20:13:54 -07:00
[ tool . pyright ]
2024-08-20 18:32:12 -07:00
include = [
"archivebox" ,
]
exclude = [
".venv" ,
"**/*.pyi" ,
"**/__init__.pyi" ,
"**/node_modules" ,
2024-05-17 20:13:54 -07:00
"**/__pycache__" ,
"**/migrations" ,
]
2024-08-28 00:26:25 -07:00
stubPath = "./archivebox/typings"
2024-08-20 18:32:12 -07:00
venvPath = "."
venv = ".venv"
2024-05-17 20:13:54 -07:00
# ignore = ["src/oldstuff"]
# defineConstant = { DEBUG = true }
reportMissingImports = true
reportMissingTypeStubs = false
2025-12-27 01:07:30 +00:00
pythonVersion = "3.13"
2024-05-17 20:13:54 -07:00
pythonPlatform = "Linux"
2024-09-20 21:56:47 -07:00
[ project . scripts ]
archivebox = "archivebox.cli:main"
2023-10-19 17:49:06 -07:00
[ 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"
2024-10-24 15:12:59 -07:00
[ tool . bumpver ]
2024-10-24 15:26:40 -07:00
current_version = "v0.8.5rc53"
2024-10-24 15:26:33 -07:00
version_pattern = "vMAJOR.MINOR.PATCH[PYTAGNUM]"
2024-10-24 15:12:59 -07:00
commit_message = "bump version {old_version} -> {new_version}"
2024-10-24 15:26:33 -07:00
tag_message = "{new_version}"
2024-10-24 15:12:59 -07:00
tag_scope = "default"
pre_commit_hook = ""
post_commit_hook = ""
commit = true
tag = true
push = true
[ tool . bumpver . file_patterns ]
"pyproject.toml" = [
'current_version = "{version}"' ,
2024-10-24 15:26:33 -07:00
'version = "{pep440_version}"' ,
2024-10-24 15:12:59 -07:00
]