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

potiuk pushed a commit to branch v2-8-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 384d062e40a6cb13e421d5061292fb42088c9a6a
Author: Vincent <97131062+vincb...@users.noreply.github.com>
AuthorDate: Wed Jan 3 13:02:36 2024 -0500

    Fix security manager inheritance in fab provider (#36538)
    
    (cherry picked from commit 2093b6f3b94be9fae5d61042a9c280d9a835687b)
---
 airflow/auth/managers/fab/fab_auth_manager.py      | 14 ++---
 ...output_sbom_generate-providers-requirements.svg | 68 ++++++++++++----------
 ...output_sbom_generate-providers-requirements.txt |  2 +-
 generated/provider_dependencies.json               |  9 +++
 tests/auth/managers/fab/test_fab_auth_manager.py   | 30 +++++++++-
 5 files changed, 81 insertions(+), 42 deletions(-)

diff --git a/airflow/auth/managers/fab/fab_auth_manager.py 
b/airflow/auth/managers/fab/fab_auth_manager.py
index 5224509039..e05abc97d3 100644
--- a/airflow/auth/managers/fab/fab_auth_manager.py
+++ b/airflow/auth/managers/fab/fab_auth_manager.py
@@ -222,10 +222,10 @@ class FabAuthManager(BaseAuthManager):
         entity (e.g. DAG runs).
         2. ``dag_access`` is provided which means the user wants to access a 
sub entity of the DAG
         (e.g. DAG runs).
-            a. If ``method`` is GET, then check the user has READ permissions 
on the DAG and the sub entity.
-            b. Else, check the user has EDIT permissions on the DAG and 
``method`` on the sub entity.
 
-            However, if no specific DAG is targeted, just check the sub entity.
+            a. If ``method`` is GET, then check the user has READ permissions 
on the DAG and the sub entity.
+            b. Else, check the user has EDIT permissions on the DAG and 
``method`` on the sub entity. However,
+                if no specific DAG is targeted, just check the sub entity.
 
         :param method: The method to authorize.
         :param access_entity: The dag access entity.
@@ -335,19 +335,19 @@ class FabAuthManager(BaseAuthManager):
     def security_manager(self) -> FabAirflowSecurityManagerOverride:
         """Return the security manager specific to FAB."""
         from airflow.auth.managers.fab.security_manager.override import 
FabAirflowSecurityManagerOverride
-        from airflow.www.security import AirflowSecurityManager
+        from airflow.www.security_manager import AirflowSecurityManagerV2
 
         sm_from_config = 
self.appbuilder.get_app.config.get("SECURITY_MANAGER_CLASS")
         if sm_from_config:
-            if not issubclass(sm_from_config, AirflowSecurityManager):
+            if not issubclass(sm_from_config, AirflowSecurityManagerV2):
                 raise Exception(
-                    """Your CUSTOM_SECURITY_MANAGER must extend 
FabAirflowSecurityManagerOverride,
+                    """Your CUSTOM_SECURITY_MANAGER must extend 
AirflowSecurityManagerV2,
                      not FAB's own security manager."""
                 )
             if not issubclass(sm_from_config, 
FabAirflowSecurityManagerOverride):
                 warnings.warn(
                     "Please make your custom security manager inherit from "
-                    "FabAirflowSecurityManagerOverride instead of 
AirflowSecurityManager.",
+                    "FabAirflowSecurityManagerOverride instead of 
FabAirflowSecurityManagerOverride.",
                     DeprecationWarning,
                 )
             return sm_from_config(self.appbuilder)
diff --git 
a/dev/breeze/doc/images/output_sbom_generate-providers-requirements.svg 
b/dev/breeze/doc/images/output_sbom_generate-providers-requirements.svg
index eb022ae634..cb90b20960 100644
--- a/dev/breeze/doc/images/output_sbom_generate-providers-requirements.svg
+++ b/dev/breeze/doc/images/output_sbom_generate-providers-requirements.svg
@@ -1,4 +1,4 @@
-<svg class="rich-terminal" viewBox="0 0 1482 1026.0" 
xmlns="http://www.w3.org/2000/svg";>
+<svg class="rich-terminal" viewBox="0 0 1482 1050.4" 
xmlns="http://www.w3.org/2000/svg";>
     <!-- Generated with Rich https://www.textualize.io -->
     <style>
 
@@ -43,7 +43,7 @@
 
     <defs>
     <clipPath id="breeze-sbom-generate-providers-requirements-clip-terminal">
-      <rect x="0" y="0" width="1463.0" height="975.0" />
+      <rect x="0" y="0" width="1463.0" height="999.4" />
     </clipPath>
     <clipPath id="breeze-sbom-generate-providers-requirements-line-0">
     <rect x="0" y="1.5" width="1464" height="24.65"/>
@@ -162,9 +162,12 @@
 <clipPath id="breeze-sbom-generate-providers-requirements-line-38">
     <rect x="0" y="928.7" width="1464" height="24.65"/>
             </clipPath>
+<clipPath id="breeze-sbom-generate-providers-requirements-line-39">
+    <rect x="0" y="953.1" width="1464" height="24.65"/>
+            </clipPath>
     </defs>
 
-    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1024" rx="8"/><text 
class="breeze-sbom-generate-providers-requirements-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;sbom&#160;generate-providers-requirements</text>
+    <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" 
x="1" y="1" width="1480" height="1048.4" rx="8"/><text 
class="breeze-sbom-generate-providers-requirements-title" fill="#c5c8c6" 
text-anchor="middle" x="740" 
y="27">Command:&#160;sbom&#160;generate-providers-requirements</text>
             <g transform="translate(26,22)">
             <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
             <circle cx="22" cy="0" r="7" fill="#febc2e"/>
@@ -185,35 +188,36 @@
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="215.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-8)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="215.2" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-8)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="215.2" 
textLength="109.8" clip-path="url(#breeze-sbom-generate-pr [...]
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="239.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-9)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="239.6" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-9)">(airbyte&#160;|&#160;alibaba&#160;|&#160;amazon&#160;|&#160;apache.beam&#160;|&#160;apache.cassandra&#160;|&#160;apache.drill&#160;|&#160;apach
 [...]
 </text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="264" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-10)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="264" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-10)">apache.flink&#160;|&#160;apache.hdfs&#160;|&#160;apache.hive&#160;|&#160;apache.impala&#160;|&#160;apache.kafka&#160;|&#160;apache.kylin&#160;|&#
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-11)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="288.4" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-11)">apache.livy&#160;|&#160;apache.pig&#160;|&#160;apache.pinot&#160;|&#160;apache.spark&#160;|&#160;apprise&#160;|&#160;arangodb&#160;|&#160;asa
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-12)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="312.8" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-12)">atlassian.jira&#160;|&#160;celery&#160;|&#160;cloudant&#160;|&#160;cncf.kubernetes&#160;|&#160;cohere&#160;|&#160;common.io&#160;|&#160;commo
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="337.2" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">daskexecutor&#160;|&#160;databricks&#160;|&#160;datadog&#160;|&#160;dbt.cloud&#160;|&#160;dingding&#160;|&#160;discord&#160;|&#160;docker&#16
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="361.6" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">|&#160;exasol&#160;|&#160;facebook&#160;|&#160;ftp&#160;|&#160;github&#160;|&#160;google&#160;|&#160;grpc&#160;|&#160;hashicorp&#160;|&#160;h
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="386" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">|&#160;jenkins&#160;|&#160;microsoft.azure&#160;|&#160;microsoft.mssql&#160;|&#160;microsoft.psrp&#160;|&#160;microsoft.winrm&#160;|&#160;mongo&#
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="410.4" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">mysql&#160;|&#160;neo4j&#160;|&#160;odbc&#160;|&#160;openai&#160;|&#160;openfaas&#160;|&#160;openlineage&#160;|&#160;opensearch&#160;|&#160;o
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="434.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="434.8" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">pagerduty&#160;|&#160;papermill&#160;|&#160;pgvector&#160;|&#160;pinecone&#160;|&#160;plexus&#160;|&#160;postgres&#160;|&#160;presto&#160;|&#
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="459.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="459.2" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">|&#160;samba&#160;|&#160;segment&#160;|&#160;sendgrid&#160;|&#160;sftp&#160;|&#160;singularity&#160;|&#160;slack&#160;|&#160;smtp&#160;|&#160
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="483.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="483.6" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">tableau&#160;|&#160;tabular&#160;|&#160;telegram&#160;|&#160;trino&#160;|&#160;vertica&#160;|&#160;weaviate&#160;|&#160;yandex&#160;|&#160;ze
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="508" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="508" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="508" 
textLength="109.8" clip-path="url(#breeze-sbom-generate-provid [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="532.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r1" x="292.8" y="532.4" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">value&#160;to&#160;account&#160;for&#160;the&#160;most&#160;recent&#160;version&#160;of&#160;the&#160;provider&#160;&#160;&#160;&#160;&#160;&
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="556.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-22)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="556.8" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-22)">(TEXT)&#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-sbom-generate-providers-requirements-r5" x="0" 
y="581.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-23)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="581.2" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-23)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="581.2" 
textLength="73.2" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="605.6" textLength="1464" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-24)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-24)">
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="630" textLength="24.4" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-25)">╭─</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="630" 
textLength="219.6" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-25)">&#160;Parallel&#160;running&#160;</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="244" y="630" 
textLength="1195.6" clip-path [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="654.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-26)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="654.4" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-26)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="654.4" 
textLength="48.8" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="678.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-27)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-27)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="678.8" 
textLength="146.4" clip-path="url(#breeze-sbom-generate- [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="703.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-28)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="378.2" y="703.2" 
textLength="915" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-28)">(INTEGER&#160;RANGE)&#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-sbom-generate-providers-requirements-r5" x="0" 
y="727.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-29)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="378.2" y="727.6" 
textLength="915" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-29)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160
 [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="752" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-30)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="752" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-30)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="752" 
