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
@@ -44,6 +44,26 @@ class ControlStub(object):
44
44
  request_serializer=flwr_dot_proto_dot_control__pb2.GetAuthTokensRequest.SerializeToString,
45
45
  response_deserializer=flwr_dot_proto_dot_control__pb2.GetAuthTokensResponse.FromString,
46
46
  )
47
+ self.PullArtifacts = channel.unary_unary(
48
+ '/flwr.proto.Control/PullArtifacts',
49
+ request_serializer=flwr_dot_proto_dot_control__pb2.PullArtifactsRequest.SerializeToString,
50
+ response_deserializer=flwr_dot_proto_dot_control__pb2.PullArtifactsResponse.FromString,
51
+ )
52
+ self.RegisterNode = channel.unary_unary(
53
+ '/flwr.proto.Control/RegisterNode',
54
+ request_serializer=flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.SerializeToString,
55
+ response_deserializer=flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.FromString,
56
+ )
57
+ self.UnregisterNode = channel.unary_unary(
58
+ '/flwr.proto.Control/UnregisterNode',
59
+ request_serializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.SerializeToString,
60
+ response_deserializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.FromString,
61
+ )
62
+ self.ListNodes = channel.unary_unary(
63
+ '/flwr.proto.Control/ListNodes',
64
+ request_serializer=flwr_dot_proto_dot_control__pb2.ListNodesRequest.SerializeToString,
65
+ response_deserializer=flwr_dot_proto_dot_control__pb2.ListNodesResponse.FromString,
66
+ )
47
67
 
48
68
 
49
69
  class ControlServicer(object):
@@ -91,6 +111,34 @@ class ControlServicer(object):
91
111
  context.set_details('Method not implemented!')
92
112
  raise NotImplementedError('Method not implemented!')
93
113
 
114
+ def PullArtifacts(self, request, context):
115
+ """Pull artifacts generated during a run (flwr pull)
116
+ """
117
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
118
+ context.set_details('Method not implemented!')
119
+ raise NotImplementedError('Method not implemented!')
120
+
121
+ def RegisterNode(self, request, context):
122
+ """Register SuperNode
123
+ """
124
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
125
+ context.set_details('Method not implemented!')
126
+ raise NotImplementedError('Method not implemented!')
127
+
128
+ def UnregisterNode(self, request, context):
129
+ """Unregister SuperNode
130
+ """
131
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
132
+ context.set_details('Method not implemented!')
133
+ raise NotImplementedError('Method not implemented!')
134
+
135
+ def ListNodes(self, request, context):
136
+ """List SuperNodes
137
+ """
138
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
139
+ context.set_details('Method not implemented!')
140
+ raise NotImplementedError('Method not implemented!')
141
+
94
142
 
95
143
  def add_ControlServicer_to_server(servicer, server):
96
144
  rpc_method_handlers = {
@@ -124,6 +172,26 @@ def add_ControlServicer_to_server(servicer, server):
124
172
  request_deserializer=flwr_dot_proto_dot_control__pb2.GetAuthTokensRequest.FromString,
125
173
  response_serializer=flwr_dot_proto_dot_control__pb2.GetAuthTokensResponse.SerializeToString,
126
174
  ),
175
+ 'PullArtifacts': grpc.unary_unary_rpc_method_handler(
176
+ servicer.PullArtifacts,
177
+ request_deserializer=flwr_dot_proto_dot_control__pb2.PullArtifactsRequest.FromString,
178
+ response_serializer=flwr_dot_proto_dot_control__pb2.PullArtifactsResponse.SerializeToString,
179
+ ),
180
+ 'RegisterNode': grpc.unary_unary_rpc_method_handler(
181
+ servicer.RegisterNode,
182
+ request_deserializer=flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.FromString,
183
+ response_serializer=flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.SerializeToString,
184
+ ),
185
+ 'UnregisterNode': grpc.unary_unary_rpc_method_handler(
186
+ servicer.UnregisterNode,
187
+ request_deserializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.FromString,
188
+ response_serializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.SerializeToString,
189
+ ),
190
+ 'ListNodes': grpc.unary_unary_rpc_method_handler(
191
+ servicer.ListNodes,
192
+ request_deserializer=flwr_dot_proto_dot_control__pb2.ListNodesRequest.FromString,
193
+ response_serializer=flwr_dot_proto_dot_control__pb2.ListNodesResponse.SerializeToString,
194
+ ),
127
195
  }
