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

bolke 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 ee38382efa Use linear time regular expressions (#32303)
ee38382efa is described below

commit ee38382efa54565c4b389eaeb536f0d45e12d498
Author: Pierre Jeambrun <[email protected]>
AuthorDate: Thu Jul 6 19:58:54 2023 +0200

    Use linear time regular expressions (#32303)
    
    The standard regexp library can consume > O(n) in certain circumstances.
    The re2 library does not have this issue.
---
 .pre-commit-config.yaml                            |   8 ++
 STATIC_CODE_CHECKS.rst                             |   2 +
 .../api_connexion/endpoints/provider_endpoint.py   |   4 +-
 airflow/cli/commands/provider_command.py           |   4 +-
 airflow/cli/commands/user_command.py               |   4 +-
 airflow/config_templates/default_celery.py         |   7 +-
 airflow/configuration.py                           |  23 ++--
 airflow/decorators/base.py                         |   8 +-
 airflow/kubernetes/pod_generator.py                |   4 +-
 airflow/kubernetes/pod_generator_deprecated.py     |   5 +-
 airflow/metrics/validators.py                      |   7 +-
 airflow/models/dag.py                              |   8 +-
 airflow/models/dagrun.py                           |   4 +-
 airflow/security/utils.py                          |   5 +-
 airflow/serialization/serde.py                     |   8 +-
 airflow/utils/cli.py                               |   4 +-
 airflow/utils/db_cleanup.py                        |   5 +-
 airflow/utils/email.py                             |   5 +-
 airflow/utils/file.py                              |  19 ++-
 airflow/utils/log/colored_log.py                   |   4 +-
 airflow/utils/log/logging_mixin.py                 |   5 +-
 airflow/utils/log/secrets_masker.py                |  10 +-
 airflow/utils/task_group.py                        |   9 +-
 airflow/www/fab_security/manager.py                |   8 +-
 airflow/www/views.py                               |  12 +-
 dev/breeze/src/airflow_breeze/pre_commit_ids.py    |   1 +
 images/breeze/output-commands-hash.txt             |   2 +-
 images/breeze/output_static-checks.svg             | 130 ++++++++++-----------
 kubernetes_tests/test_base.py                      |   6 +-
 tests/utils/log/test_secrets_masker.py             |   2 +-
 30 files changed, 170 insertions(+), 153 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 55129ceaa1..efcf6c6e3e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -929,6 +929,14 @@ repos:
         language: python
         pass_filenames: true
         files: ^tests/.*\.py$
+      - id: check-usage-of-re2-over-re
+        language: pygrep
+        name: Use re2 over re
+        description: Use re2 module instead of re
+        entry: "^\\s*from re\\s|^\\s*import re\\s"
+        pass_filenames: true
+        files: \.py$
+        exclude: 
^airflow/providers|^dev/.*\.py$|^scripts/.*\.py$|^tests/|^docker_tests/|^docs/.*\.py$|^airflow/utils/helpers.py$
         ## ADD MOST PRE-COMMITS ABOVE THAT LINE
         # The below pre-commits are those requiring CI image to be built
       - id: mypy-dev
diff --git a/STATIC_CODE_CHECKS.rst b/STATIC_CODE_CHECKS.rst
index 657976939f..381dc53c93 100644
--- a/STATIC_CODE_CHECKS.rst
+++ b/STATIC_CODE_CHECKS.rst
@@ -235,6 +235,8 @@ require Breeze Docker image to be built locally.
 
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
 | check-urlparse-usage-in-code                              | Don't use 
urlparse in code                                   |         |
 
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
+| check-usage-of-re2-over-re                                | Use re2 over re  
                                            |         |
++-----------------------------------------------------------+--------------------------------------------------------------+---------+
 | check-xml                                                 | Check XML files 
with xmllint                                 |         |
 
+-----------------------------------------------------------+--------------------------------------------------------------+---------+
 | codespell                                                 | Run codespell to 
check for common misspellings in files      |         |
diff --git a/airflow/api_connexion/endpoints/provider_endpoint.py 
b/airflow/api_connexion/endpoints/provider_endpoint.py
index c829d9c968..0a8594c28a 100644
--- a/airflow/api_connexion/endpoints/provider_endpoint.py
+++ b/airflow/api_connexion/endpoints/provider_endpoint.py
@@ -16,7 +16,7 @@
 # under the License.
 from __future__ import annotations
 
-import re
+import re2
 
 from airflow.api_connexion import security
 from airflow.api_connexion.schemas.provider_schema import (
@@ -30,7 +30,7 @@ from airflow.security import permissions
 
 
 def _remove_rst_syntax(value: str) -> str:
-    return re.sub("[`_<>]", "", value.strip(" \n."))
+    return re2.sub("[`_<>]", "", value.strip(" \n."))
 
 
 def _provider_mapper(provider: ProviderInfo) -> Provider:
diff --git a/airflow/cli/commands/provider_command.py 
b/airflow/cli/commands/provider_command.py
index 75c354d686..876905c1c2 100644
--- a/airflow/cli/commands/provider_command.py
+++ b/airflow/cli/commands/provider_command.py
@@ -17,7 +17,7 @@
 """Providers sub-commands."""
 from __future__ import annotations
 
-import re
+import re2
 
 from airflow.cli.simple_table import AirflowConsole
 from airflow.providers_manager import ProvidersManager
@@ -27,7 +27,7 @@ ERROR_IMPORTING_HOOK = "Error when importing hook!"
 
 
 def _remove_rst_syntax(value: str) -> str:
-    return re.sub("[`_<>]", "", value.strip(" \n."))
+    return re2.sub("[`_<>]", "", value.strip(" \n."))
 
 
 @suppress_logs_and_warning
diff --git a/airflow/cli/commands/user_command.py 
b/airflow/cli/commands/user_command.py
index 7cf9c2b57f..a5a5be9787 100644
--- a/airflow/cli/commands/user_command.py
+++ b/airflow/cli/commands/user_command.py
@@ -22,10 +22,10 @@ import getpass
 import json
 import os
 import random
-import re
 import string
 from typing import Any
 
+import re2
 from marshmallow import Schema, fields, validate
 from marshmallow.exceptions import ValidationError
 
@@ -164,7 +164,7 @@ def users_export(args):
         # In the User model the first and last name fields have underscores,
         # but the corresponding parameters in the CLI don't
         def remove_underscores(s):
-            return re.sub("_", "", s)
+            return re2.sub("_", "", s)
 
         users = [
             {
diff --git a/airflow/config_templates/default_celery.py 
b/airflow/config_templates/default_celery.py
index b0390a82cf..933d2bbdba 100644
--- a/airflow/config_templates/default_celery.py
+++ b/airflow/config_templates/default_celery.py
@@ -19,9 +19,10 @@
 from __future__ import annotations
 
 import logging
-import re
 import ssl
 
+import re2
+
 from airflow.configuration import conf
 from airflow.exceptions import AirflowConfigException, AirflowException
 
@@ -88,7 +89,7 @@ try:
                 "ca_certs": conf.get("celery", "SSL_CACERT"),
                 "cert_reqs": ssl.CERT_REQUIRED,
             }
-        elif broker_url and re.search("rediss?://|sentinel://", broker_url):
+        elif broker_url and re2.search("rediss?://|sentinel://", broker_url):
             broker_use_ssl = {
                 "ssl_keyfile": conf.get("celery", "SSL_KEY"),
                 "ssl_certfile": conf.get("celery", "SSL_CERT"),
@@ -114,7 +115,7 @@ except Exception as e:
         f"all necessary certs and key ({e})."
     )
 
-if re.search("rediss?://|amqp://|rpc://", result_backend):
+if re2.search("rediss?://|amqp://|rpc://", result_backend):
     log.warning(
         "You have configured a result_backend of %s, it is highly recommended "
         "to use an alternative result_backend (i.e. a database).",
diff --git a/airflow/configuration.py b/airflow/configuration.py
index 6a55a6c99c..8cb5971cd5 100644
--- a/airflow/configuration.py
+++ b/airflow/configuration.py
@@ -23,7 +23,6 @@ import logging
 import multiprocessing
 import os
 import pathlib
-import re
 import shlex
 import stat
 import subprocess
@@ -36,10 +35,10 @@ from collections import OrderedDict
 from configparser import _UNSET, ConfigParser, NoOptionError, NoSectionError  
# type: ignore
 from contextlib import contextmanager, suppress
 from json.decoder import JSONDecodeError
-from re import Pattern
-from typing import IO, Any, Dict, Iterable, Set, Tuple, Union
+from typing import IO, Any, Dict, Iterable, Pattern, Set, Tuple, Union
 from urllib.parse import urlsplit
 
+import re2
 from typing_extensions import overload
 
 from airflow.auth.managers.base_auth_manager import BaseAuthManager
@@ -56,7 +55,7 @@ if not sys.warnoptions:
     warnings.filterwarnings(action="default", category=DeprecationWarning, 
module="airflow")
     warnings.filterwarnings(action="default", 
category=PendingDeprecationWarning, module="airflow")
 
-_SQLITE3_VERSION_PATTERN = re.compile(r"(?P<version>^\d+(?:\.\d+)*)\D?.*$")
+_SQLITE3_VERSION_PATTERN = re2.compile(r"(?P<version>^\d+(?:\.\d+)*)\D?.*$")
 
 ConfigType = Union[str, int, float, bool]
 ConfigOptionsDictType = Dict[str, ConfigType]
@@ -270,36 +269,36 @@ class AirflowConfigParser(ConfigParser):
     # about. Mapping of section -> setting -> { old, replace, by_version }
     deprecated_values: dict[str, dict[str, tuple[Pattern, str, str]]] = {
         "core": {
-            "hostname_callable": (re.compile(r":"), r".", "2.1"),
+            "hostname_callable": (re2.compile(r":"), r".", "2.1"),
         },
         "webserver": {
-            "navbar_color": (re.compile(r"\A#007A87\Z", re.IGNORECASE), 
"#fff", "2.1"),
-            "dag_default_view": (re.compile(r"^tree$"), "grid", "3.0"),
+            "navbar_color": (re2.compile(r"(?i)\A#007A87\z"), "#fff", "2.1"),
+            "dag_default_view": (re2.compile(r"^tree$"), "grid", "3.0"),
         },
         "email": {
             "email_backend": (
-                re.compile(r"^airflow\.contrib\.utils\.sendgrid\.send_email$"),
+                
re2.compile(r"^airflow\.contrib\.utils\.sendgrid\.send_email$"),
                 r"airflow.providers.sendgrid.utils.emailer.send_email",
                 "2.1",
             ),
         },
         "logging": {
             "log_filename_template": (
-                re.compile(re.escape("{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts 
}}/{{ try_number }}.log")),
+                re2.compile(re2.escape("{{ ti.dag_id }}/{{ ti.task_id }}/{{ ts 
}}/{{ try_number }}.log")),
                 "XX-set-after-default-config-loaded-XX",
                 "3.0",
             ),
         },
         "api": {
             "auth_backends": (
-                re.compile(r"^airflow\.api\.auth\.backend\.deny_all$|^$"),
+                re2.compile(r"^airflow\.api\.auth\.backend\.deny_all$|^$"),
                 "airflow.api.auth.backend.session",
                 "3.0",
             ),
         },
         "elasticsearch": {
             "log_id_template": (
-                re.compile("^" + 
re.escape("{dag_id}-{task_id}-{execution_date}-{try_number}") + "$"),
+                re2.compile("^" + 
re2.escape("{dag_id}-{task_id}-{execution_date}-{try_number}") + "$"),
                 "{dag_id}-{task_id}-{run_id}-{map_index}-{try_number}",
                 "3.0",
             )
@@ -426,7 +425,7 @@ class AirflowConfigParser(ConfigParser):
                 FutureWarning,
             )
             self.upgraded_values[(section, key)] = old_value
-            new_value = re.sub("^" + re.escape(f"{parsed.scheme}://"), 
f"{good_scheme}://", old_value)
+            new_value = re2.sub("^" + re2.escape(f"{parsed.scheme}://"), 
f"{good_scheme}://", old_value)
             self._update_env_var(section=section, name=key, 
new_value=new_value)
 
             # if the old value is set via env var, we need to wipe it
diff --git a/airflow/decorators/base.py b/airflow/decorators/base.py
index df890c036d..7e3c8ba2c9 100644
--- a/airflow/decorators/base.py
+++ b/airflow/decorators/base.py
@@ -17,7 +17,6 @@
 from __future__ import annotations
 
 import inspect
-import re
 import warnings
 from functools import cached_property
 from itertools import chain
@@ -38,6 +37,7 @@ from typing import (
 )
 
 import attr
+import re2
 import typing_extensions
 from sqlalchemy.orm import Session
 
@@ -144,15 +144,15 @@ def get_unique_task_id(
         return task_id
 
     def _find_id_suffixes(dag: DAG) -> Iterator[int]:
-        prefix = re.split(r"__\d+$", tg_task_id)[0]
+        prefix = re2.split(r"__\d+$", tg_task_id)[0]
         for task_id in dag.task_ids:
-            match = re.match(rf"^{prefix}__(\d+)$", task_id)
+            match = re2.match(rf"^{prefix}__(\d+)$", task_id)
             if match is None:
                 continue
             yield int(match.group(1))
         yield 0  # Default if there's no matching task ID.
 
-    core = re.split(r"__\d+$", task_id)[0]
+    core = re2.split(r"__\d+$", task_id)[0]
     return f"{core}__{max(_find_id_suffixes(dag)) + 1}"
 
 
diff --git a/airflow/kubernetes/pod_generator.py 
b/airflow/kubernetes/pod_generator.py
index 91e079683a..844a1abfd8 100644
--- a/airflow/kubernetes/pod_generator.py
+++ b/airflow/kubernetes/pod_generator.py
@@ -28,10 +28,10 @@ import copy
 import datetime
 import logging
 import os
-import re
 import warnings
 from functools import reduce
 
+import re2
 from dateutil import parser
 from kubernetes.client import models as k8s
 from kubernetes.client.api_client import ApiClient
@@ -65,7 +65,7 @@ def make_safe_label_value(string: str) -> str:
     way from the original value sent to this function, then we need to 
truncate to
     53 chars, and append it with a unique hash.
     """
-    safe_label = re.sub(r"^[^a-z0-9A-Z]*|[^a-zA-Z0-9_\-\.]|[^a-z0-9A-Z]*$", 
"", string)
+    safe_label = re2.sub(r"^[^a-z0-9A-Z]*|[^a-zA-Z0-9_\-\.]|[^a-z0-9A-Z]*$", 
"", string)
 
     if len(safe_label) > MAX_LABEL_LEN or string != safe_label:
         safe_hash = md5(string.encode()).hexdigest()[:9]
diff --git a/airflow/kubernetes/pod_generator_deprecated.py 
b/airflow/kubernetes/pod_generator_deprecated.py
index 652c993d1c..8876556a8d 100644
--- a/airflow/kubernetes/pod_generator_deprecated.py
+++ b/airflow/kubernetes/pod_generator_deprecated.py
@@ -25,9 +25,9 @@ is supported and no serialization need be written.
 from __future__ import annotations
 
 import copy
-import re
 import uuid
 
+import re2
 from kubernetes.client import models as k8s
 
 from airflow.utils.hashlib_wrapper import md5
@@ -70,7 +70,7 @@ def make_safe_label_value(string):
     way from the original value sent to this function, then we need to 
truncate to
     53 chars, and append it with a unique hash.
     """
-    safe_label = re.sub(r"^[^a-z0-9A-Z]*|[^a-zA-Z0-9_\-\.]|[^a-z0-9A-Z]*$", 
"", string)
+    safe_label = re2.sub(r"^[^a-z0-9A-Z]*|[^a-zA-Z0-9_\-\.]|[^a-z0-9A-Z]*$", 
"", string)
 
     if len(safe_label) > MAX_LABEL_LEN or string != safe_label:
         safe_hash = md5(string.encode()).hexdigest()[:9]
@@ -151,7 +151,6 @@ class PodGenerator:
         extract_xcom: bool = False,
         priority_class_name: str | None = None,
     ):
-
         self.pod = k8s.V1Pod()
         self.pod.api_version = "v1"
         self.pod.kind = "Pod"
diff --git a/airflow/metrics/validators.py b/airflow/metrics/validators.py
index 0965b534ff..0fd5fd1ade 100644
--- a/airflow/metrics/validators.py
+++ b/airflow/metrics/validators.py
@@ -21,12 +21,13 @@ from __future__ import annotations
 
 import abc
 import logging
-import re
 import string
 import warnings
 from functools import partial, wraps
 from typing import Callable, Iterable, Pattern, cast
 
+import re2
+
 from airflow.configuration import conf
 from airflow.exceptions import InvalidStatsNameException
 
@@ -78,7 +79,7 @@ BACK_COMPAT_METRIC_NAME_PATTERNS: set[str] = {
     r"^dagrun\.schedule_delay\.(?P<dag_id>.*)$",
     r"^dagrun\.(?P<dag_id>.*)\.first_task_scheduling_delay$",
 }
-BACK_COMPAT_METRIC_NAMES: set[Pattern[str]] = {re.compile(name) for name in 
BACK_COMPAT_METRIC_NAME_PATTERNS}
+BACK_COMPAT_METRIC_NAMES: set[Pattern[str]] = {re2.compile(name) for name in 
BACK_COMPAT_METRIC_NAME_PATTERNS}
 
 OTEL_NAME_MAX_LENGTH = 63
 
@@ -132,7 +133,7 @@ def stat_name_otel_handler(
         # If the name is in the exceptions list, do not fail it for being too 
long.
         # It may still be deemed invalid for other reasons below.
         for exemption in BACK_COMPAT_METRIC_NAMES:
-            if re.match(exemption, stat_name):
+            if re2.match(exemption, stat_name):
                 # There is a back-compat exception for this name; proceed
                 name_length_exemption = True
                 matched_exemption = exemption.pattern
diff --git a/airflow/models/dag.py b/airflow/models/dag.py
index 11468b59ea..1ec78b64c3 100644
--- a/airflow/models/dag.py
+++ b/airflow/models/dag.py
@@ -52,7 +52,7 @@ from urllib.parse import urlsplit
 
 import jinja2
 import pendulum
-import re2 as re
+import re2
 from dateutil.relativedelta import relativedelta
 from pendulum.tz.timezone import Timezone
 from sqlalchemy import (
@@ -2361,7 +2361,7 @@ class DAG(LoggingMixin):
         dag = copy.deepcopy(self, memo)  # type: ignore
 
         if isinstance(task_ids_or_regex, (str, Pattern)):
-            matched_tasks = [t for t in self.tasks if 
re.findall(task_ids_or_regex, t.task_id)]
+            matched_tasks = [t for t in self.tasks if 
re2.findall(task_ids_or_regex, t.task_id)]
         else:
             matched_tasks = [t for t in self.tasks if t.task_id in 
task_ids_or_regex]
 
@@ -2828,8 +2828,8 @@ class DAG(LoggingMixin):
 
         regex = airflow_conf.get("scheduler", "allowed_run_id_pattern")
 
-        if run_id and not re.match(RUN_ID_REGEX, run_id):
-            if not regex.strip() or not re.match(regex.strip(), run_id):
+        if run_id and not re2.match(RUN_ID_REGEX, run_id):
+            if not regex.strip() or not re2.match(regex.strip(), run_id):
                 raise AirflowException(
                     f"The provided run ID '{run_id}' is invalid. It does not 
match either "
                     f"the configured pattern: '{regex}' or the built-in 
pattern: '{RUN_ID_REGEX}'"
diff --git a/airflow/models/dagrun.py b/airflow/models/dagrun.py
index b0b56f3c6c..f0b29881a8 100644
--- a/airflow/models/dagrun.py
+++ b/airflow/models/dagrun.py
@@ -24,7 +24,7 @@ from collections import defaultdict
 from datetime import datetime
 from typing import TYPE_CHECKING, Any, Callable, Iterable, Iterator, 
NamedTuple, Sequence, TypeVar, overload
 
-import re2 as re
+import re2
 from sqlalchemy import (
     Boolean,
     Column,
@@ -248,7 +248,7 @@ class DagRun(Base, LoggingMixin):
         if not run_id:
             return None
         regex = airflow_conf.get("scheduler", "allowed_run_id_pattern")
-        if not re.match(regex, run_id) and not re.match(RUN_ID_REGEX, run_id):
+        if not re2.match(regex, run_id) and not re2.match(RUN_ID_REGEX, 
run_id):
             raise ValueError(
                 f"The run_id provided '{run_id}' does not match the pattern 
'{regex}' or '{RUN_ID_REGEX}'"
             )
diff --git a/airflow/security/utils.py b/airflow/security/utils.py
index 1ffe0e0d29..139e96a13c 100644
--- a/airflow/security/utils.py
+++ b/airflow/security/utils.py
@@ -34,9 +34,10 @@ from __future__ import annotations
 # limitations under the License.
 #
 """Various security-related utils."""
-import re
 import socket
 
+import re2
+
 from airflow.utils.net import get_hostname
 
 
@@ -49,7 +50,7 @@ def get_components(principal) -> list[str] | None:
     """
     if not principal:
         return None
-    return re.split(r"[/@]", str(principal))
+    return re2.split(r"[/@]", str(principal))
 
 
 def replace_hostname_pattern(components, host=None):
diff --git a/airflow/serialization/serde.py b/airflow/serialization/serde.py
index d996cb9b16..8d0ed100ac 100644
--- a/airflow/serialization/serde.py
+++ b/airflow/serialization/serde.py
@@ -21,13 +21,13 @@ import dataclasses
 import enum
 import functools
 import logging
-import re
 import sys
 from importlib import import_module
 from types import ModuleType
-from typing import Any, TypeVar, Union, cast
+from typing import Any, Pattern, TypeVar, Union, cast
 
 import attr
+import re2
 
 import airflow.serialization.serializers
 from airflow.configuration import conf
@@ -357,9 +357,9 @@ def _register():
 
 
 @functools.lru_cache(maxsize=None)
-def _get_patterns() -> list[re.Pattern]:
+def _get_patterns() -> list[Pattern]:
     patterns = conf.get("core", "allowed_deserialization_classes").split()
-    return [re.compile(re.sub(r"(\w)\.", r"\1\..", p)) for p in patterns]
+    return [re2.compile(re2.sub(r"(\w)\.", r"\1\..", p)) for p in patterns]
 
 
 _register()
diff --git a/airflow/utils/cli.py b/airflow/utils/cli.py
index 56ac166b54..c800ed71fc 100644
--- a/airflow/utils/cli.py
+++ b/airflow/utils/cli.py
@@ -21,7 +21,6 @@ from __future__ import annotations
 import functools
 import logging
 import os
-import re
 import socket
 import sys
 import threading
@@ -32,6 +31,7 @@ from datetime import datetime
 from pathlib import Path
 from typing import TYPE_CHECKING, Callable, TypeVar, cast
 
+import re2
 from sqlalchemy.orm import Session
 
 from airflow import settings
@@ -252,7 +252,7 @@ def get_dags(subdir: str | None, dag_id: str, use_regex: 
bool = False):
     if not use_regex:
         return [get_dag(subdir, dag_id)]
     dagbag = DagBag(process_subdir(subdir))
-    matched_dags = [dag for dag in dagbag.dags.values() if re.search(dag_id, 
dag.dag_id)]
+    matched_dags = [dag for dag in dagbag.dags.values() if re2.search(dag_id, 
dag.dag_id)]
     if not matched_dags:
         raise AirflowException(
             f"dag_id could not be found with regex: {dag_id}. Either the dag 
did not exist or "
diff --git a/airflow/utils/db_cleanup.py b/airflow/utils/db_cleanup.py
index 4e91352572..22fb0020e7 100644
--- a/airflow/utils/db_cleanup.py
+++ b/airflow/utils/db_cleanup.py
@@ -141,13 +141,14 @@ def _dump_table_to_file(*, target_table, file_path, 
export_format, session):
 
 
 def _do_delete(*, query, orm_model, skip_archive, session):
-    import re
     from datetime import datetime
 
+    import re2
+
     print("Performing Delete...")
     # using bulk delete
     # create a new table and copy the rows there
-    timestamp_str = re.sub(r"[^\d]", "", datetime.utcnow().isoformat())[:14]
+    timestamp_str = re2.sub(r"[^\d]", "", datetime.utcnow().isoformat())[:14]
     target_table_name = 
f"{ARCHIVE_TABLE_PREFIX}{orm_model.name}__{timestamp_str}"
     print(f"Moving data to table {target_table_name}")
     bind = session.get_bind()
diff --git a/airflow/utils/email.py b/airflow/utils/email.py
index ee570399e7..e807b8f75d 100644
--- a/airflow/utils/email.py
+++ b/airflow/utils/email.py
@@ -20,7 +20,6 @@ from __future__ import annotations
 import collections.abc
 import logging
 import os
-import re
 import smtplib
 import warnings
 from email.mime.application import MIMEApplication
@@ -29,6 +28,8 @@ from email.mime.text import MIMEText
 from email.utils import formatdate
 from typing import Any, Iterable
 
+import re2
+
 from airflow.configuration import conf
 from airflow.exceptions import AirflowConfigException, AirflowException, 
RemovedInAirflow3Warning
 
@@ -328,4 +329,4 @@ def _get_email_list_from_str(addresses: str) -> list[str]:
     :return: A list of email addresses.
     """
     pattern = r"\s*[,;]\s*"
-    return [address for address in re.split(pattern, addresses)]
+    return [address for address in re2.split(pattern, addresses)]
diff --git a/airflow/utils/file.py b/airflow/utils/file.py
index 4a54adbe48..08b4048ad5 100644
--- a/airflow/utils/file.py
+++ b/airflow/utils/file.py
@@ -21,12 +21,12 @@ import ast
 import io
 import logging
 import os
-import re
 import zipfile
 from collections import OrderedDict
 from pathlib import Path
-from typing import Generator, NamedTuple, Protocol, overload
+from typing import Generator, NamedTuple, Pattern, Protocol, overload
 
+import re2
 from pathspec.patterns import GitWildMatchPattern
 
 from airflow.configuration import conf
@@ -53,15 +53,15 @@ class _IgnoreRule(Protocol):
 class _RegexpIgnoreRule(NamedTuple):
     """Typed namedtuple with utility functions for regexp ignore rules."""
 
-    pattern: re.Pattern
+    pattern: Pattern
     base_dir: Path
 
     @staticmethod
     def compile(pattern: str, base_dir: Path, definition_file: Path) -> 
_IgnoreRule | None:
         """Build an ignore rule from the supplied regexp pattern and log a 
useful warning if it is invalid."""
         try:
-            return _RegexpIgnoreRule(re.compile(pattern), base_dir)
-        except re.error as e:
+            return _RegexpIgnoreRule(re2.compile(pattern), base_dir)
+        except re2.error as e:
             log.warning("Ignoring invalid regex '%s' from %s: %s", pattern, 
definition_file, e)
             return None
 
@@ -79,7 +79,7 @@ class _RegexpIgnoreRule(NamedTuple):
 class _GlobIgnoreRule(NamedTuple):
     """Typed namedtuple with utility functions for glob ignore rules."""
 
-    pattern: re.Pattern
+    pattern: Pattern
     raw_pattern: str
     include: bool | None = None
     relative_to: Path | None = None
@@ -150,7 +150,7 @@ def mkdirs(path, mode):
     Path(path).mkdir(mode=mode, parents=True, exist_ok=True)
 
 
-ZIP_REGEX = re.compile(rf"((.*\.zip){re.escape(os.sep)})?(.*)")
+ZIP_REGEX = re2.compile(rf"((.*\.zip){re2.escape(os.sep)})?(.*)")
 
 
 @overload
@@ -191,7 +191,6 @@ def open_maybe_zipped(fileloc, mode="r"):
     if archive and zipfile.is_zipfile(archive):
         return io.TextIOWrapper(zipfile.ZipFile(archive, 
mode=mode).open(filename))
     else:
-
         return open(fileloc, mode=mode)
 
 
@@ -217,7 +216,7 @@ def _find_path_from_directory(
         ignore_file_path = Path(root) / ignore_file_name
         if ignore_file_path.is_file():
             with open(ignore_file_path) as ifile:
-                lines_no_comments = [re.sub(r"\s*#.*", "", line) for line in 
ifile.read().split("\n")]
+                lines_no_comments = [re2.sub(r"\s*#.*", "", line) for line in 
ifile.read().split("\n")]
                 # append new patterns and filter out "None" objects, which are 
invalid patterns
                 patterns += [
                     p
@@ -327,7 +326,7 @@ def find_dag_file_paths(directory: str | os.PathLike[str], 
safe_mode: bool) -> l
     return file_paths
 
 
-COMMENT_PATTERN = re.compile(r"\s*#.*")
+COMMENT_PATTERN = re2.compile(r"\s*#.*")
 
 
 def might_contain_dag(file_path: str, safe_mode: bool, zip_file: 
zipfile.ZipFile | None = None) -> bool:
diff --git a/airflow/utils/log/colored_log.py b/airflow/utils/log/colored_log.py
index 6df2c98fcd..aea7c255e6 100644
--- a/airflow/utils/log/colored_log.py
+++ b/airflow/utils/log/colored_log.py
@@ -18,11 +18,11 @@
 """Class responsible for colouring logs based on log level."""
 from __future__ import annotations
 
-import re
 import sys
 from logging import LogRecord
 from typing import Any
 
+import re2
 from colorlog import TTYColoredFormatter
 from colorlog.escape_codes import esc, escape_codes
 
@@ -61,7 +61,7 @@ class CustomTTYColoredFormatter(TTYColoredFormatter, 
TimezoneAware):
 
     @staticmethod
     def _count_number_of_arguments_in_message(record: LogRecord) -> int:
-        matches = re.findall(r"%.", record.msg)
+        matches = re2.findall(r"%.", record.msg)
         return len(matches) if matches else 0
 
     def _color_record_args(self, record: LogRecord) -> LogRecord:
diff --git a/airflow/utils/log/logging_mixin.py 
b/airflow/utils/log/logging_mixin.py
index 02f89f2812..646c73f1b4 100644
--- a/airflow/utils/log/logging_mixin.py
+++ b/airflow/utils/log/logging_mixin.py
@@ -20,14 +20,15 @@ from __future__ import annotations
 import abc
 import enum
 import logging
-import re
 import sys
 from io import IOBase
 from logging import Handler, Logger, StreamHandler
 from typing import IO, Any, TypeVar, cast
 
+import re2
+
 # 7-bit C1 ANSI escape sequences
-ANSI_ESCAPE = re.compile(r"\x1B[@-_][0-?]*[ -/]*[@-~]")
+ANSI_ESCAPE = re2.compile(r"\x1B[@-_][0-?]*[ -/]*[@-~]")
 
 
 # Private: A sentinel objects
diff --git a/airflow/utils/log/secrets_masker.py 
b/airflow/utils/log/secrets_masker.py
index 54547c1e6e..2c5e4c47e0 100644
--- a/airflow/utils/log/secrets_masker.py
+++ b/airflow/utils/log/secrets_masker.py
@@ -19,7 +19,6 @@ from __future__ import annotations
 
 import collections.abc
 import logging
-import re
 import sys
 from functools import cached_property
 from typing import (
@@ -31,12 +30,15 @@ from typing import (
     Iterable,
     Iterator,
     List,
+    Pattern,
     TextIO,
     Tuple,
     TypeVar,
     Union,
 )
 
+import re2
+
 from airflow import settings
 from airflow.compat.functools import cache
 from airflow.typing_compat import TypeGuard
@@ -144,7 +146,7 @@ def _is_v1_env_var(v: Any) -> TypeGuard[V1EnvVar]:
 class SecretsMasker(logging.Filter):
     """Redact secrets from logs."""
 
-    replacer: re.Pattern | None = None
+    replacer: Pattern | None = None
     patterns: set[str]
 
     ALREADY_FILTERED_FLAG = "__SecretsMasker_filtered"
@@ -332,13 +334,13 @@ class SecretsMasker(logging.Filter):
             new_mask = False
             for s in self._adaptations(secret):
                 if s:
-                    pattern = re.escape(s)
+                    pattern = re2.escape(s)
                     if pattern not in self.patterns and (not name or 
should_hide_value_for_key(name)):
                         self.patterns.add(pattern)
                         new_mask = True
 
             if new_mask:
-                self.replacer = re.compile("|".join(self.patterns))
+                self.replacer = re2.compile("|".join(self.patterns))
 
         elif isinstance(secret, collections.abc.Iterable):
             for v in secret:
diff --git a/airflow/utils/task_group.py b/airflow/utils/task_group.py
index 58af85bb75..d59ecaf40b 100644
--- a/airflow/utils/task_group.py
+++ b/airflow/utils/task_group.py
@@ -24,10 +24,11 @@ from __future__ import annotations
 import copy
 import functools
 import operator
-import re
 import weakref
 from typing import TYPE_CHECKING, Any, Generator, Iterator, Sequence
 
+import re2
+
 from airflow.compat.functools import cache
 from airflow.exceptions import (
     AirflowDagCycleException,
@@ -166,11 +167,11 @@ class TaskGroup(DAGNode):
         if self._group_id in self.used_group_ids:
             if not add_suffix_on_collision:
                 raise DuplicateTaskIdFound(f"group_id '{self._group_id}' has 
already been added to the DAG")
-            base = re.split(r"__\d+$", self._group_id)[0]
+            base = re2.split(r"__\d+$", self._group_id)[0]
             suffixes = sorted(
-                int(re.split(r"^.+__", used_group_id)[1])
+                int(re2.split(r"^.+__", used_group_id)[1])
                 for used_group_id in self.used_group_ids
-                if used_group_id is not None and re.match(rf"^{base}__\d+$", 
used_group_id)
+                if used_group_id is not None and re2.match(rf"^{base}__\d+$", 
used_group_id)
             )
             if not suffixes:
                 self._group_id += "__1"
diff --git a/airflow/www/fab_security/manager.py 
b/airflow/www/fab_security/manager.py
index 7145128e21..be0c4c63e3 100644
--- a/airflow/www/fab_security/manager.py
+++ b/airflow/www/fab_security/manager.py
@@ -22,11 +22,11 @@ import base64
 import datetime
 import json
 import logging
-import re
 from functools import cached_property
 from typing import Any
 from uuid import uuid4
 
+import re2
 from flask import Flask, current_app, g, session, url_for
 from flask_appbuilder import AppBuilder
 from flask_appbuilder.const import (
@@ -703,7 +703,7 @@ class BaseSecurityManager:
 
     def _azure_parse_jwt(self, id_token):
         jwt_token_parts = r"^([^\.\s]*)\.([^\.\s]+)\.([^\.\s]*)$"
-        matches = re.search(jwt_token_parts, id_token)
+        matches = re2.search(jwt_token_parts, id_token)
         if not matches or len(matches.groups()) < 3:
             log.error("Unable to parse token.")
             return {}
@@ -1375,8 +1375,8 @@ class BaseSecurityManager:
     def _has_access_builtin_roles(self, role, action_name: str, resource_name: 
str) -> bool:
         """Checks permission on builtin role."""
         perms = self.builtin_roles.get(role.name, [])
-        for (_resource_name, _action_name) in perms:
-            if re.match(_resource_name, resource_name) and 
re.match(_action_name, action_name):
+        for _resource_name, _action_name in perms:
+            if re2.match(_resource_name, resource_name) and 
re2.match(_action_name, action_name):
                 return True
         return False
 
diff --git a/airflow/www/views.py b/airflow/www/views.py
index 3b9c35e1ac..370e15ee00 100644
--- a/airflow/www/views.py
+++ b/airflow/www/views.py
@@ -24,7 +24,6 @@ import itertools
 import json
 import logging
 import math
-import re
 import sys
 import traceback
 import warnings
@@ -39,6 +38,7 @@ import configupdater
 import flask.json
 import lazy_object_proxy
 import nvd3
+import re2
 import sqlalchemy as sqla
 from croniter import croniter
 from flask import (
@@ -2105,8 +2105,8 @@ class Airflow(AirflowBaseView):
             return redirect(origin)
 
         regex = conf.get("scheduler", "allowed_run_id_pattern")
-        if run_id and not re.match(RUN_ID_REGEX, run_id):
-            if not regex.strip() or not re.match(regex.strip(), run_id):
+        if run_id and not re2.match(RUN_ID_REGEX, run_id):
+            if not regex.strip() or not re2.match(regex.strip(), run_id):
                 flash(
                     f"The provided run ID '{run_id}' is invalid. It does not 
match either "
                     f"the configured pattern: '{regex}' or the built-in 
pattern: '{RUN_ID_REGEX}'",
@@ -4743,7 +4743,7 @@ class ConnectionModelView(AirflowModelView):
         """Duplicate Multiple connections."""
         for selected_conn in connections:
             new_conn_id = selected_conn.conn_id
-            match = re.search(r"_copy(\d+)$", selected_conn.conn_id)
+            match = re2.search(r"_copy(\d+)$", selected_conn.conn_id)
 
             base_conn_id = selected_conn.conn_id
             if match:
@@ -5002,8 +5002,8 @@ class ProviderView(AirflowBaseView):
             return Markup(f'<a href="{url}">{text}</a>')
 
         cd = escape(description)
-        cd = re.sub(r"`(.*)[\s+]+&lt;(.*)&gt;`__", _build_link, cd)
-        cd = re.sub(r"\n", r"<br>", cd)
+        cd = re2.sub(r"`(.*)[\s+]+&lt;(.*)&gt;`__", _build_link, cd)
+        cd = re2.sub(r"\n", r"<br>", cd)
         return Markup(cd)
 
 
diff --git a/dev/breeze/src/airflow_breeze/pre_commit_ids.py 
b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
index b4c713360e..1349a96210 100644
--- a/dev/breeze/src/airflow_breeze/pre_commit_ids.py
+++ b/dev/breeze/src/airflow_breeze/pre_commit_ids.py
@@ -71,6 +71,7 @@ PRE_COMMIT_LIST = [
     "check-system-tests-tocs",
     "check-tests-unittest-testcase",
     "check-urlparse-usage-in-code",
+    "check-usage-of-re2-over-re",
     "check-xml",
     "codespell",
     "compile-www-assets",
diff --git a/images/breeze/output-commands-hash.txt 
b/images/breeze/output-commands-hash.txt
index 61e50641f2..241dc9bd43 100644
--- a/images/breeze/output-commands-hash.txt
+++ b/images/breeze/output-commands-hash.txt
@@ -60,7 +60,7 @@ setup:version:123b462a421884dc2320ffc5e54b2478
 setup:201c30ea237ea013a9a209a77092a2e8
 shell:13f90c5749811e2f00e24d95e44e946d
 start-airflow:22c118d58b13a9d190e966bed5bb8ed8
-static-checks:9985d1db64592e29ab71b8a000ce302e
+static-checks:a0f6ae35129b99b88ce65aede2c3a150
 testing:docker-compose-tests:70167e67853cacd9ca784695d65a7846
 testing:helm-tests:936cf28fd84ce4ff5113795fdae9624b
 testing:integration-tests:35f0ac57157bf8fe227fd080cf216622
diff --git a/images/breeze/output_static-checks.svg 
b/images/breeze/output_static-checks.svg
index e9f5238ace..e735b2afc3 100644
--- a/images/breeze/output_static-checks.svg
+++ b/images/breeze/output_static-checks.svg
@@ -35,8 +35,8 @@
     .breeze-static-checks-r1 { fill: #c5c8c6;font-weight: bold }
 .breeze-static-checks-r2 { fill: #c5c8c6 }
 .breeze-static-checks-r3 { fill: #d0b344;font-weight: bold }
-.breeze-static-checks-r4 { fill: #68a0b3;font-weight: bold }
-.breeze-static-checks-r5 { fill: #868887 }
+.breeze-static-checks-r4 { fill: #868887 }
+.breeze-static-checks-r5 { fill: #68a0b3;font-weight: bold }
 .breeze-static-checks-r6 { fill: #98a84b;font-weight: bold }
 .breeze-static-checks-r7 { fill: #8d7b39 }
     </style>
@@ -256,72 +256,72 @@
     
     <g class="breeze-static-checks-matrix">
     <text class="breeze-static-checks-r2" x="1464" y="20" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-0)">
-</text><text class="breeze-static-checks-r3" x="12.2" y="44.4" 
textLength="85.4" 
clip-path="url(#breeze-static-checks-line-1)">Usage:&#160;</text><text 
class="breeze-static-checks-r1" x="97.6" y="44.4" textLength="268.4" 
clip-path="url(#breeze-static-checks-line-1)">breeze&#160;static-checks&#160;[</text><text
 class="breeze-static-checks-r4" x="366" y="44.4" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-1)">OPTIONS</text><text 
class="breeze-static-checks-r1" x="451.4" y="44 [...]
+</text><text class="breeze-static-checks-r3" x="12.2" y="44.4" 
textLength="85.4" 
clip-path="url(#breeze-static-checks-line-1)">Usage:&#160;</text><text 
class="breeze-static-checks-r1" x="97.6" y="44.4" textLength="610" 
clip-path="url(#breeze-static-checks-line-1)">breeze&#160;static-checks&#160;[OPTIONS]&#160;[PRECOMMIT_ARGS]...</text><text
 class="breeze-static-checks-r2" x="1464" y="44.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-1)">
 </text><text class="breeze-static-checks-r2" x="1464" y="68.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-2)">
 </text><text class="breeze-static-checks-r2" x="12.2" y="93.2" 
textLength="219.6" 
clip-path="url(#breeze-static-checks-line-3)">Run&#160;static&#160;checks.</text><text
 class="breeze-static-checks-r2" x="1464" y="93.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-3)">
 </text><text class="breeze-static-checks-r2" x="1464" y="117.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-4)">
-</text><text class="breeze-static-checks-r5" x="0" y="142" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-5)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="142" textLength="219.6" 
clip-path="url(#breeze-static-checks-line-5)">&#160;Pre-commit&#160;flags&#160;</text><text
 class="breeze-static-checks-r5" x="244" y="142" textLength="1195.6" 
clip-path="url(#breeze-static-checks-line-5)">────────────────────────────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-6)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-6)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="166.4" textLength="61" 
clip-path="url(#breeze-static-checks-line-6)">-type</text><text 
class="breeze-static-checks-r6" x="402.6" y="166.4" textLength="24.4" 
clip-path="url(#breeze- [...]
-</text><text class="breeze-static-checks-r5" x="0" y="190.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-7)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="190.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-7)">(all&#160;|&#160;black&#160;|&#160;blacken-docs&#160;|&#160;check-aiobotocore-optional&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</tex
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="215.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-8)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="215.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-airflow-provider-compatibility&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="215.2" textLength="12.2" 
clip-path="url(#breeze-static-checks [...]
-</text><text class="breeze-static-checks-r5" x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-9)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="239.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-9)">check-apache-license-rat&#160;|&#160;check-base-operator-partial-arguments&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="239.6" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-10)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="264" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-10)">check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-11)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="288.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-11)">check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-12)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-12)">check-changelog-has-no-duplicates&#160;|&#160;check-core-deprecation-classes&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="312.8" textLen [...]
-</text><text class="breeze-static-checks-r5" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-13)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-13)">check-daysago-import-from-utils&#160;|&#160;check-decorated-operator-implements-custom-name</text><text
 class="breeze-static-checks-r5" x="1451.8" y="337.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-13)">│</text><tex [...]
-</text><text class="breeze-static-checks-r5" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-14)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-14)">|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
  [...]
-</text><text class="breeze-static-checks-r5" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-15)">check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="386" textLeng [...]
-</text><text class="breeze-static-checks-r5" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-16)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-16)">check-extras-order&#160;|&#160;check-for-inclusive-language&#160;|&#160;check-hooks-apply&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="410.4" textLength=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="434.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-17)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-17)">check-incorrect-use-of-LoggingMixin&#160;|&#160;check-init-decorator-arguments&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="434.8" textLength="12.2" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-18)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-18)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="459.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-18)">│< [...]
-</text><text class="breeze-static-checks-r5" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-19)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-19)">check-merge-conflict&#160;|&#160;check-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</t
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-20)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text><text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="532.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-21)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-21)">check-no-relative-imports&#160;|&#160;check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="532.4" textLength="12.2" 
clip-path="url [...]
-</text><text class="breeze-static-checks-r5" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-22)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="bre [...]
-</text><text class="breeze-static-checks-r5" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-23)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│</text [...]
-</text><text class="breeze-static-checks-r5" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-24)">check-provider-yaml-valid&#160;|&#160;check-providers-init-file-missing&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-25)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-25)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="630" textLength="12.2" 
clip-path="url(#bree [...]
-</text><text class="breeze-static-checks-r5" x="0" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-26)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-26)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;check-setup-order&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-li [...]
-</text><text class="breeze-static-checks-r5" x="0" y="678.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-27)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-27)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="678.8" textLen [...]
-</text><text class="breeze-static-checks-r5" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-28)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-28)">check-system-tests-tocs&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class [...]
-</text><text class="breeze-static-checks-r5" x="0" y="727.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-29)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-29)">check-urlparse-usage-in-code&#160;|&#160;check-xml&#160;|&#160;codespell&#160;|&#160;compile-www-assets&#160;|&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="727.6" textLength="12.2" clip 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-30)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-30)">compile-www-assets-dev&#160;|&#160;create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="752" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-30) [...]
-</text><text class="breeze-static-checks-r5" x="0" y="776.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-31)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-31)">detect-private-key&#160;|&#160;doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="776.4" textLength="12.2" 
clip-path="url [...]
-</text><text class="breeze-static-checks-r5" x="0" y="800.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-32)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-32)">identity&#160;|&#160;insert-license&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;lint-dockerfile&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="800.8" textLength="12.2" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="825.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-33)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-33)">lint-helm-chart&#160;|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;lint-openapi&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="849.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-34)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-34)">mixed-line-ending&#160;|&#160;mypy-core&#160;|&#160;mypy-dev&#160;|&#160;mypy-docs&#160;|&#160;mypy-providers&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y= [...]
-</text><text class="breeze-static-checks-r5" x="0" y="874" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-35)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-35)">pretty-format-json&#160;|&#160;python-no-log-warn&#160;|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="874" textLength="12.2" 
clip-path="url(#breeze-static-checks-lin [...]
-</text><text class="breeze-static-checks-r5" x="0" y="898.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-36)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-36)">|&#160;ruff&#160;|&#160;shellcheck&#160;|&#160;trailing-whitespace&#160;|&#160;ts-compile-format-lint-www&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="898.4" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="922.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-37)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-37)">update-black-version&#160;|&#160;update-breeze-cmd-output&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="947.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-38)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-38)">update-breeze-readme-config-hash&#160;|&#160;update-common-sql-api-stubs&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451. [...]
-</text><text class="breeze-static-checks-r5" x="0" y="971.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-39)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-39)">update-er-diagram&#160;|&#160;update-extras&#160;|&#160;update-in-the-wild-to-be-sorted&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="971.6" te [...]
-</text><text class="breeze-static-checks-r5" x="0" y="996" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-40)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-40)">update-inlined-dockerfile-scripts&#160;|&#160;update-installed-providers-to-be-sorted&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="996" textLength="12.2" 
clip-path="url(#breeze-static-checks-lin [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1020.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-41)">update-local-yml-file&#160;|&#160;update-migration-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1044.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-42)">update-providers-dependencies&#160;|&#160;update-spelling-wordlist-to-be-sorted&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1044.8" textLength="12.2" c [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1069.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-43)">update-supported-versions&#160;|&#160;update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|</text><text
 class="breeze-static-checks-r5" x="1451.8" y="1069.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1093.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-44)">yamllint)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1118" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-45)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1118" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-45)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1118" textLength="61" 
