2024-02-05 17:28:47 +01:00
|
|
|
# BLACK:
|
2020-10-09 17:22:07 +02:00
|
|
|
[tool.black]
|
|
|
|
line-length = 99
|
2023-06-29 18:17:47 +02:00
|
|
|
target-version = ['py38', 'py39', 'py310', 'py311']
|
2022-05-05 09:27:54 +02:00
|
|
|
|
2024-02-05 17:28:47 +01:00
|
|
|
# ISORT:
|
2022-05-05 09:27:54 +02:00
|
|
|
[tool.isort] # black config
|
|
|
|
profile = "black"
|
|
|
|
line_length = 99
|
2023-01-06 16:19:49 +01:00
|
|
|
|
2024-02-05 17:28:47 +01:00
|
|
|
# RUFF:
|
2023-01-06 16:19:49 +01:00
|
|
|
[tool.ruff]
|
|
|
|
line-length = 99
|
2023-06-29 18:17:47 +02:00
|
|
|
target-version = "py38"
|
2023-03-25 19:18:04 +01:00
|
|
|
show-fixes = true
|
2023-04-05 20:52:52 +02:00
|
|
|
|
2024-01-24 20:53:36 +01:00
|
|
|
[tool.ruff.lint]
|
|
|
|
preview = true
|
|
|
|
explicit-preview-rules = true
|
2024-02-05 19:24:00 +01:00
|
|
|
ignore = ["PLR2004", "PLR0911", "PLR0912", "PLR0913", "PLR0915", "PERF203"]
|
|
|
|
select = ["E", "F", "I", "PL", "UP", "RUF", "PTH", "C4", "B", "PIE", "SIM", "RET", "RSE",
|
|
|
|
"G", "ISC", "PT", "ASYNC", "TCH", "SLOT", "PERF", "PYI", "FLY", "AIR", "RUF022",
|
2024-04-12 11:58:25 +02:00
|
|
|
"RUF023", "Q", "INP", "W"]
|
2024-02-05 19:24:00 +01:00
|
|
|
# Add "FURB" after it's out of preview
|
2024-01-24 20:53:36 +01:00
|
|
|
|
2024-02-05 19:24:00 +01:00
|
|
|
[tool.ruff.lint.per-file-ignores]
|
2023-04-05 20:52:52 +02:00
|
|
|
"tests/*.py" = ["B018"]
|
2024-02-05 19:24:00 +01:00
|
|
|
"tests/**.py" = ["RUF012", "ASYNC101"]
|
2024-02-29 19:11:03 +01:00
|
|
|
"docs/**.py" = ["INP001"]
|
2024-02-05 17:28:47 +01:00
|
|
|
|
|
|
|
# PYLINT:
|
|
|
|
[tool.pylint."messages control"]
|
|
|
|
enable = ["useless-suppression"]
|
2024-02-05 19:24:00 +01:00
|
|
|
disable = ["duplicate-code", "too-many-arguments", "too-many-public-methods",
|
|
|
|
"too-few-public-methods", "broad-exception-caught", "too-many-instance-attributes",
|
|
|
|
"fixme", "missing-function-docstring", "missing-class-docstring", "too-many-locals",
|
2024-02-05 17:28:47 +01:00
|
|
|
"too-many-lines", "too-many-branches", "too-many-statements", "cyclic-import"
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.pylint.main]
|
|
|
|
# run pylint across multiple cpu cores to speed it up-
|
|
|
|
# https://pylint.pycqa.org/en/latest/user_guide/run.html?#parallel-execution to know more
|
|
|
|
jobs = 0
|
|
|
|
|
|
|
|
[tool.pylint.classes]
|
|
|
|
exclude-protected = ["_unfrozen"]
|
|
|
|
|
|
|
|
# PYTEST:
|
|
|
|
[tool.pytest.ini_options]
|
|
|
|
testpaths = ["tests"]
|
|
|
|
addopts = "--no-success-flaky-report -rsxX"
|
|
|
|
filterwarnings = [
|
|
|
|
"error",
|
|
|
|
"ignore::DeprecationWarning",
|
|
|
|
'ignore:Tasks created via `Application\.create_task` while the application is not running',
|
|
|
|
"ignore::ResourceWarning",
|
|
|
|
# TODO: Write so good code that we don't need to ignore ResourceWarnings anymore
|
|
|
|
# Unfortunately due to https://github.com/pytest-dev/pytest/issues/8343 we can't have this here
|
|
|
|
# and instead do a trick directly in tests/conftest.py
|
|
|
|
# ignore::telegram.utils.deprecate.TelegramDeprecationWarning
|
|
|
|
]
|
|
|
|
markers = [
|
|
|
|
"dev", # If you want to test a specific test, use this
|
|
|
|
"no_req",
|
|
|
|
"req",
|
|
|
|
]
|
|
|
|
asyncio_mode = "auto"
|
2024-02-09 18:12:13 +01:00
|
|
|
log_format = "%(funcName)s - Line %(lineno)d - %(message)s"
|
|
|
|
# log_level = "DEBUG" # uncomment to see DEBUG logs
|
2024-02-05 17:28:47 +01:00
|
|
|
|
|
|
|
# MYPY:
|
|
|
|
[tool.mypy]
|
|
|
|
warn_unused_ignores = true
|
|
|
|
warn_unused_configs = true
|
|
|
|
disallow_untyped_defs = true
|
|
|
|
disallow_incomplete_defs = true
|
|
|
|
disallow_untyped_decorators = true
|
|
|
|
show_error_codes = true
|
|
|
|
python_version = "3.8"
|
|
|
|
|
|
|
|
# For some files, it's easier to just disable strict-optional all together instead of
|
|
|
|
# cluttering the code with `# type: ignore`s or stuff like
|
|
|
|
# `if self.text is None: raise RuntimeError()`
|
|
|
|
[[tool.mypy.overrides]]
|
|
|
|
module = [
|
|
|
|
"telegram._callbackquery",
|
|
|
|
"telegram._file",
|
|
|
|
"telegram._message",
|
|
|
|
"telegram._files.file"
|
|
|
|
]
|
|
|
|
strict_optional = false
|
|
|
|
|
|
|
|
# type hinting for asyncio in webhookhandler is a bit tricky because it depends on the OS
|
|
|
|
[[tool.mypy.overrides]]
|
|
|
|
module = "telegram.ext._utils.webhookhandler"
|
|
|
|
warn_unused_ignores = false
|
|
|
|
|
|
|
|
# The libs listed below are only used for the `customwebhookbot_*.py` examples
|
|
|
|
# let's just ignore type checking for them for now
|
|
|
|
[[tool.mypy.overrides]]
|
|
|
|
module = [
|
|
|
|
"flask.*",
|
|
|
|
"quart.*",
|
|
|
|
"starlette.*",
|
|
|
|
"uvicorn.*",
|
|
|
|
"asgiref.*",
|
|
|
|
"django.*",
|
|
|
|
"apscheduler.*", # not part of `customwebhookbot_*.py` examples
|
|
|
|
]
|
|
|
|
ignore_missing_imports = true
|
|
|
|
|
|
|
|
# COVERAGE:
|
|
|
|
[tool.coverage.run]
|
|
|
|
branch = true
|
|
|
|
source = ["telegram"]
|
|
|
|
parallel = true
|
|
|
|
concurrency = ["thread", "multiprocessing"]
|
|
|
|
omit = [
|
|
|
|
"tests/",
|
|
|
|
"telegram/__main__.py"
|
|
|
|
]
|
|
|
|
|
|
|
|
[tool.coverage.report]
|
|
|
|
exclude_also = [
|
|
|
|
"@overload",
|
2024-02-05 19:24:00 +01:00
|
|
|
"@abstractmethod",
|
2024-02-05 17:28:47 +01:00
|
|
|
"if TYPE_CHECKING:"
|
|
|
|
]
|