128
196
  generic_handler = grpc.method_handlers_generic_handler(
129
197
  'flwr.proto.Control', rpc_method_handlers)
@@ -235,3 +303,71 @@ class Control(object):
235
303
  flwr_dot_proto_dot_control__pb2.GetAuthTokensResponse.FromString,
236
304
  options, channel_credentials,
237
305
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
306
+
307
+ @staticmethod
308
+ def PullArtifacts(request,
309
+ target,
310
+ options=(),
311
+ channel_credentials=None,
312
+ call_credentials=None,
313
+ insecure=False,
314
+ compression=None,
315
+ wait_for_ready=None,
316
+ timeout=None,
317
+ metadata=None):
318
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/PullArtifacts',
319
+ flwr_dot_proto_dot_control__pb2.PullArtifactsRequest.SerializeToString,
320
+ flwr_dot_proto_dot_control__pb2.PullArtifactsResponse.FromString,
321
+ options, channel_credentials,
322
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
323
+
324
+ @staticmethod
325
+ def RegisterNode(request,
326
+ target,
327
+ options=(),
328
+ channel_credentials=None,
329
+ call_credentials=None,
330
+ insecure=False,
331
+ compression=None,
332
+ wait_for_ready=None,
333
+ timeout=None,
334
+ metadata=None):
335
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/RegisterNode',
336
+ flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.SerializeToString,
337
+ flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.FromString,
338
+ options, channel_credentials,
339
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
340
+
341
+ @staticmethod
342
+ def UnregisterNode(request,
343
+ target,
344
+ options=(),
345
+ channel_credentials=None,
346
+ call_credentials=None,
347
+ insecure=False,
348
+ compression=None,
349
+ wait_for_ready=None,
350
+ timeout=None,
351
+ metadata=None):
352
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/UnregisterNode',
353
+ flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.SerializeToString,
354
+ flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.FromString,
355
+ options, channel_credentials,
356
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
357
+
358
+ @staticmethod
359
+ def ListNodes(request,
360
+ target,
361
+ options=(),
362
+ channel_credentials=None,
363
+ call_credentials=None,
364
+ insecure=False,
365
+ compression=None,
366
+ wait_for_ready=None,
367
+ timeout=None,
368
+ metadata=None):
369
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/ListNodes',
370
+ flwr_dot_proto_dot_control__pb2.ListNodesRequest.SerializeToString,
371
+ flwr_dot_proto_dot_control__pb2.ListNodesResponse.FromString,
372
+ options, channel_credentials,
373
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -39,6 +39,26 @@ class ControlStub:
39
39
  flwr.proto.control_pb2.GetAuthTokensResponse]
40
40
  """Get auth tokens upon request"""
41
41
 
42
+ PullArtifacts: grpc.UnaryUnaryMultiCallable[
43
+ flwr.proto.control_pb2.PullArtifactsRequest,
44
+ flwr.proto.control_pb2.PullArtifactsResponse]
45
+ """Pull artifacts generated during a run (flwr pull)"""
46
+
47
+ RegisterNode: grpc.UnaryUnaryMultiCallable[
48
+ flwr.proto.control_pb2.RegisterNodeRequest,
49
+ flwr.proto.control_pb2.RegisterNodeResponse]
50
+ """Register SuperNode"""
51
+
52
+ UnregisterNode: grpc.UnaryUnaryMultiCallable[
53
+ flwr.proto.control_pb2.UnregisterNodeRequest,
54
+ flwr.proto.control_pb2.UnregisterNodeResponse]
55
+ """Unregister SuperNode"""
56
+
57
+ ListNodes: grpc.UnaryUnaryMultiCallable[
58
+ flwr.proto.control_pb2.ListNodesRequest,
59
+ flwr.proto.control_pb2.ListNodesResponse]
60
+ """List SuperNodes"""
61
+
42
62
 
