flwr 1.23.0__py3-none-any.whl → 1.24.0__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.
Files changed (292) hide show
  1. flwr/__init__.py +16 -5
  2. flwr/app/error.py +2 -2
  3. flwr/app/exception.py +3 -3
  4. flwr/cli/app.py +19 -0
  5. flwr/cli/app_cmd/__init__.py +23 -0
  6. flwr/cli/app_cmd/publish.py +285 -0
  7. flwr/cli/app_cmd/review.py +252 -0
  8. flwr/cli/auth_plugin/auth_plugin.py +4 -5
  9. flwr/cli/auth_plugin/noop_auth_plugin.py +54 -11
  10. flwr/cli/auth_plugin/oidc_cli_plugin.py +32 -9
  11. flwr/cli/build.py +60 -18
  12. flwr/cli/cli_account_auth_interceptor.py +24 -7
  13. flwr/cli/config_utils.py +101 -13
  14. flwr/cli/federation/__init__.py +24 -0
  15. flwr/cli/federation/ls.py +140 -0
  16. flwr/cli/federation/show.py +317 -0
  17. flwr/cli/install.py +91 -13
  18. flwr/cli/log.py +52 -9
  19. flwr/cli/login/login.py +7 -4
  20. flwr/cli/ls.py +170 -130
  21. flwr/cli/new/new.py +33 -50
  22. flwr/cli/new/templates/app/code/task.pytorch.py.tpl +1 -0
  23. flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
  24. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
  25. flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
  26. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  27. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
  28. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  29. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +3 -3
  30. flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +1 -1
  31. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  32. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +2 -2
  33. flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +1 -1
  34. flwr/cli/pull.py +10 -5
  35. flwr/cli/run/run.py +77 -30
  36. flwr/cli/run_utils.py +130 -0
  37. flwr/cli/stop.py +25 -7
  38. flwr/cli/supernode/ls.py +16 -8
  39. flwr/cli/supernode/register.py +9 -4
  40. flwr/cli/supernode/unregister.py +5 -3
  41. flwr/cli/utils.py +376 -16
  42. flwr/client/__init__.py +1 -1
  43. flwr/client/dpfedavg_numpy_client.py +4 -1
  44. flwr/client/grpc_adapter_client/connection.py +6 -7
  45. flwr/client/grpc_rere_client/connection.py +10 -11
  46. flwr/client/grpc_rere_client/grpc_adapter.py +6 -2
  47. flwr/client/grpc_rere_client/node_auth_client_interceptor.py +2 -1
  48. flwr/client/message_handler/message_handler.py +2 -2
  49. flwr/client/mod/secure_aggregation/secaggplus_mod.py +3 -3
  50. flwr/client/numpy_client.py +1 -1
  51. flwr/client/rest_client/connection.py +12 -14
  52. flwr/client/run_info_store.py +4 -5
  53. flwr/client/typing.py +1 -1
  54. flwr/clientapp/client_app.py +9 -10
  55. flwr/clientapp/mod/centraldp_mods.py +16 -17
  56. flwr/clientapp/mod/localdp_mod.py +8 -9
  57. flwr/clientapp/typing.py +1 -1
  58. flwr/clientapp/utils.py +3 -3
  59. flwr/common/address.py +1 -2
  60. flwr/common/args.py +3 -4
  61. flwr/common/config.py +13 -16
  62. flwr/common/constant.py +5 -2
  63. flwr/common/differential_privacy.py +3 -4
  64. flwr/common/event_log_plugin/event_log_plugin.py +3 -4
  65. flwr/common/exit/exit.py +15 -2
  66. flwr/common/exit/exit_code.py +19 -0
  67. flwr/common/exit/exit_handler.py +6 -2
  68. flwr/common/exit/signal_handler.py +5 -5
  69. flwr/common/grpc.py +6 -6
  70. flwr/common/inflatable_protobuf_utils.py +1 -1
  71. flwr/common/inflatable_utils.py +38 -21
  72. flwr/common/logger.py +19 -19
  73. flwr/common/message.py +4 -4
  74. flwr/common/object_ref.py +7 -7
  75. flwr/common/record/array.py +3 -3
  76. flwr/common/record/arrayrecord.py +18 -30
  77. flwr/common/record/configrecord.py +3 -3
  78. flwr/common/record/recorddict.py +5 -5
  79. flwr/common/record/typeddict.py +9 -2
  80. flwr/common/recorddict_compat.py +7 -10
  81. flwr/common/retry_invoker.py +20 -20
  82. flwr/common/secure_aggregation/ndarrays_arithmetic.py +3 -3
  83. flwr/common/serde.py +5 -4
  84. flwr/common/serde_utils.py +2 -2
  85. flwr/common/telemetry.py +9 -5
  86. flwr/common/typing.py +52 -37
  87. flwr/compat/client/app.py +38 -37
  88. flwr/compat/client/grpc_client/connection.py +11 -11
  89. flwr/compat/server/app.py +5 -6
  90. flwr/proto/appio_pb2.py +13 -3
  91. flwr/proto/appio_pb2.pyi +134 -65
  92. flwr/proto/appio_pb2_grpc.py +20 -0
  93. flwr/proto/appio_pb2_grpc.pyi +27 -0
  94. flwr/proto/clientappio_pb2.py +17 -7
  95. flwr/proto/clientappio_pb2.pyi +15 -0
  96. flwr/proto/clientappio_pb2_grpc.py +206 -40
  97. flwr/proto/clientappio_pb2_grpc.pyi +168 -53
  98. flwr/proto/control_pb2.py +71 -52
  99. flwr/proto/control_pb2.pyi +277 -111
  100. flwr/proto/control_pb2_grpc.py +249 -40
  101. flwr/proto/control_pb2_grpc.pyi +185 -52
  102. flwr/proto/error_pb2.py +13 -3
  103. flwr/proto/error_pb2.pyi +24 -6
  104. flwr/proto/error_pb2_grpc.py +20 -0
  105. flwr/proto/error_pb2_grpc.pyi +27 -0
  106. flwr/proto/fab_pb2.py +14 -4
  107. flwr/proto/fab_pb2.pyi +59 -31
  108. flwr/proto/fab_pb2_grpc.py +20 -0
  109. flwr/proto/fab_pb2_grpc.pyi +27 -0
  110. flwr/proto/federation_pb2.py +38 -0
  111. flwr/proto/federation_pb2.pyi +56 -0
  112. flwr/proto/federation_pb2_grpc.py +24 -0
  113. flwr/proto/federation_pb2_grpc.pyi +31 -0
  114. flwr/proto/fleet_pb2.py +14 -4
  115. flwr/proto/fleet_pb2.pyi +137 -61
  116. flwr/proto/fleet_pb2_grpc.py +189 -48
  117. flwr/proto/fleet_pb2_grpc.pyi +175 -61
  118. flwr/proto/grpcadapter_pb2.py +14 -4
  119. flwr/proto/grpcadapter_pb2.pyi +38 -16
  120. flwr/proto/grpcadapter_pb2_grpc.py +35 -4
  121. flwr/proto/grpcadapter_pb2_grpc.pyi +38 -7
  122. flwr/proto/heartbeat_pb2.py +17 -7
  123. flwr/proto/heartbeat_pb2.pyi +51 -22
  124. flwr/proto/heartbeat_pb2_grpc.py +20 -0
  125. flwr/proto/heartbeat_pb2_grpc.pyi +27 -0
  126. flwr/proto/log_pb2.py +13 -3
  127. flwr/proto/log_pb2.pyi +34 -11
  128. flwr/proto/log_pb2_grpc.py +20 -0
  129. flwr/proto/log_pb2_grpc.pyi +27 -0
  130. flwr/proto/message_pb2.py +15 -5
  131. flwr/proto/message_pb2.pyi +154 -86
  132. flwr/proto/message_pb2_grpc.py +20 -0
  133. flwr/proto/message_pb2_grpc.pyi +27 -0
  134. flwr/proto/node_pb2.py +15 -5
  135. flwr/proto/node_pb2.pyi +50 -25
  136. flwr/proto/node_pb2_grpc.py +20 -0
  137. flwr/proto/node_pb2_grpc.pyi +27 -0
  138. flwr/proto/recorddict_pb2.py +13 -3
  139. flwr/proto/recorddict_pb2.pyi +184 -107
  140. flwr/proto/recorddict_pb2_grpc.py +20 -0
  141. flwr/proto/recorddict_pb2_grpc.pyi +27 -0
  142. flwr/proto/run_pb2.py +40 -31
  143. flwr/proto/run_pb2.pyi +149 -84
  144. flwr/proto/run_pb2_grpc.py +20 -0
  145. flwr/proto/run_pb2_grpc.pyi +27 -0
  146. flwr/proto/serverappio_pb2.py +13 -3
  147. flwr/proto/serverappio_pb2.pyi +32 -8
  148. flwr/proto/serverappio_pb2_grpc.py +246 -65
  149. flwr/proto/serverappio_pb2_grpc.pyi +221 -85
  150. flwr/proto/simulationio_pb2.py +16 -8
  151. flwr/proto/simulationio_pb2.pyi +15 -0
  152. flwr/proto/simulationio_pb2_grpc.py +162 -41
  153. flwr/proto/simulationio_pb2_grpc.pyi +149 -55
  154. flwr/proto/transport_pb2.py +20 -10
  155. flwr/proto/transport_pb2.pyi +249 -160
  156. flwr/proto/transport_pb2_grpc.py +35 -4
  157. flwr/proto/transport_pb2_grpc.pyi +38 -8
  158. flwr/server/app.py +38 -17
  159. flwr/server/client_manager.py +4 -5
  160. flwr/server/client_proxy.py +10 -11
  161. flwr/server/compat/app.py +4 -5
  162. flwr/server/compat/app_utils.py +2 -1
  163. flwr/server/compat/grid_client_proxy.py +10 -12
  164. flwr/server/compat/legacy_context.py +3 -4
  165. flwr/server/fleet_event_log_interceptor.py +2 -1
  166. flwr/server/grid/grid.py +2 -3
  167. flwr/server/grid/grpc_grid.py +10 -8
  168. flwr/server/grid/inmemory_grid.py +4 -4
  169. flwr/server/run_serverapp.py +2 -3
  170. flwr/server/server.py +34 -39
  171. flwr/server/server_app.py +7 -8
  172. flwr/server/server_config.py +1 -2
  173. flwr/server/serverapp/app.py +34 -28
  174. flwr/server/serverapp_components.py +4 -5
  175. flwr/server/strategy/aggregate.py +9 -8
  176. flwr/server/strategy/bulyan.py +13 -11
  177. flwr/server/strategy/dp_adaptive_clipping.py +16 -20
  178. flwr/server/strategy/dp_fixed_clipping.py +12 -17
  179. flwr/server/strategy/dpfedavg_adaptive.py +3 -4
  180. flwr/server/strategy/dpfedavg_fixed.py +6 -10
  181. flwr/server/strategy/fault_tolerant_fedavg.py +14 -13
  182. flwr/server/strategy/fedadagrad.py +18 -14
  183. flwr/server/strategy/fedadam.py +16 -14
  184. flwr/server/strategy/fedavg.py +16 -17
  185. flwr/server/strategy/fedavg_android.py +15 -15
  186. flwr/server/strategy/fedavgm.py +21 -18
  187. flwr/server/strategy/fedmedian.py +2 -3
  188. flwr/server/strategy/fedopt.py +11 -10
  189. flwr/server/strategy/fedprox.py +10 -9
  190. flwr/server/strategy/fedtrimmedavg.py +12 -11
  191. flwr/server/strategy/fedxgb_bagging.py +13 -11
  192. flwr/server/strategy/fedxgb_cyclic.py +6 -6
  193. flwr/server/strategy/fedxgb_nn_avg.py +4 -4
  194. flwr/server/strategy/fedyogi.py +16 -14
  195. flwr/server/strategy/krum.py +12 -11
  196. flwr/server/strategy/qfedavg.py +16 -15
  197. flwr/server/strategy/strategy.py +6 -9
  198. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +2 -1
  199. flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +1 -2
  200. flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +3 -4
  201. flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +10 -12
  202. flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +1 -3
  203. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +4 -4
  204. flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +3 -2
  205. flwr/server/superlink/fleet/message_handler/message_handler.py +34 -28
  206. flwr/server/superlink/fleet/rest_rere/rest_api.py +2 -2
  207. flwr/server/superlink/fleet/vce/backend/backend.py +1 -1
  208. flwr/server/superlink/fleet/vce/backend/raybackend.py +5 -5
  209. flwr/server/superlink/fleet/vce/vce_api.py +15 -9
  210. flwr/server/superlink/linkstate/in_memory_linkstate.py +115 -150
  211. flwr/server/superlink/linkstate/linkstate.py +59 -43
  212. flwr/server/superlink/linkstate/linkstate_factory.py +22 -5
  213. flwr/server/superlink/linkstate/sqlite_linkstate.py +447 -438
  214. flwr/server/superlink/linkstate/utils.py +6 -6
  215. flwr/server/superlink/serverappio/serverappio_grpc.py +1 -2
  216. flwr/server/superlink/serverappio/serverappio_servicer.py +26 -21
  217. flwr/server/superlink/simulation/simulationio_grpc.py +1 -2
  218. flwr/server/superlink/simulation/simulationio_servicer.py +18 -13
  219. flwr/server/superlink/utils.py +4 -6
  220. flwr/server/typing.py +1 -1
  221. flwr/server/utils/tensorboard.py +15 -8
  222. flwr/server/workflow/default_workflows.py +5 -5
  223. flwr/server/workflow/secure_aggregation/secagg_workflow.py +2 -4
  224. flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +8 -8
  225. flwr/serverapp/strategy/bulyan.py +16 -15
  226. flwr/serverapp/strategy/dp_adaptive_clipping.py +12 -11
  227. flwr/serverapp/strategy/dp_fixed_clipping.py +11 -14
  228. flwr/serverapp/strategy/fedadagrad.py +10 -11
  229. flwr/serverapp/strategy/fedadam.py +10 -11
  230. flwr/serverapp/strategy/fedavg.py +9 -10
  231. flwr/serverapp/strategy/fedavgm.py +17 -16
  232. flwr/serverapp/strategy/fedmedian.py +2 -2
  233. flwr/serverapp/strategy/fedopt.py +10 -11
  234. flwr/serverapp/strategy/fedprox.py +7 -8
  235. flwr/serverapp/strategy/fedtrimmedavg.py +9 -9
  236. flwr/serverapp/strategy/fedxgb_bagging.py +3 -3
  237. flwr/serverapp/strategy/fedxgb_cyclic.py +9 -9
  238. flwr/serverapp/strategy/fedyogi.py +9 -11
  239. flwr/serverapp/strategy/krum.py +7 -7
  240. flwr/serverapp/strategy/multikrum.py +9 -9
  241. flwr/serverapp/strategy/qfedavg.py +17 -16
  242. flwr/serverapp/strategy/strategy.py +6 -9
  243. flwr/serverapp/strategy/strategy_utils.py +7 -8
  244. flwr/simulation/app.py +46 -42
  245. flwr/simulation/legacy_app.py +12 -12
  246. flwr/simulation/ray_transport/ray_actor.py +10 -11
  247. flwr/simulation/ray_transport/ray_client_proxy.py +11 -12
  248. flwr/simulation/run_simulation.py +43 -43
  249. flwr/simulation/simulationio_connection.py +4 -4
  250. flwr/supercore/cli/flower_superexec.py +3 -4
  251. flwr/supercore/constant.py +31 -1
  252. flwr/supercore/corestate/corestate.py +24 -3
  253. flwr/supercore/corestate/in_memory_corestate.py +138 -0
  254. flwr/supercore/corestate/sqlite_corestate.py +157 -0
  255. flwr/supercore/ffs/disk_ffs.py +1 -2
  256. flwr/supercore/ffs/ffs.py +1 -2
  257. flwr/supercore/ffs/ffs_factory.py +1 -2
  258. flwr/{common → supercore}/heartbeat.py +20 -25
  259. flwr/supercore/object_store/in_memory_object_store.py +1 -2
  260. flwr/supercore/object_store/object_store.py +1 -2
  261. flwr/supercore/object_store/object_store_factory.py +1 -2
  262. flwr/supercore/object_store/sqlite_object_store.py +8 -7
  263. flwr/supercore/primitives/asymmetric.py +1 -1
  264. flwr/supercore/primitives/asymmetric_ed25519.py +11 -1
  265. flwr/supercore/sqlite_mixin.py +37 -34
  266. flwr/supercore/superexec/plugin/base_exec_plugin.py +1 -2
  267. flwr/supercore/superexec/plugin/exec_plugin.py +3 -3
  268. flwr/supercore/superexec/run_superexec.py +9 -13
  269. flwr/superlink/artifact_provider/artifact_provider.py +1 -2
  270. flwr/superlink/auth_plugin/auth_plugin.py +6 -9
  271. flwr/superlink/auth_plugin/noop_auth_plugin.py +6 -9
  272. flwr/superlink/federation/__init__.py +24 -0
  273. flwr/superlink/federation/federation_manager.py +64 -0
  274. flwr/superlink/federation/noop_federation_manager.py +71 -0
  275. flwr/superlink/servicer/control/control_account_auth_interceptor.py +22 -13
  276. flwr/superlink/servicer/control/control_event_log_interceptor.py +7 -7
  277. flwr/superlink/servicer/control/control_grpc.py +5 -6
  278. flwr/superlink/servicer/control/control_license_interceptor.py +3 -3
  279. flwr/superlink/servicer/control/control_servicer.py +102 -18
  280. flwr/supernode/cli/flower_supernode.py +58 -3
  281. flwr/supernode/nodestate/in_memory_nodestate.py +60 -49
  282. flwr/supernode/nodestate/nodestate.py +7 -8
  283. flwr/supernode/nodestate/nodestate_factory.py +7 -4
  284. flwr/supernode/runtime/run_clientapp.py +41 -22
  285. flwr/supernode/servicer/clientappio/clientappio_servicer.py +40 -10
  286. flwr/supernode/start_client_internal.py +158 -42
  287. {flwr-1.23.0.dist-info → flwr-1.24.0.dist-info}/METADATA +8 -8
  288. flwr-1.24.0.dist-info/RECORD +454 -0
  289. flwr/supercore/object_store/utils.py +0 -43
  290. flwr-1.23.0.dist-info/RECORD +0 -439
  291. {flwr-1.23.0.dist-info → flwr-1.24.0.dist-info}/WHEEL +0 -0
  292. {flwr-1.23.0.dist-info → flwr-1.24.0.dist-info}/entry_points.txt +0 -0
