flyteplugins-union 0.2.2__tar.gz → 0.4.0__tar.gz
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.
- {flyteplugins_union-0.2.2/src/flyteplugins_union.egg-info → flyteplugins_union-0.4.0}/PKG-INFO +6 -2
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/licenses/BSL.txt +1 -1
- flyteplugins_union-0.4.0/pyproject.toml +178 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/cli/_tui/__init__.py +67 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/cli/_tui/_volume_explore.py +484 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/cli/_volume_index.py +574 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/api_key.py +11 -2
- flyteplugins_union-0.4.0/src/flyteplugins/union/cli/cluster.py +246 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/cli/cluster_pool.py +283 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/cli/queue.py +366 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/cli/volume.py +342 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/errors.py +93 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/cluster_connect.py +65 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/cluster_pb2.py +4 -2
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/cluster/definition_pb2.py +100 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/definition_pb2.pyi +43 -8
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/cluster/payload_pb2.py +62 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/payload_pb2.pyi +21 -2
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/clusterpool_connect.py +578 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/clusterpool_pb2.py +44 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/clusterpool_pb2.pyi +6 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/payload_pb2.py +70 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/payload_pb2.pyi +122 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/authorization_pb2.py +2 -2
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/authorization_pb2.pyi +2 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/common/cluster_pb2.py +45 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/common/cluster_pb2.pyi +55 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/identifier_pb2.py +35 -27
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/identifier_pb2.pyi +12 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/identity/app_payload_pb2.py +56 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_payload_pb2.pyi +4 -2
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_payload_pb2.py +10 -10
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_payload_pb2.pyi +4 -2
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/queue/queue_connect.py +456 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/queue/queue_pb2.py +136 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/internal/queue/queue_pb2.pyi +178 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/__init__.py +30 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_base_volume.py +1362 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/__init__.py +8 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/__init__.py +8 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_backend.py +413 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_common.py +65 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_metadata.py +118 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_redis.py +221 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_sqlite.py +102 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/backend.py +53 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_ro_volume.py +82 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_rw_volume.py +110 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/io/_volume_transformer.py +191 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/__init__.py +17 -2
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_api_key.py +8 -3
- flyteplugins_union-0.4.0/src/flyteplugins/union/remote/_cluster.py +301 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/remote/_cluster_pool.py +271 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_policy.py +2 -1
- flyteplugins_union-0.4.0/src/flyteplugins/union/remote/_queue.py +421 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_role.py +2 -2
- flyteplugins_union-0.4.0/src/flyteplugins/union/remote/_volume_explore.py +397 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/utils/__init__.py +5 -0
- flyteplugins_union-0.4.0/src/flyteplugins/union/utils/image.py +84 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0/src/flyteplugins_union.egg-info}/PKG-INFO +6 -2
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins_union.egg-info/SOURCES.txt +35 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins_union.egg-info/entry_points.txt +13 -0
- flyteplugins_union-0.4.0/src/flyteplugins_union.egg-info/requires.txt +10 -0
- flyteplugins_union-0.2.2/pyproject.toml +0 -108
- flyteplugins_union-0.2.2/src/flyteplugins/union/cli/cluster.py +0 -43
- flyteplugins_union-0.2.2/src/flyteplugins/union/internal/cluster/definition_pb2.py +0 -91
- flyteplugins_union-0.2.2/src/flyteplugins/union/internal/cluster/payload_pb2.py +0 -55
- flyteplugins_union-0.2.2/src/flyteplugins/union/internal/identity/app_payload_pb2.py +0 -56
- flyteplugins_union-0.2.2/src/flyteplugins/union/remote/_cluster.py +0 -140
- flyteplugins_union-0.2.2/src/flyteplugins_union.egg-info/requires.txt +0 -5
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/LICENSE +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/README.md +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/README_PYPI.md +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/licenses/APL.txt +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/setup.cfg +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/__init__.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/__init__.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/assignment.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/member.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/policy.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/role.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/user.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/__init__.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/authorizer_connect.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/authorizer_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/authorizer_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/definition_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/definition_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/payload_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/payload_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/cluster_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/deployment_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/deployment_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/identity_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/identity_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/list_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/list_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/policy_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/policy_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/role_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/role_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_definition_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_definition_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_service_connect.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_service_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_service_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/enums_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/enums_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_payload_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_payload_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_service_connect.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_service_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_service_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_payload_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_payload_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_service_connect.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_service_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_service_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_payload_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_payload_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_service_connect.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_service_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_service_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_service_connect.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_service_pb2.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_service_pb2.pyi +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/validate/__init__.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/validate/validate/__init__.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/validate/validate/validate_pb2.py +0 -0
- /flyteplugins_union-0.2.2/src/flyteplugins/union/utils/__init__.py → /flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/bin/.gitkeep +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_assignment.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_member.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_user.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/utils/auth.py +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins_union.egg-info/dependency_links.txt +0 -0
- {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins_union.egg-info/top_level.txt +0 -0
{flyteplugins_union-0.2.2/src/flyteplugins_union.egg-info → flyteplugins_union-0.4.0}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flyteplugins-union
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Union SDK - Proprietary extensions for Flyte
|
|
5
5
|
Author-email: unionai <info@union.ai>
|
|
6
6
|
Project-URL: Homepage, https://www.union.ai/
|
|
@@ -17,11 +17,15 @@ Classifier: Topic :: Software Development
|
|
|
17
17
|
Requires-Python: >=3.10
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
|
+
Requires-Dist: aiosqlite>=0.20.0
|
|
20
21
|
Requires-Dist: connectrpc>=0.9.0
|
|
21
|
-
Requires-Dist: flyte<2.
|
|
22
|
+
Requires-Dist: flyte<2.5.0,>=2.3.0
|
|
22
23
|
Requires-Dist: flyteidl2>=2.0.0
|
|
24
|
+
Requires-Dist: kubernetes>=27.2.0
|
|
23
25
|
Requires-Dist: pyyaml>=6.0
|
|
24
26
|
Requires-Dist: rich-click>=1.8.0
|
|
27
|
+
Provides-Extra: tui
|
|
28
|
+
Requires-Dist: textual>=0.85; extra == "tui"
|
|
25
29
|
Dynamic: license-file
|
|
26
30
|
|
|
27
31
|
# Union Flyte Plugin
|
|
@@ -17,7 +17,7 @@ Additional Use Grant: You may make use of the Licensed Work, provided that
|
|
|
17
17
|
computer programs whose source code are controlled by
|
|
18
18
|
such third parties.
|
|
19
19
|
|
|
20
|
-
Change Date: 2030-03
|
|
20
|
+
Change Date: 2030-06-03
|
|
21
21
|
|
|
22
22
|
Change License: Apache License, Version 2.0
|
|
23
23
|
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools", "setuptools_scm"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "flyteplugins-union"
|
|
7
|
+
dynamic = ["version"]
|
|
8
|
+
authors = [{ name = "unionai", email = "info@union.ai" }]
|
|
9
|
+
description = "Union SDK - Proprietary extensions for Flyte"
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
requires-python = ">=3.10"
|
|
12
|
+
dependencies = [
|
|
13
|
+
"aiosqlite>=0.20.0",
|
|
14
|
+
"connectrpc>=0.9.0",
|
|
15
|
+
"flyte>=2.3.0,<2.5.0",
|
|
16
|
+
"flyteidl2>=2.0.0",
|
|
17
|
+
"kubernetes>=27.2.0",
|
|
18
|
+
"pyyaml>=6.0",
|
|
19
|
+
"rich-click>=1.8.0",
|
|
20
|
+
]
|
|
21
|
+
classifiers = [
|
|
22
|
+
"Intended Audience :: Science/Research",
|
|
23
|
+
"Intended Audience :: Developers",
|
|
24
|
+
"License :: Other/Proprietary License",
|
|
25
|
+
"Programming Language :: Python :: 3.10",
|
|
26
|
+
"Programming Language :: Python :: 3.11",
|
|
27
|
+
"Programming Language :: Python :: 3.12",
|
|
28
|
+
"Programming Language :: Python :: 3.13",
|
|
29
|
+
"Topic :: Scientific/Engineering",
|
|
30
|
+
"Topic :: Software Development",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[project.optional-dependencies]
|
|
34
|
+
# Interactive TUI surface for `flyte explore volume` and friends. Kept
|
|
35
|
+
# optional so headless installs (runtime container images) don't pull
|
|
36
|
+
# the textual / rich-pixels / linkify-it tree. The `dev` group below
|
|
37
|
+
# pulls it in so the TUI tests run in CI.
|
|
38
|
+
tui = ["textual>=0.85"]
|
|
39
|
+
|
|
40
|
+
[dependency-groups]
|
|
41
|
+
dev = [
|
|
42
|
+
"build>=1.2.2.post1",
|
|
43
|
+
"mock>=5.2.0",
|
|
44
|
+
"pytest>=8.3.5",
|
|
45
|
+
"pytest-asyncio>=0.26.0",
|
|
46
|
+
"pytest-benchmark>=5.1.0",
|
|
47
|
+
"ruff>=0.11.0",
|
|
48
|
+
"setuptools-scm>=8.2.0",
|
|
49
|
+
"mypy>=1.16.0",
|
|
50
|
+
"wheel>=0.47.0",
|
|
51
|
+
# Run the full test suite (incl. the `flyte explore volume` TUI tests,
|
|
52
|
+
# which import textual) in CI / local dev.
|
|
53
|
+
"textual>=0.85",
|
|
54
|
+
# ty: Astral's (ruff/uv team) Rust type checker. Pre-1.0/preview, so
|
|
55
|
+
# pin a floor and expect the rule surface to keep moving.
|
|
56
|
+
"ty>=0.0.39",
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
[tool.check-manifest]
|
|
60
|
+
# The `.gitkeep` only exists to keep the juicefs `bin/` dir in git; the binary
|
|
61
|
+
# is dropped in at wheel-build time (see maint_tools/bundle_juicefs.py). It's
|
|
62
|
+
# tracked but intentionally not shipped in the sdist.
|
|
63
|
+
ignore = [
|
|
64
|
+
"src/flyteplugins/union/io/_internal/_juicefs/bin/.gitkeep",
|
|
65
|
+
]
|
|
66
|
+
|
|
67
|
+
[tool.ty.src]
|
|
68
|
+
# Generated protobuf stubs are not worth type-checking (ruff excludes them too).
|
|
69
|
+
exclude = ["src/flyteplugins/union/internal"]
|
|
70
|
+
|
|
71
|
+
[tool.setuptools_scm]
|
|
72
|
+
|
|
73
|
+
[project.urls]
|
|
74
|
+
Homepage = "https://www.union.ai/"
|
|
75
|
+
Documentation = "https://docs.union.ai/"
|
|
76
|
+
|
|
77
|
+
[project.entry-points."flyte.plugins.cli.commands"]
|
|
78
|
+
# CLI plugins for Union commands
|
|
79
|
+
"create.api-key" = "flyteplugins.union.cli.api_key:create_api_key"
|
|
80
|
+
"delete.api-key" = "flyteplugins.union.cli.api_key:delete_api_key"
|
|
81
|
+
"get.api-key" = "flyteplugins.union.cli.api_key:get_api_key"
|
|
82
|
+
"create.role" = "flyteplugins.union.cli.role:create_role"
|
|
83
|
+
"get.role" = "flyteplugins.union.cli.role:get_role"
|
|
84
|
+
"delete.role" = "flyteplugins.union.cli.role:delete_role"
|
|
85
|
+
"update.role" = "flyteplugins.union.cli.role:update_role"
|
|
86
|
+
"create.policy" = "flyteplugins.union.cli.policy:create_policy"
|
|
87
|
+
"get.policy" = "flyteplugins.union.cli.policy:get_policy"
|
|
88
|
+
"delete.policy" = "flyteplugins.union.cli.policy:delete_policy"
|
|
89
|
+
"update.policy" = "flyteplugins.union.cli.policy:update_policy"
|
|
90
|
+
"create.user" = "flyteplugins.union.cli.user:create_user"
|
|
91
|
+
"get.user" = "flyteplugins.union.cli.user:get_user"
|
|
92
|
+
"delete.user" = "flyteplugins.union.cli.user:delete_user"
|
|
93
|
+
"get.member" = "flyteplugins.union.cli.member:get_member"
|
|
94
|
+
"create.cluster" = "flyteplugins.union.cli.cluster:create_cluster"
|
|
95
|
+
"get.cluster" = "flyteplugins.union.cli.cluster:get_cluster"
|
|
96
|
+
"delete.cluster" = "flyteplugins.union.cli.cluster:delete_cluster"
|
|
97
|
+
"create.cluster-pool" = "flyteplugins.union.cli.cluster_pool:create_cluster_pool"
|
|
98
|
+
"get.cluster-pool" = "flyteplugins.union.cli.cluster_pool:get_cluster_pool"
|
|
99
|
+
"update.cluster-pool" = "flyteplugins.union.cli.cluster_pool:update_cluster_pool"
|
|
100
|
+
"delete.cluster-pool" = "flyteplugins.union.cli.cluster_pool:delete_cluster_pool"
|
|
101
|
+
"create.queue" = "flyteplugins.union.cli.queue:create_queue"
|
|
102
|
+
"get.queue" = "flyteplugins.union.cli.queue:get_queue"
|
|
103
|
+
"update.queue" = "flyteplugins.union.cli.queue:update_queue"
|
|
104
|
+
"create.assignment" = "flyteplugins.union.cli.assignment:create_assignment"
|
|
105
|
+
"get.assignment" = "flyteplugins.union.cli.assignment:get_assignment"
|
|
106
|
+
"delete.assignment" = "flyteplugins.union.cli.assignment:delete_assignment"
|
|
107
|
+
# Top-level `flyte explore` group (a single click.Group with a `volume`
|
|
108
|
+
# subcommand → `flyte explore volume`). Registered as a top-level group rather
|
|
109
|
+
# than an `explore.volume` entry because the plugin loader won't auto-create a
|
|
110
|
+
# missing `explore` verb group (it warns + skips).
|
|
111
|
+
"explore" = "flyteplugins.union.cli.volume:explore"
|
|
112
|
+
|
|
113
|
+
[project.entry-points."flyte.plugins.types"]
|
|
114
|
+
# Custom TypeTransformer that auto-commits a still-mounted Volume at
|
|
115
|
+
# task-return time. Loaded by flyte's TypeEngine on first use; no
|
|
116
|
+
# explicit user-side registration needed.
|
|
117
|
+
"flyteplugins.union.volume" = "flyteplugins.union.io._volume_transformer:register_volume_type"
|
|
118
|
+
|
|
119
|
+
[tool.setuptools]
|
|
120
|
+
include-package-data = true
|
|
121
|
+
|
|
122
|
+
[tool.setuptools.package-data]
|
|
123
|
+
# Platform-specific wheels stage the juicefs binary here (see
|
|
124
|
+
# maint_tools/bundle_juicefs.py). The sdist ships an empty bin/ — runtime
|
|
125
|
+
# resolver falls back to `juicefs` on PATH when no bundled binary is
|
|
126
|
+
# present.
|
|
127
|
+
"flyteplugins.union.io._internal._juicefs" = ["bin/juicefs", "bin/juicefs.exe"]
|
|
128
|
+
|
|
129
|
+
[tool.setuptools.packages.find]
|
|
130
|
+
where = ["src"]
|
|
131
|
+
include = ["flyteplugins*"]
|
|
132
|
+
|
|
133
|
+
[tool.ruff]
|
|
134
|
+
line-length = 120
|
|
135
|
+
extend-exclude = ["src/flyteplugins/union/internal"]
|
|
136
|
+
|
|
137
|
+
[tool.ruff.lint]
|
|
138
|
+
select = [
|
|
139
|
+
"E",
|
|
140
|
+
"W",
|
|
141
|
+
"F",
|
|
142
|
+
"I",
|
|
143
|
+
"PLW",
|
|
144
|
+
"YTT",
|
|
145
|
+
"ASYNC",
|
|
146
|
+
"C4",
|
|
147
|
+
"T10",
|
|
148
|
+
"EXE",
|
|
149
|
+
"ISC",
|
|
150
|
+
"LOG",
|
|
151
|
+
"PIE",
|
|
152
|
+
"Q",
|
|
153
|
+
"RSE",
|
|
154
|
+
"FLY",
|
|
155
|
+
"PGH",
|
|
156
|
+
"PLC",
|
|
157
|
+
"PLE",
|
|
158
|
+
"PLW",
|
|
159
|
+
"FURB",
|
|
160
|
+
"RUF",
|
|
161
|
+
]
|
|
162
|
+
|
|
163
|
+
[tool.ruff.lint.per-file-ignores]
|
|
164
|
+
# Volume code wraps sync subprocess / pathlib ops in asyncio.to_thread inside
|
|
165
|
+
# async methods; ASYNC240 fires on the inner sync calls but they're never
|
|
166
|
+
# executed on the event loop. PLC0415 fires on the late ``import kubernetes``
|
|
167
|
+
# inside volume_pod_template() — that's intentional so the dep is only loaded
|
|
168
|
+
# when callers actually build a pod template.
|
|
169
|
+
"src/flyteplugins/union/io/**/*.py" = ["ASYNC240", "PLC0415"]
|
|
170
|
+
"tests/unit/test_volume.py" = ["ASYNC240", "PLC0415"]
|
|
171
|
+
# Volume CLI lazy-imports Volume/textual/asyncio so plain --help and
|
|
172
|
+
# headless installs don't pay the runtime/optional-dep import cost.
|
|
173
|
+
"src/flyteplugins/union/cli/volume.py" = ["PLC0415"]
|
|
174
|
+
"src/flyteplugins/union/cli/_volume_index.py" = ["PLC0415"]
|
|
175
|
+
"src/flyteplugins/union/cli/_tui/**/*.py" = ["PLC0415"]
|
|
176
|
+
# VolumeExplore lazy-imports flyte.io / msgpack / boto3 / the Volume model so
|
|
177
|
+
# `import flyteplugins.union.remote` stays light for non-volume callers.
|
|
178
|
+
"src/flyteplugins/union/remote/_volume_explore.py" = ["PLC0415"]
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Lazy entrypoint for the volume explore TUI.
|
|
2
|
+
|
|
3
|
+
Importing ``textual`` is gated behind the ``[tui]`` extra so headless
|
|
4
|
+
installs don't pay the cost. The launcher below catches the
|
|
5
|
+
:class:`ImportError` and re-raises with a clear install hint, matching the
|
|
6
|
+
ergonomic of :mod:`flyte.cli._tui` upstream.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from flyteplugins.union.cli._volume_index import IndexReader
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
async def launch_volume_explore(
|
|
18
|
+
*,
|
|
19
|
+
reader: "IndexReader",
|
|
20
|
+
title: str,
|
|
21
|
+
subtitle: str = "",
|
|
22
|
+
lineage: "list[dict] | None" = None,
|
|
23
|
+
provenance: "dict | None" = None,
|
|
24
|
+
can_navigate_parent: bool = False,
|
|
25
|
+
) -> "str | None":
|
|
26
|
+
"""Run the volume explore TUI against an already-open index.
|
|
27
|
+
|
|
28
|
+
``lineage`` is the version chain rendered in the right-pane Lineage
|
|
29
|
+
box (PRD: walk ``parent`` pointers). Each entry is a dict with at
|
|
30
|
+
least ``label`` (e.g. ``current`` / ``parent``); optional keys
|
|
31
|
+
``name``, ``index_path``, ``total_inodes``, ``used_bytes``, ``error``.
|
|
32
|
+
|
|
33
|
+
``provenance`` carries ``produced_by`` / ``parent_produced_by`` action
|
|
34
|
+
refs for the Provenance box; ``can_navigate_parent`` enables the "open
|
|
35
|
+
parent" keybinding.
|
|
36
|
+
|
|
37
|
+
Returns the navigation request the user made before exiting — ``"parent"``
|
|
38
|
+
to re-open explore against the parent version, or ``None`` to stop.
|
|
39
|
+
|
|
40
|
+
Async: the :class:`IndexReader` is aiosqlite-backed, so we ``await`` the
|
|
41
|
+
volume summary up front (``compose`` can't await) and drive the Textual app
|
|
42
|
+
via ``run_async`` inside the caller's event loop.
|
|
43
|
+
|
|
44
|
+
Raises a helpful :class:`ImportError` when ``textual`` is not installed.
|
|
45
|
+
"""
|
|
46
|
+
try:
|
|
47
|
+
from flyteplugins.union.cli._tui._volume_explore import VolumeExploreApp, summary_header_text
|
|
48
|
+
except ImportError as exc:
|
|
49
|
+
raise ImportError(
|
|
50
|
+
"The volume explore TUI requires the 'textual' package. "
|
|
51
|
+
"Install it with: pip install 'flyteplugins-union[tui]'"
|
|
52
|
+
) from exc
|
|
53
|
+
|
|
54
|
+
# Precompute the header summary now (async read) so compose() stays sync.
|
|
55
|
+
summary = await reader.summary()
|
|
56
|
+
app = VolumeExploreApp(
|
|
57
|
+
reader=reader,
|
|
58
|
+
title=title,
|
|
59
|
+
subtitle=subtitle,
|
|
60
|
+
root_inode=summary.root_inode,
|
|
61
|
+
header_text=summary_header_text(summary, subtitle),
|
|
62
|
+
lineage=lineage or [],
|
|
63
|
+
provenance=provenance,
|
|
64
|
+
can_navigate_parent=can_navigate_parent,
|
|
65
|
+
)
|
|
66
|
+
await app.run_async()
|
|
67
|
+
return app.navigate
|