43
63
  class ControlServicer(metaclass=abc.ABCMeta):
44
64
  @abc.abstractmethod
@@ -89,5 +109,37 @@ class ControlServicer(metaclass=abc.ABCMeta):
89
109
  """Get auth tokens upon request"""
90
110
  pass
91
111
 
112
+ @abc.abstractmethod
113
+ def PullArtifacts(self,
114
+ request: flwr.proto.control_pb2.PullArtifactsRequest,
115
+ context: grpc.ServicerContext,
116
+ ) -> flwr.proto.control_pb2.PullArtifactsResponse:
117
+ """Pull artifacts generated during a run (flwr pull)"""
118
+ pass
119
+
120
+ @abc.abstractmethod
121
+ def RegisterNode(self,
122
+ request: flwr.proto.control_pb2.RegisterNodeRequest,
123
+ context: grpc.ServicerContext,
124
+ ) -> flwr.proto.control_pb2.RegisterNodeResponse:
125
+ """Register SuperNode"""
126
+ pass
127
+
128
+ @abc.abstractmethod
129
+ def UnregisterNode(self,
130
+ request: flwr.proto.control_pb2.UnregisterNodeRequest,
131
+ context: grpc.ServicerContext,
132
+ ) -> flwr.proto.control_pb2.UnregisterNodeResponse:
133
+ """Unregister SuperNode"""
134
+ pass
135
+
136
+ @abc.abstractmethod
137
+ def ListNodes(self,
138
+ request: flwr.proto.control_pb2.ListNodesRequest,
139
+ context: grpc.ServicerContext,
140
+ ) -> flwr.proto.control_pb2.ListNodesResponse:
141
+ """List SuperNodes"""
142
+ pass
143
+
92
144
 
93
145
  def add_ControlServicer_to_server(servicer: ControlServicer, server: grpc.Server) -> None: ...
