apache-airflow-providers-fab 2.0.1__py3-none-any.whl → 2.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- airflow/providers/fab/__init__.py +1 -1
- airflow/providers/fab/auth_manager/fab_auth_manager.py +2 -32
- airflow/providers/fab/auth_manager/security_manager/override.py +6 -18
- airflow/providers/fab/www/package-lock.json +58 -57
- airflow/providers/fab/www/package.json +3 -3
- airflow/providers/fab/www/security/permissions.py +1 -24
- airflow/providers/fab/www/views.py +1 -1
- {apache_airflow_providers_fab-2.0.1.dist-info → apache_airflow_providers_fab-2.0.2.dist-info}/METADATA +6 -6
- {apache_airflow_providers_fab-2.0.1.dist-info → apache_airflow_providers_fab-2.0.2.dist-info}/RECORD +13 -13
- {apache_airflow_providers_fab-2.0.1.dist-info → apache_airflow_providers_fab-2.0.2.dist-info}/WHEEL +0 -0
- {apache_airflow_providers_fab-2.0.1.dist-info → apache_airflow_providers_fab-2.0.2.dist-info}/entry_points.txt +0 -0
- {apache_airflow_providers_fab-2.0.1.dist-info → apache_airflow_providers_fab-2.0.2.dist-info}/licenses/3rd-party-licenses/LICENSES-ui.txt +0 -0
- {apache_airflow_providers_fab-2.0.1.dist-info → apache_airflow_providers_fab-2.0.2.dist-info}/licenses/NOTICE +0 -0
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
|
|
29
29
|
|
30
30
|
__all__ = ["__version__"]
|
31
31
|
|
32
|
-
__version__ = "2.0.
|
32
|
+
__version__ = "2.0.2"
|
33
33
|
|
34
34
|
if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
|
35
35
|
"3.0.0"
|
@@ -566,7 +566,7 @@ class FabAuthManager(BaseAuthManager[User]):
|
|
566
566
|
|
567
567
|
if details and details.id:
|
568
568
|
# Check whether the user has permissions to access a specific DAG
|
569
|
-
resource_dag_name =
|
569
|
+
resource_dag_name = permissions.resource_name(details.id, RESOURCE_DAG)
|
570
570
|
return self._is_authorized(method=method, resource_type=resource_dag_name, user=user)
|
571
571
|
|
572
572
|
return False
|
@@ -592,7 +592,7 @@ class FabAuthManager(BaseAuthManager[User]):
|
|
592
592
|
|
593
593
|
if details and details.id:
|
594
594
|
# Check whether the user has permissions to access a specific DAG Run permission on a DAG Level
|
595
|
-
resource_dag_name =
|
595
|
+
resource_dag_name = permissions.resource_name(details.id, RESOURCE_DAG_RUN)
|
596
596
|
return self._is_authorized(method=method, resource_type=resource_dag_name, user=user)
|
597
597
|
|
598
598
|
return False
|
@@ -624,19 +624,6 @@ class FabAuthManager(BaseAuthManager[User]):
|
|
624
624
|
raise AirflowException(f"Unknown DAG access entity: {dag_access_entity}")
|
625
625
|
return _MAP_DAG_ACCESS_ENTITY_TO_FAB_RESOURCE_TYPE[dag_access_entity]
|
626
626
|
|
627
|
-
def _resource_name(self, dag_id: str, resource_type: str) -> str:
|
628
|
-
"""
|
629
|
-
Return the FAB resource name for a DAG id.
|
630
|
-
|
631
|
-
:param dag_id: the DAG id
|
632
|
-
|
633
|
-
:meta private:
|
634
|
-
"""
|
635
|
-
root_dag_id = self._get_root_dag_id(dag_id)
|
636
|
-
if hasattr(permissions, "resource_name"):
|
637
|
-
return getattr(permissions, "resource_name")(root_dag_id, resource_type)
|
638
|
-
return getattr(permissions, "resource_name_for_dag")(root_dag_id)
|
639
|
-
|
640
627
|
@staticmethod
|
641
628
|
def _get_user_permissions(user: User):
|
642
629
|
"""
|
@@ -651,23 +638,6 @@ class FabAuthManager(BaseAuthManager[User]):
|
|
651
638
|
return []
|
652
639
|
return getattr(user, "perms") or []
|
653
640
|
|
654
|
-
def _get_root_dag_id(self, dag_id: str) -> str:
|
655
|
-
"""
|
656
|
-
Return the root DAG id in case of sub DAG, return the DAG id otherwise.
|
657
|
-
|
658
|
-
:param dag_id: the DAG id
|
659
|
-
|
660
|
-
:meta private:
|
661
|
-
"""
|
662
|
-
if not self.appbuilder:
|
663
|
-
raise AirflowException("AppBuilder is not initialized.")
|
664
|
-
|
665
|
-
if "." in dag_id and hasattr(DagModel, "root_dag_id"):
|
666
|
-
return self.appbuilder.get_session.scalar(
|
667
|
-
select(DagModel.dag_id, DagModel.root_dag_id).where(DagModel.dag_id == dag_id).limit(1)
|
668
|
-
)
|
669
|
-
return dag_id
|
670
|
-
|
671
641
|
def _sync_appbuilder_roles(self):
|
672
642
|
"""
|
673
643
|
Sync appbuilder roles to DB.
|
@@ -216,6 +216,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
216
216
|
(permissions.ACTION_CAN_READ, RESOURCE_ASSET_ALIAS),
|
217
217
|
(permissions.ACTION_CAN_READ, RESOURCE_BACKFILL),
|
218
218
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_CLUSTER_ACTIVITY),
|
219
|
+
(permissions.ACTION_CAN_READ, permissions.RESOURCE_CONFIG),
|
219
220
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_POOL),
|
220
221
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_IMPORT_ERROR),
|
221
222
|
(permissions.ACTION_CAN_READ, permissions.RESOURCE_JOB),
|
@@ -258,7 +259,6 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
258
259
|
|
259
260
|
# [START security_op_perms]
|
260
261
|
OP_PERMISSIONS = [
|
261
|
-
(permissions.ACTION_CAN_READ, permissions.RESOURCE_CONFIG),
|
262
262
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_ADMIN_MENU),
|
263
263
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_CONFIG),
|
264
264
|
(permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_CONNECTION),
|
@@ -921,15 +921,14 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
921
921
|
dags = dagbag.dags.values()
|
922
922
|
|
923
923
|
for dag in dags:
|
924
|
-
root_dag_id = dag.dag_id
|
925
924
|
for resource_name, resource_values in self.RESOURCE_DETAILS_MAP.items():
|
926
|
-
dag_resource_name =
|
925
|
+
dag_resource_name = permissions.resource_name(dag.dag_id, resource_name)
|
927
926
|
for action_name in resource_values["actions"]:
|
928
927
|
if (action_name, dag_resource_name) not in perms:
|
929
928
|
self._merge_perm(action_name, dag_resource_name)
|
930
929
|
|
931
930
|
if dag.access_control is not None:
|
932
|
-
self.sync_perm_for_dag(
|
931
|
+
self.sync_perm_for_dag(dag.dag_id, dag.access_control)
|
933
932
|
|
934
933
|
def sync_perm_for_dag(
|
935
934
|
self,
|
@@ -949,7 +948,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
949
948
|
:return:
|
950
949
|
"""
|
951
950
|
for resource_name, resource_values in self.RESOURCE_DETAILS_MAP.items():
|
952
|
-
dag_resource_name =
|
951
|
+
dag_resource_name = permissions.resource_name(dag_id, resource_name)
|
953
952
|
for dag_action_name in resource_values["actions"]:
|
954
953
|
self.create_permission(dag_action_name, dag_resource_name)
|
955
954
|
|
@@ -962,17 +961,6 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
962
961
|
dag_id,
|
963
962
|
)
|
964
963
|
|
965
|
-
def _resource_name(self, dag_id: str, resource_name: str) -> str:
|
966
|
-
"""
|
967
|
-
Get the resource name from permissions.
|
968
|
-
|
969
|
-
This method is to keep compatibility with new FAB versions
|
970
|
-
running with old airflow versions.
|
971
|
-
"""
|
972
|
-
if hasattr(permissions, "resource_name"):
|
973
|
-
return getattr(permissions, "resource_name")(dag_id, resource_name)
|
974
|
-
return getattr(permissions, "resource_name_for_dag")(dag_id)
|
975
|
-
|
976
964
|
def _sync_dag_view_permissions(
|
977
965
|
self,
|
978
966
|
dag_id: str,
|
@@ -1000,7 +988,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
1000
988
|
|
1001
989
|
# Revoking stale permissions for all possible DAG level resources
|
1002
990
|
for resource_name in self.RESOURCE_DETAILS_MAP.keys():
|
1003
|
-
dag_resource_name =
|
991
|
+
dag_resource_name = permissions.resource_name(dag_id, resource_name)
|
1004
992
|
if resource := self.get_resource(dag_resource_name):
|
1005
993
|
existing_dag_perms = self.get_resource_permissions(resource)
|
1006
994
|
for perm in existing_dag_perms:
|
@@ -1043,7 +1031,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
|
|
1043
1031
|
f"The set of valid resource names is: {self.RESOURCE_DETAILS_MAP.keys()}"
|
1044
1032
|
)
|
1045
1033
|
|
1046
|
-
dag_resource_name =
|
1034
|
+
dag_resource_name = permissions.resource_name(dag_id, resource_name)
|
1047
1035
|
self.log.debug("Syncing DAG-level permissions for DAG '%s'", dag_resource_name)
|
1048
1036
|
|
1049
1037
|
invalid_actions = set(actions) - self.RESOURCE_DETAILS_MAP[resource_name]["actions"]
|
@@ -22,7 +22,7 @@
|
|
22
22
|
"copy-webpack-plugin": "^13.0.0",
|
23
23
|
"css-loader": "7.1.2",
|
24
24
|
"css-minimizer-webpack-plugin": "^7.0.2",
|
25
|
-
"eslint": "^9.
|
25
|
+
"eslint": "^9.25.1",
|
26
26
|
"eslint-config-prettier": "^10.1.2",
|
27
27
|
"eslint-plugin-html": "^8.1.2",
|
28
28
|
"eslint-plugin-import": "^2.27.5",
|
@@ -33,10 +33,10 @@
|
|
33
33
|
"moment": "^2.29.4",
|
34
34
|
"moment-locales-webpack-plugin": "^1.2.0",
|
35
35
|
"prettier": "^3.5.3",
|
36
|
-
"stylelint": "^16.
|
36
|
+
"stylelint": "^16.19.1",
|
37
37
|
"terser-webpack-plugin": "<6.0.0",
|
38
38
|
"url-loader": "4.1.1",
|
39
|
-
"webpack": "^5.99.
|
39
|
+
"webpack": "^5.99.7",
|
40
40
|
"webpack-cli": "^6.0.1",
|
41
41
|
"webpack-license-plugin": "^4.2.1",
|
42
42
|
"webpack-manifest-plugin": "^5.0.1"
|
@@ -1654,9 +1654,9 @@
|
|
1654
1654
|
}
|
1655
1655
|
},
|
1656
1656
|
"node_modules/@eslint/config-helpers": {
|
1657
|
-
"version": "0.2.
|
1658
|
-
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.
|
1659
|
-
"integrity": "sha512-
|
1657
|
+
"version": "0.2.1",
|
1658
|
+
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz",
|
1659
|
+
"integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==",
|
1660
1660
|
"dev": true,
|
1661
1661
|
"license": "Apache-2.0",
|
1662
1662
|
"engines": {
|
@@ -1664,9 +1664,9 @@
|
|
1664
1664
|
}
|
1665
1665
|
},
|
1666
1666
|
"node_modules/@eslint/core": {
|
1667
|
-
"version": "0.
|
1668
|
-
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.
|
1669
|
-
"integrity": "sha512-
|
1667
|
+
"version": "0.13.0",
|
1668
|
+
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz",
|
1669
|
+
"integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==",
|
1670
1670
|
"dev": true,
|
1671
1671
|
"license": "Apache-2.0",
|
1672
1672
|
"dependencies": {
|
@@ -1734,9 +1734,9 @@
|
|
1734
1734
|
}
|
1735
1735
|
},
|
1736
1736
|
"node_modules/@eslint/js": {
|
1737
|
-
"version": "9.
|
1738
|
-
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.
|
1739
|
-
"integrity": "sha512-
|
1737
|
+
"version": "9.25.1",
|
1738
|
+
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.25.1.tgz",
|
1739
|
+
"integrity": "sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==",
|
1740
1740
|
"dev": true,
|
1741
1741
|
"license": "MIT",
|
1742
1742
|
"engines": {
|
@@ -1754,13 +1754,13 @@
|
|
1754
1754
|
}
|
1755
1755
|
},
|
1756
1756
|
"node_modules/@eslint/plugin-kit": {
|
1757
|
-
"version": "0.2.
|
1758
|
-
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.
|
1759
|
-
"integrity": "sha512-
|
1757
|
+
"version": "0.2.8",
|
1758
|
+
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz",
|
1759
|
+
"integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==",
|
1760
1760
|
"dev": true,
|
1761
1761
|
"license": "Apache-2.0",
|
1762
1762
|
"dependencies": {
|
1763
|
-
"@eslint/core": "^0.
|
1763
|
+
"@eslint/core": "^0.13.0",
|
1764
1764
|
"levn": "^0.4.1"
|
1765
1765
|
},
|
1766
1766
|
"engines": {
|
@@ -2830,20 +2830,20 @@
|
|
2830
2830
|
"dev": true
|
2831
2831
|
},
|
2832
2832
|
"node_modules/cacheable": {
|
2833
|
-
"version": "1.8.
|
2834
|
-
"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.
|
2835
|
-
"integrity": "sha512-
|
2833
|
+
"version": "1.8.10",
|
2834
|
+
"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.10.tgz",
|
2835
|
+
"integrity": "sha512-0ZnbicB/N2R6uziva8l6O6BieBklArWyiGx4GkwAhLKhSHyQtRfM9T1nx7HHuHDKkYB/efJQhz3QJ6x/YqoZzA==",
|
2836
2836
|
"dev": true,
|
2837
2837
|
"license": "MIT",
|
2838
2838
|
"dependencies": {
|
2839
|
-
"hookified": "^1.
|
2840
|
-
"keyv": "^5.3.
|
2839
|
+
"hookified": "^1.8.1",
|
2840
|
+
"keyv": "^5.3.2"
|
2841
2841
|
}
|
2842
2842
|
},
|
2843
2843
|
"node_modules/cacheable/node_modules/keyv": {
|
2844
|
-
"version": "5.3.
|
2845
|
-
"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.
|
2846
|
-
"integrity": "sha512-
|
2844
|
+
"version": "5.3.3",
|
2845
|
+
"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz",
|
2846
|
+
"integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==",
|
2847
2847
|
"dev": true,
|
2848
2848
|
"license": "MIT",
|
2849
2849
|
"dependencies": {
|
@@ -3949,20 +3949,20 @@
|
|
3949
3949
|
}
|
3950
3950
|
},
|
3951
3951
|
"node_modules/eslint": {
|
3952
|
-
"version": "9.
|
3953
|
-
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.
|
3954
|
-
"integrity": "sha512-
|
3952
|
+
"version": "9.25.1",
|
3953
|
+
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.25.1.tgz",
|
3954
|
+
"integrity": "sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==",
|
3955
3955
|
"dev": true,
|
3956
3956
|
"license": "MIT",
|
3957
3957
|
"dependencies": {
|
3958
3958
|
"@eslint-community/eslint-utils": "^4.2.0",
|
3959
3959
|
"@eslint-community/regexpp": "^4.12.1",
|
3960
3960
|
"@eslint/config-array": "^0.20.0",
|
3961
|
-
"@eslint/config-helpers": "^0.2.
|
3962
|
-
"@eslint/core": "^0.
|
3961
|
+
"@eslint/config-helpers": "^0.2.1",
|
3962
|
+
"@eslint/core": "^0.13.0",
|
3963
3963
|
"@eslint/eslintrc": "^3.3.1",
|
3964
|
-
"@eslint/js": "9.
|
3965
|
-
"@eslint/plugin-kit": "^0.2.
|
3964
|
+
"@eslint/js": "9.25.1",
|
3965
|
+
"@eslint/plugin-kit": "^0.2.8",
|
3966
3966
|
"@humanfs/node": "^0.16.6",
|
3967
3967
|
"@humanwhocodes/module-importer": "^1.0.1",
|
3968
3968
|
"@humanwhocodes/retry": "^0.4.2",
|
@@ -4598,15 +4598,15 @@
|
|
4598
4598
|
}
|
4599
4599
|
},
|
4600
4600
|
"node_modules/flat-cache": {
|
4601
|
-
"version": "6.1.
|
4602
|
-
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.
|
4603
|
-
"integrity": "sha512-
|
4601
|
+
"version": "6.1.8",
|
4602
|
+
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.8.tgz",
|
4603
|
+
"integrity": "sha512-R6MaD3nrJAtO7C3QOuS79ficm2pEAy++TgEUD8ii1LVlbcgZ9DtASLkt9B+RZSFCzm7QHDMlXPsqqB6W2Pfr1Q==",
|
4604
4604
|
"dev": true,
|
4605
4605
|
"license": "MIT",
|
4606
4606
|
"dependencies": {
|
4607
4607
|
"cacheable": "^1.8.9",
|
4608
4608
|
"flatted": "^3.3.3",
|
4609
|
-
"hookified": "^1.
|
4609
|
+
"hookified": "^1.8.1"
|
4610
4610
|
}
|
4611
4611
|
},
|
4612
4612
|
"node_modules/flatted": {
|
@@ -4971,9 +4971,9 @@
|
|
4971
4971
|
}
|
4972
4972
|
},
|
4973
4973
|
"node_modules/hookified": {
|
4974
|
-
"version": "1.8.
|
4975
|
-
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.
|
4976
|
-
"integrity": "sha512-
|
4974
|
+
"version": "1.8.2",
|
4975
|
+
"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.2.tgz",
|
4976
|
+
"integrity": "sha512-5nZbBNP44sFCDjSoB//0N7m508APCgbQ4mGGo1KJGBYyCKNHfry1Pvd0JVHZIxjdnqn8nFRBAN/eFB6Rk/4w5w==",
|
4977
4977
|
"dev": true,
|
4978
4978
|
"license": "MIT"
|
4979
4979
|
},
|
@@ -5743,9 +5743,9 @@
|
|
5743
5743
|
}
|
5744
5744
|
},
|
5745
5745
|
"node_modules/known-css-properties": {
|
5746
|
-
"version": "0.
|
5747
|
-
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.
|
5748
|
-
"integrity": "sha512-
|
5746
|
+
"version": "0.36.0",
|
5747
|
+
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
|
5748
|
+
"integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
|
5749
5749
|
"dev": true,
|
5750
5750
|
"license": "MIT"
|
5751
5751
|
},
|
@@ -7445,9 +7445,9 @@
|
|
7445
7445
|
"dev": true
|
7446
7446
|
},
|
7447
7447
|
"node_modules/schema-utils": {
|
7448
|
-
"version": "4.3.
|
7449
|
-
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.
|
7450
|
-
"integrity": "sha512-
|
7448
|
+
"version": "4.3.2",
|
7449
|
+
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz",
|
7450
|
+
"integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==",
|
7451
7451
|
"dev": true,
|
7452
7452
|
"license": "MIT",
|
7453
7453
|
"dependencies": {
|
@@ -7882,9 +7882,9 @@
|
|
7882
7882
|
}
|
7883
7883
|
},
|
7884
7884
|
"node_modules/stylelint": {
|
7885
|
-
"version": "16.
|
7886
|
-
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.
|
7887
|
-
"integrity": "sha512-
|
7885
|
+
"version": "16.19.1",
|
7886
|
+
"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz",
|
7887
|
+
"integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==",
|
7888
7888
|
"dev": true,
|
7889
7889
|
"funding": [
|
7890
7890
|
{
|
@@ -7911,7 +7911,7 @@
|
|
7911
7911
|
"debug": "^4.3.7",
|
7912
7912
|
"fast-glob": "^3.3.3",
|
7913
7913
|
"fastest-levenshtein": "^1.0.16",
|
7914
|
-
"file-entry-cache": "^10.0.
|
7914
|
+
"file-entry-cache": "^10.0.8",
|
7915
7915
|
"global-modules": "^2.0.0",
|
7916
7916
|
"globby": "^11.1.0",
|
7917
7917
|
"globjoin": "^0.1.4",
|
@@ -7919,7 +7919,7 @@
|
|
7919
7919
|
"ignore": "^7.0.3",
|
7920
7920
|
"imurmurhash": "^0.1.4",
|
7921
7921
|
"is-plain-object": "^5.0.0",
|
7922
|
-
"known-css-properties": "^0.
|
7922
|
+
"known-css-properties": "^0.36.0",
|
7923
7923
|
"mathml-tag-names": "^2.1.3",
|
7924
7924
|
"meow": "^13.2.0",
|
7925
7925
|
"micromatch": "^4.0.8",
|
@@ -7988,13 +7988,13 @@
|
|
7988
7988
|
}
|
7989
7989
|
},
|
7990
7990
|
"node_modules/stylelint/node_modules/file-entry-cache": {
|
7991
|
-
"version": "10.0.
|
7992
|
-
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.
|
7993
|
-
"integrity": "sha512-
|
7991
|
+
"version": "10.0.8",
|
7992
|
+
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.8.tgz",
|
7993
|
+
"integrity": "sha512-FGXHpfmI4XyzbLd3HQ8cbUcsFGohJpZtmQRHr8z8FxxtCe2PcpgIlVLwIgunqjvRmXypBETvwhV4ptJizA+Y1Q==",
|
7994
7994
|
"dev": true,
|
7995
7995
|
"license": "MIT",
|
7996
7996
|
"dependencies": {
|
7997
|
-
"flat-cache": "^6.1.
|
7997
|
+
"flat-cache": "^6.1.8"
|
7998
7998
|
}
|
7999
7999
|
},
|
8000
8000
|
"node_modules/stylelint/node_modules/ignore": {
|
@@ -8603,14 +8603,15 @@
|
|
8603
8603
|
}
|
8604
8604
|
},
|
8605
8605
|
"node_modules/webpack": {
|
8606
|
-
"version": "5.99.
|
8607
|
-
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.
|
8608
|
-
"integrity": "sha512-
|
8606
|
+
"version": "5.99.7",
|
8607
|
+
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.7.tgz",
|
8608
|
+
"integrity": "sha512-CNqKBRMQjwcmKR0idID5va1qlhrqVUKpovi+Ec79ksW8ux7iS1+A6VqzfZXgVYCFRKl7XL5ap3ZoMpwBJxcg0w==",
|
8609
8609
|
"dev": true,
|
8610
8610
|
"license": "MIT",
|
8611
8611
|
"dependencies": {
|
8612
8612
|
"@types/eslint-scope": "^3.7.7",
|
8613
8613
|
"@types/estree": "^1.0.6",
|
8614
|
+
"@types/json-schema": "^7.0.15",
|
8614
8615
|
"@webassemblyjs/ast": "^1.14.1",
|
8615
8616
|
"@webassemblyjs/wasm-edit": "^1.14.1",
|
8616
8617
|
"@webassemblyjs/wasm-parser": "^1.14.1",
|
@@ -8627,7 +8628,7 @@
|
|
8627
8628
|
"loader-runner": "^4.2.0",
|
8628
8629
|
"mime-types": "^2.1.27",
|
8629
8630
|
"neo-async": "^2.6.2",
|
8630
|
-
"schema-utils": "^4.3.
|
8631
|
+
"schema-utils": "^4.3.2",
|
8631
8632
|
"tapable": "^2.1.1",
|
8632
8633
|
"terser-webpack-plugin": "^5.3.11",
|
8633
8634
|
"watchpack": "^2.4.1",
|
@@ -48,7 +48,7 @@
|
|
48
48
|
"copy-webpack-plugin": "^13.0.0",
|
49
49
|
"css-loader": "7.1.2",
|
50
50
|
"css-minimizer-webpack-plugin": "^7.0.2",
|
51
|
-
"eslint": "^9.
|
51
|
+
"eslint": "^9.25.1",
|
52
52
|
"eslint-config-prettier": "^10.1.2",
|
53
53
|
"eslint-plugin-html": "^8.1.2",
|
54
54
|
"eslint-plugin-import": "^2.27.5",
|
@@ -59,10 +59,10 @@
|
|
59
59
|
"moment": "^2.29.4",
|
60
60
|
"moment-locales-webpack-plugin": "^1.2.0",
|
61
61
|
"prettier": "^3.5.3",
|
62
|
-
"stylelint": "^16.
|
62
|
+
"stylelint": "^16.19.1",
|
63
63
|
"terser-webpack-plugin": "<6.0.0",
|
64
64
|
"url-loader": "4.1.1",
|
65
|
-
"webpack": "^5.99.
|
65
|
+
"webpack": "^5.99.7",
|
66
66
|
"webpack-cli": "^6.0.1",
|
67
67
|
"webpack-license-plugin": "^4.2.1",
|
68
68
|
"webpack-manifest-plugin": "^5.0.1"
|
@@ -95,32 +95,9 @@ PREFIX_RESOURCES_MAP = {details["prefix"]: resource for resource, details in RES
|
|
95
95
|
|
96
96
|
|
97
97
|
def resource_name(root_dag_id: str, resource: str) -> str:
|
98
|
-
"""
|
99
|
-
Return the resource name for a DAG id.
|
100
|
-
|
101
|
-
Note that since a sub-DAG should follow the permission of its
|
102
|
-
parent DAG, you should pass ``DagModel.root_dag_id`` to this function,
|
103
|
-
for a subdag. A normal dag should pass the ``DagModel.dag_id``.
|
104
|
-
"""
|
98
|
+
"""Return the resource name for a DAG id."""
|
105
99
|
if root_dag_id in RESOURCE_DETAILS_MAP.keys():
|
106
100
|
return root_dag_id
|
107
101
|
if root_dag_id.startswith(tuple(PREFIX_RESOURCES_MAP.keys())):
|
108
102
|
return root_dag_id
|
109
103
|
return f"{RESOURCE_DETAILS_MAP[resource]['prefix']}{root_dag_id}"
|
110
|
-
|
111
|
-
|
112
|
-
def resource_name_for_dag(root_dag_id: str) -> str:
|
113
|
-
"""
|
114
|
-
Return the resource name for a DAG id.
|
115
|
-
|
116
|
-
Note that since a sub-DAG should follow the permission of its
|
117
|
-
parent DAG, you should pass ``DagModel.root_dag_id`` to this function,
|
118
|
-
for a subdag. A normal dag should pass the ``DagModel.dag_id``.
|
119
|
-
|
120
|
-
Note: This function is kept for backwards compatibility.
|
121
|
-
"""
|
122
|
-
if root_dag_id == RESOURCE_DAG:
|
123
|
-
return root_dag_id
|
124
|
-
if root_dag_id.startswith(RESOURCE_DAG_PREFIX):
|
125
|
-
return root_dag_id
|
126
|
-
return f"{RESOURCE_DAG_PREFIX}{root_dag_id}"
|
@@ -70,7 +70,7 @@ class FabIndexView(IndexView):
|
|
70
70
|
token = get_auth_manager().generate_jwt(g.user)
|
71
71
|
response = make_response(redirect(f"{conf.get('api', 'base_url', fallback='/')}", code=302))
|
72
72
|
|
73
|
-
secure = conf.
|
73
|
+
secure = bool(conf.get("api", "ssl_cert", fallback=""))
|
74
74
|
response.set_cookie(COOKIE_NAME_JWT_TOKEN, token, secure=secure)
|
75
75
|
|
76
76
|
return response
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: apache-airflow-providers-fab
|
3
|
-
Version: 2.0.
|
3
|
+
Version: 2.0.2
|
4
4
|
Summary: Provider package apache-airflow-providers-fab for Apache Airflow
|
5
5
|
Keywords: airflow-provider,fab,airflow,integration
|
6
6
|
Author-email: Apache Software Foundation <dev@airflow.apache.org>
|
@@ -36,8 +36,8 @@ Requires-Dist: werkzeug>=2.2,<4
|
|
36
36
|
Requires-Dist: wtforms>=3.0,<4
|
37
37
|
Requires-Dist: kerberos>=1.3.0 ; extra == "kerberos"
|
38
38
|
Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
|
39
|
-
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.
|
40
|
-
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.
|
39
|
+
Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.2/changelog.html
|
40
|
+
Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.2
|
41
41
|
Project-URL: Mastodon, https://fosstodon.org/@airflow
|
42
42
|
Project-URL: Slack Chat, https://s.apache.org/airflow-slack
|
43
43
|
Project-URL: Source Code, https://github.com/apache/airflow
|
@@ -69,7 +69,7 @@ Provides-Extra: kerberos
|
|
69
69
|
|
70
70
|
Package ``apache-airflow-providers-fab``
|
71
71
|
|
72
|
-
Release: ``2.0.
|
72
|
+
Release: ``2.0.2``
|
73
73
|
|
74
74
|
|
75
75
|
`Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
|
@@ -82,7 +82,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
|
|
82
82
|
are in ``airflow.providers.fab`` python package.
|
83
83
|
|
84
84
|
You can find package information and changelog for the provider
|
85
|
-
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.
|
85
|
+
in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.2/>`_.
|
86
86
|
|
87
87
|
Installation
|
88
88
|
------------
|
@@ -133,5 +133,5 @@ Dependent package
|
|
133
133
|
================================================================================================================== =================
|
134
134
|
|
135
135
|
The changelog for the provider package can be found in the
|
136
|
-
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.
|
136
|
+
`changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/2.0.2/changelog.html>`_.
|
137
137
|
|
{apache_airflow_providers_fab-2.0.1.dist-info → apache_airflow_providers_fab-2.0.2.dist-info}/RECORD
RENAMED
@@ -1,9 +1,9 @@
|
|
1
1
|
airflow/providers/fab/LICENSE,sha256=gXPVwptPlW1TJ4HSuG5OMPg-a3h43OGMkZRR1rpwfJA,10850
|
2
|
-
airflow/providers/fab/__init__.py,sha256=
|
2
|
+
airflow/providers/fab/__init__.py,sha256=FhqpesgH8rXzZCFWzwQHU_EyIobGCvZ_SWN2SbvUhPk,1490
|
3
3
|
airflow/providers/fab/alembic.ini,sha256=_1SvObfjMAkuD7DN5VR2S6Rd7_F81pORZT-w7GJldIA,4461
|
4
4
|
airflow/providers/fab/get_provider_info.py,sha256=I1fRKp4u-vUmSjoVyFmdD_spXfWhmdIqtlnWe2F5m40,5149
|
5
5
|
airflow/providers/fab/auth_manager/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
6
|
-
airflow/providers/fab/auth_manager/fab_auth_manager.py,sha256=
|
6
|
+
airflow/providers/fab/auth_manager/fab_auth_manager.py,sha256=i86cabdyA22N6qtmE0YDhDeBZTVoYhzEJHLS20aYfZU,24749
|
7
7
|
airflow/providers/fab/auth_manager/api/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
8
8
|
airflow/providers/fab/auth_manager/api/auth/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
9
9
|
airflow/providers/fab/auth_manager/api/auth/backend/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
@@ -39,7 +39,7 @@ airflow/providers/fab/auth_manager/schemas/role_and_permission_schema.py,sha256=
|
|
39
39
|
airflow/providers/fab/auth_manager/schemas/user_schema.py,sha256=MLnZotQqAg_BFvJunrSwbwur5CaTjk1ww3eCI3aPT6Y,2401
|
40
40
|
airflow/providers/fab/auth_manager/security_manager/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
41
41
|
airflow/providers/fab/auth_manager/security_manager/constants.py,sha256=x1Sjl_Mu3wmaSy3NFZlHxK2z-juzWmMs1SrzJ0aiBBQ,907
|
42
|
-
airflow/providers/fab/auth_manager/security_manager/override.py,sha256=
|
42
|
+
airflow/providers/fab/auth_manager/security_manager/override.py,sha256=FJASD5Bi9USIjNDqMgal_PW7zwQ0weCc3hLTbngcAJ4,96637
|
43
43
|
airflow/providers/fab/auth_manager/views/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
|
44
44
|
airflow/providers/fab/auth_manager/views/permissions.py,sha256=CT6jMCDHtirs0Qe4Penb6VwQq1yZeZ1lOLZITIlVqm4,2904
|
45
45
|
airflow/providers/fab/auth_manager/views/roles_list.py,sha256=DwJ1iOCfpbxsWTEFWjW5_Jo3fmrZwxj1rPeflTaSg7A,1512
|
@@ -57,13 +57,13 @@ airflow/providers/fab/www/airflow_flask_app.py,sha256=-JPQ-mS1kKEj5adENnoVSD4LaF
|
|
57
57
|
airflow/providers/fab/www/app.py,sha256=RhUCSxS4Sivwu7aeLOqIVADszBh9uWOs1oni99FY9Rk,4951
|
58
58
|
airflow/providers/fab/www/auth.py,sha256=1oLlJybsjOqxhcmD_Rbtcg5nQySmfArJnIw7jq09V18,12615
|
59
59
|
airflow/providers/fab/www/constants.py,sha256=VUg48B-EZAUZ2IIdmL31Iv0lRlP0yLNPNTufB7rsWr0,1352
|
60
|
-
airflow/providers/fab/www/package-lock.json,sha256=
|
61
|
-
airflow/providers/fab/www/package.json,sha256=
|
60
|
+
airflow/providers/fab/www/package-lock.json,sha256=3y4hjd70s6mN4F2BL2uj-TUFju-iOslcKeOFGhWcnb4,328293
|
61
|
+
airflow/providers/fab/www/package.json,sha256=0iBaCW_DfhW3OBDyeuytFOyOn1VsjLPkquPguT9rw8E,2357
|
62
62
|
airflow/providers/fab/www/security_appless.py,sha256=J0OJGRPq6NK2vY6qfMRvyMUEc-E59vXucquQdjgsndY,1655
|
63
63
|
airflow/providers/fab/www/security_manager.py,sha256=Zr6xqjego7Z1-1h2HHyWLt1ZBKG8yHHmNPfEXNxXaRY,4850
|
64
64
|
airflow/providers/fab/www/session.py,sha256=qyy8ipXLe4qH7D52tH3aKY6hyJNJ5tUfHel7_1S4BGg,1741
|
65
65
|
airflow/providers/fab/www/utils.py,sha256=9D_ESPV6ar5GOenD2Jm-lS7pW78yzxCWC5N-3kgMem8,9982
|
66
|
-
airflow/providers/fab/www/views.py,sha256=
|
66
|
+
airflow/providers/fab/www/views.py,sha256=tVQ9PTcafyoTdMQ5mvmp0kjlVrkC6Zof4yfB9nlz8tE,4758
|
67
67
|
airflow/providers/fab/www/webpack.config.js,sha256=_TYJ8cnmJW0vxb87xY4eNr9ZE7G5NFUPuiXvpF6SKys,6124
|
68
68
|
airflow/providers/fab/www/api_connexion/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
69
69
|
airflow/providers/fab/www/api_connexion/exceptions.py,sha256=j0S90JH6Q5hnkshfiZot7Yb9hAvFs1JON0EYjW2bxW0,5783
|
@@ -78,7 +78,7 @@ airflow/providers/fab/www/extensions/init_security.py,sha256=sDwMjNMMQgyn2tsQAVk
|
|
78
78
|
airflow/providers/fab/www/extensions/init_session.py,sha256=y8zUVSngawNhkO4egEkhrQ_2v03wCeDjm8LUaNY0sZ8,2637
|
79
79
|
airflow/providers/fab/www/extensions/init_views.py,sha256=4zFnPwFhO3wfqnDDvsRgeU5jjy2JImgMia-flg6BZgQ,6411
|
80
80
|
airflow/providers/fab/www/security/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
|
81
|
-
airflow/providers/fab/www/security/permissions.py,sha256=
|
81
|
+
airflow/providers/fab/www/security/permissions.py,sha256=A9WTtY7uUDOOEwIQyVu6h6ql3uFBx2HTxZ10itHJwL4,3741
|
82
82
|
airflow/providers/fab/www/static/sort_asc.png,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
83
83
|
airflow/providers/fab/www/static/sort_both.png,sha256=PgFsI65RQXOCtkCuLRnrSAR1MsN61TiUvRhVhlWcz_s,201
|
84
84
|
airflow/providers/fab/www/static/sort_desc.png,sha256=0I7Q4h8YfdMJAw1GUiTagIURmhWhfWFroOR3u1DG8Q0,158
|
@@ -119,9 +119,9 @@ airflow/providers/fab/www/templates/appbuilder/index.html,sha256=ZaZsNdD8fCENqdn
|
|
119
119
|
airflow/providers/fab/www/templates/appbuilder/navbar.html,sha256=1Q8u90aONY_PKTBtApwyp0EeudSsJyysW2UYo9Fa1cc,10215
|
120
120
|
airflow/providers/fab/www/templates/appbuilder/navbar_menu.html,sha256=WWQ-_QLMqcW4Cpx_1_yulaQO-soD6ztnY2zfmBAUAGI,2034
|
121
121
|
airflow/providers/fab/www/templates/appbuilder/navbar_right.html,sha256=qrwZDBbzLi4yhLrfai842MJDdQ4C31Xz9hJ3NoG5mo0,2488
|
122
|
-
apache_airflow_providers_fab-2.0.
|
123
|
-
apache_airflow_providers_fab-2.0.
|
124
|
-
apache_airflow_providers_fab-2.0.
|
125
|
-
apache_airflow_providers_fab-2.0.
|
126
|
-
apache_airflow_providers_fab-2.0.
|
127
|
-
apache_airflow_providers_fab-2.0.
|
122
|
+
apache_airflow_providers_fab-2.0.2.dist-info/entry_points.txt,sha256=m05kASp7vFi0ZmQ--CFp7GeJpPL7UT2RQF8EEP5XRX8,99
|
123
|
+
apache_airflow_providers_fab-2.0.2.dist-info/licenses/3rd-party-licenses/LICENSES-ui.txt,sha256=C9vBr_KiUhI3jjCS754n_SPi-ylD8SiJgXlOWuNOO98,3688
|
124
|
+
apache_airflow_providers_fab-2.0.2.dist-info/licenses/NOTICE,sha256=GrKwLaFNGIn3J86ucRfNIExRSCD6-7nty84-84F2ad4,448
|
125
|
+
apache_airflow_providers_fab-2.0.2.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
126
|
+
apache_airflow_providers_fab-2.0.2.dist-info/METADATA,sha256=X7CcEhhoL19-IewiyTo7w9IbK1MFs2e_WgfrZgQIoF8,6147
|
127
|
+
apache_airflow_providers_fab-2.0.2.dist-info/RECORD,,
|
{apache_airflow_providers_fab-2.0.1.dist-info → apache_airflow_providers_fab-2.0.2.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|