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

[project]
name = "apache-airflow-shared-plugins-manager"
description = "Shared plugins manager code for Airflow distributions"
version = "0.0"
classifiers = [
    "Private :: Do Not Upload",
]

dependencies = [
    "pendulum>=3.1.0",
    "methodtools>=0.4.7",
    'importlib_metadata>=6.5;python_version<"3.12"',
    'importlib_metadata>=7.0;python_version>="3.12"',
]

[dependency-groups]
dev = [
    "apache-airflow-devel-common",
    "apache-airflow-shared-module-loading",
    "apache-airflow-shared-listeners",
]
mypy = [
    "apache-airflow-devel-common[mypy]",
]


[build-system]
requires = [
    "hatchling==1.30.1",
    "packaging==26.2",
    "pathspec==1.1.1",
    "pluggy==1.6.0",
    "tomli==2.4.1; python_version < '3.11'",
    "trove-classifiers==2026.6.1.19",
]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["src/airflow_shared"]

[tool.ruff]
extend = "../../pyproject.toml"
src = ["src"]

[tool.ruff.lint.per-file-ignores]
# Ignore Doc rules et al for anything outside of tests
"!src/*" = ["D", "S101", "TRY002"]

[tool.ruff.lint.flake8-tidy-imports]
# Override the workspace level default
ban-relative-imports = "parents"