@@ -1,145 +1,278 @@
1
1
  """
2
2
  @generated by mypy-protobuf. Do not edit manually!
3
3
  isort:skip_file
4
+ Copyright 2024 Flower Labs GmbH. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ ==============================================================================
4
18
  """
19
+
5
20
  import abc
21
+ import collections.abc
6
22
  import flwr.proto.control_pb2
7
23
  import grpc
24
+ import grpc.aio
8
25
  import typing
9
26
 
27
+ _T = typing.TypeVar("_T")
28
+
29
+ class _MaybeAsyncIterator(collections.abc.AsyncIterator[_T], collections.abc.Iterator[_T], metaclass=abc.ABCMeta): ...
30
+
31
+ class _ServicerContext(grpc.ServicerContext, grpc.aio.ServicerContext): # type: ignore[misc, type-arg]
32
+ ...
33
+
10
34
  class ControlStub:
11
- def __init__(self, channel: grpc.Channel) -> None: ...
35
+ def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
12
36
  StartRun: grpc.UnaryUnaryMultiCallable[
13
37
  flwr.proto.control_pb2.StartRunRequest,
14
- flwr.proto.control_pb2.StartRunResponse]
38
+ flwr.proto.control_pb2.StartRunResponse,
39
+ ]
15
40
  """Start run upon request"""
