flwr 1.21.0__py3-none-any.whl → 1.23.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 (175) hide show
  1. flwr/cli/app.py +17 -1
  2. flwr/cli/auth_plugin/__init__.py +15 -6
  3. flwr/cli/auth_plugin/auth_plugin.py +95 -0
  4. flwr/cli/auth_plugin/noop_auth_plugin.py +58 -0
  5. flwr/cli/auth_plugin/oidc_cli_plugin.py +16 -25
  6. flwr/cli/build.py +118 -47
  7. flwr/cli/{cli_user_auth_interceptor.py → cli_account_auth_interceptor.py} +6 -5
  8. flwr/cli/log.py +2 -2
  9. flwr/cli/login/login.py +34 -23
  10. flwr/cli/ls.py +13 -9
  11. flwr/cli/new/new.py +196 -42
  12. flwr/cli/new/templates/app/README.flowertune.md.tpl +1 -1
  13. flwr/cli/new/templates/app/code/client.baseline.py.tpl +64 -47
  14. flwr/cli/new/templates/app/code/client.huggingface.py.tpl +68 -30
  15. flwr/cli/new/templates/app/code/client.jax.py.tpl +63 -42
  16. flwr/cli/new/templates/app/code/client.mlx.py.tpl +80 -51
  17. flwr/cli/new/templates/app/code/client.numpy.py.tpl +36 -13
  18. flwr/cli/new/templates/app/code/client.pytorch.py.tpl +71 -46
  19. flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +55 -0
  20. flwr/cli/new/templates/app/code/client.sklearn.py.tpl +75 -30
  21. flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +69 -44
  22. flwr/cli/new/templates/app/code/client.xgboost.py.tpl +110 -0
  23. flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +56 -90
  24. flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +1 -23
  25. flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +37 -58
  26. flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +39 -44
  27. flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -14
  28. flwr/cli/new/templates/app/code/server.baseline.py.tpl +27 -29
  29. flwr/cli/new/templates/app/code/server.huggingface.py.tpl +23 -19
  30. flwr/cli/new/templates/app/code/server.jax.py.tpl +27 -14
  31. flwr/cli/new/templates/app/code/server.mlx.py.tpl +29 -19
  32. flwr/cli/new/templates/app/code/server.numpy.py.tpl +30 -17
  33. flwr/cli/new/templates/app/code/server.pytorch.py.tpl +36 -26
  34. flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +31 -0
  35. flwr/cli/new/templates/app/code/server.sklearn.py.tpl +29 -21
  36. flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +28 -19
  37. flwr/cli/new/templates/app/code/server.xgboost.py.tpl +56 -0
  38. flwr/cli/new/templates/app/code/task.huggingface.py.tpl +16 -20
  39. flwr/cli/new/templates/app/code/task.jax.py.tpl +1 -1
  40. flwr/cli/new/templates/app/code/task.numpy.py.tpl +1 -1
  41. flwr/cli/new/templates/app/code/task.pytorch.py.tpl +14 -27
  42. flwr/cli/new/templates/app/code/{task.pytorch_msg_api.py.tpl → task.pytorch_legacy_api.py.tpl} +27 -14
  43. flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +1 -2
  44. flwr/cli/new/templates/app/code/task.xgboost.py.tpl +67 -0
  45. flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +4 -4
  46. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +2 -2
  47. flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +4 -4
  48. flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
  49. flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +2 -2
  50. flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
  51. flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +3 -3
  52. flwr/cli/new/templates/app/{pyproject.pytorch_msg_api.toml.tpl → pyproject.pytorch_legacy_api.toml.tpl} +3 -3
  53. flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
  54. flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
  55. flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +61 -0
  56. flwr/cli/pull.py +100 -0
  57. flwr/cli/run/run.py +11 -7
  58. flwr/cli/stop.py +2 -2
  59. flwr/cli/supernode/__init__.py +25 -0
  60. flwr/cli/supernode/ls.py +260 -0
  61. flwr/cli/supernode/register.py +185 -0
  62. flwr/cli/supernode/unregister.py +138 -0
  63. flwr/cli/utils.py +109 -69
  64. flwr/client/__init__.py +2 -1
  65. flwr/client/grpc_adapter_client/connection.py +6 -8
  66. flwr/client/grpc_rere_client/connection.py +59 -31
  67. flwr/client/grpc_rere_client/grpc_adapter.py +28 -12
  68. flwr/client/grpc_rere_client/{client_interceptor.py → node_auth_client_interceptor.py} +3 -6
  69. flwr/client/mod/secure_aggregation/secaggplus_mod.py +7 -5
  70. flwr/client/rest_client/connection.py +82 -37
  71. flwr/clientapp/__init__.py +1 -2
  72. flwr/clientapp/mod/__init__.py +4 -1
  73. flwr/clientapp/mod/centraldp_mods.py +156 -40
  74. flwr/clientapp/mod/localdp_mod.py +169 -0
  75. flwr/clientapp/typing.py +22 -0
  76. flwr/{client/clientapp → clientapp}/utils.py +1 -1
  77. flwr/common/constant.py +56 -13
  78. flwr/common/exit/exit_code.py +24 -10
  79. flwr/common/inflatable_utils.py +10 -10
  80. flwr/common/record/array.py +3 -3
  81. flwr/common/record/arrayrecord.py +10 -1
  82. flwr/common/record/typeddict.py +12 -0
  83. flwr/common/secure_aggregation/crypto/symmetric_encryption.py +1 -89
  84. flwr/common/serde.py +4 -2
  85. flwr/common/typing.py +7 -6
  86. flwr/compat/client/app.py +1 -1
  87. flwr/compat/client/grpc_client/connection.py +2 -2
  88. flwr/proto/control_pb2.py +48 -31
  89. flwr/proto/control_pb2.pyi +95 -5
  90. flwr/proto/control_pb2_grpc.py +136 -0
  91. flwr/proto/control_pb2_grpc.pyi +52 -0
  92. flwr/proto/fab_pb2.py +11 -7
  93. flwr/proto/fab_pb2.pyi +21 -1
  94. flwr/proto/fleet_pb2.py +31 -23
  95. flwr/proto/fleet_pb2.pyi +63 -23
  96. flwr/proto/fleet_pb2_grpc.py +98 -28
  97. flwr/proto/fleet_pb2_grpc.pyi +45 -13
  98. flwr/proto/node_pb2.py +3 -1
  99. flwr/proto/node_pb2.pyi +48 -0
  100. flwr/server/app.py +152 -114
  101. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +17 -7
  102. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +132 -38
  103. flwr/server/superlink/fleet/grpc_rere/{server_interceptor.py → node_auth_server_interceptor.py} +27 -51
  104. flwr/server/superlink/fleet/message_handler/message_handler.py +67 -22
  105. flwr/server/superlink/fleet/rest_rere/rest_api.py +52 -31
  106. flwr/server/superlink/fleet/vce/backend/backend.py +1 -1
  107. flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -1
  108. flwr/server/superlink/fleet/vce/vce_api.py +18 -5
  109. flwr/server/superlink/linkstate/in_memory_linkstate.py +167 -73
  110. flwr/server/superlink/linkstate/linkstate.py +107 -24
  111. flwr/server/superlink/linkstate/linkstate_factory.py +2 -1
  112. flwr/server/superlink/linkstate/sqlite_linkstate.py +306 -255
  113. flwr/server/superlink/linkstate/utils.py +3 -54
  114. flwr/server/superlink/serverappio/serverappio_servicer.py +2 -2
  115. flwr/server/superlink/simulation/simulationio_servicer.py +1 -1
  116. flwr/server/utils/validator.py +2 -3
  117. flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +4 -2
  118. flwr/serverapp/strategy/__init__.py +26 -0
  119. flwr/serverapp/strategy/bulyan.py +238 -0
  120. flwr/serverapp/strategy/dp_adaptive_clipping.py +335 -0
  121. flwr/serverapp/strategy/dp_fixed_clipping.py +71 -49
  122. flwr/serverapp/strategy/fedadagrad.py +0 -3
  123. flwr/serverapp/strategy/fedadam.py +0 -3
  124. flwr/serverapp/strategy/fedavg.py +89 -64
  125. flwr/serverapp/strategy/fedavgm.py +198 -0
  126. flwr/serverapp/strategy/fedmedian.py +105 -0
  127. flwr/serverapp/strategy/fedprox.py +174 -0
  128. flwr/serverapp/strategy/fedtrimmedavg.py +176 -0
  129. flwr/serverapp/strategy/fedxgb_bagging.py +117 -0
  130. flwr/serverapp/strategy/fedxgb_cyclic.py +220 -0
  131. flwr/serverapp/strategy/fedyogi.py +0 -3
  132. flwr/serverapp/strategy/krum.py +112 -0
  133. flwr/serverapp/strategy/multikrum.py +247 -0
  134. flwr/serverapp/strategy/qfedavg.py +252 -0
  135. flwr/serverapp/strategy/strategy_utils.py +48 -0
  136. flwr/simulation/app.py +1 -1
  137. flwr/simulation/ray_transport/ray_actor.py +1 -1
  138. flwr/simulation/ray_transport/ray_client_proxy.py +1 -1
  139. flwr/simulation/run_simulation.py +28 -32
  140. flwr/supercore/cli/flower_superexec.py +26 -1
  141. flwr/supercore/constant.py +41 -0
  142. flwr/supercore/object_store/in_memory_object_store.py +0 -4
  143. flwr/supercore/object_store/object_store_factory.py +26 -6
  144. flwr/supercore/object_store/sqlite_object_store.py +252 -0
  145. flwr/{client/clientapp → supercore/primitives}/__init__.py +1 -1
  146. flwr/supercore/primitives/asymmetric.py +117 -0
  147. flwr/supercore/primitives/asymmetric_ed25519.py +165 -0
  148. flwr/supercore/sqlite_mixin.py +156 -0
  149. flwr/supercore/superexec/plugin/exec_plugin.py +11 -1
  150. flwr/supercore/superexec/run_superexec.py +16 -2
  151. flwr/supercore/utils.py +20 -0
  152. flwr/superlink/artifact_provider/__init__.py +22 -0
  153. flwr/superlink/artifact_provider/artifact_provider.py +37 -0
  154. flwr/{common → superlink}/auth_plugin/__init__.py +6 -6
  155. flwr/superlink/auth_plugin/auth_plugin.py +91 -0
  156. flwr/superlink/auth_plugin/noop_auth_plugin.py +87 -0
  157. flwr/superlink/servicer/control/{control_user_auth_interceptor.py → control_account_auth_interceptor.py} +19 -19
  158. flwr/superlink/servicer/control/control_event_log_interceptor.py +1 -1
  159. flwr/superlink/servicer/control/control_grpc.py +16 -11
  160. flwr/superlink/servicer/control/control_servicer.py +207 -58
  161. flwr/supernode/cli/flower_supernode.py +19 -26
  162. flwr/supernode/runtime/run_clientapp.py +2 -2
  163. flwr/supernode/servicer/clientappio/clientappio_servicer.py +1 -1
  164. flwr/supernode/start_client_internal.py +17 -9
  165. {flwr-1.21.0.dist-info → flwr-1.23.0.dist-info}/METADATA +6 -16
  166. {flwr-1.21.0.dist-info → flwr-1.23.0.dist-info}/RECORD +170 -140
  167. flwr/cli/new/templates/app/code/client.pytorch_msg_api.py.tpl +0 -80
  168. flwr/cli/new/templates/app/code/server.pytorch_msg_api.py.tpl +0 -41
  169. flwr/common/auth_plugin/auth_plugin.py +0 -149
  170. flwr/serverapp/dp_fixed_clipping.py +0 -352
  171. flwr/serverapp/strategy/strategy_utils_tests.py +0 -304
  172. /flwr/cli/new/templates/app/code/{__init__.pytorch_msg_api.py.tpl → __init__.pytorch_legacy_api.py.tpl} +0 -0
  173. /flwr/{client → clientapp}/client_app.py +0 -0
  174. {flwr-1.21.0.dist-info → flwr-1.23.0.dist-info}/WHEEL +0 -0
  175. {flwr-1.21.0.dist-info → flwr-1.23.0.dist-info}/entry_points.txt +0 -0