textLength="61" clip-path="url(#breeze-sbom-generate-providers [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="776.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-31)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="776.4" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-31)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="776.4" 
textLength="73.2" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="800.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-32)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-32)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="800.8" 
textLength="97.6" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="825.2" textLength="1464" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-33)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-33)">
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="849.6" textLength="24.4" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-34)">╭─</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="849.6" 
textLength="195.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-34)">&#160;Common&#160;options&#160;</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="219.6" y="849.6" 
textLength="1220" clip- [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="874" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-35)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="874" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-35)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="874" 
textLength="97.6" clip-path="url(#breeze-sbom-generate-provide [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="898.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-36)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="898.4" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-36)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="898.4" 
textLength="48.8" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="922.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-37)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="922.8" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-37)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="922.8" 
textLength="85.4" clip-path="url(#breeze-sbom-generate-p [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="947.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-38)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="947.2" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-38)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="947.2" 
textLength="61" clip-path="url(#breeze-sbom-generate-pro [...]
-</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="971.6" textLength="1464" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-39)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="971.6" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-39)">
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="288.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-11)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="288.4" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-11)">apache.livy&#160;|&#160;apache.pig&#160;|&#160;apache.pinot&#160;|&#160;apache.spark&#160;|&#160;apache.sqoop&#160;|&#160;apprise&#160;|&#160
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="312.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-12)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="312.8" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-12)">asana&#160;|&#160;atlassian.jira&#160;|&#160;celery&#160;|&#160;cloudant&#160;|&#160;cncf.kubernetes&#160;|&#160;cohere&#160;|&#160;common.io
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="337.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="337.2" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-13)">|&#160;daskexecutor&#160;|&#160;databricks&#160;|&#160;datadog&#160;|&#160;dbt.cloud&#160;|&#160;dingding&#160;|&#160;discord&#160;|&#160;doc
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="361.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="361.6" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-14)">elasticsearch&#160;|&#160;exasol&#160;|&#160;facebook&#160;|&#160;ftp&#160;|&#160;github&#160;|&#160;google&#160;|&#160;grpc&#160;|&#160;hash
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="386" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="386" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-15)">influxdb&#160;|&#160;jdbc&#160;|&#160;jenkins&#160;|&#160;microsoft.azure&#160;|&#160;microsoft.mssql&#160;|&#160;microsoft.psrp&#160;|&#160;&#16
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="410.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="410.4" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-16)">microsoft.winrm&#160;|&#160;mongo&#160;|&#160;mysql&#160;|&#160;neo4j&#160;|&#160;odbc&#160;|&#160;openai&#160;|&#160;openfaas&#160;|&#160;op
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="434.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="434.8" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-17)">|&#160;opsgenie&#160;|&#160;oracle&#160;|&#160;pagerduty&#160;|&#160;papermill&#160;|&#160;pgvector&#160;|&#160;pinecone&#160;|&#160;plexus&#
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="459.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="459.2" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-18)">|&#160;redis&#160;|&#160;salesforce&#160;|&#160;samba&#160;|&#160;segment&#160;|&#160;sendgrid&#160;|&#160;sftp&#160;|&#160;singularity&#160;
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="483.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="483.6" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-19)">snowflake&#160;|&#160;sqlite&#160;|&#160;ssh&#160;|&#160;tableau&#160;|&#160;tabular&#160;|&#160;telegram&#160;|&#160;trino&#160;|&#160;verti
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="508" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="508" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-20)">|&#160;zendesk)&#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-sbom-generate-providers-requirements-r5" x="0" 
y="532.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="532.4" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-21)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="532.4" 
textLength="109.8" clip-path="url(#breeze-sbom-generate- [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="556.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-22)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r1" x="292.8" y="556.8" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-22)">value&#160;to&#160;account&#160;for&#160;the&#160;most&#160;recent&#160;version&#160;of&#160;the&#160;provider&#160;&#160;&#160;&#160;&#160;&
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="581.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-23)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="292.8" y="581.2" 
textLength="1146.8" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-23)">(TEXT)&#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-sbom-generate-providers-requirements-r5" x="0" 
y="605.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-24)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="605.6" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-24)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="605.6" 
textLength="73.2" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="630" textLength="1464" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-25)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="630" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-25)">
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="654.4" textLength="24.4" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-26)">╭─</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="654.4" 
textLength="219.6" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-26)">&#160;Parallel&#160;running&#160;</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="244" y="654.4" 
textLength="1195.6" cli [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="678.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-27)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="678.8" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-27)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="678.8" 
textLength="48.8" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="703.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-28)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="703.2" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-28)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="703.2" 
textLength="146.4" clip-path="url(#breeze-sbom-generate- [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="727.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-29)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r6" x="378.2" y="727.6" 
textLength="915" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-29)">(INTEGER&#160;RANGE)&#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-sbom-generate-providers-requirements-r5" x="0" 
y="752" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-30)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="378.2" y="752" 
textLength="915" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-30)">[default:&#160;4;&#160;1&lt;=x&lt;=8]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#1
 [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="776.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-31)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="776.4" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-31)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="776.4" 
textLength="61" clip-path="url(#breeze-sbom-generate-pro [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="800.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-32)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="800.8" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-32)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="800.8" 
textLength="73.2" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="825.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-33)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="825.2" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-33)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="825.2" 
textLength="97.6" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="849.6" textLength="1464" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-34)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="849.6" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-34)">
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="874" textLength="24.4" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-35)">╭─</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="24.4" y="874" 
textLength="195.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-35)">&#160;Common&#160;options&#160;</text><text
 class="breeze-sbom-generate-providers-requirements-r5" x="219.6" y="874" 