16
41
 
17
42
  StopRun: grpc.UnaryUnaryMultiCallable[
18
43
  flwr.proto.control_pb2.StopRunRequest,
19
- flwr.proto.control_pb2.StopRunResponse]
44
+ flwr.proto.control_pb2.StopRunResponse,
45
+ ]
20
46
  """Stop run upon request"""
21
47
 
22
48
  StreamLogs: grpc.UnaryStreamMultiCallable[
23
49
  flwr.proto.control_pb2.StreamLogsRequest,
24
- flwr.proto.control_pb2.StreamLogsResponse]
50
+ flwr.proto.control_pb2.StreamLogsResponse,
51
+ ]
25
52
  """Start log stream upon request"""
26
53
 
27
54
  ListRuns: grpc.UnaryUnaryMultiCallable[
28
55
  flwr.proto.control_pb2.ListRunsRequest,
29
- flwr.proto.control_pb2.ListRunsResponse]
56
+ flwr.proto.control_pb2.ListRunsResponse,
57
+ ]
30
58
  """flwr ls command"""
31
59
 
32
60
  GetLoginDetails: grpc.UnaryUnaryMultiCallable[
33
61
  flwr.proto.control_pb2.GetLoginDetailsRequest,
34
- flwr.proto.control_pb2.GetLoginDetailsResponse]
62
+ flwr.proto.control_pb2.GetLoginDetailsResponse,
63
+ ]
35
64
  """Get login details upon request"""