clip-path="url(#breeze-static-checks-line-45)">-show</text><text 
class="breeze-static-checks-r4" x="97.6" y="1118" textLength="195.2" 
clip-path="url(#breeze-s [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1142.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1142.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-46)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1142.4" textLength="134.2" 
clip-path="url(#breeze-static-checks-line-46)">-initialize</text><text 
class="breeze-static-checks-r4" x="170.8" y="1142.4" textLength="146.4" clip-p 
[...]
-</text><text class="breeze-static-checks-r5" x="0" y="1166.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1166.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-47)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1166.8" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-47)">-max</text><text 
class="breeze-static-checks-r4" x="85.4" y="1166.8" textLength="292.8" 
clip-path="url( [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1191.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="854" 
clip-path="url(#breeze-static-checks-line-48)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1215.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text 
class="breeze-static-checks-r5" x="451.4" y="1215.6" textLength="854" 
clip-path="url(#breeze-static-checks-line-49)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1240" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-50)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1240" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-50)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1240" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-50)">-github</text><text 
class="breeze-static-checks-r4" x="122" y="1240" textLength="134.2" 
clip-path="url(#breez [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1264.4" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r2" x="1464" y="1264.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-51)">
-</text><text class="breeze-static-checks-r5" x="0" y="1288.8" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-52)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1288.8" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-52)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text
 class="breeze-static-checks-r5" x="488" y="1288.8" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-52)">──────────────────────── [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1313.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1313.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-53)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1313.2" textLength="61" 
