Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,6 @@ repos:
hooks:
- id: pylint
files: ^(telegram|examples)/.*\.py$
args:
- --rcfile=setup.cfg
# 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

additional_dependencies:
- httpx~=0.26.0
- tornado~=6.4
Expand Down
1 change: 0 additions & 1 deletion docs/requirements-docs.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
sphinx==7.2.6
sphinx-pypi-upload
furo==2024.1.29
git+https://github.com/harshil21/furo-sphinx-search@v0.2.0.1
sphinx-paramlinks==0.6.0
Expand Down
99 changes: 99 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
# BLACK:
[tool.black]
line-length = 99
target-version = ['py38', 'py39', 'py310', 'py311']

# ISORT:
[tool.isort] # black config
profile = "black"
line_length = 99

# RUFF:
[tool.ruff]
line-length = 99
target-version = "py38"
Expand All @@ -24,3 +27,99 @@ explicit-preview-rules = true
[tool.ruff.per-file-ignores]
"tests/*.py" = ["B018"]
"tests/**.py" = ["RUF012"]

# PYLINT:
[tool.pylint."messages control"]
enable = ["useless-suppression"]
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",
"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"

# 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",
"if TYPE_CHECKING:"
]
87 changes: 0 additions & 87 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,95 +1,8 @@
[metadata]
license_files = LICENSE, LICENSE.dual, LICENSE.lesser

[build_sphinx]
source-dir = docs/source
build-dir = docs/build
all_files = 1

[upload_sphinx]
upload-dir = docs/build/html

[flake8]
max-line-length = 99
ignore = W503, W605
extend-ignore = E203
exclude = setup.py, setup-raw.py docs/source/conf.py

[pylint.message-control]
disable = duplicate-code,too-many-arguments,too-many-public-methods,too-few-public-methods,
broad-except,too-many-instance-attributes,fixme,missing-function-docstring,
missing-class-docstring,too-many-locals,too-many-lines,too-many-branches,
too-many-statements, cyclic-import
enable=useless-suppression ; Warns about unused pylint ignores
exclude-protected=_unfrozen

[tool:pytest]
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

[coverage:run]
branch = True
source = telegram
parallel = True
concurrency = thread, multiprocessing
omit =
tests/
telegram/__main__.py

[coverage:report]
exclude_lines =
pragma: no cover
@overload
if TYPE_CHECKING:

[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()`
[mypy-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
[mypy-telegram.ext._utils.webhookhandler]
warn_unused_ignores = False

[mypy-apscheduler.*]
ignore_missing_imports = True

# The libs listed below are only used for the `customwebhookbot_*.py` examples
# let's just ignore type checking for them for now
[mypy-uvicorn.*]
ignore_missing_imports = True
[mypy-starlette.*]
ignore_missing_imports = True
[mypy-asgiref.*]
ignore_missing_imports = True
[mypy-flask.*]
ignore_missing_imports = True
[mypy-quart.*]
ignore_missing_imports = True
[mypy-django.*]
ignore_missing_imports = True