36
65
 
37
66
  GetAuthTokens: grpc.UnaryUnaryMultiCallable[
38
67
  flwr.proto.control_pb2.GetAuthTokensRequest,
39
- flwr.proto.control_pb2.GetAuthTokensResponse]
68
+ flwr.proto.control_pb2.GetAuthTokensResponse,
69
+ ]
40
70
  """Get auth tokens upon request"""
41
71
 
42
72
  PullArtifacts: grpc.UnaryUnaryMultiCallable[
43
73
  flwr.proto.control_pb2.PullArtifactsRequest,
44
- flwr.proto.control_pb2.PullArtifactsResponse]
74
+ flwr.proto.control_pb2.PullArtifactsResponse,
75
+ ]
45
76
  """Pull artifacts generated during a run (flwr pull)"""
46
77
 
47
78
  RegisterNode: grpc.UnaryUnaryMultiCallable[
48
79
  flwr.proto.control_pb2.RegisterNodeRequest,
49
- flwr.proto.control_pb2.RegisterNodeResponse]
80
+ flwr.proto.control_pb2.RegisterNodeResponse,
81
+ ]
50
82
  """Register SuperNode"""
51
83
 
52
84
  UnregisterNode: grpc.UnaryUnaryMultiCallable[
53
85
  flwr.proto.control_pb2.UnregisterNodeRequest,
54
- flwr.proto.control_pb2.UnregisterNodeResponse]
86
+ flwr.proto.control_pb2.UnregisterNodeResponse,
87
+ ]
55
88
  """Unregister SuperNode"""