clip-path="url(#breeze-static-checks-line-53)">-file</text><text 
class="breeze-static-checks-r6" x="256.2" y="1313.2" textLength="24.4" 
clip-path="url(# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1337.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1337.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-54)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1337.6" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-54)">-all</text><text 
class="breeze-static-checks-r4" x="85.4" y="1337.6" textLength="73.2" 
clip-path="url(# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1362" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-55)">-commit</text><text 
class="breeze-static-checks-r4" x="122" y="1362" textLength="48.8" 
clip-path="url(#breeze [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1386.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text 
class="breeze-static-checks-r2" x="305" y="1386.4" textLength="183" 
clip-path="url(#breeze-static-checks-line-56)">exclusive&#160;with&#160;</text><text
 class="breeze-static-checks-r4" x="488" y="1386.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-56)">-</text><text 
class="breeze-static-checks-r4" x="500.2" y="1386.4" textLength="61" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1410.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text 
class="breeze-static-checks-r7" x="305" y="1410.8" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-57)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1435.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1435.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-58)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1435.2" textLength="61" 
clip-path="url(#breeze-static-checks-line-58)">-last</text><text 
class="breeze-static-checks-r4" x="97.6" y="1435.2" textLength="85.4" 
clip-path="url(#b [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1459.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1459.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-59)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1459.6" textLength="61" 
clip-path="url(#breeze-static-checks-line-59)">-only</text><text 
class="breeze-static-checks-r4" x="97.6" y="1459.6" textLength="134.2" 
clip-path="url(# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1484" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-60)">│</text><text 
class="breeze-static-checks-r2" x="305" y="1484" textLength="134.2" 
clip-path="url(#breeze-static-checks-line-60)">branch&#160;and&#160;</text><text
 class="breeze-static-checks-r4" x="439.2" y="1484" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-60)">HEAD</text><text 
