| # |
| # 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' and python_version < '3.14'", |
| "grpcio-tools==1.78.0; python_version >= '3.14'", |
| "mypy-protobuf==3.5.0", |
| # Avoid https://github.com/pypa/virtualenv/issues/2006 |
| "distlib==0.4.3", |
| # 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.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", |
| "*.ipynb", |
| "**/*.ipynb", |
| "**/examples/**/*.py", |
| "**/examples/**/*.ipynb", |
| "**/portability/api/**/*.py", |
| "**/portability/api/__init__.py", |
| ] |
| target-version = "py310" |
| src = ["apache_beam"] |
| line-length = 120 |
| |
| [tool.ruff.lint] |
| select = ["E9", "PL", "F821", "F822", "F823", "UP006", "I"] |
| 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.ruff.lint.isort] |
| force-single-line = true |
| order-by-type = true |
| extra-standard-library = ["dataclasses"] |
| known-third-party = ["yaml"] |
| known-first-party = ["apache_beam"] |
| |
| [tool.ruff.lint.per-file-ignores] |
| "**/apiclient.py" = ["I"] |
| "**/avroio_test.py" = ["I"] |
| "**/cloudpickle.py" = ["I"] |
| "**/datastore_wordcount.py" = ["I"] |
| "**/datastoreio_test.py" = ["I"] |
| "**/doctests_test.py" = ["I"] |
| "**/fast_coders_test.py" = ["I"] |
| "**/hadoopfilesystem.py" = ["I"] |
| "**/iobase_test.py" = ["I"] |
| "**/main_test.py" = ["I"] |
| "**/model.py" = ["I"] |
| "**/preprocess.py" = ["I"] |
| "**/process_tfma.py" = ["I"] |
| "**/render_test.py" = ["I"] |
| "**/slow_coders_test.py" = ["I"] |
| "**/taxi.py" = ["I"] |
| "**/tfdv_analyze_and_validate.py" = ["I"] |
| "**/yaml/main.py" = ["I"] |
| "**/yaml_testing_test.py" = ["I"] |
| "**/bigquery_v2_client.py" = ["I"] |
| "**/bigquery_v2_messages.py" = ["I"] |
| "**/proto2_coder_test_messages_pb2.py" = ["I"] |
| "**/rate_limit_pb2.py" = ["I"] |
| "**/boto3_client.py" = ["I"] |
| "**/coders_property_based_test.py" = ["I"] |
| "**/filebasedsource_test.py" = ["I"] |
| "**/bigtableio_it_test.py" = ["I"] |
| "**/bigtableio_test.py" = ["I"] |
| "**/mongodbio.py" = ["I"] |
| "**/textio_test.py" = ["I"] |
| "**/streaming_cache.py" = ["I"] |
| "**/pcoll_visualization.py" = ["I"] |
| "**/interactive_environment.py" = ["I"] |
| "**/pipeline_instrument_test.py" = ["I"] |
| "**/worker_handlers.py" = ["I"] |
| "**/feast_feature_store_it_test.py" = ["I"] |
| "**/vertex_ai_feature_store_it_test.py" = ["I"] |
| "**/vertex_ai_feature_store_test.py" = ["I"] |
| "setup.py" = ["I"] |
| "container/**" = ["I"] |
| |
| [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" |
| bad-class-definition = "ignore" |