#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

exclude = [
    ".bzr",
    ".direnv",
    ".eggs",
    ".git",
    ".git-rewrite",
    ".hg",
    ".ipynb_checkpoints",
    ".mypy_cache",
    ".nox",
    ".pants.d",
    ".pyenv",
    ".pytest_cache",
    ".pytype",
    ".ruff_cache",
    ".svn",
    ".tox",
    ".venv",
    ".vscode",
    "__pypackages__",
    "_build",
    "buck-out",
    "build",
    "dist",
    "node_modules",
    "site-packages",
    "venv",
    "*.pxd",
    "*.pyx",
    "*pb2*.py",
    "**/examples/**/*.py",
    "**/examples/**/*.ipynb",
    "**/portability/api/**/*.py",
    "**/portability/api/__init__.py",
]

target-version = "py310"

src = ["apache_beam"]

[lint]
select = ["E9", "PL", "F821", "F822", "F823"]
ignore = [
    # Ignored Pylint Checks
    "PLC0415",  # import-outside-toplevel
    "PLR2004",  # magic-value-comparison
    "PLR0913",  # too-many-arguments
    "PLR0912",  # too-many-branches
    "PLW0108",  # unnecessary-lambda
    "PLW2901",  # redefined-loop-name
    "PLR0915",  # too-many-statements
    "PLR1714",  # repeated-equality-comparison
    "PLR0911",  # too-many-return-statements
    "PLR5501",  # collapsible-else-if
    "PLW0603",  # global-statement
    "PLR1730",  # if-stmt-min-max
    "PLW1641",  # eq-without-hash
    "PLW0602",  # global-variable-not-assigned
    "PLC1802",  # len-test
    "PLC3002",  # unnecessary-direct-lambda-call
    "PLW0642",  # self-or-cls-assignment
    "PLR1733",  # unnecessary-dict-index-lookup
    "PLR0402",  # manual-from-import
    "PLC0132",  # type-param-name-mismatch
    "PLC0206",  # dict-index-missing-items
    "PLC0207",  # missing-maxsplit-arg
    "PLR1704",  # redefined-argument-from-local
    "PLR1711",  # useless-return
    "PLW0406",  # import-self
    "PLW3301",  # nested-min-max
    "PLR2044",  # empty-comment
]

# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = ["ALL"]
unfixable = []

# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"