class="breeze-static-checks-r2" x="488" y="1484" textLength="951.6" cli [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1508.4" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r2" x="1464" y="1508.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-61)">
-</text><text class="breeze-static-checks-r5" x="0" y="1532.8" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-62)">╭─</text><text 
class="breeze-static-checks-r5" x="24.4" y="1532.8" textLength="195.2" 
clip-path="url(#breeze-static-checks-line-62)">&#160;Common&#160;options&#160;</text><text
 class="breeze-static-checks-r5" x="219.6" y="1532.8" textLength="1220" 
clip-path="url(#breeze-static-checks-line-62)">──────────────────────────────────────────────────────────────────────
 [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1557.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1557.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-63)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1557.2" textLength="97.6" 
clip-path="url(#breeze-static-checks-line-63)">-verbose</text><text 
class="breeze-static-checks-r6" x="158.6" y="1557.2" textLength="24.4" 
clip-path=" [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1581.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1581.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-64)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1581.6" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-64)">-dry</text><text 
class="breeze-static-checks-r4" x="85.4" y="1581.6" textLength="48.8" 
clip-path="url(# [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1606" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-65)">│</text><text 
class="breeze-static-checks-r4" x="24.4" y="1606" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-65)">-</text><text 
class="breeze-static-checks-r4" x="36.6" y="1606" textLength="61" 
clip-path="url(#breeze-static-checks-line-65)">-help</text><text 
class="breeze-static-checks-r6" x="158.6" y="1606" textLength="24.4" 
clip-path="url(#breeze-s [...]
-</text><text class="breeze-static-checks-r5" x="0" y="1630.4" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r2" x="1464" y="1630.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-66)">
+</text><text class="breeze-static-checks-r4" x="0" y="142" textLength="24.4" 
clip-path="url(#breeze-static-checks-line-5)">╭─</text><text 
class="breeze-static-checks-r4" x="24.4" y="142" textLength="219.6" 
clip-path="url(#breeze-static-checks-line-5)">&#160;Pre-commit&#160;flags&#160;</text><text
 class="breeze-static-checks-r4" x="244" y="142" textLength="1195.6" 
