| #!/usr/bin/env python3 | |
| # 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. | |
| from __future__ import annotations | |
| import sys | |
| from in_container_utils import AIRFLOW_DIST_PATH, click, console, run_command | |
| ALLOWED_DISTRIBUTION_FORMAT = ["wheel", "sdist", "both"] | |
| def find_airflow_python_client(extension: str): | |
| packages = [f.as_posix() for f in AIRFLOW_DIST_PATH.glob(f"apache_airflow_client-[0-9]*.{extension}")] | |
| if len(packages) > 1: | |
| console.print(f"\n[red]Found multiple airflow client packages: {packages}\n") | |
| sys.exit(1) | |
| elif len(packages) == 0: | |
| console.print("\n[red]No airflow client package found\n") | |
| sys.exit(1) | |
| if packages: | |
| console.print(f"\n[bright_blue]Found airflow client package: {packages[0]}\n") | |
| else: | |
| console.print("\n[yellow]No airflow client package found.\n") | |
| return packages[0] | |
| @click.command() | |
| @click.option( | |
| "--distribution-format", | |
| default=ALLOWED_DISTRIBUTION_FORMAT[0], | |
| envvar="DISTRIBUTION_FORMAT", | |
| show_default=True, | |
| type=click.Choice(ALLOWED_DISTRIBUTION_FORMAT), | |
| help="Package format to use", | |
| ) | |
| @click.option( | |
| "--use-distributions-from-dist", | |
| is_flag=True, | |
| default=True, | |
| show_default=True, | |
| envvar="USE_DISTRIBUTIONS_FROM_DIST", | |
| help="Should install distributions from dist folder if set.", | |
| ) | |
| @click.option( | |
| "--github-actions", | |
| is_flag=True, | |
| default=False, | |
| show_default=True, | |
| envvar="GITHUB_ACTIONS", | |
| help="Running in GitHub Actions", | |
| ) | |
| def install_airflow_python_client( | |
| distribution_format: str, use_distributions_from_dist: bool, github_actions: bool | |
| ): | |
| if use_distributions_from_dist and distribution_format not in ["wheel", "sdist"]: | |
| console.print( | |
| f"[red]DISTRIBUTION_FORMAT must be one of 'wheel' or 'sdist' and not {distribution_format}" | |
| ) | |
| sys.exit(1) | |
| extension = "whl" if distribution_format == "wheel" else "tar.gz" | |
| install_airflow_python_client_cmd = [ | |
| "uv", | |
| "pip", | |
| "install", | |
| find_airflow_python_client(extension), | |
| ] | |
| console.print("\n[bright_blue]Installing airflow python client\n") | |
| run_command(install_airflow_python_client_cmd, github_actions=github_actions, check=True) | |
| if __name__ == "__main__": | |
| install_airflow_python_client() |