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

[build-system]
requires = [
    "hatchling==1.29.0",
    "packaging==26.1",
    "pathspec==1.0.4",
    "pluggy==1.6.0",
    "tomli==2.4.1; python_version < '3.11'",
    "trove-classifiers==2026.1.14.14",
]
build-backend = "hatchling.build"

[project]
name = "apache-airflow-dev"
description = "Development tools for Apache Airflow"
classifiers = [
    "Private :: Do Not Upload",
]
requires-python = ">=3.10,!=3.15"
authors = [
    { name = "Apache Software Foundation", email = "dev@airflow.apache.org" },
]
maintainers = [
    { name = "Apache Software Foundation", email="dev@airflow.apache.org" },
]
version = "0.0.1"

dependencies = [
    "beautifulsoup4>=4.12.0",
    "click>=8.3.0",
    "icalendar>=5.0.0",
    "jinja2>=3.1.5",
    "keyring==25.7.0",
    "PyGithub>=2.1.1",
    "jsonpath_ng>=1.5.3",
    "jsonschema>=4.19.1",
    'pendulum>=3.1.0',
    "pyyaml>=6.0.3",
    "packaging>=25.0",
    "requests>=2.31.0",
    "rich>=13.6.0",
    "rich-click>=1.9.7",
    "semver>=3.0.2",
    "tabulate>=0.9.0",
]

[tool.hatch.build.targets.sdist]
exclude = ["*"]

[tool.hatch.build.targets.wheel]
bypass-selection = true