clip-path="url(#breeze-static-checks-line-5)">────────────────────────────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="166.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-6)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="166.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-6)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="166.4" textLength="61" 
clip-path="url(#breeze-static-checks-line-6)">-type</text><text 
class="breeze-static-checks-r6" x="402.6" y="166.4" textLength="24.4" 
clip-path="url(#breeze- [...]
+</text><text class="breeze-static-checks-r4" x="0" y="190.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-7)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="190.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-7)">(all&#160;|&#160;black&#160;|&#160;blacken-docs&#160;|&#160;check-aiobotocore-optional&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</tex
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="215.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-8)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="215.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-8)">check-airflow-config-yaml-consistent&#160;|&#160;check-airflow-provider-compatibility&#160;|&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="215.2" textLength="12.2" 
clip-path="url(#breeze-static-checks [...]
+</text><text class="breeze-static-checks-r4" x="0" y="239.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-9)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="239.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-9)">check-apache-license-rat&#160;|&#160;check-base-operator-partial-arguments&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="239.6" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="264" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-10)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="264" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-10)">check-base-operator-usage&#160;|&#160;check-boring-cyborg-configuration&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="288.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-11)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="288.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-11)">check-breeze-top-dependencies-limited&#160;|&#160;check-builtin-literals&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451. [...]
+</text><text class="breeze-static-checks-r4" x="0" y="312.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-12)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="312.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-12)">check-changelog-has-no-duplicates&#160;|&#160;check-core-deprecation-classes&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="312.8" textLen [...]
+</text><text class="breeze-static-checks-r4" x="0" y="337.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-13)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="337.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-13)">check-daysago-import-from-utils&#160;|&#160;check-decorated-operator-implements-custom-name</text><text
 class="breeze-static-checks-r4" x="1451.8" y="337.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-13)">│</text><tex [...]
