[project] authors = [ {name = "Python Discord", email = "info@pythondiscord.com"}, ] license = {text = "MIT"} requires-python = "==3.13.*" dependencies = [ "pydis-core[all]==11.7.0", "aiohttp==3.12.14", "arrow==1.3.0", "beautifulsoup4==4.12.3", "colorama==0.4.6; sys_platform == \"win32\"", "coloredlogs==15.0.1", "deepdiff==8.5.0", "emoji==2.14.1", "feedparser==6.0.11", "lxml==6.0.0", "markdownify==1.1.0", "pydantic==2.10.6", "pydantic-settings==2.8.1", "python-dateutil==2.9.0.post0", "python-frontmatter==1.1.0", "rapidfuzz==3.12.1", "regex==2024.11.6", "sentry-sdk==2.22.0", "tenacity==9.0.0", "tldextract==5.1.3", ] name = "bot" version = "1.0.1" description = "The community bot for the Python Discord community." [tool.uv] prerelease = "allow" [dependency-groups] dev = [ "coverage==7.6.12", "httpx==0.28.1", "pre-commit==4.1.0", "pytest==8.3.4", "pytest-cov==6.0.0", "pytest-subtests==0.14.1", "pytest-xdist==3.6.1", "ruff==0.9.9", "taskipy==1.14.1", ] [tool.taskipy.tasks] start = "python -m bot" configure = "python -m botstrap" lint = "pre-commit run --all-files" precommit = "pre-commit install" build = "docker build -t ghcr.io/python-discord/bot:latest -f Dockerfile ." push = "docker push ghcr.io/python-discord/bot:latest" test = "pytest -n auto --ff" retest = "pytest -n auto --lf" test-cov = "pytest -n auto --cov-report= --cov" html = "coverage html" report = "coverage report" [tool.coverage.run] branch = true source_pkgs = ["bot"] source = ["tests"] [tool.ruff] target-version = "py313" extend-exclude = [".cache"] line-length = 120 output-format = "concise" unsafe-fixes = true [tool.ruff.lint] select = ["ANN", "B", "C4", "D", "DTZ", "E", "F", "I", "ISC", "INT", "N", "PGH", "PIE", "Q", "RET", "RSE", "RUF", "S", "SIM", "T20", "TID", "UP", "W"] ignore = [ "ANN002", "ANN003", "ANN204", "ANN206", "ANN401", "B904", "C401", "C408", "D100", "D104", "D105", "D107", "D203", "D212", "D214", "D215", "D301", "D400", "D401", "D402", "D404", "D405", "D406", "D407", "D408", "D409", "D410", "D411", "D412", "D413", "D414", "D416", "D417", "E731", "RET504", "RUF005", "RUF012", "RUF015", "S311", "SIM102", "SIM108", ] [tool.ruff.lint.isort] order-by-type = false case-sensitive = true combine-as-imports = true [tool.ruff.lint.per-file-ignores] "tests/*" = ["ANN", "D"] [tool.pytest.ini_options] # We don't use nose style tests so disable them in pytest. # This stops pytest from running functions named `setup` in test files. # See https://github.com/python-discord/bot/pull/2229#issuecomment-1204436420 addopts = "-p no:nose"