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

# Following properties define which Python versions be used when the tests running.
# Versions must be indicated major and minor versions connected with period.
# And if you want to use multiple versions, concat them with comma and no whitespace.

# dataflow test-suites
# (TODO): https://github.com/apache/beam/issues/21971
# Add python 3.10 to dataflow test-suites
dataflow_precommit_it_task_py_versions=3.10,3.13
dataflow_mongodbio_it_task_py_versions=3.10
dataflow_chicago_taxi_example_task_py_versions=3.10

# TODO: Enable following tests after making sure we have enough capacity.
dataflow_validates_runner_batch_tests=3.10,3.13
dataflow_validates_runner_streaming_tests=3.10,3.13
dataflow_examples_postcommit_py_versions=3.13
# TFX_BSL is not yet supported on Python 3.10.
dataflow_cloudml_benchmark_tests_py_versions=3.10
# direct runner test-suites
direct_mongodbio_it_task_py_versions=3.13

# flink runner test-suites
flink_validates_runner_precommit_py_versions=3.13
flink_validates_runner_postcommit_py_versions=3.10,3.13
flink_examples_postcommit_py_versions=3.10,3.13

# samza runner test-suites
samza_validates_runner_postcommit_py_versions=3.10,3.13

# spark runner test-suites
spark_examples_postcommit_py_versions=3.10,3.13

# prism runner test-suites
prism_validates_runner_precommit_py_versions=3.13
prism_validates_runner_postcommit_py_versions=3.10,3.13
prism_examples_postcommit_py_versions=3.10,3.13

# cross language postcommit python test suites
cross_language_validates_py_versions=3.10,3.13