+</text><text class="breeze-static-checks-r4" x="0" y="361.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-14)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="361.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-14)">|&#160;check-docstring-param-types&#160;|&#160;check-example-dags-urls&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
  [...]
+</text><text class="breeze-static-checks-r4" x="0" y="386" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-15)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="386" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-15)">check-executables-have-shebangs&#160;|&#160;check-extra-packages-references&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="386" textLeng [...]
+</text><text class="breeze-static-checks-r4" x="0" y="410.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-16)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="410.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-16)">check-extras-order&#160;|&#160;check-for-inclusive-language&#160;|&#160;check-hooks-apply&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="410.4" textLength=" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="434.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-17)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="434.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-17)">check-incorrect-use-of-LoggingMixin&#160;|&#160;check-init-decorator-arguments&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="434.8" textLength="12.2" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="459.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-18)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="459.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-18)">check-lazy-logging&#160;|&#160;check-links-to-example-dags-do-not-use-hardcoded-versions&#160;|&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="459.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-18)">│< [...]
+</text><text class="breeze-static-checks-r4" x="0" y="483.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-19)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="483.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-19)">check-merge-conflict&#160;|&#160;check-newsfragments-are-valid&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</t
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="508" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-20)">check-no-airflow-deprecation-in-providers&#160;|&#160;check-no-providers-in-core-examples&#160;|</text><text
 class="breeze-static-checks-r4" x="1451.8" y="508" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-20)">│</text><text [...]