56
89
 
57
90
  ListNodes: grpc.UnaryUnaryMultiCallable[
58
91
  flwr.proto.control_pb2.ListNodesRequest,
59
- flwr.proto.control_pb2.ListNodesResponse]
92
+ flwr.proto.control_pb2.ListNodesResponse,
93
+ ]
60
94
  """List SuperNodes"""
61
95
 
96
+ ListFederations: grpc.UnaryUnaryMultiCallable[
97
+ flwr.proto.control_pb2.ListFederationsRequest,
98
+ flwr.proto.control_pb2.ListFederationsResponse,
99
+ ]
100
+ """List Federations"""
101
+
102
+ ShowFederation: grpc.UnaryUnaryMultiCallable[
103
+ flwr.proto.control_pb2.ShowFederationRequest,
104
+ flwr.proto.control_pb2.ShowFederationResponse,
105
+ ]
106
+ """Show Federation"""
107
+
108
+ class ControlAsyncStub:
109
+ StartRun: grpc.aio.UnaryUnaryMultiCallable[
110
+ flwr.proto.control_pb2.StartRunRequest,
111
+ flwr.proto.control_pb2.StartRunResponse,
112
+ ]
113
+ """Start run upon request"""
114
+
115
+ StopRun: grpc.aio.UnaryUnaryMultiCallable[
116
+ flwr.proto.control_pb2.StopRunRequest,
117
+ flwr.proto.control_pb2.StopRunResponse,
118
+ ]
119
+ """Stop run upon request"""
120
+
121
+ StreamLogs: grpc.aio.UnaryStreamMultiCallable[
122
+ flwr.proto.control_pb2.StreamLogsRequest,
123
+ flwr.proto.control_pb2.StreamLogsResponse,
124
+ ]
125
+ """Start log stream upon request"""
126
+
127
+ ListRuns: grpc.aio.UnaryUnaryMultiCallable[
128
+ flwr.proto.control_pb2.ListRunsRequest,
129
+ flwr.proto.control_pb2.ListRunsResponse,
130
+ ]
131
+ """flwr ls command"""
132
+
133
+ GetLoginDetails: grpc.aio.UnaryUnaryMultiCallable[
134
+ flwr.proto.control_pb2.GetLoginDetailsRequest,
135
+ flwr.proto.control_pb2.GetLoginDetailsResponse,
136
+ ]
137
+ """Get login details upon request"""
138
+
139
+ GetAuthTokens: grpc.aio.UnaryUnaryMultiCallable[
140
+ flwr.proto.control_pb2.GetAuthTokensRequest,
141
+ flwr.proto.control_pb2.GetAuthTokensResponse,
142
+ ]
143
+ """Get auth tokens upon request"""
144
+
145
+ PullArtifacts: grpc.aio.UnaryUnaryMultiCallable[
146
+ flwr.proto.control_pb2.PullArtifactsRequest,
147
+ flwr.proto.control_pb2.PullArtifactsResponse,
148
+ ]
149
+ """Pull artifacts generated during a run (flwr pull)"""
150
+
151
+ RegisterNode: grpc.aio.UnaryUnaryMultiCallable[
152
+ flwr.proto.control_pb2.RegisterNodeRequest,
153
+ flwr.proto.control_pb2.RegisterNodeResponse,
154
+ ]
155
+ """Register SuperNode"""
156
+
157
+ UnregisterNode: grpc.aio.UnaryUnaryMultiCallable[
158
+ flwr.proto.control_pb2.UnregisterNodeRequest,
159
+ flwr.proto.control_pb2.UnregisterNodeResponse,
160
+ ]
161
+ """Unregister SuperNode"""
162
+
163
+ ListNodes: grpc.aio.UnaryUnaryMultiCallable[
164
+ flwr.proto.control_pb2.ListNodesRequest,
165
+ flwr.proto.control_pb2.ListNodesResponse,
166
+ ]
167
+ """List SuperNodes"""
168
+
169
+ ListFederations: grpc.aio.UnaryUnaryMultiCallable[
170
+ flwr.proto.control_pb2.ListFederationsRequest,
171
+ flwr.proto.control_pb2.ListFederationsResponse,
172
+ ]
173
+ """List Federations"""
174
+
175
+ ShowFederation: grpc.aio.UnaryUnaryMultiCallable[
176
+ flwr.proto.control_pb2.ShowFederationRequest,
177
+ flwr.proto.control_pb2.ShowFederationResponse,
178
+ ]
179
+ """Show Federation"""
62
180
 
63
181
  class ControlServicer(metaclass=abc.ABCMeta):
64
182
  @abc.abstractmethod
65
- def StartRun(self,
183
+ def StartRun(
184
+ self,
66
185
  request: flwr.proto.control_pb2.StartRunRequest,
67
- context: grpc.ServicerContext,
68
- ) -> flwr.proto.control_pb2.StartRunResponse:
186
+ context: _ServicerContext,
187
+ ) -> typing.Union[flwr.proto.control_pb2.StartRunResponse, collections.abc.Awaitable[flwr.proto.control_pb2.StartRunResponse]]:
69
188
  """Start run upon request"""
70
- pass
71
189
 
72
190
  @abc.abstractmethod
73
- def StopRun(self,
191
+ def StopRun(
192
+ self,
74
193
  request: flwr.proto.control_pb2.StopRunRequest,
75
- context: grpc.ServicerContext,
76
- ) -> flwr.proto.control_pb2.StopRunResponse:
194
+ context: _ServicerContext,
195
+ ) -> typing.Union[flwr.proto.control_pb2.StopRunResponse, collections.abc.Awaitable[flwr.proto.control_pb2.StopRunResponse]]:
77
196
  """Stop run upon request"""
