#
# 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.
#

# since we rely on setuptools and according to https://peps.python.org/pep-0518/#build-system-table
# this is the minimum requirements for the build system to execute.
[build-system]
requires = [
    "setuptools",
    "wheel>=0.36.0",
    # Note: after upgrading to grpcio-tools, we must bump protobuf to >=5.0.
    # Currently Blocked on old dependencies of Beam tft extra:
    # https://github.com/apache/beam/issues/37854
    "grpcio-tools==1.62.1; python_version <= '3.12'",
    "grpcio-tools==1.71.0; python_version >= '3.13'",
    "mypy-protobuf==3.5.0",
    # Avoid https://github.com/pypa/virtualenv/issues/2006
    "distlib==0.4.2",
    # Numpy headers
    "numpy>=1.14.3,<2.5.0", # Update setup.py as well.
    # having cython here will create wheels that are platform dependent.
    "cython>=3.2.6,<4",
    ## deps for generating external transform wrappers:
    # also update PyYaml bounds in sdks:python:generateExternalTransformsConfig
    'pyyaml>=3.12,<7.0.0',
    # also update Jinja2 bounds in test-suites/xlang/build.gradle (look for xlangWrapperValidation task)
    "jinja2>=2.7.1,<4.0.0",
    'yapf==0.43.0'
]


# legacy installation is needed to generate `apache_beam.portability.api` package.
build-backend = "setuptools.build_meta"

[tool.isort]
py_version = 310
line_length = 120
old_finders = true
order_by_type = true
force_single_line = true
combine_star = true
src_paths = ["apache_beam"]
extra_standard_library = ["dataclasses"]
known_third_party = ["yaml"]
skip = [
    "apiclient.py",
    "avroio_test.py",
    "cloudpickle.py",
    "datastore_wordcount.py",
    "datastoreio_test.py",
    "doctests_test.py",
    "fast_coders_test.py",
    "hadoopfilesystem.py",
    "iobase_test.py",
    "main_test.py",
    "model.py",
    "preprocess.py",
    "process_tfma.py",
    "render_test.py",
    "slow_coders_test.py",
    "taxi.py",
    "tfdv_analyze_and_validate.py",
    "yaml/main.py",
    "yaml_testing_test.py",
    "bigquery_v2_client.py",
    "bigquery_v2_messages.py",
    "dataflow_v1b3_client.py",
    "dataflow_v1b3_messages.py",
    "storage_v1_client.py",
    "storage_v1_messages.py",
    "proto2_coder_test_messages_pb2.py",
    "rate_limit_pb2.py",
    "cloudbuild_v1_client.py",
    "cloudbuild_v1_messages.py",
    "boto3_client.py",
]
skip_glob = [
    "*.pxd",
    "*.pyx",
    "*pb2*.py",
    "**/examples/**/*.py",
    "**/portability/api/**/*.py",
    "**/portability/api/__init__.py",
]

[tool.ruff]
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"]

[tool.ruff.lint]
select = ["E9", "PL", "F821", "F822", "F823", "UP006"]
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]+?))$"

[tool.pyrefly]
project-includes = ["apache_beam"]
python-version = "3.10.0"
ignore-missing-imports = ["*"]
untyped-def-behavior = "skip-and-infer-return-any"

[tool.pyrefly.errors]
missing-attribute = "ignore"
invalid-annotation = "ignore"
redundant-condition = "ignore"
untyped-import = "ignore"
# Beam-specific supressions to keep pyrefly green
# These are in descending order of instances.
#
# TODO(https://github.com/apache/beam/issues/37699): Reduce the number of
# ignored checks.
bad-param-name-override = "ignore"
bad-override = "ignore"
bad-argument-type = "ignore"
unsupported-operation = "ignore"
implicit-import = "ignore"
bad-function-definition = "ignore"
bad-return = "ignore"
unbound-name = "ignore"
no-matching-overload = "ignore"
bad-assignment = "ignore"
missing-argument = "ignore"
bad-index = "ignore"
invalid-type-var = "ignore"
unknown-name = "ignore"
not-a-type = "ignore"
deprecated = "ignore"
not-callable = "ignore"
invalid-argument = "ignore"
invalid-inheritance = "ignore"
not-iterable = "ignore"
unexpected-keyword = "ignore"
bad-specialization = "ignore"
bad-context-manager = "ignore"
invalid-yield = "ignore"
bad-argument-count = "ignore"
bad-typed-dict-key = "ignore"
