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.
Files changed (136) hide show
  1. {flyteplugins_union-0.2.2/src/flyteplugins_union.egg-info → flyteplugins_union-0.4.0}/PKG-INFO +6 -2
  2. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/licenses/BSL.txt +1 -1
  3. flyteplugins_union-0.4.0/pyproject.toml +178 -0
  4. flyteplugins_union-0.4.0/src/flyteplugins/union/cli/_tui/__init__.py +67 -0
  5. flyteplugins_union-0.4.0/src/flyteplugins/union/cli/_tui/_volume_explore.py +484 -0
  6. flyteplugins_union-0.4.0/src/flyteplugins/union/cli/_volume_index.py +574 -0
  7. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/api_key.py +11 -2
  8. flyteplugins_union-0.4.0/src/flyteplugins/union/cli/cluster.py +246 -0
  9. flyteplugins_union-0.4.0/src/flyteplugins/union/cli/cluster_pool.py +283 -0
  10. flyteplugins_union-0.4.0/src/flyteplugins/union/cli/queue.py +366 -0
  11. flyteplugins_union-0.4.0/src/flyteplugins/union/cli/volume.py +342 -0
  12. flyteplugins_union-0.4.0/src/flyteplugins/union/errors.py +93 -0
  13. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/cluster_connect.py +65 -0
  14. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/cluster_pb2.py +4 -2
  15. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/cluster/definition_pb2.py +100 -0
  16. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/definition_pb2.pyi +43 -8
  17. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/cluster/payload_pb2.py +62 -0
  18. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/payload_pb2.pyi +21 -2
  19. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/clusterpool_connect.py +578 -0
  20. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/clusterpool_pb2.py +44 -0
  21. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/clusterpool_pb2.pyi +6 -0
  22. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/payload_pb2.py +70 -0
  23. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/clusterpool/payload_pb2.pyi +122 -0
  24. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/authorization_pb2.py +2 -2
  25. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/authorization_pb2.pyi +2 -0
  26. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/common/cluster_pb2.py +45 -0
  27. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/common/cluster_pb2.pyi +55 -0
  28. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/identifier_pb2.py +35 -27
  29. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/identifier_pb2.pyi +12 -0
  30. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/identity/app_payload_pb2.py +56 -0
  31. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_payload_pb2.pyi +4 -2
  32. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_payload_pb2.py +10 -10
  33. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_payload_pb2.pyi +4 -2
  34. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/queue/queue_connect.py +456 -0
  35. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/queue/queue_pb2.py +136 -0
  36. flyteplugins_union-0.4.0/src/flyteplugins/union/internal/queue/queue_pb2.pyi +178 -0
  37. flyteplugins_union-0.4.0/src/flyteplugins/union/io/__init__.py +30 -0
  38. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_base_volume.py +1362 -0
  39. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/__init__.py +8 -0
  40. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/__init__.py +8 -0
  41. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_backend.py +413 -0
  42. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_common.py +65 -0
  43. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_metadata.py +118 -0
  44. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_redis.py +221 -0
  45. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/_juicefs/_sqlite.py +102 -0
  46. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_internal/backend.py +53 -0
  47. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_ro_volume.py +82 -0
  48. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_rw_volume.py +110 -0
  49. flyteplugins_union-0.4.0/src/flyteplugins/union/io/_volume_transformer.py +191 -0
  50. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/__init__.py +17 -2
  51. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_api_key.py +8 -3
  52. flyteplugins_union-0.4.0/src/flyteplugins/union/remote/_cluster.py +301 -0
  53. flyteplugins_union-0.4.0/src/flyteplugins/union/remote/_cluster_pool.py +271 -0
  54. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_policy.py +2 -1
  55. flyteplugins_union-0.4.0/src/flyteplugins/union/remote/_queue.py +421 -0
  56. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_role.py +2 -2
  57. flyteplugins_union-0.4.0/src/flyteplugins/union/remote/_volume_explore.py +397 -0
  58. flyteplugins_union-0.4.0/src/flyteplugins/union/utils/__init__.py +5 -0
  59. flyteplugins_union-0.4.0/src/flyteplugins/union/utils/image.py +84 -0
  60. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0/src/flyteplugins_union.egg-info}/PKG-INFO +6 -2
  61. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins_union.egg-info/SOURCES.txt +35 -0
  62. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins_union.egg-info/entry_points.txt +13 -0
  63. flyteplugins_union-0.4.0/src/flyteplugins_union.egg-info/requires.txt +10 -0
  64. flyteplugins_union-0.2.2/pyproject.toml +0 -108
  65. flyteplugins_union-0.2.2/src/flyteplugins/union/cli/cluster.py +0 -43
  66. flyteplugins_union-0.2.2/src/flyteplugins/union/internal/cluster/definition_pb2.py +0 -91
  67. flyteplugins_union-0.2.2/src/flyteplugins/union/internal/cluster/payload_pb2.py +0 -55
  68. flyteplugins_union-0.2.2/src/flyteplugins/union/internal/identity/app_payload_pb2.py +0 -56
  69. flyteplugins_union-0.2.2/src/flyteplugins/union/remote/_cluster.py +0 -140
  70. flyteplugins_union-0.2.2/src/flyteplugins_union.egg-info/requires.txt +0 -5
  71. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/LICENSE +0 -0
  72. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/README.md +0 -0
  73. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/README_PYPI.md +0 -0
  74. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/licenses/APL.txt +0 -0
  75. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/setup.cfg +0 -0
  76. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/__init__.py +0 -0
  77. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/__init__.py +0 -0
  78. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/assignment.py +0 -0
  79. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/member.py +0 -0
  80. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/policy.py +0 -0
  81. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/role.py +0 -0
  82. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/cli/user.py +0 -0
  83. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/__init__.py +0 -0
  84. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/authorizer_connect.py +0 -0
  85. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/authorizer_pb2.py +0 -0
  86. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/authorizer_pb2.pyi +0 -0
  87. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/definition_pb2.py +0 -0
  88. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/definition_pb2.pyi +0 -0
  89. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/payload_pb2.py +0 -0
  90. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/authorizer/payload_pb2.pyi +0 -0
  91. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/cluster/cluster_pb2.pyi +0 -0
  92. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/deployment_pb2.py +0 -0
  93. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/deployment_pb2.pyi +0 -0
  94. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/identity_pb2.py +0 -0
  95. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/identity_pb2.pyi +0 -0
  96. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/list_pb2.py +0 -0
  97. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/list_pb2.pyi +0 -0
  98. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/policy_pb2.py +0 -0
  99. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/policy_pb2.pyi +0 -0
  100. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/role_pb2.py +0 -0
  101. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/common/role_pb2.pyi +0 -0
  102. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_definition_pb2.py +0 -0
  103. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_definition_pb2.pyi +0 -0
  104. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_service_connect.py +0 -0
  105. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_service_pb2.py +0 -0
  106. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/app_service_pb2.pyi +0 -0
  107. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/enums_pb2.py +0 -0
  108. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/enums_pb2.pyi +0 -0
  109. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_payload_pb2.py +0 -0
  110. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_payload_pb2.pyi +0 -0
  111. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_service_connect.py +0 -0
  112. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_service_pb2.py +0 -0
  113. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/member_service_pb2.pyi +0 -0
  114. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_payload_pb2.py +0 -0
  115. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_payload_pb2.pyi +0 -0
  116. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_service_connect.py +0 -0
  117. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_service_pb2.py +0 -0
  118. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/policy_service_pb2.pyi +0 -0
  119. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_payload_pb2.py +0 -0
  120. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_payload_pb2.pyi +0 -0
  121. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_service_connect.py +0 -0
  122. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_service_pb2.py +0 -0
  123. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/role_service_pb2.pyi +0 -0
  124. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_service_connect.py +0 -0
  125. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_service_pb2.py +0 -0
  126. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/identity/user_service_pb2.pyi +0 -0
  127. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/validate/__init__.py +0 -0
  128. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/validate/validate/__init__.py +0 -0
  129. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/internal/validate/validate/validate_pb2.py +0 -0
  130. /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
  131. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_assignment.py +0 -0
  132. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_member.py +0 -0
  133. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/remote/_user.py +0 -0
  134. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins/union/utils/auth.py +0 -0
  135. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins_union.egg-info/dependency_links.txt +0 -0
  136. {flyteplugins_union-0.2.2 → flyteplugins_union-0.4.0}/src/flyteplugins_union.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flyteplugins-union
3
- Version: 0.2.2
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.2.0,>=2.1.0
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-31
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