78
- pass
79
197
 
80
198
  @abc.abstractmethod
81
- def StreamLogs(self,
199
+ def StreamLogs(
200
+ self,
82
201
  request: flwr.proto.control_pb2.StreamLogsRequest,
83
- context: grpc.ServicerContext,
84
- ) -> typing.Iterator[flwr.proto.control_pb2.StreamLogsResponse]:
202
+ context: _ServicerContext,
203
+ ) -> typing.Union[collections.abc.Iterator[flwr.proto.control_pb2.StreamLogsResponse], collections.abc.AsyncIterator[flwr.proto.control_pb2.StreamLogsResponse]]:
85
204
  """Start log stream upon request"""
86
- pass
87
205
 
88
206
  @abc.abstractmethod
89
- def ListRuns(self,
207
+ def ListRuns(
208
+ self,
90
209
  request: flwr.proto.control_pb2.ListRunsRequest,
91
- context: grpc.ServicerContext,
92
- ) -> flwr.proto.control_pb2.ListRunsResponse:
210
+ context: _ServicerContext,
211
+ ) -> typing.Union[flwr.proto.control_pb2.ListRunsResponse, collections.abc.Awaitable[flwr.proto.control_pb2.ListRunsResponse]]:
93
212
  """flwr ls command"""
94
- pass
95
213
 
96
214
  @abc.abstractmethod
97
- def GetLoginDetails(self,
215
+ def GetLoginDetails(
216
+ self,
98
217
  request: flwr.proto.control_pb2.GetLoginDetailsRequest,
99
- context: grpc.ServicerContext,
100
- ) -> flwr.proto.control_pb2.GetLoginDetailsResponse:
218
+ context: _ServicerContext,
219
+ ) -> typing.Union[flwr.proto.control_pb2.GetLoginDetailsResponse, collections.abc.Awaitable[flwr.proto.control_pb2.GetLoginDetailsResponse]]:
101
220
  """Get login details upon request"""
102
- pass
103
221
 
104
222
  @abc.abstractmethod
105
- def GetAuthTokens(self,
223
+ def GetAuthTokens(
224
+ self,
106
225
  request: flwr.proto.control_pb2.GetAuthTokensRequest,
107
- context: grpc.ServicerContext,
108
- ) -> flwr.proto.control_pb2.GetAuthTokensResponse:
226
+ context: _ServicerContext,
227
+ ) -> typing.Union[flwr.proto.control_pb2.GetAuthTokensResponse, collections.abc.Awaitable[flwr.proto.control_pb2.GetAuthTokensResponse]]:
109
228
  """Get auth tokens upon request"""
110
- pass
111
229
 
112
230
  @abc.abstractmethod
113
- def PullArtifacts(self,
231
+ def PullArtifacts(
232
+ self,
114
233
  request: flwr.proto.control_pb2.PullArtifactsRequest,
115
- context: grpc.ServicerContext,
116
- ) -> flwr.proto.control_pb2.PullArtifactsResponse:
234
+ context: _ServicerContext,
235
+ ) -> typing.Union[flwr.proto.control_pb2.PullArtifactsResponse, collections.abc.Awaitable[flwr.proto.control_pb2.PullArtifactsResponse]]:
117
236
  """Pull artifacts generated during a run (flwr pull)"""
118
- pass
119
237
 
120
238
  @abc.abstractmethod
121
- def RegisterNode(self,
239
+ def RegisterNode(
240
+ self,
122
241
  request: flwr.proto.control_pb2.RegisterNodeRequest,
123
- context: grpc.ServicerContext,
124
- ) -> flwr.proto.control_pb2.RegisterNodeResponse:
242
+ context: _ServicerContext,
243
+ ) -> typing.Union[flwr.proto.control_pb2.RegisterNodeResponse, collections.abc.Awaitable[flwr.proto.control_pb2.RegisterNodeResponse]]:
125
244
  """Register SuperNode"""
126
- pass
127
245
 
128
246
  @abc.abstractmethod
129
- def UnregisterNode(self,
247
+ def UnregisterNode(
248
+ self,
130
249
  request: flwr.proto.control_pb2.UnregisterNodeRequest,
131
- context: grpc.ServicerContext,
132
- ) -> flwr.proto.control_pb2.UnregisterNodeResponse:
250
+ context: _ServicerContext,
251
+ ) -> typing.Union[flwr.proto.control_pb2.UnregisterNodeResponse, collections.abc.Awaitable[flwr.proto.control_pb2.UnregisterNodeResponse]]:
133
252
  """Unregister SuperNode"""
134
- pass
135
253
 
136
254
  @abc.abstractmethod
137
- def ListNodes(self,
255
+ def ListNodes(
256
+ self,
138
257
  request: flwr.proto.control_pb2.ListNodesRequest,
139
- context: grpc.ServicerContext,
140
- ) -> flwr.proto.control_pb2.ListNodesResponse:
258
+ context: _ServicerContext,
259
+ ) -> typing.Union[flwr.proto.control_pb2.ListNodesResponse, collections.abc.Awaitable[flwr.proto.control_pb2.ListNodesResponse]]:
141
260
  """List SuperNodes"""
142
- pass
143
261
 
262
+ @abc.abstractmethod
263
+ def ListFederations(
264
+ self,
265
+ request: flwr.proto.control_pb2.ListFederationsRequest,
266
+ context: _ServicerContext,
267
+ ) -> typing.Union[flwr.proto.control_pb2.ListFederationsResponse, collections.abc.Awaitable[flwr.proto.control_pb2.ListFederationsResponse]]:
268
+ """List Federations"""
269
+
270
+ @abc.abstractmethod
271
+ def ShowFederation(
272
+ self,
273
+ request: flwr.proto.control_pb2.ShowFederationRequest,
274
+ context: _ServicerContext,
275
+ ) -> typing.Union[flwr.proto.control_pb2.ShowFederationResponse, collections.abc.Awaitable[flwr.proto.control_pb2.ShowFederationResponse]]:
276
+ """Show Federation"""
144
277
 
