Merge pull request #12170 from Pierre-Sassoulas/small-performance-improvments

Small performance/readability improvments when iterating dictionnary with ``keys()``
This commit is contained in:
Pierre Sassoulas 2024-03-31 15:15:03 +02:00 committed by GitHub
commit 44895289c7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 122 additions and 2 deletions

View File

@ -50,6 +50,13 @@ repos:
additional_dependencies: ["tox>=4.9"] additional_dependencies: ["tox>=4.9"]
- repo: local - repo: local
hooks: hooks:
- id: pylint
name: pylint
entry: pylint
language: system
types: [python]
args: ["-rn", "-sn", "--fail-on=I"]
stages: [manual]
- id: rst - id: rst
name: rst name: rst
entry: rst-lint --encoding utf-8 entry: rst-lint --encoding utf-8

View File

@ -165,6 +165,119 @@ lines-after-imports = 2
"src/_pytest/_version.py" = ["I001"] "src/_pytest/_version.py" = ["I001"]
"testing/python/approx.py" = ["B015"] "testing/python/approx.py" = ["B015"]
[tool.pylint.main]
# Maximum number of characters on a single line.
max-line-length = 120
disable= [
"abstract-method",
"arguments-differ",
"arguments-renamed",
"assigning-non-slot",
"attribute-defined-outside-init",
"bad-classmethod-argument",
"bad-mcs-method-argument",
"broad-exception-caught",
"broad-exception-raised",
"cell-var-from-loop",
"comparison-of-constants",
"comparison-with-callable",
"comparison-with-itself",
"condition-evals-to-constant",
"consider-using-dict-items",
"consider-using-enumerate",
"consider-using-from-import",
"consider-using-f-string",
"consider-using-in",
"consider-using-sys-exit",
"consider-using-ternary",
"consider-using-with",
"cyclic-import",
"disallowed-name",
"duplicate-code",
"eval-used",
"exec-used",
"expression-not-assigned",
"fixme",
"global-statement",
"implicit-str-concat",
"import-error",
"import-outside-toplevel",
"inconsistent-return-statements",
"invalid-bool-returned",
"invalid-name",
"invalid-repr-returned",
"invalid-str-returned",
"keyword-arg-before-vararg",
"line-too-long",
"method-hidden",
"misplaced-bare-raise",
"missing-docstring",
"missing-timeout",
"multiple-statements",
"no-else-break",
"no-else-continue",
"no-else-raise",
"no-else-return",
"no-member",
"no-name-in-module",
"no-self-argument",
"not-an-iterable",
"not-callable",
"pointless-exception-statement",
"pointless-statement",
"pointless-string-statement",
"protected-access",
"raise-missing-from",
"redefined-argument-from-local",
"redefined-builtin",
"redefined-outer-name",
"reimported",
"simplifiable-condition",
"simplifiable-if-expression",
"singleton-comparison",
"superfluous-parens",
"super-init-not-called",
"too-few-public-methods",
"too-many-ancestors",
"too-many-arguments",
"too-many-branches",
"too-many-function-args",
"too-many-instance-attributes",
"too-many-lines",
"too-many-locals",
"too-many-nested-blocks",
"too-many-public-methods",
"too-many-return-statements",
"too-many-statements",
"try-except-raise",
"typevar-name-incorrect-variance",
"unbalanced-tuple-unpacking",
"undefined-loop-variable",
"undefined-variable",
"unexpected-keyword-arg",
"unidiomatic-typecheck",
"unnecessary-comprehension",
"unnecessary-dunder-call",
"unnecessary-lambda",
"unnecessary-lambda-assignment",
"unpacking-non-sequence",
"unspecified-encoding",
"unsubscriptable-object",
"unused-argument",
"unused-import",
"unused-variable",
"used-before-assignment",
"use-dict-literal",
"use-implicit-booleaness-not-comparison",
"use-implicit-booleaness-not-len",
"useless-else-on-loop",
"useless-import-alias",
"useless-return",
"use-maxsplit-arg",
"using-constant-test",
"wrong-import-order",
]
[tool.check-wheel-contents] [tool.check-wheel-contents]
# check-wheel-contents is executed by the build-and-inspect-python-package action. # check-wheel-contents is executed by the build-and-inspect-python-package action.
# W009: Wheel contains multiple toplevel library entries # W009: Wheel contains multiple toplevel library entries

View File

@ -143,7 +143,7 @@ class _NodeReporter:
# Filter out attributes not permitted by this test family. # Filter out attributes not permitted by this test family.
# Including custom attributes because they are not valid here. # Including custom attributes because they are not valid here.
temp_attrs = {} temp_attrs = {}
for key in self.attrs.keys(): for key in self.attrs:
if key in families[self.family]["testcase"]: if key in families[self.family]["testcase"]:
temp_attrs[key] = self.attrs[key] temp_attrs[key] = self.attrs[key]
self.attrs = temp_attrs self.attrs = temp_attrs

View File

@ -1267,7 +1267,7 @@ class TerminalReporter:
def _set_main_color(self) -> None: def _set_main_color(self) -> None:
unknown_types: List[str] = [] unknown_types: List[str] = []
for found_type in self.stats.keys(): for found_type in self.stats:
if found_type: # setup/teardown reports have an empty key, ignore them if found_type: # setup/teardown reports have an empty key, ignore them
if found_type not in KNOWN_TYPES and found_type not in unknown_types: if found_type not in KNOWN_TYPES and found_type not in unknown_types:
unknown_types.append(found_type) unknown_types.append(found_type)