apache-airflow-providers-fab 1.4.0rc1__py3-none-any.whl → 1.4.1__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.
@@ -29,7 +29,7 @@ from airflow import __version__ as airflow_version
29
29
 
30
30
  __all__ = ["__version__"]
31
31
 
32
- __version__ = "1.4.0"
32
+ __version__ = "1.4.1"
33
33
 
34
34
  if packaging.version.parse(packaging.version.parse(airflow_version).base_version) < packaging.version.parse(
35
35
  "2.9.0"
@@ -62,9 +62,7 @@ def requires_authentication(function: T):
62
62
 
63
63
  @wraps(function)
64
64
  def decorated(*args, **kwargs):
65
- if auth_current_user() is not None or current_app.appbuilder.get_app.config.get(
66
- "AUTH_ROLE_PUBLIC", None
67
- ):
65
+ if auth_current_user() is not None or current_app.config.get("AUTH_ROLE_PUBLIC", None):
68
66
  return function(*args, **kwargs)
69
67
  else:
70
68
  return Response("Unauthorized", 401, {"WWW-Authenticate": "Basic"})
@@ -124,7 +124,7 @@ def requires_authentication(function: T, find_user: Callable[[str], BaseUser] |
124
124
 
125
125
  @wraps(function)
126
126
  def decorated(*args, **kwargs):
127
- if current_app.appbuilder.get_app.config.get("AUTH_ROLE_PUBLIC", None):
127
+ if current_app.config.get("AUTH_ROLE_PUBLIC", None):
128
128
  response = function(*args, **kwargs)
129
129
  return make_response(response)
130
130
 
@@ -37,7 +37,6 @@ from airflow.auth.managers.models.resource_details import (
37
37
  ConnectionDetails,
38
38
  DagAccessEntity,
39
39
  DagDetails,
40
- DatasetDetails,
41
40
  PoolDetails,
42
41
  VariableDetails,
43
42
  )
@@ -67,7 +66,6 @@ from airflow.security.permissions import (
67
66
  RESOURCE_DAG_DEPENDENCIES,
68
67
  RESOURCE_DAG_RUN,
69
68
  RESOURCE_DAG_WARNING,
70
- RESOURCE_DATASET,
71
69
  RESOURCE_DOCS,
72
70
  RESOURCE_IMPORT_ERROR,
73
71
  RESOURCE_JOB,
@@ -94,7 +92,15 @@ if TYPE_CHECKING:
94
92
  from airflow.cli.cli_config import (
95
93
  CLICommand,
96
94
  )
95
+ from airflow.providers.common.compat.assets import AssetDetails
97
96
  from airflow.providers.fab.auth_manager.security_manager.override import FabAirflowSecurityManagerOverride
97
+ from airflow.security.permissions import RESOURCE_ASSET
98
+ else:
99
+ try:
100
+ from airflow.security.permissions import RESOURCE_ASSET
101
+ except ImportError:
102
+ from airflow.security.permissions import RESOURCE_DATASET as RESOURCE_ASSET
103
+
98
104
 
99
105
  _MAP_DAG_ACCESS_ENTITY_TO_FAB_RESOURCE_TYPE: dict[DagAccessEntity, tuple[str, ...]] = {
100
106
  DagAccessEntity.AUDIT_LOG: (RESOURCE_AUDIT_LOG,),
@@ -263,10 +269,10 @@ class FabAuthManager(BaseAuthManager):
263
269
  for resource_type in resource_types
264
270
  )
265
271
 
266
- def is_authorized_dataset(
267
- self, *, method: ResourceMethod, details: DatasetDetails | None = None, user: BaseUser | None = None
272
+ def is_authorized_asset(
273
+ self, *, method: ResourceMethod, details: AssetDetails | None = None, user: BaseUser | None = None
268
274
  ) -> bool:
269
- return self._is_authorized(method=method, resource_type=RESOURCE_DATASET, user=user)
275
+ return self._is_authorized(method=method, resource_type=RESOURCE_ASSET, user=user)
270
276
 
271
277
  def is_authorized_pool(
272
278
  self, *, method: ResourceMethod, details: PoolDetails | None = None, user: BaseUser | None = None
@@ -342,10 +348,7 @@ class FabAuthManager(BaseAuthManager):
342
348
  resources.add(resource[len(permissions.RESOURCE_DAG_PREFIX) :])
343
349
  else:
344
350
  resources.add(resource)
345
- return {
346
- dag.dag_id
347
- for dag in session.execute(select(DagModel.dag_id).where(DagModel.dag_id.in_(resources)))
348
- }
351
+ return set(session.scalars(select(DagModel.dag_id).where(DagModel.dag_id.in_(resources))))
349
352
 
350
353
  @cached_property
351
354
  def security_manager(self) -> FabAirflowSecurityManagerOverride:
@@ -35,7 +35,7 @@ class AnonymousUser(AnonymousUserMixin, BaseUser):
35
35
  @property
36
36
  def roles(self):
37
37
  if not self._roles:
38
- public_role = current_app.appbuilder.get_app.config.get("AUTH_ROLE_PUBLIC", None)
38
+ public_role = current_app.config.get("AUTH_ROLE_PUBLIC", None)
39
39
  self._roles = {current_app.appbuilder.sm.find_role(public_role)} if public_role else set()
40
40
  return self._roles
41
41
 
@@ -115,6 +115,12 @@ from airflow.www.session import AirflowDatabaseSessionInterface
115
115
 
116
116
  if TYPE_CHECKING:
117
117
  from airflow.auth.managers.base_auth_manager import ResourceMethod
118
+ from airflow.security.permissions import RESOURCE_ASSET
119
+ else:
120
+ try:
121
+ from airflow.security.permissions import RESOURCE_ASSET
122
+ except ImportError:
123
+ from airflow.security.permissions import RESOURCE_DATASET as RESOURCE_ASSET
118
124
 
119
125
  log = logging.getLogger(__name__)
120
126
 
@@ -234,7 +240,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
234
240
  (permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG_DEPENDENCIES),
235
241
  (permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG_CODE),
236
242
  (permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG_RUN),
237
- (permissions.ACTION_CAN_READ, permissions.RESOURCE_DATASET),
243
+ (permissions.ACTION_CAN_READ, RESOURCE_ASSET),
238
244
  (permissions.ACTION_CAN_READ, permissions.RESOURCE_CLUSTER_ACTIVITY),
239
245
  (permissions.ACTION_CAN_READ, permissions.RESOURCE_POOL),
240
246
  (permissions.ACTION_CAN_READ, permissions.RESOURCE_IMPORT_ERROR),
@@ -253,7 +259,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
253
259
  (permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DAG),
254
260
  (permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DAG_DEPENDENCIES),
255
261
  (permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DAG_RUN),
256
- (permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DATASET),
262
+ (permissions.ACTION_CAN_ACCESS_MENU, RESOURCE_ASSET),
257
263
  (permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_CLUSTER_ACTIVITY),
258
264
  (permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DOCS),
259
265
  (permissions.ACTION_CAN_ACCESS_MENU, permissions.RESOURCE_DOCS_MENU),
@@ -273,7 +279,7 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
273
279
  (permissions.ACTION_CAN_CREATE, permissions.RESOURCE_DAG_RUN),
274
280
  (permissions.ACTION_CAN_EDIT, permissions.RESOURCE_DAG_RUN),
275
281
  (permissions.ACTION_CAN_DELETE, permissions.RESOURCE_DAG_RUN),
276
- (permissions.ACTION_CAN_CREATE, permissions.RESOURCE_DATASET),
282
+ (permissions.ACTION_CAN_CREATE, RESOURCE_ASSET),
277
283
  ]
278
284
  # [END security_user_perms]
279
285
 
@@ -302,8 +308,8 @@ class FabAirflowSecurityManagerOverride(AirflowSecurityManagerV2):
302
308
  (permissions.ACTION_CAN_EDIT, permissions.RESOURCE_VARIABLE),
303
309
  (permissions.ACTION_CAN_DELETE, permissions.RESOURCE_VARIABLE),
304
310
  (permissions.ACTION_CAN_DELETE, permissions.RESOURCE_XCOM),
305
- (permissions.ACTION_CAN_DELETE, permissions.RESOURCE_DATASET),
306
- (permissions.ACTION_CAN_CREATE, permissions.RESOURCE_DATASET),
311
+ (permissions.ACTION_CAN_DELETE, RESOURCE_ASSET),
312
+ (permissions.ACTION_CAN_CREATE, RESOURCE_ASSET),
307
313
  ]
308
314
  # [END security_op_perms]
309
315
 
@@ -28,8 +28,9 @@ def get_provider_info():
28
28
  "name": "Fab",
29
29
  "description": "`Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__\n",
30
30
  "state": "ready",
31
- "source-date-epoch": 1726860772,
31
+ "source-date-epoch": 1728485088,
32
32
  "versions": [
33
+ "1.4.1",
33
34
  "1.4.0",
34
35
  "1.3.0",
35
36
  "1.2.2",
@@ -45,6 +46,7 @@ def get_provider_info():
45
46
  ],
46
47
  "dependencies": [
47
48
  "apache-airflow>=2.9.0",
49
+ "apache-airflow-providers-common-compat>=1.2.0",
48
50
  "flask>=2.2,<2.3",
49
51
  "flask-appbuilder==4.5.0",
50
52
  "flask-login>=0.6.2",
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: apache-airflow-providers-fab
3
- Version: 1.4.0rc1
3
+ Version: 1.4.1
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>
7
7
  Maintainer-email: Apache Software Foundation <dev@airflow.apache.org>
8
- Requires-Python: ~=3.8
8
+ Requires-Python: ~=3.9
9
9
  Description-Content-Type: text/x-rst
10
10
  Classifier: Development Status :: 5 - Production/Stable
11
11
  Classifier: Environment :: Console
@@ -15,26 +15,28 @@ Classifier: Intended Audience :: System Administrators
15
15
  Classifier: Framework :: Apache Airflow
16
16
  Classifier: Framework :: Apache Airflow :: Provider
17
17
  Classifier: License :: OSI Approved :: Apache Software License
18
- Classifier: Programming Language :: Python :: 3.8
19
18
  Classifier: Programming Language :: Python :: 3.9
20
19
  Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
21
  Classifier: Programming Language :: Python :: 3.12
23
22
  Classifier: Topic :: System :: Monitoring
24
- Requires-Dist: apache-airflow>=2.9.0rc0
23
+ Requires-Dist: apache-airflow-providers-common-compat>=1.2.0
24
+ Requires-Dist: apache-airflow>=2.9.0
25
25
  Requires-Dist: flask-appbuilder==4.5.0
26
26
  Requires-Dist: flask-login>=0.6.2
27
27
  Requires-Dist: flask>=2.2,<2.3
28
28
  Requires-Dist: google-re2>=1.0
29
29
  Requires-Dist: jmespath>=0.7.0
30
+ Requires-Dist: apache-airflow-providers-common-compat ; extra == "common.compat"
30
31
  Requires-Dist: kerberos>=1.3.0 ; extra == "kerberos"
31
32
  Project-URL: Bug Tracker, https://github.com/apache/airflow/issues
32
- Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.0/changelog.html
33
- Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.0
33
+ Project-URL: Changelog, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/changelog.html
34
+ Project-URL: Documentation, https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1
34
35
  Project-URL: Slack Chat, https://s.apache.org/airflow-slack
35
36
  Project-URL: Source Code, https://github.com/apache/airflow
36
37
  Project-URL: Twitter, https://twitter.com/ApacheAirflow
37
38
  Project-URL: YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/
39
+ Provides-Extra: common.compat
38
40
  Provides-Extra: kerberos
39
41
 
40
42
 
@@ -81,7 +83,7 @@ Provides-Extra: kerberos
81
83
 
82
84
  Package ``apache-airflow-providers-fab``
83
85
 
84
- Release: ``1.4.0.rc1``
86
+ Release: ``1.4.1``
85
87
 
86
88
 
87
89
  `Flask App Builder <https://flask-appbuilder.readthedocs.io/>`__
@@ -94,7 +96,7 @@ This is a provider package for ``fab`` provider. All classes for this provider p
94
96
  are in ``airflow.providers.fab`` python package.
95
97
 
96
98
  You can find package information and changelog for the provider
97
- in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.0/>`_.
99
+ in the `documentation <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/>`_.
98
100
 
99
101
  Installation
100
102
  ------------
@@ -103,21 +105,41 @@ You can install this package on top of an existing Airflow 2 installation (see `
103
105
  for the minimum Airflow version supported) via
104
106
  ``pip install apache-airflow-providers-fab``
105
107
 
106
- The package supports the following python versions: 3.8,3.9,3.10,3.11,3.12
108
+ The package supports the following python versions: 3.9,3.10,3.11,3.12
107
109
 
108
110
  Requirements
109
111
  ------------
110
112
 
111
- ==================== ==================
112
- PIP package Version required
113
- ==================== ==================
114
- ``apache-airflow`` ``>=2.9.0``
115
- ``flask`` ``>=2.2,<2.3``
116
- ``flask-appbuilder`` ``==4.5.0``
117
- ``flask-login`` ``>=0.6.2``
118
- ``google-re2`` ``>=1.0``
119
- ``jmespath`` ``>=0.7.0``
120
- ==================== ==================
113
+ ========================================== ==================
114
+ PIP package Version required
115
+ ========================================== ==================
116
+ ``apache-airflow`` ``>=2.9.0``
117
+ ``apache-airflow-providers-common-compat`` ``>=1.2.0``
118
+ ``flask`` ``>=2.2,<2.3``
119
+ ``flask-appbuilder`` ``==4.5.0``
120
+ ``flask-login`` ``>=0.6.2``
121
+ ``google-re2`` ``>=1.0``
122
+ ``jmespath`` ``>=0.7.0``
123
+ ========================================== ==================
124
+
125
+ Cross provider package dependencies
126
+ -----------------------------------
127
+
128
+ Those are dependencies that might be needed in order to use all the features of the package.
129
+ You need to install the specified provider packages in order to use them.
130
+
131
+ You can install such cross-provider dependencies when installing from PyPI. For example:
132
+
133
+ .. code-block:: bash
134
+
135
+ pip install apache-airflow-providers-fab[common.compat]
136
+
137
+
138
+ ================================================================================================================== =================
139
+ Dependent package Extra
140
+ ================================================================================================================== =================
141
+ `apache-airflow-providers-common-compat <https://airflow.apache.org/docs/apache-airflow-providers-common-compat>`_ ``common.compat``
142
+ ================================================================================================================== =================
121
143
 
122
144
  The changelog for the provider package can be found in the
123
- `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.0/changelog.html>`_.
145
+ `changelog <https://airflow.apache.org/docs/apache-airflow-providers-fab/1.4.1/changelog.html>`_.
@@ -1,14 +1,14 @@
1
1
  airflow/providers/fab/LICENSE,sha256=FFb4jd2AXnOOf7XLP04pQW6jbdhG49TxlGY6fFpCV1Y,13609
2
- airflow/providers/fab/__init__.py,sha256=cDsr9zaomdLZDM0OHErGAqqk62gOk00enaPd7Wggbzs,1490
2
+ airflow/providers/fab/__init__.py,sha256=ft-ofV2W72Ld0YJFldHqbYvGalsdEaNiIGfhdXiaCtU,1490
3
3
  airflow/providers/fab/alembic.ini,sha256=_1SvObfjMAkuD7DN5VR2S6Rd7_F81pORZT-w7GJldIA,4461
4
- airflow/providers/fab/get_provider_info.py,sha256=pmrrrCTCFbUghKT42uXbxRWK5ZKnEaYEMRlleaRSHEg,3351
4
+ airflow/providers/fab/get_provider_info.py,sha256=M4J1OFzzNN9CFKviL_mtxVBixMV4HkdmrUK3wb7odnE,3433
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=RQzFmULrGVre0GHr6MiVAL2_YqzKTf45LoLHpVjUkMY,21949
6
+ airflow/providers/fab/auth_manager/fab_auth_manager.py,sha256=AMMvxna3XvKpw9M0bKpmA41uAqTSb_mi-ZlczikfXo0,22164
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
10
- airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py,sha256=qj9dIyfNXPoZQUUv9JcxgfNK5swS4aTnPcRa0wcE9Gg,2608
11
- airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py,sha256=KAFpis1g8xLDqZsBIzcLGXcGJSpZ_2DTgByHB9uEwqQ,5068
10
+ airflow/providers/fab/auth_manager/api/auth/backend/basic_auth.py,sha256=KhOVO7mzmwr6Ee42Qg9RZ5qP6CfRC0F0u9CMk30npNY,2567
11
+ airflow/providers/fab/auth_manager/api/auth/backend/kerberos_auth.py,sha256=y8hHABP-UVBpg9RPy_I7_nLSWDYU14wqie1HYrmubpc,5049
12
12
  airflow/providers/fab/auth_manager/api_endpoints/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
13
13
  airflow/providers/fab/auth_manager/api_endpoints/role_and_permission_endpoint.py,sha256=jr-nna1-QLwfquCR0FJcETlQOMC-L1Mhknf2-bvqITw,7552
14
14
  airflow/providers/fab/auth_manager/api_endpoints/user_endpoint.py,sha256=TPT4C02jjOXAWI-lOwnaDeS-EEWzJCjQuFVc2E4JsPw,8484
@@ -22,13 +22,13 @@ airflow/providers/fab/auth_manager/cli_commands/utils.py,sha256=yr4CMaP5Y6-0mRws
22
22
  airflow/providers/fab/auth_manager/decorators/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
23
23
  airflow/providers/fab/auth_manager/decorators/auth.py,sha256=Z4_xiS1N1E0MqDP9OxHx_YJvKe0sH15afP0tn5LP3Ss,4948
24
24
  airflow/providers/fab/auth_manager/models/__init__.py,sha256=KZl07tphFlZ8kTnsV8k7eTMilaWtd6rV-RjtWOkb13E,9243
25
- airflow/providers/fab/auth_manager/models/anonymous_user.py,sha256=CNwZHKyURxkTSkqhnyGioML9qBsngDP0wmfdFe04w8E,1893
25
+ airflow/providers/fab/auth_manager/models/anonymous_user.py,sha256=gE2E7NQgNBqSJe44pq_RKeZNe7KMVrACL43akF5ucag,1874
26
26
  airflow/providers/fab/auth_manager/models/db.py,sha256=lidEkcdFZ7jR-Sva0z3JLhfba0X3k4cOPmQM5wyzke4,4375
27
27
  airflow/providers/fab/auth_manager/openapi/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
28
28
  airflow/providers/fab/auth_manager/openapi/v1.yaml,sha256=xFlQMccLoGarx8SnQvGJ1DRfHo4jQ3p9DzoPqQINcCw,19380
29
29
  airflow/providers/fab/auth_manager/security_manager/__init__.py,sha256=mlJxuZLkd5x-iq2SBwD3mvRQpt3YR7wjz_nceyF1IaI,787
30
30
  airflow/providers/fab/auth_manager/security_manager/constants.py,sha256=x1Sjl_Mu3wmaSy3NFZlHxK2z-juzWmMs1SrzJ0aiBBQ,907
31
- airflow/providers/fab/auth_manager/security_manager/override.py,sha256=uzHY9zftcSdJXozsgKdfR9KK7HIK_RYQa7Ad1nP7IMY,115425
31
+ airflow/providers/fab/auth_manager/security_manager/override.py,sha256=ayA5KDfN7-iXmS5wJ9arkbKyJ9sHBWKXZCE9ZSa0gTU,115602
32
32
  airflow/providers/fab/auth_manager/views/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
33
33
  airflow/providers/fab/auth_manager/views/permissions.py,sha256=k5APUTqqKZqMxCWlKrUEgqdDVrGa9719HJ3UmFpiSLc,2886
34
34
  airflow/providers/fab/auth_manager/views/roles_list.py,sha256=o_VqnLbQa4sisKxLwyx6VCl3HmvjKcjkrJG23R81FMQ,1494
@@ -41,7 +41,7 @@ airflow/providers/fab/migrations/env.py,sha256=brxmsuAiSRSwzG14Butue1chSJSXaLW53
41
41
  airflow/providers/fab/migrations/script.py.mako,sha256=_krfPtzv1Unme2b9MCHPgXo0g73HcN2_zDgz3co2N4M,1353
42
42
  airflow/providers/fab/migrations/versions/0001_1_4_0_placeholder_migration.py,sha256=wLZiBiWjfSofXZ4jXMjpEKkIc3jI0a6hpJ73xEYAzss,1370
43
43
  airflow/providers/fab/migrations/versions/__init__.py,sha256=9hdXHABrVpkbpjZgUft39kOFL2xSGeG4GEua0Hmelus,785
44
- apache_airflow_providers_fab-1.4.0rc1.dist-info/entry_points.txt,sha256=m05kASp7vFi0ZmQ--CFp7GeJpPL7UT2RQF8EEP5XRX8,99
45
- apache_airflow_providers_fab-1.4.0rc1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
46
- apache_airflow_providers_fab-1.4.0rc1.dist-info/METADATA,sha256=LZQ-8b5LI6Fb-kqfgQVLYrsj4vVYa3X5-MUzKy9ZMgc,5100
47
- apache_airflow_providers_fab-1.4.0rc1.dist-info/RECORD,,
44
+ apache_airflow_providers_fab-1.4.1.dist-info/entry_points.txt,sha256=m05kASp7vFi0ZmQ--CFp7GeJpPL7UT2RQF8EEP5XRX8,99
45
+ apache_airflow_providers_fab-1.4.1.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
46
+ apache_airflow_providers_fab-1.4.1.dist-info/METADATA,sha256=RxGkOLkwdJnl6wvEKpJuUgHHKKWrjZsLplIqAD-3Q1Q,6558
47
+ apache_airflow_providers_fab-1.4.1.dist-info/RECORD,,