#
# 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<82.0.0",
    "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"