textLength="1220" clip-path=" [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="898.4" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-36)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="898.4" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-36)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="898.4" 
textLength="97.6" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="922.8" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-37)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="922.8" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-37)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="922.8" 
textLength="48.8" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="947.2" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-38)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="947.2" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-38)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="947.2" 
textLength="85.4" clip-path="url(#breeze-sbom-generate-p [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="971.6" textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-39)">│</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="24.4" y="971.6" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-39)">-</text><text
 class="breeze-sbom-generate-providers-requirements-r4" x="36.6" y="971.6" 
textLength="61" clip-path="url(#breeze-sbom-generate-pro [...]
+</text><text class="breeze-sbom-generate-providers-requirements-r5" x="0" 
y="996" textLength="1464" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-40)">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</text><text
 class="breeze-sbom-generate-providers-requirements-r1" x="1464" y="996" 
textLength="12.2" 
clip-path="url(#breeze-sbom-generate-providers-requirements-line-40)">
 </text>
     </g>
     </g>
diff --git 
a/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt 
b/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
index 1bccc287fd..1af97158bb 100644
--- a/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
+++ b/dev/breeze/doc/images/output_sbom_generate-providers-requirements.txt
@@ -1 +1 @@
-8e780d198e498e436d7ea11ba5ca1212
+344968a060e00ace19738cca47d70641
diff --git a/generated/provider_dependencies.json 
b/generated/provider_dependencies.json
index 7af7c90bfc..6d65a6b754 100644
--- a/generated/provider_dependencies.json
+++ b/generated/provider_dependencies.json
@@ -243,6 +243,15 @@
     "excluded-python-versions": [],
     "state": "ready"
   },