145
- def add_ControlServicer_to_server(servicer: ControlServicer, server: grpc.Server) -> None: ...
278
+ def add_ControlServicer_to_server(servicer: ControlServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ...
flwr/proto/error_pb2.py CHANGED
@@ -1,12 +1,22 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
3
4
  # source: flwr/proto/error.proto
4
- # Protobuf Python Version: 4.25.1
5
+ # Protobuf Python Version: 5.29.0
5
6
  """Generated protocol buffer code."""
6
7
  from google.protobuf import descriptor as _descriptor
7
8
  from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
8
10
  from google.protobuf import symbol_database as _symbol_database
9
11
  from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 5,
15
+ 29,
16
+ 0,
17
+ '',
18
+ 'flwr/proto/error.proto'
19
+ )
10
20
  # @@protoc_insertion_point(imports)
11
21
 
12
22
  _sym_db = _symbol_database.Default()
@@ -19,8 +29,8 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/
19
29
  _globals = globals()
20
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
21
31
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.error_pb2', _globals)
22
- if _descriptor._USE_C_DESCRIPTORS == False:
23
- DESCRIPTOR._options = None
32
+ if not _descriptor._USE_C_DESCRIPTORS:
33
+ DESCRIPTOR._loaded_options = None
24
34
  _globals['_ERROR']._serialized_start=38
25
35
  _globals['_ERROR']._serialized_end=75
26
36
  # @@protoc_insertion_point(module_scope)
flwr/proto/error_pb2.pyi CHANGED
@@ -1,25 +1,43 @@
1
1
  """
2
2
  @generated by mypy-protobuf. Do not edit manually!
3
3
  isort:skip_file
4
+ Copyright 2024 Flower Labs GmbH. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ ==============================================================================
4
18
  """
19
+
5
20
  import builtins
6
21
  import google.protobuf.descriptor
7
22
  import google.protobuf.message
8
23
  import typing
9
- import typing_extensions
10
24
 
11
25
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
12
26
 
27
+ @typing.final
13
28
  class Error(google.protobuf.message.Message):
14
29
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
30
+
15
31
  CODE_FIELD_NUMBER: builtins.int
16
32
  REASON_FIELD_NUMBER: builtins.int
17
33
  code: builtins.int
18
- reason: typing.Text
19
- def __init__(self,
34
+ reason: builtins.str
35
+ def __init__(
36
+ self,
20
37
  *,
21
38
  code: builtins.int = ...,
22
- reason: typing.Text = ...,
23
- ) -> None: ...
24
- def ClearField(self, field_name: typing_extensions.Literal["code",b"code","reason",b"reason"]) -> None: ...
39
+ reason: builtins.str = ...,
40
+ ) -> None: ...
41
+ def ClearField(self, field_name: typing.Literal["code", b"code", "reason", b"reason"]) -> None: ...
42
+
25
43
  global___Error = Error
@@ -1,4 +1,24 @@
1
1
  # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
2
  """Client and server classes corresponding to protobuf-defined services."""
3
3
  import grpc
4
+ import warnings
4
5
 
6
+
7
+ GRPC_GENERATED_VERSION = '1.70.0'
8
+ GRPC_VERSION = grpc.__version__
9
+ _version_not_supported = False
10
+
11
+ try:
12
+ from grpc._utilities import first_version_is_lower
13
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
14
+ except ImportError:
15
+ _version_not_supported = True
16
+
17
+ if _version_not_supported:
18
+ raise RuntimeError(
19
+ f'The grpc package installed is at version {GRPC_VERSION},'
20
+ + f' but the generated code in flwr/proto/error_pb2_grpc.py depends on'
21
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
22
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
23
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
24
+ )
@@ -1,4 +1,31 @@
1
1
  """
2
2
  @generated by mypy-protobuf. Do not edit manually!
3
3
  isort:skip_file
4
+ Copyright 2024 Flower Labs GmbH. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ ==============================================================================
4
18
  """
19
+
20
+ import abc
21
+ import collections.abc
22
+ import grpc
23
+ import grpc.aio
24
+ import typing
25
+
26
+ _T = typing.TypeVar("_T")
27
+
28
+ class _MaybeAsyncIterator(collections.abc.AsyncIterator[_T], collections.abc.Iterator[_T], metaclass=abc.ABCMeta): ...
29
+
30
+ class _ServicerContext(grpc.ServicerContext, grpc.aio.ServicerContext): # type: ignore[misc, type-arg]
31
+ ...
flwr/proto/fab_pb2.py CHANGED
@@ -1,12 +1,22 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
3
4
  # source: flwr/proto/fab.proto
4
- # Protobuf Python Version: 4.25.1
5
+ # Protobuf Python Version: 5.29.0
5
6
  """Generated protocol buffer code."""
6
7
  from google.protobuf import descriptor as _descriptor
7
8
  from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
8
10
  from google.protobuf import symbol_database as _symbol_database
9
11
  from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 5,
15
+ 29,
16
+ 0,
17
+ '',
18
+ 'flwr/proto/fab.proto'
19
+ )
10
20
  # @@protoc_insertion_point(imports)
11
21
 
12
22
  _sym_db = _symbol_database.Default()
@@ -20,9 +30,9 @@ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/
20
30
  _globals = globals()
21
31
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
32
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fab_pb2', _globals)
23
- if _descriptor._USE_C_DESCRIPTORS == False:
24
- DESCRIPTOR._options = None
25
- _globals['_FAB_VERIFICATIONSENTRY']._options = None
33
+ if not _descriptor._USE_C_DESCRIPTORS:
34
+ DESCRIPTOR._loaded_options = None
35
+ _globals['_FAB_VERIFICATIONSENTRY']._loaded_options = None
26
36
  _globals['_FAB_VERIFICATIONSENTRY']._serialized_options = b'8\001'
