[project]
name = "archivebox"
version = "0.8.5rc53"
requires-python = ">=3.10"
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.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "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 = [
    # ... archivebox/vendor/*             # see vendored libs here
    ############# Django / Core Libraries #############
    "setuptools>=74.1.0",
    "django>=5.1.1,<6.0",
    "django-ninja>=1.3.0",
    "django-extensions>=3.2.3",
    "mypy-extensions>=1.0.0",
    "typing_extensions>=4.12.2",
    "channels[daphne]>=4.1.0",
    "django-signal-webhooks>=0.3.0",
    "django-admin-data-views>=0.4.1",
    "django-object-actions>=4.3.0",
    "django-charid-field>=0.4",
    "django-pydantic-field>=0.3.10",
    "django-jsonform>=2.22.0",
    "django-stubs>=5.0.4",
    "django-huey>=1.2.1",
    "django-huey-monitor>=0.9.0",
    ############# Python Helper Libraries ############
    "pluggy>=1.5.0",
    "requests>=2.32.3",
    "dateparser>=1.2.0",
    "feedparser>=6.0.11",
    "w3lib>=2.2.1",
    "rich>=13.8.0",
    "rich-argparse>=1.5.2",
    "ulid-py>=1.1.0",
    "typeid-python>=0.3.1",
    "psutil>=6.0.0",
    "supervisor>=4.2.5",
    "python-crontab>=3.2.0", # for: archivebox schedule
    "croniter>=3.0.3", # for: archivebox schedule
    "ipython>=8.27.0", # for: archivebox shell
    "py-machineid>=0.6.0", # for: machine/detect.py calculating machine guid
    "python-benedict[io,parse]>=0.33.2",
    "pydantic-settings>=2.5.2",
    "atomicwrites==1.4.1",
    "django-taggit==6.1.0",
    "base32-crockford==0.3.0",
    "platformdirs>=4.3.6",
    "pydantic-pkgr>=0.5.4",
    "pocket>=0.3.6",
    "sonic-client>=1.0.0",
    "yt-dlp>=2024.8.6", # for: media"
    ############# Plugin Dependencies ################
    "abx>=0.1.0",

    "abx-spec-pydantic-pkgr>=0.1.0",
    "abx-spec-config>=0.1.0",
    "abx-spec-archivebox>=0.1.0",
    "abx-spec-django>=0.1.0",
    "abx-spec-extractor>=0.1.0",
    "abx-spec-searchbackend>=0.1.0",

    "abx-plugin-default-binproviders>=2024.10.24",
    "abx-plugin-pip>=2024.10.24",
    "abx-plugin-npm>=2024.10.24",
    "abx-plugin-playwright>=2024.10.24",
    "abx-plugin-puppeteer>=2024.10.28",

    "abx-plugin-ripgrep-search>=2024.10.28",
    "abx-plugin-sqlitefts-search>=2024.10.28",
    "abx-plugin-sonic-search>=2024.10.28",
    "abx-plugin-ldap-auth>=2024.10.28",

    "abx-plugin-curl>=2024.10.27",
    "abx-plugin-wget>=2024.10.28",
    "abx-plugin-git>=2024.10.28",
    "abx-plugin-chrome>=2024.10.28",
    "abx-plugin-ytdlp>=2024.10.28",
    
    "abx-plugin-title>=2024.10.27",
    "abx-plugin-favicon>=2024.10.27",
    # "abx-plugin-headers>=2024.10.27",
    "abx-plugin-archivedotorg>=2024.10.28",

    "abx-plugin-singlefile>=2024.10.28",
    "abx-plugin-readability>=2024.10.28",
    "abx-plugin-mercury>=2024.10.28",
    "abx-plugin-htmltotext>=2024.10.28",
]

[project.optional-dependencies]
sonic = [
    # 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
    # no-op, now included by default:
    # "sonic-client>=1.0.0",
]
ldap = [
    # apt install libsasl2-dev python-dev-is-python3 libldap2-dev libssl-dev
    "python-ldap>=3.4.3",
    "django-auth-ldap>=4.1.0",
]
debug = [
    # libs needed to run archivebox server with DEBUG=True
    "django-debug-toolbar>=4.4.6",
    "requests-tracker>=0.3.3",
    "djdt_flamegraph>=0.2.13",
    "ipdb>=0.13.13",
]
all = [
    "archivebox[sonic,ldap,debug]"
]

[tool.uv]
dev-dependencies = [
    ### BUILD
    "uv>=0.4.26",
    "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
    "recommonmark>=0.7.1",
    "sphinx>=8.1.3",
    "sphinx-rtd-theme>=2.0.0",
    ### 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",
    "django-autotyping>=0.5.1",
]

[tool.uv.sources]
# pydantic-pkgr = { workspace = true }

abx = { workspace = true }
abx-spec-pydantic-pkgr = { workspace = true }
abx-spec-config = { workspace = true }
abx-spec-archivebox = { workspace = true }
abx-spec-django = { workspace = true }
abx-spec-extractor = { workspace = true }
abx-spec-searchbackend = { workspace = true }

abx-plugin-default-binproviders = { workspace = true }
abx-plugin-pip = { workspace = true }
abx-plugin-npm = { workspace = true }
abx-plugin-playwright = { workspace = true }
abx-plugin-puppeteer = { workspace = true }
abx-plugin-ripgrep-search = { workspace = true }
abx-plugin-sqlitefts-search = { workspace = true }
abx-plugin-sonic-search = { workspace = true }
abx-plugin-ldap-auth = { workspace = true }

abx-plugin-curl = { workspace = true }
abx-plugin-wget = { workspace = true }
abx-plugin-git = { workspace = true }
abx-plugin-chrome = { workspace = true }
abx-plugin-ytdlp = { workspace = true }

abx-plugin-title = { workspace = true }
abx-plugin-favicon = { workspace = true }
# abx-plugin-headers = { workspace = true }
abx-plugin-archivedotorg = { workspace = true }

abx-plugin-singlefile = { workspace = true }
abx-plugin-readability = { workspace = true }
abx-plugin-mercury = { workspace = true }
abx-plugin-htmltotext = { workspace = true }


[tool.uv.workspace]
members = ["archivebox/vendor/*"]
exclude = ["archivebox/vendor/__pycache__"]

[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 = "py310"
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.10"
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"