+</text><text class="breeze-static-checks-r4" x="0" y="532.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-21)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="532.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-21)">check-no-relative-imports&#160;|&#160;check-only-new-session-with-provide-session&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="532.4" textLength="12.2" 
clip-path="url [...]
+</text><text class="breeze-static-checks-r4" x="0" y="556.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-22)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="556.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-22)">check-persist-credentials-disabled-in-github-workflows&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="bre [...]
+</text><text class="breeze-static-checks-r4" x="0" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="581.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-23)">check-pre-commit-information-consistent&#160;|&#160;check-provide-create-sessions-imports&#160;|</text><text
 class="breeze-static-checks-r4" x="1451.8" y="581.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-23)">│</text [...]
+</text><text class="breeze-static-checks-r4" x="0" y="605.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-24)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="605.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-24)">check-provider-yaml-valid&#160;|&#160;check-providers-init-file-missing&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x=" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="630" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-25)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="630" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-25)">check-providers-subpackages-init-file-exist&#160;|&#160;check-pydevd-left-in-code&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="630" textLength="12.2" 
clip-path="url(#bree [...]
+</text><text class="breeze-static-checks-r4" x="0" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-26)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="654.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-26)">check-revision-heads-map&#160;|&#160;check-safe-filter-usage-in-html&#160;|&#160;check-setup-order&#160;|&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="654.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-li [...]
+</text><text class="breeze-static-checks-r4" x="0" y="678.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-27)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="678.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-27)">check-start-date-not-used-in-defaults&#160;|&#160;check-system-tests-present&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="678.8" textLen [...]
+</text><text class="breeze-static-checks-r4" x="0" y="703.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-28)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="703.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-28)">check-system-tests-tocs&#160;|&#160;check-tests-unittest-testcase&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class [...]
+</text><text class="breeze-static-checks-r4" x="0" y="727.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-29)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="727.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-29)">check-urlparse-usage-in-code&#160;|&#160;check-usage-of-re2-over-re&#160;|&#160;check-xml&#160;|&#160;codespell</text><text
 class="breeze-static-checks-r4" x="1451.8" y="727.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-li [...]
+</text><text class="breeze-static-checks-r4" x="0" y="752" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-30)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="752" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-30)">|&#160;compile-www-assets&#160;|&#160;compile-www-assets-dev&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="776.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-31)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="776.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-31)">create-missing-init-py-files-tests&#160;|&#160;debug-statements&#160;|&#160;detect-private-key&#160;|&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="776.4" textLength="12.2" 
clip-path="url(#bre [...]
+</text><text class="breeze-static-checks-r4" x="0" y="800.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-32)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="800.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-32)">doctoc&#160;|&#160;end-of-file-fixer&#160;|&#160;fix-encoding-pragma&#160;|&#160;flynt&#160;|&#160;identity&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x=" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="825.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-33)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="825.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-33)">insert-license&#160;|&#160;lint-chart-schema&#160;|&#160;lint-css&#160;|&#160;lint-dockerfile&#160;|&#160;lint-helm-chart</text><text
 class="breeze-static-checks-r4" x="1451.8" y="825.2" textLength="12.2" 
clip-path="url(#breeze-static [...]
+</text><text class="breeze-static-checks-r4" x="0" y="849.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-34)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="849.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-34)">|&#160;lint-json-schema&#160;|&#160;lint-markdown&#160;|&#160;lint-openapi&#160;|&#160;mixed-line-ending&#160;|&#160;mypy-core</text><text
 class="breeze-static-checks-r4" x="1451.8" y="849.6" textLength="12.2" 
clip-path="url(#breeze-s [...]
+</text><text class="breeze-static-checks-r4" x="0" y="874" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-35)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="874" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-35)">|&#160;mypy-dev&#160;|&#160;mypy-docs&#160;|&#160;mypy-providers&#160;|&#160;pretty-format-json&#160;|&#160;python-no-log-warn</text><text
 class="breeze-static-checks-r4" x="1451.8" y="874" textLength="12.2" 
clip-path="url(#breeze-static- [...]
+</text><text class="breeze-static-checks-r4" x="0" y="898.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-36)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="898.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-36)">|&#160;replace-bad-characters&#160;|&#160;rst-backticks&#160;|&#160;ruff&#160;|&#160;shellcheck&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class [...]
+</text><text class="breeze-static-checks-r4" x="0" y="922.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-37)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="922.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-37)">trailing-whitespace&#160;|&#160;ts-compile-format-lint-www&#160;|&#160;update-black-version&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="922.8" textLength="12.2" clip 
[...]
+</text><text class="breeze-static-checks-r4" x="0" y="947.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-38)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="947.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-38)">update-breeze-cmd-output&#160;|&#160;update-breeze-readme-config-hash&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-chec [...]
+</text><text class="breeze-static-checks-r4" x="0" y="971.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-39)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="971.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-39)">update-common-sql-api-stubs&#160;|&#160;update-er-diagram&#160;|&#160;update-extras&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x=" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="996" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-40)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="996" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-40)">update-in-the-wild-to-be-sorted&#160;|&#160;update-inlined-dockerfile-scripts&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="996" textLength="12.2"  [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1020.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-41)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1020.4" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-41)">update-installed-providers-to-be-sorted&#160;|&#160;update-local-yml-file&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8"  [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1044.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-42)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1044.8" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-42)">update-migration-references&#160;|&#160;update-providers-dependencies&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-ch [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1069.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-43)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1069.2" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-43)">update-spelling-wordlist-to-be-sorted&#160;|&#160;update-supported-versions&#160;|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks-r4" x="1451.8" y="1069.2" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1093.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-44)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1093.6" textLength="988.2" 
clip-path="url(#breeze-static-checks-line-44)">update-vendored-in-k8s-json-schema&#160;|&#160;update-version&#160;|&#160;yamllint)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</text><text
 class="breeze-static-checks- [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1118" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-45)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1118" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-45)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1118" textLength="61" 