27
37
  _globals['_FAB']._serialized_start=60
28
38
  _globals['_FAB']._serialized_end=213
flwr/proto/fab_pb2.pyi CHANGED
@@ -1,85 +1,113 @@
1
1
  """
2
2
  @generated by mypy-protobuf. Do not edit manually!
3
3
  isort:skip_file
4
+ Copyright 2024 Flower Labs GmbH. All Rights Reserved.
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+ ==============================================================================
4
18
  """
19
+
5
20
  import builtins
21
+ import collections.abc
6
22
  import flwr.proto.node_pb2
7
23
  import google.protobuf.descriptor
8
24
  import google.protobuf.internal.containers
9
25
  import google.protobuf.message
10
26
  import typing
11
- import typing_extensions
12
27
 
13
28
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
14
29
 
30
+ @typing.final
15
31
  class Fab(google.protobuf.message.Message):
16
32
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
33
+
34
+ @typing.final
17
35
  class VerificationsEntry(google.protobuf.message.Message):
18
36
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
37
+
19
38
  KEY_FIELD_NUMBER: builtins.int
20
39
  VALUE_FIELD_NUMBER: builtins.int
21
- key: typing.Text
22
- value: typing.Text
23
- def __init__(self,
40
+ key: builtins.str
41
+ value: builtins.str
42
+ def __init__(
43
+ self,
24
44
  *,
25
- key: typing.Text = ...,
26
- value: typing.Text = ...,
27
- ) -> None: ...
28
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
45
+ key: builtins.str = ...,
46
+ value: builtins.str = ...,
47
+ ) -> None: ...
48
+ def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...
29
49
 
30
50
  HASH_STR_FIELD_NUMBER: builtins.int
31
51
  CONTENT_FIELD_NUMBER: builtins.int
32
52
  VERIFICATIONS_FIELD_NUMBER: builtins.int
33
- hash_str: typing.Text
53
+ hash_str: builtins.str
34
54
  """This field is the hash of the data field. It is used to identify the data.
35
55
  The hash is calculated using the SHA-256 algorithm and is represented as a
36
56
  hex string (sha256hex).
37
57
  """
38
-
39
58
  content: builtins.bytes
40
59
  """This field contains the fab file contents a one bytes blob."""
41
-
42
60
  @property
43
- def verifications(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, typing.Text]:
61
+ def verifications(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]:
44
62
  """Verifications."""
45
- pass
46
- def __init__(self,
63
+
64
+ def __init__(
65
+ self,
47
66
  *,
48
- hash_str: typing.Text = ...,
67
+ hash_str: builtins.str = ...,
49
68
  content: builtins.bytes = ...,
50
- verifications: typing.Optional[typing.Mapping[typing.Text, typing.Text]] = ...,
51
- ) -> None: ...
52
- def ClearField(self, field_name: typing_extensions.Literal["content",b"content","hash_str",b"hash_str","verifications",b"verifications"]) -> None: ...
69
+ verifications: collections.abc.Mapping[builtins.str, builtins.str] | None = ...,
70
+ ) -> None: ...
71
+ def ClearField(self, field_name: typing.Literal["content", b"content", "hash_str", b"hash_str", "verifications", b"verifications"]) -> None: ...
72
+
53
73
  global___Fab = Fab
54
74
 
75
+ @typing.final
55
76
  class GetFabRequest(google.protobuf.message.Message):
56
77
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
78
+
57
79
  NODE_FIELD_NUMBER: builtins.int
58
80
  HASH_STR_FIELD_NUMBER: builtins.int
59
81
  RUN_ID_FIELD_NUMBER: builtins.int
82
+ hash_str: builtins.str
83
+ run_id: builtins.int
60
84
  @property
61
85
  def node(self) -> flwr.proto.node_pb2.Node: ...
62
- hash_str: typing.Text
63
- run_id: builtins.int
64
- def __init__(self,
86
+ def __init__(
87
+ self,
65
88
  *,
66
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
67
- hash_str: typing.Text = ...,
89
+ node: flwr.proto.node_pb2.Node | None = ...,
90
+ hash_str: builtins.str = ...,
68
91
  run_id: builtins.int = ...,
69
- ) -> None: ...
70
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
71
- def ClearField(self, field_name: typing_extensions.Literal["hash_str",b"hash_str","node",b"node","run_id",b"run_id"]) -> None: ...
92
+ ) -> None: ...
93
+ def HasField(self, field_name: typing.Literal["node", b"node"]) -> builtins.bool: ...
94
+ def ClearField(self, field_name: typing.Literal["hash_str", b"hash_str", "node", b"node", "run_id", b"run_id"]) -> None: ...
95
+
72
96
  global___GetFabRequest = GetFabRequest
73
97
 
98
+ @typing.final
74
99
  class GetFabResponse(google.protobuf.message.Message):
75
100
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
101
+
76
102
  FAB_FIELD_NUMBER: builtins.int
77
103
  @property
78
104
  def fab(self) -> global___Fab: ...
79
- def __init__(self,
105
+ def __init__(
106
+ self,
80
107
  *,
81
- fab: typing.Optional[global___Fab] = ...,
82
- ) -> None: ...
83
- def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
84
- def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> None: ...
108
+ fab: global___Fab | None = ...,
109
+ ) -> None: ...
110
+ def HasField(self, field_name: typing.Literal["fab", b"fab"]) -> builtins.bool: ...
111
+ def ClearField(self, field_name: typing.Literal["fab", b"fab"]) -> None: ...
112
+
85
113
  global___GetFabResponse = GetFabResponse