#
# 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",
    "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.3.9",
    # 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.0,<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"