clip-path="url(#breeze-static-checks-line-45)">-show</text><text 
class="breeze-static-checks-r5" x="97.6" y="1118" textLength="195.2" 
clip-path="url(#breeze-s [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1142.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-46)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1142.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-46)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1142.4" textLength="134.2" 
clip-path="url(#breeze-static-checks-line-46)">-initialize</text><text 
class="breeze-static-checks-r5" x="170.8" y="1142.4" textLength="146.4" clip-p 
[...]
+</text><text class="breeze-static-checks-r4" x="0" y="1166.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-47)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1166.8" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-47)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1166.8" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-47)">-max</text><text 
class="breeze-static-checks-r5" x="85.4" y="1166.8" textLength="292.8" 
clip-path="url( [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1191.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-48)">│</text><text 
class="breeze-static-checks-r7" x="451.4" y="1191.2" textLength="854" 
clip-path="url(#breeze-static-checks-line-48)">(INTEGER&#160;RANGE)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1215.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-49)">│</text><text 
class="breeze-static-checks-r4" x="451.4" y="1215.6" textLength="854" 
clip-path="url(#breeze-static-checks-line-49)">[default:&#160;3;&#160;1&lt;=x&lt;=10]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#16
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1240" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-50)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1240" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-50)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1240" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-50)">-github</text><text 
class="breeze-static-checks-r5" x="122" y="1240" textLength="134.2" 
clip-path="url(#breez [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1264.4" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-51)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r2" x="1464" y="1264.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-51)">
+</text><text class="breeze-static-checks-r4" x="0" y="1288.8" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-52)">╭─</text><text 
class="breeze-static-checks-r4" x="24.4" y="1288.8" textLength="463.6" 
clip-path="url(#breeze-static-checks-line-52)">&#160;Selecting&#160;files&#160;to&#160;run&#160;the&#160;checks&#160;on&#160;</text><text
 class="breeze-static-checks-r4" x="488" y="1288.8" textLength="951.6" 
clip-path="url(#breeze-static-checks-line-52)">──────────────────────── [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1313.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-53)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1313.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-53)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1313.2" textLength="61" 
clip-path="url(#breeze-static-checks-line-53)">-file</text><text 
class="breeze-static-checks-r6" x="256.2" y="1313.2" textLength="24.4" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1337.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-54)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1337.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-54)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1337.6" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-54)">-all</text><text 
class="breeze-static-checks-r5" x="85.4" y="1337.6" textLength="73.2" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1362" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-55)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1362" textLength="85.4" 
clip-path="url(#breeze-static-checks-line-55)">-commit</text><text 
class="breeze-static-checks-r5" x="122" y="1362" textLength="48.8" 
clip-path="url(#breeze [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1386.4" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-56)">│</text><text 
class="breeze-static-checks-r2" x="305" y="1386.4" textLength="183" 
clip-path="url(#breeze-static-checks-line-56)">exclusive&#160;with&#160;</text><text
 class="breeze-static-checks-r5" x="488" y="1386.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-56)">-</text><text 
class="breeze-static-checks-r5" x="500.2" y="1386.4" textLength="61" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1410.8" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-57)">│</text><text 
class="breeze-static-checks-r7" x="305" y="1410.8" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-57)">(TEXT)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1435.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-58)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1435.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-58)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1435.2" textLength="61" 
clip-path="url(#breeze-static-checks-line-58)">-last</text><text 
class="breeze-static-checks-r5" x="97.6" y="1435.2" textLength="85.4" 
clip-path="url(#b [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1459.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-59)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1459.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-59)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1459.6" textLength="61" 
clip-path="url(#breeze-static-checks-line-59)">-only</text><text 
class="breeze-static-checks-r5" x="97.6" y="1459.6" textLength="134.2" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1484" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-60)">│</text><text 
class="breeze-static-checks-r2" x="305" y="1484" textLength="1134.6" 
clip-path="url(#breeze-static-checks-line-60)">branch&#160;and&#160;HEAD&#160;of&#160;your&#160;branch.&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1508.4" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-61)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r2" x="1464" y="1508.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-61)">
+</text><text class="breeze-static-checks-r4" x="0" y="1532.8" 
textLength="24.4" clip-path="url(#breeze-static-checks-line-62)">╭─</text><text 
class="breeze-static-checks-r4" x="24.4" y="1532.8" textLength="195.2" 
clip-path="url(#breeze-static-checks-line-62)">&#160;Common&#160;options&#160;</text><text
 class="breeze-static-checks-r4" x="219.6" y="1532.8" textLength="1220" 
clip-path="url(#breeze-static-checks-line-62)">──────────────────────────────────────────────────────────────────────
 [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1557.2" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-63)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1557.2" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-63)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1557.2" textLength="97.6" 
clip-path="url(#breeze-static-checks-line-63)">-verbose</text><text 
class="breeze-static-checks-r6" x="158.6" y="1557.2" textLength="24.4" 
clip-path=" [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1581.6" 
textLength="12.2" clip-path="url(#breeze-static-checks-line-64)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1581.6" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-64)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1581.6" textLength="48.8" 
clip-path="url(#breeze-static-checks-line-64)">-dry</text><text 
class="breeze-static-checks-r5" x="85.4" y="1581.6" textLength="48.8" 
clip-path="url(# [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1606" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-65)">│</text><text 
class="breeze-static-checks-r5" x="24.4" y="1606" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-65)">-</text><text 
class="breeze-static-checks-r5" x="36.6" y="1606" textLength="61" 
clip-path="url(#breeze-static-checks-line-65)">-help</text><text 
class="breeze-static-checks-r6" x="158.6" y="1606" textLength="24.4" 
clip-path="url(#breeze-s [...]
+</text><text class="breeze-static-checks-r4" x="0" y="1630.4" 
textLength="1464" 
clip-path="url(#breeze-static-checks-line-66)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-static-checks-r2" x="1464" y="1630.4" textLength="12.2" 
clip-path="url(#breeze-static-checks-line-66)">
 </text>
     </g>
     </g>
diff --git a/kubernetes_tests/test_base.py b/kubernetes_tests/test_base.py
index dfbf640fd6..5b45969c3d 100644
--- a/kubernetes_tests/test_base.py
+++ b/kubernetes_tests/test_base.py
@@ -17,7 +17,6 @@
 from __future__ import annotations
 
 import os
-import re
 import subprocess
 import tempfile
 import time
@@ -26,6 +25,7 @@ from pathlib import Path
 from subprocess import check_call, check_output
 
 import pytest
+import re2
 import requests
 import requests.exceptions
 from requests.adapters import HTTPAdapter
@@ -103,7 +103,7 @@ class BaseK8STest:
     def _num_pods_in_namespace(namespace):
         air_pod = check_output(["kubectl", "get", "pods", "-n", 
namespace]).decode()
         air_pod = air_pod.split("\n")
-        names = [re.compile(r"\s+").split(x)[0] for x in air_pod if "airflow" 
in x]
+        names = [re2.compile(r"\s+").split(x)[0] for x in air_pod if "airflow" 
in x]
         return len(names)
 
     @staticmethod
@@ -111,7 +111,7 @@ class BaseK8STest:
         suffix = "-" + name if name else ""
         air_pod = check_output(["kubectl", "get", "pods"]).decode()
         air_pod = air_pod.split("\n")
-        names = [re.compile(r"\s+").split(x)[0] for x in air_pod if "airflow" 
+ suffix in x]
+        names = [re2.compile(r"\s+").split(x)[0] for x in air_pod if "airflow" 
+ suffix in x]
         if names:
             check_call(["kubectl", "delete", "pod", names[0]])
 
diff --git a/tests/utils/log/test_secrets_masker.py 
b/tests/utils/log/test_secrets_masker.py
index 9dad28bf45..e47cd5cee5 100644
--- a/tests/utils/log/test_secrets_masker.py
+++ b/tests/utils/log/test_secrets_masker.py
@@ -393,7 +393,7 @@ class TestMaskSecretAdapter:
     def reset_secrets_masker_and_skip_escape(self):
         self.secrets_masker = SecretsMasker()
         with patch("airflow.utils.log.secrets_masker._secrets_masker", 
return_value=self.secrets_masker):
-            with patch("airflow.utils.log.secrets_masker.re.escape", lambda x: 
x):
+            with patch("airflow.utils.log.secrets_masker.re2.escape", lambda 
x: x):
                 yield
 
     def test_calling_mask_secret_adds_adaptations_for_returned_str(self):

Reply via email to