You've already forked directdnsonly
- worker.py: third persistent retry queue with exponential backoff (30s→30m, max 5 attempts); failed backends tracked per-item so retries target only the failing nodes; zone_data stored in DB after every successful write - Domain model: zone_data TEXT + zone_updated_at DATETIME columns; additive migration applied on startup so existing deployments upgrade in place - ReconciliationWorker: Option C healing pass — checks every configured backend for zone presence after each reconciliation cycle and re-queues any zone missing from a backend using stored zone_data, enabling automatic recovery from prolonged backend outages without waiting for DirectAdmin to re-push - 82 tests, all passing
36 lines
870 B
TOML
36 lines
870 B
TOML
[project]
|
|
name = "directdnsonly"
|
|
version = "2.3.0"
|
|
description = "DNS Management System - DirectAdmin to multiple backends"
|
|
authors = [
|
|
{name = "Aaron Guise",email = "aaron@guise.net.nz"}
|
|
]
|
|
license = {text = "MIT"}
|
|
readme = "README.md"
|
|
requires-python = ">=3.11,<3.14"
|
|
dependencies = [
|
|
"vyper-config (>=1.2.1,<2.0.0)",
|
|
"loguru (>=0.7.3,<0.8.0)",
|
|
"persist-queue (>=1.0.0,<2.0.0)",
|
|
"cherrypy (>=18.10.0,<19.0.0)",
|
|
"sqlalchemy (<2.0.0)",
|
|
"pymysql (>=1.1.1,<2.0.0)",
|
|
"dnspython (>=2.7.0,<3.0.0)",
|
|
"pyyaml (>=6.0.2,<7.0.0)",
|
|
"requests (>=2.32.0,<3.0.0)",
|
|
]
|
|
|
|
[tool.poetry]
|
|
package-mode = true
|
|
|
|
[tool.poetry.group.dev.dependencies]
|
|
black = "^25.1.0"
|
|
pyinstaller = "^6.13.0"
|
|
pytest = "^8.3.5"
|
|
pytest-cov = "^6.1.1"
|
|
pytest-mock = "^3.14.0"
|
|
|
|
[build-system]
|
|
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
|
build-backend = "poetry.core.masonry.api"
|