flwr/proto/fab_pb2.py CHANGED
@@ -15,17 +15,21 @@ _sym_db = _symbol_database.Default()
15
15
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"(\n\x03\x46\x61\x62\x12\x10\n\x08hash_str\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"Q\n\rGetFabRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08hash_str\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x04\".\n\x0eGetFabResponse\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fabb\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"\x99\x01\n\x03\x46\x61\x62\x12\x10\n\x08hash_str\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\x12\x39\n\rverifications\x18\x03 \x03(\x0b\x32\".flwr.proto.Fab.VerificationsEntry\x1a\x34\n\x12VerificationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"Q\n\rGetFabRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08hash_str\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x04\".\n\x0eGetFabResponse\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fabb\x06proto3')
19
19
 
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
22
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fab_pb2', _globals)
23
23
  if _descriptor._USE_C_DESCRIPTORS == False:
24
24
  DESCRIPTOR._options = None
25
- _globals['_FAB']._serialized_start=59
26
- _globals['_FAB']._serialized_end=99
27
- _globals['_GETFABREQUEST']._serialized_start=101
28
- _globals['_GETFABREQUEST']._serialized_end=182
29
- _globals['_GETFABRESPONSE']._serialized_start=184
30
- _globals['_GETFABRESPONSE']._serialized_end=230
25
+ _globals['_FAB_VERIFICATIONSENTRY']._options = None
26
+ _globals['_FAB_VERIFICATIONSENTRY']._serialized_options = b'8\001'
27
+ _globals['_FAB']._serialized_start=60
28
+ _globals['_FAB']._serialized_end=213
29
+ _globals['_FAB_VERIFICATIONSENTRY']._serialized_start=161
30
+ _globals['_FAB_VERIFICATIONSENTRY']._serialized_end=213
31
+ _globals['_GETFABREQUEST']._serialized_start=215
32
+ _globals['_GETFABREQUEST']._serialized_end=296
33
+ _globals['_GETFABRESPONSE']._serialized_start=298
34
+ _globals['_GETFABRESPONSE']._serialized_end=344
31
35
  # @@protoc_insertion_point(module_scope)
flwr/proto/fab_pb2.pyi CHANGED
@@ -5,6 +5,7 @@ isort:skip_file
5
5
  import builtins
6
6
  import flwr.proto.node_pb2
7
7
  import google.protobuf.descriptor
8
+ import google.protobuf.internal.containers
8
9
  import google.protobuf.message
9
10
  import typing
10
11
  import typing_extensions
@@ -13,8 +14,22 @@ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
13
14
 
14
15
  class Fab(google.protobuf.message.Message):
15
16
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
17
+ class VerificationsEntry(google.protobuf.message.Message):
18
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
19
+ KEY_FIELD_NUMBER: builtins.int
20
+ VALUE_FIELD_NUMBER: builtins.int
21
+ key: typing.Text
22
+ value: typing.Text
23
+ def __init__(self,
24
+ *,
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: ...
29
+
16
30
  HASH_STR_FIELD_NUMBER: builtins.int
17
31
  CONTENT_FIELD_NUMBER: builtins.int
32
+ VERIFICATIONS_FIELD_NUMBER: builtins.int
18
33
  hash_str: typing.Text
19
34
  """This field is the hash of the data field. It is used to identify the data.
20
35
  The hash is calculated using the SHA-256 algorithm and is represented as a
@@ -24,12 +39,17 @@ class Fab(google.protobuf.message.Message):
24
39
  content: builtins.bytes
25
40
  """This field contains the fab file contents a one bytes blob."""
26
41
 
42
+ @property
43
+ def verifications(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, typing.Text]:
44
+ """Verifications."""
45
+ pass
27
46
  def __init__(self,
28
47
  *,
29
48
  hash_str: typing.Text = ...,
30
49
  content: builtins.bytes = ...,
50
+ verifications: typing.Optional[typing.Mapping[typing.Text, typing.Text]] = ...,
31
51
  ) -> None: ...
32
- def ClearField(self, field_name: typing_extensions.Literal["content",b"content","hash_str",b"hash_str"]) -> None: ...
52
+ def ClearField(self, field_name: typing_extensions.Literal["content",b"content","hash_str",b"hash_str","verifications",b"verifications"]) -> None: ...
33
53
  global___Fab = Fab
34
54
 
35
55
  class GetFabRequest(google.protobuf.message.Message):
flwr/proto/fleet_pb2.py CHANGED
@@ -19,7 +19,7 @@ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
19
19
  from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
20
20
 
21
21
 
22
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x18\x66lwr/proto/message.proto\"/\n\x11\x43reateNodeRequest\x12\x1a\n\x12heartbeat_interval\x18\x01 \x01(\x01\"4\n\x12\x43reateNodeResponse\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"3\n\x11\x44\x65leteNodeRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x14\n\x12\x44\x65leteNodeResponse\"J\n\x13PullMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x13\n\x0bmessage_ids\x18\x02 \x03(\t\"\xa2\x01\n\x14PullMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x34\n\x14message_object_trees\x18\x03 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\x97\x01\n\x13PushMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x34\n\x14message_object_trees\x18\x03 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\xc9\x01\n\x14PushMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12>\n\x07results\x18\x02 \x03(\x0b\x32-.flwr.proto.PushMessagesResponse.ResultsEntry\x12\x17\n\x0fobjects_to_push\x18\x03 \x03(\t\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xca\x06\n\x05\x46leet\x12M\n\nCreateNode\x12\x1d.flwr.proto.CreateNodeRequest\x1a\x1e.flwr.proto.CreateNodeResponse\"\x00\x12M\n\nDeleteNode\x12\x1d.flwr.proto.DeleteNodeRequest\x1a\x1e.flwr.proto.DeleteNodeResponse\"\x00\x12\x62\n\x11SendNodeHeartbeat\x12$.flwr.proto.SendNodeHeartbeatRequest\x1a%.flwr.proto.SendNodeHeartbeatResponse\"\x00\x12S\n\x0cPullMessages\x12\x1f.flwr.proto.PullMessagesRequest\x1a .flwr.proto.PullMessagesResponse\"\x00\x12S\n\x0cPushMessages\x12\x1f.flwr.proto.PushMessagesRequest\x1a .flwr.proto.PushMessagesResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x12q\n\x16\x43onfirmMessageReceived\x12).flwr.proto.ConfirmMessageReceivedRequest\x1a*.flwr.proto.ConfirmMessageReceivedResponse\"\x00\x62\x06proto3')
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x18\x66lwr/proto/message.proto\".\n\x18RegisterNodeFleetRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\",\n\x19RegisterNodeFleetResponse\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"E\n\x13\x41\x63tivateNodeRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\x12\x1a\n\x12heartbeat_interval\x18\x02 \x01(\x01\"\'\n\x14\x41\x63tivateNodeResponse\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"(\n\x15\x44\x65\x61\x63tivateNodeRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x18\n\x16\x44\x65\x61\x63tivateNodeResponse\"-\n\x1aUnregisterNodeFleetRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x1d\n\x1bUnregisterNodeFleetResponse\"J\n\x13PullMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x13\n\x0bmessage_ids\x18\x02 \x03(\t\"\xa2\x01\n\x14PullMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x34\n\x14message_object_trees\x18\x03 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\x97\x01\n\x13PushMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x34\n\x14message_object_trees\x18\x03 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\xc9\x01\n\x14PushMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12>\n\x07results\x18\x02 \x03(\x0b\x32-.flwr.proto.PushMessagesResponse.ResultsEntry\x12\x17\n\x0fobjects_to_push\x18\x03 \x03(\t\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xa0\x08\n\x05\x46leet\x12]\n\x0cRegisterNode\x12$.flwr.proto.RegisterNodeFleetRequest\x1a%.flwr.proto.RegisterNodeFleetResponse\"\x00\x12S\n\x0c\x41\x63tivateNode\x12\x1f.flwr.proto.ActivateNodeRequest\x1a .flwr.proto.ActivateNodeResponse\"\x00\x12Y\n\x0e\x44\x65\x61\x63tivateNode\x12!.flwr.proto.DeactivateNodeRequest\x1a\".flwr.proto.DeactivateNodeResponse\"\x00\x12\x63\n\x0eUnregisterNode\x12&.flwr.proto.UnregisterNodeFleetRequest\x1a\'.flwr.proto.UnregisterNodeFleetResponse\"\x00\x12\x62\n\x11SendNodeHeartbeat\x12$.flwr.proto.SendNodeHeartbeatRequest\x1a%.flwr.proto.SendNodeHeartbeatResponse\"\x00\x12S\n\x0cPullMessages\x12\x1f.flwr.proto.PullMessagesRequest\x1a .flwr.proto.PullMessagesResponse\"\x00\x12S\n\x0cPushMessages\x12\x1f.flwr.proto.PushMessagesRequest\x1a .flwr.proto.PushMessagesResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x12q\n\x16\x43onfirmMessageReceived\x12).flwr.proto.ConfirmMessageReceivedRequest\x1a*.flwr.proto.ConfirmMessageReceivedResponse\"\x00\x62\x06proto3')
23
23
 
24
24
  _globals = globals()
25
25
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -28,26 +28,34 @@ if _descriptor._USE_C_DESCRIPTORS == False:
28
28
  DESCRIPTOR._options = None
29
29
  _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._options = None
30
30
  _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
31
- _globals['_CREATENODEREQUEST']._serialized_start=159
32
- _globals['_CREATENODEREQUEST']._serialized_end=206
33
- _globals['_CREATENODERESPONSE']._serialized_start=208
34
- _globals['_CREATENODERESPONSE']._serialized_end=260
35
- _globals['_DELETENODEREQUEST']._serialized_start=262
36
- _globals['_DELETENODEREQUEST']._serialized_end=313
37
- _globals['_DELETENODERESPONSE']._serialized_start=315
38
- _globals['_DELETENODERESPONSE']._serialized_end=335
39
- _globals['_PULLMESSAGESREQUEST']._serialized_start=337
40
- _globals['_PULLMESSAGESREQUEST']._serialized_end=411
41
- _globals['_PULLMESSAGESRESPONSE']._serialized_start=414
42
- _globals['_PULLMESSAGESRESPONSE']._serialized_end=576
43
- _globals['_PUSHMESSAGESREQUEST']._serialized_start=579
44
- _globals['_PUSHMESSAGESREQUEST']._serialized_end=730
45
- _globals['_PUSHMESSAGESRESPONSE']._serialized_start=733
46
- _globals['_PUSHMESSAGESRESPONSE']._serialized_end=934
47
- _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=888
48
- _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=934
49
- _globals['_RECONNECT']._serialized_start=936
50
- _globals['_RECONNECT']._serialized_end=966
51
- _globals['_FLEET']._serialized_start=969
52
- _globals['_FLEET']._serialized_end=1811
31
+ _globals['_REGISTERNODEFLEETREQUEST']._serialized_start=159
32
+ _globals['_REGISTERNODEFLEETREQUEST']._serialized_end=205
33
+ _globals['_REGISTERNODEFLEETRESPONSE']._serialized_start=207
34
+ _globals['_REGISTERNODEFLEETRESPONSE']._serialized_end=251
35
+ _globals['_ACTIVATENODEREQUEST']._serialized_start=253
36
+ _globals['_ACTIVATENODEREQUEST']._serialized_end=322
37
+ _globals['_ACTIVATENODERESPONSE']._serialized_start=324
38
+ _globals['_ACTIVATENODERESPONSE']._serialized_end=363
39
+ _globals['_DEACTIVATENODEREQUEST']._serialized_start=365
40
+ _globals['_DEACTIVATENODEREQUEST']._serialized_end=405
41
+ _globals['_DEACTIVATENODERESPONSE']._serialized_start=407
42
+ _globals['_DEACTIVATENODERESPONSE']._serialized_end=431
43
+ _globals['_UNREGISTERNODEFLEETREQUEST']._serialized_start=433
44
+ _globals['_UNREGISTERNODEFLEETREQUEST']._serialized_end=478
45
+ _globals['_UNREGISTERNODEFLEETRESPONSE']._serialized_start=480
46
+ _globals['_UNREGISTERNODEFLEETRESPONSE']._serialized_end=509
47
+ _globals['_PULLMESSAGESREQUEST']._serialized_start=511
48
+ _globals['_PULLMESSAGESREQUEST']._serialized_end=585
49
+ _globals['_PULLMESSAGESRESPONSE']._serialized_start=588
50
+ _globals['_PULLMESSAGESRESPONSE']._serialized_end=750
51
+ _globals['_PUSHMESSAGESREQUEST']._serialized_start=753
52
+ _globals['_PUSHMESSAGESREQUEST']._serialized_end=904
53
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_start=907
54
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_end=1108
55
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=1062
56
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=1108
57
+ _globals['_RECONNECT']._serialized_start=1110
58
+ _globals['_RECONNECT']._serialized_end=1140
59
+ _globals['_FLEET']._serialized_start=1143
60
+ _globals['_FLEET']._serialized_end=2199
53
61
  # @@protoc_insertion_point(module_scope)
flwr/proto/fleet_pb2.pyi CHANGED
@@ -13,50 +13,90 @@ import typing_extensions
13
13
 
14
14
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
15
15
 
16
- class CreateNodeRequest(google.protobuf.message.Message):
17
- """CreateNode messages"""
16
+ class RegisterNodeFleetRequest(google.protobuf.message.Message):
17
+ """RegisterNode messages (add prefix to avoid name clash)"""
18
18
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
19
+ PUBLIC_KEY_FIELD_NUMBER: builtins.int
20
+ public_key: builtins.bytes
21
+ def __init__(self,
22
+ *,
23
+ public_key: builtins.bytes = ...,
24
+ ) -> None: ...
25
+ def ClearField(self, field_name: typing_extensions.Literal["public_key",b"public_key"]) -> None: ...
26
+ global___RegisterNodeFleetRequest = RegisterNodeFleetRequest
27
+
28
+ class RegisterNodeFleetResponse(google.protobuf.message.Message):
29
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
30
+ NODE_ID_FIELD_NUMBER: builtins.int
31
+ node_id: builtins.int
32
+ def __init__(self,
33
+ *,
34
+ node_id: builtins.int = ...,
35
+ ) -> None: ...
36
+ def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
37
+ global___RegisterNodeFleetResponse = RegisterNodeFleetResponse
38
+
39
+ class ActivateNodeRequest(google.protobuf.message.Message):
40
+ """ActivateNode messages"""
41
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
42
+ PUBLIC_KEY_FIELD_NUMBER: builtins.int
19
43
  HEARTBEAT_INTERVAL_FIELD_NUMBER: builtins.int
44
+ public_key: builtins.bytes
20
45
  heartbeat_interval: builtins.float
21
46
  def __init__(self,
22
47
  *,
48
+ public_key: builtins.bytes = ...,
23
49
  heartbeat_interval: builtins.float = ...,
24
50
  ) -> None: ...
25
- def ClearField(self, field_name: typing_extensions.Literal["heartbeat_interval",b"heartbeat_interval"]) -> None: ...
26
- global___CreateNodeRequest = CreateNodeRequest
51
+ def ClearField(self, field_name: typing_extensions.Literal["heartbeat_interval",b"heartbeat_interval","public_key",b"public_key"]) -> None: ...
52
+ global___ActivateNodeRequest = ActivateNodeRequest
27
53
 
28
- class CreateNodeResponse(google.protobuf.message.Message):
54
+ class ActivateNodeResponse(google.protobuf.message.Message):
29
55
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
30
- NODE_FIELD_NUMBER: builtins.int
31
- @property
32
- def node(self) -> flwr.proto.node_pb2.Node: ...
56
+ NODE_ID_FIELD_NUMBER: builtins.int
57
+ node_id: builtins.int
33
58
  def __init__(self,
34
59
  *,
35
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
60
+ node_id: builtins.int = ...,
36
61
  ) -> None: ...
37
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
38
- def ClearField(self, field_name: typing_extensions.Literal["node",b"node"]) -> None: ...
39
- global___CreateNodeResponse = CreateNodeResponse
62
+ def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
63
+ global___ActivateNodeResponse = ActivateNodeResponse
40
64
 
41
- class DeleteNodeRequest(google.protobuf.message.Message):
42
- """DeleteNode messages"""
65
+ class DeactivateNodeRequest(google.protobuf.message.Message):
66
+ """DeactivateNode messages"""
43
67
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
44
- NODE_FIELD_NUMBER: builtins.int
45
- @property
46
- def node(self) -> flwr.proto.node_pb2.Node: ...
68
+ NODE_ID_FIELD_NUMBER: builtins.int
69
+ node_id: builtins.int
47
70
  def __init__(self,
48
71
  *,
49
- node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
72
+ node_id: builtins.int = ...,
50
73
  ) -> None: ...
51
- def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
52
- def ClearField(self, field_name: typing_extensions.Literal["node",b"node"]) -> None: ...
53
- global___DeleteNodeRequest = DeleteNodeRequest
74
+ def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
75
+ global___DeactivateNodeRequest = DeactivateNodeRequest
76
+
77
+ class DeactivateNodeResponse(google.protobuf.message.Message):
78
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
79
+ def __init__(self,
80
+ ) -> None: ...
81
+ global___DeactivateNodeResponse = DeactivateNodeResponse
82
+
83
+ class UnregisterNodeFleetRequest(google.protobuf.message.Message):
84
+ """UnregisterNode messages (add prefix to avoid name clash)"""
85
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
86
+ NODE_ID_FIELD_NUMBER: builtins.int
87
+ node_id: builtins.int
88
+ def __init__(self,
89
+ *,
90
+ node_id: builtins.int = ...,
91
+ ) -> None: ...
92
+ def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
93
+ global___UnregisterNodeFleetRequest = UnregisterNodeFleetRequest
54
94
 
55
- class DeleteNodeResponse(google.protobuf.message.Message):
95
+ class UnregisterNodeFleetResponse(google.protobuf.message.Message):
56
96
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
57
97
  def __init__(self,
58
98
  ) -> None: ...
59
- global___DeleteNodeResponse = DeleteNodeResponse
99
+ global___UnregisterNodeFleetResponse = UnregisterNodeFleetResponse
60
100
 
61
101
  class PullMessagesRequest(google.protobuf.message.Message):
62
102
  """PullMessages messages"""