+  "apache.sqoop": {
+    "deps": [
+      "apache-airflow>=2.6.0"
+    ],
+    "devel-deps": [],
+    "cross-providers-deps": [],
+    "excluded-python-versions": [],
+    "state": "suspended"
+  },
   "apprise": {
     "deps": [
       "apache-airflow>=2.6.0",
diff --git a/tests/auth/managers/fab/test_fab_auth_manager.py 
b/tests/auth/managers/fab/test_fab_auth_manager.py
index 74d20ab13b..36271b1199 100644
--- a/tests/auth/managers/fab/test_fab_auth_manager.py
+++ b/tests/auth/managers/fab/test_fab_auth_manager.py
@@ -65,8 +65,12 @@ def auth_manager():
 
 
 @pytest.fixture
-def auth_manager_with_appbuilder():
-    flask_app = Flask(__name__)
+def flask_app():
+    return Flask(__name__)
+
+
+@pytest.fixture
+def auth_manager_with_appbuilder(flask_app):
     appbuilder = init_appbuilder(flask_app)
     return FabAuthManager(appbuilder)
 
@@ -357,6 +361,28 @@ class TestFabAuthManager:
     def test_security_manager_return_fab_security_manager_override(self, 
auth_manager_with_appbuilder):
         assert isinstance(auth_manager_with_appbuilder.security_manager, 
FabAirflowSecurityManagerOverride)
 
+    @pytest.mark.db_test
+    def test_security_manager_return_custom_provided(self, flask_app, 
auth_manager_with_appbuilder):
+        class TestSecurityManager(FabAirflowSecurityManagerOverride):
+            pass
+
+        flask_app.config["SECURITY_MANAGER_CLASS"] = TestSecurityManager
+        assert isinstance(auth_manager_with_appbuilder.security_manager, 
TestSecurityManager)
+
+    @pytest.mark.db_test
+    def test_security_manager_wrong_inheritance_raise_exception(
+        self, flask_app, auth_manager_with_appbuilder
+    ):
+        class TestSecurityManager:
+            pass
+
+        flask_app.config["SECURITY_MANAGER_CLASS"] = TestSecurityManager
+
+        with pytest.raises(
+            Exception, match="Your CUSTOM_SECURITY_MANAGER must extend 
AirflowSecurityManagerV2."
+        ):
+            auth_manager_with_appbuilder.security_manager
+
     @pytest.mark.db_test
     def test_get_url_login_when_auth_view_not_defined(self, 
auth_manager_with_appbuilder):
         with pytest.raises(AirflowException, match="`auth_view` not defined in 
the security manager."):


Reply via email to