pyproject.toml 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. [project]
  2. name = "archivebox"
  3. version = "0.8.6rc0"
  4. requires-python = ">=3.10"
  5. description = "Self-hosted internet archiving solution."
  6. authors = [{name = "Nick Sweeting", email = "[email protected]"}]
  7. license = {text = "MIT"}
  8. readme = "README.md"
  9. keywords = ["internet archiving", "web archiving", "digipres", "warc", "preservation", "backups", "archiving", "web", "bookmarks", "puppeteer", "browser", "download"]
  10. classifiers = [
  11. "Development Status :: 4 - Beta",
  12. "Environment :: Console",
  13. "Environment :: Web Environment",
  14. "Framework :: Django",
  15. "Intended Audience :: Developers",
  16. "Intended Audience :: Education",
  17. "Intended Audience :: End Users/Desktop",
  18. "Intended Audience :: Information Technology",
  19. "Intended Audience :: Legal Industry",
  20. "Intended Audience :: System Administrators",
  21. "License :: OSI Approved :: MIT License",
  22. "Natural Language :: English",
  23. "Operating System :: OS Independent",
  24. "Programming Language :: Python :: 3",
  25. "Programming Language :: Python :: 3.10",
  26. "Programming Language :: Python :: 3.11",
  27. "Programming Language :: Python :: 3.12",
  28. "Topic :: Internet :: WWW/HTTP",
  29. "Topic :: Internet :: WWW/HTTP :: Indexing/Search",
  30. "Topic :: Internet :: WWW/HTTP :: WSGI :: Application",
  31. "Topic :: Sociology :: History",
  32. "Topic :: Software Development :: Libraries :: Python Modules",
  33. "Topic :: System :: Archiving",
  34. "Topic :: System :: Archiving :: Backup",
  35. "Topic :: System :: Recovery Tools",
  36. "Topic :: Utilities",
  37. "Typing :: Typed",
  38. ]
  39. dependencies = [
  40. # ... archivebox/pkgs/* # see vendored libs here
  41. ############# Django / Core Libraries #############
  42. "setuptools>=74.1.0",
  43. "django>=5.1.1,<6.0",
  44. "django-ninja>=1.3.0",
  45. "django-extensions>=3.2.3",
  46. "mypy-extensions>=1.0.0",
  47. "typing_extensions>=4.12.2",
  48. "channels[daphne]>=4.1.0",
  49. "django-signal-webhooks>=0.3.0",
  50. "django-admin-data-views>=0.4.1",
  51. "django-object-actions>=4.3.0",
  52. "django-charid-field>=0.4",
  53. "django-pydantic-field>=0.3.10",
  54. "django-jsonform>=2.22.0",
  55. "django-stubs>=5.0.4",
  56. "django-huey>=1.2.1",
  57. "django-huey-monitor>=0.9.0",
  58. ############# Python Helper Libraries ############
  59. "pluggy>=1.5.0",
  60. "requests>=2.32.3",
  61. "dateparser>=1.2.0",
  62. "tzdata>=2024.2", # needed for dateparser {TZ: UTC} on some systems: https://github.com/ArchiveBox/ArchiveBox/issues/1553
  63. "feedparser>=6.0.11",
  64. "w3lib>=2.2.1",
  65. "rich>=13.8.0",
  66. "rich-argparse>=1.5.2",
  67. "ulid-py>=1.1.0",
  68. "typeid-python>=0.3.1",
  69. "psutil>=6.0.0",
  70. "supervisor>=4.2.5",
  71. "python-crontab>=3.2.0", # for: archivebox schedule
  72. "croniter>=3.0.3", # for: archivebox schedule
  73. "ipython>=8.27.0", # for: archivebox shell
  74. "py-machineid>=0.6.0", # for: machine/detect.py calculating machine guid
  75. "python-benedict[io,parse]>=0.33.2",
  76. "pydantic-settings>=2.5.2",
  77. "atomicwrites==1.4.1",
  78. "django-taggit==6.1.0",
  79. "base32-crockford==0.3.0",
  80. "platformdirs>=4.3.6",
  81. "pydantic-pkgr>=0.5.4",
  82. "pocket>=0.3.6",
  83. "sonic-client>=1.0.0",
  84. "yt-dlp>=2024.8.6", # for: media"
  85. ############# Plugin Dependencies ################
  86. "abx>=0.1.0",
  87. "abx-spec-pydantic-pkgr>=0.1.0",
  88. "abx-spec-config>=0.1.0",
  89. "abx-spec-archivebox>=0.1.0",
  90. "abx-spec-django>=0.1.0",
  91. "abx-spec-extractor>=0.1.0",
  92. "abx-spec-searchbackend>=0.1.0",
  93. "abx-plugin-default-binproviders>=2024.10.24",
  94. "abx-plugin-pip>=2024.10.24",
  95. "abx-plugin-npm>=2024.10.24",
  96. "abx-plugin-playwright>=2024.10.24",
  97. "abx-plugin-puppeteer>=2024.10.28",
  98. "abx-plugin-ripgrep-search>=2024.10.28",
  99. "abx-plugin-sqlitefts-search>=2024.10.28",
  100. "abx-plugin-sonic-search>=2024.10.28",
  101. "abx-plugin-ldap-auth>=2024.10.28",
  102. "abx-plugin-curl>=2024.10.27",
  103. "abx-plugin-wget>=2024.10.28",
  104. "abx-plugin-git>=2024.10.28",
  105. "abx-plugin-chrome>=2024.10.28",
  106. "abx-plugin-ytdlp>=2024.10.28",
  107. "abx-plugin-title>=2024.10.27",
  108. "abx-plugin-favicon>=2024.10.27",
  109. # "abx-plugin-headers>=2024.10.27",
  110. "abx-plugin-archivedotorg>=2024.10.28",
  111. "abx-plugin-singlefile>=2024.10.28",
  112. "abx-plugin-readability>=2024.10.28",
  113. "abx-plugin-mercury>=2024.10.28",
  114. "abx-plugin-htmltotext>=2024.10.28",
  115. "python-statemachine>=2.3.6",
  116. ]
  117. [project.optional-dependencies]
  118. sonic = [
  119. # 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
  120. # curl -fsSL https://packagecloud.io/valeriansaliou/sonic/gpgkey | gpg --dearmor -o /usr/share/keyrings/valeriansaliou_sonic.gpg
  121. # apt install sonic
  122. # no-op, now included by default:
  123. # "sonic-client>=1.0.0",
  124. ]
  125. ldap = [
  126. # apt install libsasl2-dev python-dev-is-python3 libldap2-dev libssl-dev
  127. "python-ldap>=3.4.3",
  128. "django-auth-ldap>=4.1.0",
  129. ]
  130. debug = [
  131. # packages needed for running with DEBUG=True
  132. "django-debug-toolbar>=4.4.6",
  133. "djdt_flamegraph>=0.2.13",
  134. "ipdb>=0.13.13",
  135. "requests-tracker>=0.3.3",
  136. "django-autotyping>=0.5.1",
  137. ]
  138. all = [
  139. "archivebox[sonic,ldap,debug]"
  140. ]
  141. [tool.uv]
  142. dev-dependencies = [
  143. ### BUILD
  144. "uv>=0.4.26",
  145. "pip>=24.2",
  146. "setuptools>=75.1.0",
  147. "wheel>=0.44.0",
  148. "bumpver>=2023.1129",
  149. #"homebrew-pypi-poet>=0.10.0", # for: generating archivebox.rb brewfile list of python packages
  150. ### DOCS
  151. "recommonmark>=0.7.1",
  152. "sphinx>=8.1.3",
  153. "sphinx-rtd-theme>=2.0.0",
  154. "myst-parser>=4.0.0",
  155. "sphinx-autodoc2>=0.5.0",
  156. "linkify-it-py>=2.0.3",
  157. ### DEBUGGING
  158. "django-debug-toolbar>=4.4.6",
  159. "requests-tracker>=0.3.3",
  160. "djdt_flamegraph>=0.2.13",
  161. "ipdb>=0.13.13",
  162. "logfire[django]>=0.51.0",
  163. "opentelemetry-instrumentation-django>=0.47b0",
  164. "opentelemetry-instrumentation-sqlite3>=0.47b0",
  165. "viztracer>=0.17.0", # usage: viztracer ../.venv/bin/archivebox manage check
  166. # "snakeviz", # usage: python -m cProfile -o flamegraph.prof ../.venv/bin/archivebox manage check
  167. ### TESTING
  168. "pytest>=8.3.3",
  169. "bottle>=0.13.1",
  170. ### LINTING
  171. "ruff>=0.6.6",
  172. "flake8>=7.1.1",
  173. "mypy>=1.11.2",
  174. ]
  175. [tool.uv.sources]
  176. # pydantic-pkgr = { workspace = true }
  177. abx = { workspace = true }
  178. abx-spec-pydantic-pkgr = { workspace = true }
  179. abx-spec-config = { workspace = true }
  180. abx-spec-archivebox = { workspace = true }
  181. abx-spec-django = { workspace = true }
  182. abx-spec-extractor = { workspace = true }
  183. abx-spec-searchbackend = { workspace = true }
  184. abx-plugin-default-binproviders = { workspace = true }
  185. abx-plugin-pip = { workspace = true }
  186. abx-plugin-npm = { workspace = true }
  187. abx-plugin-playwright = { workspace = true }
  188. abx-plugin-puppeteer = { workspace = true }
  189. abx-plugin-ripgrep-search = { workspace = true }
  190. abx-plugin-sqlitefts-search = { workspace = true }
  191. abx-plugin-sonic-search = { workspace = true }
  192. abx-plugin-ldap-auth = { workspace = true }
  193. abx-plugin-curl = { workspace = true }
  194. abx-plugin-wget = { workspace = true }
  195. abx-plugin-git = { workspace = true }
  196. abx-plugin-chrome = { workspace = true }
  197. abx-plugin-ytdlp = { workspace = true }
  198. abx-plugin-title = { workspace = true }
  199. abx-plugin-favicon = { workspace = true }
  200. # abx-plugin-headers = { workspace = true }
  201. abx-plugin-archivedotorg = { workspace = true }
  202. abx-plugin-singlefile = { workspace = true }
  203. abx-plugin-readability = { workspace = true }
  204. abx-plugin-mercury = { workspace = true }
  205. abx-plugin-htmltotext = { workspace = true }
  206. [tool.uv.workspace]
  207. members = ["archivebox/pkgs/*"]
  208. exclude = ["archivebox/pkgs/__pycache__"]
  209. [build-system]
  210. requires = ["pdm-backend"]
  211. build-backend = "pdm.backend"
  212. # https://github.com/astral-sh/uv/issues/3957
  213. [tool.setuptools]
  214. packages = ["archivebox"]
  215. package-dir = {"archivebox" = "archivebox"}
  216. [tool.ruff]
  217. line-length = 140
  218. target-version = "py310"
  219. src = ["archivebox"]
  220. exclude = ["*.pyi", "typings/", "migrations/"]
  221. # https://docs.astral.sh/ruff/rules/
  222. [tool.ruff.lint]
  223. ignore = ["E731", "E303", "E266", "E241", "E222"]
  224. [tool.pytest.ini_options]
  225. testpaths = [ "tests" ]
  226. [tool.mypy]
  227. mypy_path = "archivebox,archivebox/typings"
  228. namespace_packages = true
  229. explicit_package_bases = true
  230. # follow_imports = "silent"
  231. # ignore_missing_imports = true
  232. # disallow_incomplete_defs = true
  233. # disallow_untyped_defs = true
  234. # disallow_untyped_decorators = true
  235. # exclude = "tests/.*"
  236. plugins = ["mypy_django_plugin.main"]
  237. [tool.django-stubs]
  238. django_settings_module = "core.settings"
  239. [tool.pyright]
  240. include = [
  241. "archivebox",
  242. ]
  243. exclude = [
  244. ".venv",
  245. "**/*.pyi",
  246. "**/__init__.pyi",
  247. "**/node_modules",
  248. "**/__pycache__",
  249. "**/migrations",
  250. ]
  251. stubPath = "./archivebox/typings"
  252. venvPath = "."
  253. venv = ".venv"
  254. # ignore = ["src/oldstuff"]
  255. # defineConstant = { DEBUG = true }
  256. reportMissingImports = true
  257. reportMissingTypeStubs = false
  258. pythonVersion = "3.10"
  259. pythonPlatform = "Linux"
  260. [project.scripts]
  261. archivebox = "archivebox.cli:main"
  262. [project.urls]
  263. Homepage = "https://github.com/ArchiveBox/ArchiveBox"
  264. Source = "https://github.com/ArchiveBox/ArchiveBox"
  265. Documentation = "https://github.com/ArchiveBox/ArchiveBox/wiki"
  266. "Bug Tracker" = "https://github.com/ArchiveBox/ArchiveBox/issues"
  267. Changelog = "https://github.com/ArchiveBox/ArchiveBox/releases"
  268. Roadmap = "https://github.com/ArchiveBox/ArchiveBox/wiki/Roadmap"
  269. Community = "https://github.com/ArchiveBox/ArchiveBox/wiki/Web-Archiving-Community"
  270. Demo = "https://demo.archivebox.io"
  271. Donate = "https://github.com/ArchiveBox/ArchiveBox/wiki/Donations"
  272. [tool.bumpver]
  273. current_version = "v0.8.5rc53"
  274. version_pattern = "vMAJOR.MINOR.PATCH[PYTAGNUM]"
  275. commit_message = "bump version {old_version} -> {new_version}"
  276. tag_message = "{new_version}"
  277. tag_scope = "default"
  278. pre_commit_hook = ""
  279. post_commit_hook = ""
  280. commit = true
  281. tag = true
  282. push = true
  283. [tool.bumpver.file_patterns]
  284. "pyproject.toml" = [
  285. 'current_version = "{version}"',
  286. 'version = "{pep440_version}"',
  287. ]