Skip to content

Commit

Permalink
Migrate From setup.cfg to pyproject.toml Where Possible (#4088)
Browse files Browse the repository at this point in the history
  • Loading branch information
harshil21 committed Feb 5, 2024
1 parent f3bda29 commit 6ae7add
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 94 deletions.
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

0 comments on commit 6ae7add

Please sign in to comment.