This is an automated email from the ASF dual-hosted git repository.

potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new d1bf2d4058 Add wildcard possibility to `package-filter` parametere 
(#23672)
d1bf2d4058 is described below

commit d1bf2d405875537970d8025f14c962b0bf7717f1
Author: Jarek Potiuk <[email protected]>
AuthorDate: Thu May 12 19:23:38 2022 +0200

    Add wildcard possibility to `package-filter` parametere (#23672)
    
    the glob parameters (for example `apache-airflow-providers-*`) did
    not work because only fixed list of parameters was allowed.
    
    This PR converts the package-filter parameter to stop verifying the
    value passed - so autocomplete continues to work but you should
    still be able to use glob.
    
    It also removes few places where the parameters were used with
    `--` separator.
---
 .../airflow_breeze/commands/developer_commands.py  |  4 +--
 .../src/airflow_breeze/utils/custom_param_types.py | 36 +++++++++++++++++++++-
 .../build_provider_documentation.sh                |  2 +-
 .../howto/create-update-providers.rst              |  4 +--
 images/breeze/output-commands-hash.txt             |  2 +-
 5 files changed, 41 insertions(+), 7 deletions(-)

diff --git a/dev/breeze/src/airflow_breeze/commands/developer_commands.py 
b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
index 2e36a422ec..3c3259b74e 100644
--- a/dev/breeze/src/airflow_breeze/commands/developer_commands.py
+++ b/dev/breeze/src/airflow_breeze/commands/developer_commands.py
@@ -59,7 +59,7 @@ from airflow_breeze.utils.common_options import (
     option_verbose,
 )
 from airflow_breeze.utils.console import get_console
-from airflow_breeze.utils.custom_param_types import BetterChoice
+from airflow_breeze.utils.custom_param_types import BetterChoice, 
NotVerifiedBetterChoice
 from airflow_breeze.utils.docker_command_utils import (
     check_docker_compose_version,
     check_docker_is_running,
@@ -380,7 +380,7 @@ def start_airflow(
     '-p',
     '--package-filter',
     help="List of packages to consider.",
-    type=BetterChoice(get_available_packages()),
+    type=NotVerifiedBetterChoice(get_available_packages()),
     multiple=True,
 )
 def build_docs(
diff --git a/dev/breeze/src/airflow_breeze/utils/custom_param_types.py 
b/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
index 0dd2b87d67..c721fb03ea 100644
--- a/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
+++ b/dev/breeze/src/airflow_breeze/utils/custom_param_types.py
@@ -17,9 +17,10 @@
 
 from dataclasses import dataclass
 from re import match
-from typing import Any, Sequence
+from typing import Any, Optional, Sequence
 
 import click
+from click import Context, Parameter
 
 from airflow_breeze.utils.cache import (
     check_if_values_allowed,
@@ -59,6 +60,39 @@ class BetterChoice(click.Choice):
         return f"[{choices_str}]"
 
 
+class NotVerifiedBetterChoice(BetterChoice):
+    """
+    This parameter allows to pass parameters that do not pass verification by 
choice. This is
+    useful to keep autocomplete working but also to allow some extra 
parameters that are dynamic,
+    for example allowing glob in package names for docs building.
+    """
+
+    name = "NotVerifiedBetterChoice"
+
+    def convert(self, value: Any, param: Optional[Parameter], ctx: 
Optional[Context]) -> Any:
+        # Match through normalization and case sensitivity
+        # first do token_normalize_func, then lowercase
+        normed_value = value
+        normed_choices = {choice: choice for choice in self.choices}
+
+        if ctx is not None and ctx.token_normalize_func is not None:
+            normed_value = ctx.token_normalize_func(value)
+            normed_choices = {
+                ctx.token_normalize_func(normed_choice): original
+                for normed_choice, original in normed_choices.items()
+            }
+
+        if not self.case_sensitive:
+            normed_value = normed_value.casefold()
+            normed_choices = {
+                normed_choice.casefold(): original for normed_choice, original 
in normed_choices.items()
+            }
+
+        if normed_value in normed_choices:
+            return normed_choices[normed_value]
+        return normed_value
+
+
 class AnswerChoice(BetterChoice):
     """
     Stores forced answer if it has been selected
diff --git a/dev/provider_packages/build_provider_documentation.sh 
b/dev/provider_packages/build_provider_documentation.sh
index a98c40dd38..0fca5162cf 100755
--- a/dev/provider_packages/build_provider_documentation.sh
+++ b/dev/provider_packages/build_provider_documentation.sh
@@ -28,7 +28,7 @@ do
     provider_filters+=("--package-filter" 
"apache-airflow-providers-${provider//./-}")
 done
 
-./breeze build-docs -- \
+./breeze build-docs \
     --for-production \
     --package-filter apache-airflow-providers \
     "${provider_filters[@]}"
diff --git a/docs/apache-airflow-providers/howto/create-update-providers.rst 
b/docs/apache-airflow-providers/howto/create-update-providers.rst
index c81b99a73c..7dff12b452 100644
--- a/docs/apache-airflow-providers/howto/create-update-providers.rst
+++ b/docs/apache-airflow-providers/howto/create-update-providers.rst
@@ -281,8 +281,8 @@ main Airflow documentation that involves some steps with 
the providers is also w
 
   .. code-block:: bash
 
-    ./breeze build-docs -- --package-filter 
apache-airflow-providers-<NEW_PROVIDER>
-    ./breeze build-docs -- --package-filter apache-airflow
+    ./breeze build-docs --package-filter 
apache-airflow-providers-<NEW_PROVIDER>
+    ./breeze build-docs --package-filter apache-airflow
 
 Optional provider features
 --------------------------
diff --git a/images/breeze/output-commands-hash.txt 
b/images/breeze/output-commands-hash.txt
index 147e2c5121..1030cc5119 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -1 +1 @@
-3f46d0eed5eb9a89ef7cee12ba5e6a3f
+513dc61480a9f3cc7619844251d7d6c4

Reply via email to