@@ -18,15 +18,25 @@ class FleetStub(object):
18
18
  Args:
19
19
  channel: A grpc.Channel.
20
20
  """
21
- self.CreateNode = channel.unary_unary(
22
- '/flwr.proto.Fleet/CreateNode',
23
- request_serializer=flwr_dot_proto_dot_fleet__pb2.CreateNodeRequest.SerializeToString,
24
- response_deserializer=flwr_dot_proto_dot_fleet__pb2.CreateNodeResponse.FromString,
21
+ self.RegisterNode = channel.unary_unary(
22
+ '/flwr.proto.Fleet/RegisterNode',
23
+ request_serializer=flwr_dot_proto_dot_fleet__pb2.RegisterNodeFleetRequest.SerializeToString,
24
+ response_deserializer=flwr_dot_proto_dot_fleet__pb2.RegisterNodeFleetResponse.FromString,
25
25
  )
26
- self.DeleteNode = channel.unary_unary(
27
- '/flwr.proto.Fleet/DeleteNode',
28
- request_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.SerializeToString,
29
- response_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.FromString,
26
+ self.ActivateNode = channel.unary_unary(
27
+ '/flwr.proto.Fleet/ActivateNode',
28
+ request_serializer=flwr_dot_proto_dot_fleet__pb2.ActivateNodeRequest.SerializeToString,
29
+ response_deserializer=flwr_dot_proto_dot_fleet__pb2.ActivateNodeResponse.FromString,
30
+ )
31
+ self.DeactivateNode = channel.unary_unary(
32
+ '/flwr.proto.Fleet/DeactivateNode',
33
+ request_serializer=flwr_dot_proto_dot_fleet__pb2.DeactivateNodeRequest.SerializeToString,
34
+ response_deserializer=flwr_dot_proto_dot_fleet__pb2.DeactivateNodeResponse.FromString,
35
+ )
36
+ self.UnregisterNode = channel.unary_unary(
37
+ '/flwr.proto.Fleet/UnregisterNode',
38
+ request_serializer=flwr_dot_proto_dot_fleet__pb2.UnregisterNodeFleetRequest.SerializeToString,
39
+ response_deserializer=flwr_dot_proto_dot_fleet__pb2.UnregisterNodeFleetResponse.FromString,
30
40
  )
31
41
  self.SendNodeHeartbeat = channel.unary_unary(
32
42
  '/flwr.proto.Fleet/SendNodeHeartbeat',
@@ -73,14 +83,30 @@ class FleetStub(object):
73
83
  class FleetServicer(object):
74
84
  """Missing associated documentation comment in .proto file."""
75
85
 
76
- def CreateNode(self, request, context):
77
- """Missing associated documentation comment in .proto file."""
86
+ def RegisterNode(self, request, context):
87
+ """Register Node
88
+ """
78
89
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
79
90
  context.set_details('Method not implemented!')
80
91
  raise NotImplementedError('Method not implemented!')
81
92
 
82
- def DeleteNode(self, request, context):
83
- """Missing associated documentation comment in .proto file."""
93
+ def ActivateNode(self, request, context):
94
+ """Activate Node
95
+ """
96
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
97
+ context.set_details('Method not implemented!')
98
+ raise NotImplementedError('Method not implemented!')
99
+
100
+ def DeactivateNode(self, request, context):
101
+ """Deactivate Node
102
+ """
103
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
104
+ context.set_details('Method not implemented!')
105
+ raise NotImplementedError('Method not implemented!')
106
+
107
+ def UnregisterNode(self, request, context):
108
+ """Unregister Node
109
+ """
84
110
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
85
111
  context.set_details('Method not implemented!')
86
112
  raise NotImplementedError('Method not implemented!')
@@ -146,15 +172,25 @@ class FleetServicer(object):
146
172
 
147
173
  def add_FleetServicer_to_server(servicer, server):
148
174
  rpc_method_handlers = {
149
- 'CreateNode': grpc.unary_unary_rpc_method_handler(
150
- servicer.CreateNode,
151
- request_deserializer=flwr_dot_proto_dot_fleet__pb2.CreateNodeRequest.FromString,
152
- response_serializer=flwr_dot_proto_dot_fleet__pb2.CreateNodeResponse.SerializeToString,
175
+ 'RegisterNode': grpc.unary_unary_rpc_method_handler(
176
+ servicer.RegisterNode,
177
+ request_deserializer=flwr_dot_proto_dot_fleet__pb2.RegisterNodeFleetRequest.FromString,
178
+ response_serializer=flwr_dot_proto_dot_fleet__pb2.RegisterNodeFleetResponse.SerializeToString,
179
+ ),
180
+ 'ActivateNode': grpc.unary_unary_rpc_method_handler(
181
+ servicer.ActivateNode,
182
+ request_deserializer=flwr_dot_proto_dot_fleet__pb2.ActivateNodeRequest.FromString,
183
+ response_serializer=flwr_dot_proto_dot_fleet__pb2.ActivateNodeResponse.SerializeToString,
153
184
  ),
154
- 'DeleteNode': grpc.unary_unary_rpc_method_handler(
155
- servicer.DeleteNode,
156
- request_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.FromString,
157
- response_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.SerializeToString,
185
+ 'DeactivateNode': grpc.unary_unary_rpc_method_handler(
186
+ servicer.DeactivateNode,
187
+ request_deserializer=flwr_dot_proto_dot_fleet__pb2.DeactivateNodeRequest.FromString,
188
+ response_serializer=flwr_dot_proto_dot_fleet__pb2.DeactivateNodeResponse.SerializeToString,
189
+ ),
190
+ 'UnregisterNode': grpc.unary_unary_rpc_method_handler(
191
+ servicer.UnregisterNode,
192
+ request_deserializer=flwr_dot_proto_dot_fleet__pb2.UnregisterNodeFleetRequest.FromString,
193
+ response_serializer=flwr_dot_proto_dot_fleet__pb2.UnregisterNodeFleetResponse.SerializeToString,
158
194
  ),
159
195
  'SendNodeHeartbeat': grpc.unary_unary_rpc_method_handler(
160
196
  servicer.SendNodeHeartbeat,
@@ -207,7 +243,41 @@ class Fleet(object):
207
243
  """Missing associated documentation comment in .proto file."""
208
244
 
209
245
  @staticmethod
210
- def CreateNode(request,
246
+ def RegisterNode(request,
247
+ target,
248
+ options=(),
249
+ channel_credentials=None,
250
+ call_credentials=None,
251
+ insecure=False,
252
+ compression=None,
253
+ wait_for_ready=None,
254
+ timeout=None,
255
+ metadata=None):
256
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/RegisterNode',
257
+ flwr_dot_proto_dot_fleet__pb2.RegisterNodeFleetRequest.SerializeToString,
258
+ flwr_dot_proto_dot_fleet__pb2.RegisterNodeFleetResponse.FromString,
259
+ options, channel_credentials,
260
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
261
+
262
+ @staticmethod
263
+ def ActivateNode(request,
264
+ target,
265
+ options=(),
266
+ channel_credentials=None,
267
+ call_credentials=None,
268
+ insecure=False,
269
+ compression=None,
270
+ wait_for_ready=None,
271
+ timeout=None,
272
+ metadata=None):
273
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/ActivateNode',
274
+ flwr_dot_proto_dot_fleet__pb2.ActivateNodeRequest.SerializeToString,
275
+ flwr_dot_proto_dot_fleet__pb2.ActivateNodeResponse.FromString,
276
+ options, channel_credentials,
277
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
278
+
279
+ @staticmethod
280
+ def DeactivateNode(request,
211
281
  target,
212
282
  options=(),
213
283
  channel_credentials=None,
@@ -217,14 +287,14 @@ class Fleet(object):
217
287
  wait_for_ready=None,
218
288
  timeout=None,
219
289
  metadata=None):
220
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/CreateNode',
221
- flwr_dot_proto_dot_fleet__pb2.CreateNodeRequest.SerializeToString,
222
- flwr_dot_proto_dot_fleet__pb2.CreateNodeResponse.FromString,
290
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/DeactivateNode',
291
+ flwr_dot_proto_dot_fleet__pb2.DeactivateNodeRequest.SerializeToString,
292
+ flwr_dot_proto_dot_fleet__pb2.DeactivateNodeResponse.FromString,
223
293
  options, channel_credentials,
224
294
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
225
295
 
226
296
  @staticmethod
227
- def DeleteNode(request,
297
+ def UnregisterNode(request,
228
298
  target,
229
299
  options=(),
230
300
  channel_credentials=None,
@@ -234,9 +304,9 @@ class Fleet(object):
234
304
  wait_for_ready=None,
235
305
  timeout=None,
236
306
  metadata=None):
237
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/DeleteNode',
238
- flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.SerializeToString,
239
- flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.FromString,
307
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/UnregisterNode',
308
+ flwr_dot_proto_dot_fleet__pb2.UnregisterNodeFleetRequest.SerializeToString,
309
+ flwr_dot_proto_dot_fleet__pb2.UnregisterNodeFleetResponse.FromString,
240
310
  options, channel_credentials,
241
311
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
242
312
 
@@ -12,13 +12,25 @@ import grpc
12
12
 
13
13
  class FleetStub:
14
14
  def __init__(self, channel: grpc.Channel) -> None: ...
15
- CreateNode: grpc.UnaryUnaryMultiCallable[
16
- flwr.proto.fleet_pb2.CreateNodeRequest,
17
- flwr.proto.fleet_pb2.CreateNodeResponse]
18
-
19
- DeleteNode: grpc.UnaryUnaryMultiCallable[
20
- flwr.proto.fleet_pb2.DeleteNodeRequest,
21
- flwr.proto.fleet_pb2.DeleteNodeResponse]
15
+ RegisterNode: grpc.UnaryUnaryMultiCallable[
16
+ flwr.proto.fleet_pb2.RegisterNodeFleetRequest,
17
+ flwr.proto.fleet_pb2.RegisterNodeFleetResponse]
18
+ """Register Node"""
19
+
20
+ ActivateNode: grpc.UnaryUnaryMultiCallable[
21
+ flwr.proto.fleet_pb2.ActivateNodeRequest,
22
+ flwr.proto.fleet_pb2.ActivateNodeResponse]
23
+ """Activate Node"""
24
+
25
+ DeactivateNode: grpc.UnaryUnaryMultiCallable[
26
+ flwr.proto.fleet_pb2.DeactivateNodeRequest,
27
+ flwr.proto.fleet_pb2.DeactivateNodeResponse]
28
+ """Deactivate Node"""
29
+
30
+ UnregisterNode: grpc.UnaryUnaryMultiCallable[
31
+ flwr.proto.fleet_pb2.UnregisterNodeFleetRequest,
32
+ flwr.proto.fleet_pb2.UnregisterNodeFleetResponse]
33
+ """Unregister Node"""
22
34
 
23
35
  SendNodeHeartbeat: grpc.UnaryUnaryMultiCallable[
24
36
  flwr.proto.heartbeat_pb2.SendNodeHeartbeatRequest,
@@ -67,16 +79,36 @@ class FleetStub:
67
79
 
68
80
  class FleetServicer(metaclass=abc.ABCMeta):
69
81
  @abc.abstractmethod
70
- def CreateNode(self,
71
- request: flwr.proto.fleet_pb2.CreateNodeRequest,
82
+ def RegisterNode(self,
83
+ request: flwr.proto.fleet_pb2.RegisterNodeFleetRequest,
84
+ context: grpc.ServicerContext,
85
+ ) -> flwr.proto.fleet_pb2.RegisterNodeFleetResponse:
86
+ """Register Node"""
87
+ pass
88
+
89
+ @abc.abstractmethod
90
+ def ActivateNode(self,
91
+ request: flwr.proto.fleet_pb2.ActivateNodeRequest,
72
92
  context: grpc.ServicerContext,
73
- ) -> flwr.proto.fleet_pb2.CreateNodeResponse: ...
93
+ ) -> flwr.proto.fleet_pb2.ActivateNodeResponse:
94
+ """Activate Node"""
95
+ pass
74
96
 
75
97
  @abc.abstractmethod
76
- def DeleteNode(self,
77
- request: flwr.proto.fleet_pb2.DeleteNodeRequest,
98
+ def DeactivateNode(self,
99
+ request: flwr.proto.fleet_pb2.DeactivateNodeRequest,
78
100
  context: grpc.ServicerContext,
79
- ) -> flwr.proto.fleet_pb2.DeleteNodeResponse: ...
101
+ ) -> flwr.proto.fleet_pb2.DeactivateNodeResponse:
102
+ """Deactivate Node"""
103
+ pass
104
+
105
+ @abc.abstractmethod
106
+ def UnregisterNode(self,
107
+ request: flwr.proto.fleet_pb2.UnregisterNodeFleetRequest,
108
+ context: grpc.ServicerContext,
109
+ ) -> flwr.proto.fleet_pb2.UnregisterNodeFleetResponse:
110
+ """Unregister Node"""
111
+ pass
80
112
 
81
113
  @abc.abstractmethod
82
114
  def SendNodeHeartbeat(self,
flwr/proto/node_pb2.py CHANGED
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/node.proto\x12\nflwr.proto\"\x17\n\x04Node\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x62\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/node.proto\x12\nflwr.proto\"\x17\n\x04Node\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\xd3\x02\n\x08NodeInfo\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x11\n\towner_aid\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x15\n\rregistered_at\x18\x04 \x01(\t\x12\x1e\n\x11last_activated_at\x18\x05 \x01(\tH\x00\x88\x01\x01\x12 \n\x13last_deactivated_at\x18\x06 \x01(\tH\x01\x88\x01\x01\x12\x1c\n\x0funregistered_at\x18\x07 \x01(\tH\x02\x88\x01\x01\x12\x19\n\x0conline_until\x18\x08 \x01(\x01H\x03\x88\x01\x01\x12\x1a\n\x12heartbeat_interval\x18\t \x01(\x01\x12\x12\n\npublic_key\x18\n \x01(\x0c\x42\x14\n\x12_last_activated_atB\x16\n\x14_last_deactivated_atB\x12\n\x10_unregistered_atB\x0f\n\r_online_untilb\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -23,4 +23,6 @@ if _descriptor._USE_C_DESCRIPTORS == False:
23
23
  DESCRIPTOR._options = None
24
24
  _globals['_NODE']._serialized_start=37
25
25
  _globals['_NODE']._serialized_end=60
26
+ _globals['_NODEINFO']._serialized_start=63
27
+ _globals['_NODEINFO']._serialized_end=402
26
28
  # @@protoc_insertion_point(module_scope)
flwr/proto/node_pb2.pyi CHANGED
@@ -5,6 +5,7 @@ isort:skip_file
5
5
  import builtins
6
6
  import google.protobuf.descriptor
7
7
  import google.protobuf.message
8
+ import typing
8
9
  import typing_extensions
9
10
 
10
11
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
@@ -19,3 +20,50 @@ class Node(google.protobuf.message.Message):
19
20
  ) -> None: ...
20
21
  def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
21
22
  global___Node = Node
23
+
24
+ class NodeInfo(google.protobuf.message.Message):
25
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
26
+ NODE_ID_FIELD_NUMBER: builtins.int
27
+ OWNER_AID_FIELD_NUMBER: builtins.int
28
+ STATUS_FIELD_NUMBER: builtins.int
29
+ REGISTERED_AT_FIELD_NUMBER: builtins.int
30
+ LAST_ACTIVATED_AT_FIELD_NUMBER: builtins.int
31
+ LAST_DEACTIVATED_AT_FIELD_NUMBER: builtins.int
32
+ UNREGISTERED_AT_FIELD_NUMBER: builtins.int
33
+ ONLINE_UNTIL_FIELD_NUMBER: builtins.int
34
+ HEARTBEAT_INTERVAL_FIELD_NUMBER: builtins.int
35
+ PUBLIC_KEY_FIELD_NUMBER: builtins.int
36
+ node_id: builtins.int
37
+ owner_aid: typing.Text
38
+ status: typing.Text
39
+ registered_at: typing.Text
40
+ last_activated_at: typing.Text
41
+ last_deactivated_at: typing.Text
42
+ unregistered_at: typing.Text
43
+ online_until: builtins.float
44
+ heartbeat_interval: builtins.float
45
+ public_key: builtins.bytes
46
+ def __init__(self,
47
+ *,
48
+ node_id: builtins.int = ...,
49
+ owner_aid: typing.Text = ...,
50
+ status: typing.Text = ...,
51
+ registered_at: typing.Text = ...,
52
+ last_activated_at: typing.Optional[typing.Text] = ...,
53
+ last_deactivated_at: typing.Optional[typing.Text] = ...,
54
+ unregistered_at: typing.Optional[typing.Text] = ...,
55
+ online_until: typing.Optional[builtins.float] = ...,
56
+ heartbeat_interval: builtins.float = ...,
57
+ public_key: builtins.bytes = ...,
58
+ ) -> None: ...
59
+ def HasField(self, field_name: typing_extensions.Literal["_last_activated_at",b"_last_activated_at","_last_deactivated_at",b"_last_deactivated_at","_online_until",b"_online_until","_unregistered_at",b"_unregistered_at","last_activated_at",b"last_activated_at","last_deactivated_at",b"last_deactivated_at","online_until",b"online_until","unregistered_at",b"unregistered_at"]) -> builtins.bool: ...
60
+ def ClearField(self, field_name: typing_extensions.Literal["_last_activated_at",b"_last_activated_at","_last_deactivated_at",b"_last_deactivated_at","_online_until",b"_online_until","_unregistered_at",b"_unregistered_at","heartbeat_interval",b"heartbeat_interval","last_activated_at",b"last_activated_at","last_deactivated_at",b"last_deactivated_at","node_id",b"node_id","online_until",b"online_until","owner_aid",b"owner_aid","public_key",b"public_key","registered_at",b"registered_at","status",b"status","unregistered_at",b"unregistered_at"]) -> None: ...
61
+ @typing.overload
62
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_last_activated_at",b"_last_activated_at"]) -> typing.Optional[typing_extensions.Literal["last_activated_at"]]: ...
63
+ @typing.overload
64
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_last_deactivated_at",b"_last_deactivated_at"]) -> typing.Optional[typing_extensions.Literal["last_deactivated_at"]]: ...
65
+ @typing.overload
66
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_online_until",b"_online_until"]) -> typing.Optional[typing_extensions.Literal["online_until"]]: ...
67
+ @typing.overload
68
+ def WhichOneof(self, oneof_group: typing_extensions.Literal["_unregistered_at",b"_unregistered_at"]) -> typing.Optional[typing_extensions.Literal["unregistered_at"]]: ...
69
+ global___NodeInfo = NodeInfo