flwr-nightly 1.15.0.dev20250104__py3-none-any.whl → 1.15.0.dev20250123__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 (98) hide show
  1. flwr/cli/cli_user_auth_interceptor.py +6 -2
  2. flwr/cli/config_utils.py +23 -146
  3. flwr/cli/constant.py +27 -0
  4. flwr/cli/install.py +1 -1
  5. flwr/cli/log.py +17 -2
  6. flwr/cli/login/login.py +20 -5
  7. flwr/cli/ls.py +10 -2
  8. flwr/cli/run/run.py +20 -10
  9. flwr/cli/stop.py +9 -1
  10. flwr/cli/utils.py +4 -4
  11. flwr/client/app.py +36 -48
  12. flwr/client/clientapp/app.py +4 -6
  13. flwr/client/clientapp/utils.py +1 -1
  14. flwr/client/grpc_client/connection.py +0 -6
  15. flwr/client/grpc_rere_client/client_interceptor.py +19 -119
  16. flwr/client/grpc_rere_client/connection.py +34 -24
  17. flwr/client/grpc_rere_client/grpc_adapter.py +16 -0
  18. flwr/client/rest_client/connection.py +34 -26
  19. flwr/client/supernode/app.py +14 -20
  20. flwr/common/auth_plugin/auth_plugin.py +34 -23
  21. flwr/common/config.py +152 -15
  22. flwr/common/constant.py +11 -8
  23. flwr/common/exit/__init__.py +24 -0
  24. flwr/common/exit/exit.py +99 -0
  25. flwr/common/exit/exit_code.py +93 -0
  26. flwr/common/exit_handlers.py +24 -10
  27. flwr/common/grpc.py +161 -3
  28. flwr/common/logger.py +1 -1
  29. flwr/common/secure_aggregation/crypto/symmetric_encryption.py +45 -0
  30. flwr/common/serde.py +6 -4
  31. flwr/common/typing.py +20 -0
  32. flwr/proto/clientappio_pb2.py +13 -3
  33. flwr/proto/clientappio_pb2_grpc.py +63 -12
  34. flwr/proto/error_pb2.py +13 -3
  35. flwr/proto/error_pb2_grpc.py +20 -0
  36. flwr/proto/exec_pb2.py +27 -29
  37. flwr/proto/exec_pb2.pyi +27 -54
  38. flwr/proto/exec_pb2_grpc.py +105 -24
  39. flwr/proto/fab_pb2.py +13 -3
  40. flwr/proto/fab_pb2_grpc.py +20 -0
  41. flwr/proto/fleet_pb2.py +54 -31
  42. flwr/proto/fleet_pb2.pyi +84 -0
  43. flwr/proto/fleet_pb2_grpc.py +207 -28
  44. flwr/proto/fleet_pb2_grpc.pyi +26 -0
  45. flwr/proto/grpcadapter_pb2.py +14 -4
  46. flwr/proto/grpcadapter_pb2_grpc.py +35 -4
  47. flwr/proto/log_pb2.py +13 -3
  48. flwr/proto/log_pb2_grpc.py +20 -0
  49. flwr/proto/message_pb2.py +15 -5
  50. flwr/proto/message_pb2_grpc.py +20 -0
  51. flwr/proto/node_pb2.py +15 -5
  52. flwr/proto/node_pb2.pyi +1 -4
  53. flwr/proto/node_pb2_grpc.py +20 -0
  54. flwr/proto/recordset_pb2.py +18 -8
  55. flwr/proto/recordset_pb2_grpc.py +20 -0
  56. flwr/proto/run_pb2.py +16 -6
  57. flwr/proto/run_pb2_grpc.py +20 -0
  58. flwr/proto/serverappio_pb2.py +32 -14
  59. flwr/proto/serverappio_pb2.pyi +56 -0
  60. flwr/proto/serverappio_pb2_grpc.py +261 -44
  61. flwr/proto/serverappio_pb2_grpc.pyi +20 -0
  62. flwr/proto/simulationio_pb2.py +13 -3
  63. flwr/proto/simulationio_pb2_grpc.py +105 -24
  64. flwr/proto/task_pb2.py +13 -3
  65. flwr/proto/task_pb2_grpc.py +20 -0
  66. flwr/proto/transport_pb2.py +20 -10
  67. flwr/proto/transport_pb2_grpc.py +35 -4
  68. flwr/server/app.py +87 -38
  69. flwr/server/compat/app_utils.py +0 -1
  70. flwr/server/compat/driver_client_proxy.py +1 -2
  71. flwr/server/driver/grpc_driver.py +5 -2
  72. flwr/server/driver/inmemory_driver.py +2 -1
  73. flwr/server/serverapp/app.py +5 -6
  74. flwr/server/superlink/driver/serverappio_grpc.py +1 -1
  75. flwr/server/superlink/driver/serverappio_servicer.py +132 -14
  76. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +20 -88
  77. flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +2 -165
  78. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +38 -0
  79. flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +95 -168
  80. flwr/server/superlink/fleet/message_handler/message_handler.py +66 -5
  81. flwr/server/superlink/fleet/rest_rere/rest_api.py +28 -3
  82. flwr/server/superlink/fleet/vce/vce_api.py +2 -2
  83. flwr/server/superlink/linkstate/in_memory_linkstate.py +40 -48
  84. flwr/server/superlink/linkstate/linkstate.py +15 -22
  85. flwr/server/superlink/linkstate/sqlite_linkstate.py +80 -99
  86. flwr/server/superlink/linkstate/utils.py +18 -8
  87. flwr/server/superlink/simulation/simulationio_grpc.py +1 -1
  88. flwr/server/utils/validator.py +9 -34
  89. flwr/simulation/app.py +4 -6
  90. flwr/simulation/legacy_app.py +4 -2
  91. flwr/simulation/run_simulation.py +1 -1
  92. flwr/superexec/exec_grpc.py +1 -1
  93. flwr/superexec/exec_servicer.py +23 -2
  94. {flwr_nightly-1.15.0.dev20250104.dist-info → flwr_nightly-1.15.0.dev20250123.dist-info}/METADATA +7 -7
  95. {flwr_nightly-1.15.0.dev20250104.dist-info → flwr_nightly-1.15.0.dev20250123.dist-info}/RECORD +98 -94
  96. {flwr_nightly-1.15.0.dev20250104.dist-info → flwr_nightly-1.15.0.dev20250123.dist-info}/LICENSE +0 -0
  97. {flwr_nightly-1.15.0.dev20250104.dist-info → flwr_nightly-1.15.0.dev20250123.dist-info}/WHEEL +0 -0
  98. {flwr_nightly-1.15.0.dev20250104.dist-info → flwr_nightly-1.15.0.dev20250123.dist-info}/entry_points.txt +0 -0
@@ -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.69.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/fab_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
+ )
flwr/proto/fleet_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/fleet.proto
4
- # Protobuf Python Version: 4.25.0
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/fleet.proto'
19
+ )
10
20
  # @@protoc_insertion_point(imports)
11
21
 
12
22
  _sym_db = _symbol_database.Default()
@@ -16,41 +26,54 @@ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
26
  from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
17
27
  from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
18
28
  from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
29
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
19
30
 
20
31
 
21
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"*\n\x11\x43reateNodeRequest\x12\x15\n\rping_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\"D\n\x0bPingRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x15\n\rping_interval\x18\x02 \x01(\x01\"\x1f\n\x0cPingResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"F\n\x12PullTaskInsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"k\n\x13PullTaskInsResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rtask_ins_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"`\n\x12PushTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rtask_res_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"\xae\x01\n\x13PushTaskResResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12=\n\x07results\x18\x02 \x03(\x0b\x32,.flwr.proto.PushTaskResResponse.ResultsEntry\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\x8c\x04\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;\n\x04Ping\x12\x17.flwr.proto.PingRequest\x1a\x18.flwr.proto.PingResponse\"\x00\x12P\n\x0bPullTaskIns\x12\x1e.flwr.proto.PullTaskInsRequest\x1a\x1f.flwr.proto.PullTaskInsResponse\"\x00\x12P\n\x0bPushTaskRes\x12\x1e.flwr.proto.PushTaskResRequest\x1a\x1f.flwr.proto.PushTaskResResponse\"\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\x62\x06proto3')
32
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x18\x66lwr/proto/message.proto\"*\n\x11\x43reateNodeRequest\x12\x15\n\rping_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\"D\n\x0bPingRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x15\n\rping_interval\x18\x02 \x01(\x01\"\x1f\n\x0cPingResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"F\n\x12PullTaskInsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"k\n\x13PullTaskInsResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rtask_ins_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"`\n\x12PushTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rtask_res_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"\xae\x01\n\x13PushTaskResResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12=\n\x07results\x18\x02 \x03(\x0b\x32,.flwr.proto.PushTaskResResponse.ResultsEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"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\"l\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\"a\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\"\xb0\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\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\xb6\x05\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;\n\x04Ping\x12\x17.flwr.proto.PingRequest\x1a\x18.flwr.proto.PingResponse\"\x00\x12P\n\x0bPullTaskIns\x12\x1e.flwr.proto.PullTaskInsRequest\x1a\x1f.flwr.proto.PullTaskInsResponse\"\x00\x12S\n\x0cPullMessages\x12\x1f.flwr.proto.PullMessagesRequest\x1a .flwr.proto.PullMessagesResponse\"\x00\x12P\n\x0bPushTaskRes\x12\x1e.flwr.proto.PushTaskResRequest\x1a\x1f.flwr.proto.PushTaskResResponse\"\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\x62\x06proto3')
22
33
 
23
34
  _globals = globals()
24
35
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
25
36
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fleet_pb2', _globals)
26
- if _descriptor._USE_C_DESCRIPTORS == False:
27
- DESCRIPTOR._options = None
28
- _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._options = None
37
+ if not _descriptor._USE_C_DESCRIPTORS:
38
+ DESCRIPTOR._loaded_options = None
39
+ _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._loaded_options = None
29
40
  _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
30
- _globals['_CREATENODEREQUEST']._serialized_start=128
31
- _globals['_CREATENODEREQUEST']._serialized_end=170
32
- _globals['_CREATENODERESPONSE']._serialized_start=172
33
- _globals['_CREATENODERESPONSE']._serialized_end=224
34
- _globals['_DELETENODEREQUEST']._serialized_start=226
35
- _globals['_DELETENODEREQUEST']._serialized_end=277
36
- _globals['_DELETENODERESPONSE']._serialized_start=279
37
- _globals['_DELETENODERESPONSE']._serialized_end=299
38
- _globals['_PINGREQUEST']._serialized_start=301
39
- _globals['_PINGREQUEST']._serialized_end=369
40
- _globals['_PINGRESPONSE']._serialized_start=371
41
- _globals['_PINGRESPONSE']._serialized_end=402
42
- _globals['_PULLTASKINSREQUEST']._serialized_start=404
43
- _globals['_PULLTASKINSREQUEST']._serialized_end=474
44
- _globals['_PULLTASKINSRESPONSE']._serialized_start=476
45
- _globals['_PULLTASKINSRESPONSE']._serialized_end=583
46
- _globals['_PUSHTASKRESREQUEST']._serialized_start=585
47
- _globals['_PUSHTASKRESREQUEST']._serialized_end=681
48
- _globals['_PUSHTASKRESRESPONSE']._serialized_start=684
49
- _globals['_PUSHTASKRESRESPONSE']._serialized_end=858
50
- _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_start=812
51
- _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_end=858
52
- _globals['_RECONNECT']._serialized_start=860
53
- _globals['_RECONNECT']._serialized_end=890
54
- _globals['_FLEET']._serialized_start=893
55
- _globals['_FLEET']._serialized_end=1417
41
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._loaded_options = None
42
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
43
+ _globals['_CREATENODEREQUEST']._serialized_start=154
44
+ _globals['_CREATENODEREQUEST']._serialized_end=196
45
+ _globals['_CREATENODERESPONSE']._serialized_start=198
46
+ _globals['_CREATENODERESPONSE']._serialized_end=250
47
+ _globals['_DELETENODEREQUEST']._serialized_start=252
48
+ _globals['_DELETENODEREQUEST']._serialized_end=303
49
+ _globals['_DELETENODERESPONSE']._serialized_start=305
50
+ _globals['_DELETENODERESPONSE']._serialized_end=325
51
+ _globals['_PINGREQUEST']._serialized_start=327
52
+ _globals['_PINGREQUEST']._serialized_end=395
53
+ _globals['_PINGRESPONSE']._serialized_start=397
54
+ _globals['_PINGRESPONSE']._serialized_end=428
55
+ _globals['_PULLTASKINSREQUEST']._serialized_start=430
56
+ _globals['_PULLTASKINSREQUEST']._serialized_end=500
57
+ _globals['_PULLTASKINSRESPONSE']._serialized_start=502
58
+ _globals['_PULLTASKINSRESPONSE']._serialized_end=609
59
+ _globals['_PUSHTASKRESREQUEST']._serialized_start=611
60
+ _globals['_PUSHTASKRESREQUEST']._serialized_end=707
61
+ _globals['_PUSHTASKRESRESPONSE']._serialized_start=710
62
+ _globals['_PUSHTASKRESRESPONSE']._serialized_end=884
63
+ _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_start=838
64
+ _globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_end=884
65
+ _globals['_PULLMESSAGESREQUEST']._serialized_start=886
66
+ _globals['_PULLMESSAGESREQUEST']._serialized_end=960
67
+ _globals['_PULLMESSAGESRESPONSE']._serialized_start=962
68
+ _globals['_PULLMESSAGESRESPONSE']._serialized_end=1070
69
+ _globals['_PUSHMESSAGESREQUEST']._serialized_start=1072
70
+ _globals['_PUSHMESSAGESREQUEST']._serialized_end=1169
71
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_start=1172
72
+ _globals['_PUSHMESSAGESRESPONSE']._serialized_end=1348
73
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=838
74
+ _globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=884
75
+ _globals['_RECONNECT']._serialized_start=1350
76
+ _globals['_RECONNECT']._serialized_end=1380
77
+ _globals['_FLEET']._serialized_start=1383
78
+ _globals['_FLEET']._serialized_end=2077
56
79
  # @@protoc_insertion_point(module_scope)
flwr/proto/fleet_pb2.pyi CHANGED
@@ -3,6 +3,7 @@
3
3
  isort:skip_file
4
4
  """
5
5
  import builtins
6
+ import flwr.proto.message_pb2
6
7
  import flwr.proto.node_pb2
7
8
  import flwr.proto.task_pb2
8
9
  import google.protobuf.descriptor
@@ -169,6 +170,89 @@ class PushTaskResResponse(google.protobuf.message.Message):
169
170
  def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","results",b"results"]) -> None: ...
170
171
  global___PushTaskResResponse = PushTaskResResponse
171
172
 
173
+ class PullMessagesRequest(google.protobuf.message.Message):
174
+ """PullMessages messages"""
175
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
176
+ NODE_FIELD_NUMBER: builtins.int
177
+ MESSAGE_IDS_FIELD_NUMBER: builtins.int
178
+ @property
179
+ def node(self) -> flwr.proto.node_pb2.Node: ...
180
+ @property
181
+ def message_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
182
+ def __init__(self,
183
+ *,
184
+ node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
185
+ message_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
186
+ ) -> None: ...
187
+ def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
188
+ def ClearField(self, field_name: typing_extensions.Literal["message_ids",b"message_ids","node",b"node"]) -> None: ...
189
+ global___PullMessagesRequest = PullMessagesRequest
190
+
191
+ class PullMessagesResponse(google.protobuf.message.Message):
192
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
193
+ RECONNECT_FIELD_NUMBER: builtins.int
194
+ MESSAGES_LIST_FIELD_NUMBER: builtins.int
195
+ @property
196
+ def reconnect(self) -> global___Reconnect: ...
197
+ @property
198
+ def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
199
+ def __init__(self,
200
+ *,
201
+ reconnect: typing.Optional[global___Reconnect] = ...,
202
+ messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
203
+ ) -> None: ...
204
+ def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
205
+ def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","reconnect",b"reconnect"]) -> None: ...
206
+ global___PullMessagesResponse = PullMessagesResponse
207
+
208
+ class PushMessagesRequest(google.protobuf.message.Message):
209
+ """PushMessages messages"""
210
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
211
+ NODE_FIELD_NUMBER: builtins.int
212
+ MESSAGES_LIST_FIELD_NUMBER: builtins.int
213
+ @property
214
+ def node(self) -> flwr.proto.node_pb2.Node: ...
215
+ @property
216
+ def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
217
+ def __init__(self,
218
+ *,
219
+ node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
220
+ messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
221
+ ) -> None: ...
222
+ def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
223
+ def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","node",b"node"]) -> None: ...
224
+ global___PushMessagesRequest = PushMessagesRequest
225
+
226
+ class PushMessagesResponse(google.protobuf.message.Message):
227
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
228
+ class ResultsEntry(google.protobuf.message.Message):
229
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
230
+ KEY_FIELD_NUMBER: builtins.int
231
+ VALUE_FIELD_NUMBER: builtins.int
232
+ key: typing.Text
233
+ value: builtins.int
234
+ def __init__(self,
235
+ *,
236
+ key: typing.Text = ...,
237
+ value: builtins.int = ...,
238
+ ) -> None: ...
239
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
240
+
241
+ RECONNECT_FIELD_NUMBER: builtins.int
242
+ RESULTS_FIELD_NUMBER: builtins.int
243
+ @property
244
+ def reconnect(self) -> global___Reconnect: ...
245
+ @property
246
+ def results(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, builtins.int]: ...
247
+ def __init__(self,
248
+ *,
249
+ reconnect: typing.Optional[global___Reconnect] = ...,
250
+ results: typing.Optional[typing.Mapping[typing.Text, builtins.int]] = ...,
251
+ ) -> None: ...
252
+ def HasField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect"]) -> builtins.bool: ...
253
+ def ClearField(self, field_name: typing_extensions.Literal["reconnect",b"reconnect","results",b"results"]) -> None: ...
254
+ global___PushMessagesResponse = PushMessagesResponse
255
+
172
256
  class Reconnect(google.protobuf.message.Message):
173
257
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
174
258
  RECONNECT_FIELD_NUMBER: builtins.int
@@ -1,11 +1,31 @@
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
 
5
6
  from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
6
7
  from flwr.proto import fleet_pb2 as flwr_dot_proto_dot_fleet__pb2
7
8
  from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
8
9
 
10
+ GRPC_GENERATED_VERSION = '1.69.0'
11
+ GRPC_VERSION = grpc.__version__
12
+ _version_not_supported = False
13
+
14
+ try:
15
+ from grpc._utilities import first_version_is_lower
16
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
17
+ except ImportError:
18
+ _version_not_supported = True
19
+
20
+ if _version_not_supported:
21
+ raise RuntimeError(
22
+ f'The grpc package installed is at version {GRPC_VERSION},'
23
+ + f' but the generated code in flwr/proto/fleet_pb2_grpc.py depends on'
24
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
25
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
26
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
27
+ )
28
+
9
29
 
10
30
  class FleetStub(object):
11
31
  """Missing associated documentation comment in .proto file."""
@@ -20,37 +40,47 @@ class FleetStub(object):
20
40
  '/flwr.proto.Fleet/CreateNode',
21
41
  request_serializer=flwr_dot_proto_dot_fleet__pb2.CreateNodeRequest.SerializeToString,
22
42
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.CreateNodeResponse.FromString,
23
- )
43
+ _registered_method=True)
24
44
  self.DeleteNode = channel.unary_unary(
25
45
  '/flwr.proto.Fleet/DeleteNode',
26
46
  request_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.SerializeToString,
27
47
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.FromString,
28
- )
48
+ _registered_method=True)
29
49
  self.Ping = channel.unary_unary(
30
50
  '/flwr.proto.Fleet/Ping',
31
51
  request_serializer=flwr_dot_proto_dot_fleet__pb2.PingRequest.SerializeToString,
32
52
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.PingResponse.FromString,
33
- )
53
+ _registered_method=True)
34
54
  self.PullTaskIns = channel.unary_unary(
35
55
  '/flwr.proto.Fleet/PullTaskIns',
36
56
  request_serializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsRequest.SerializeToString,
37
57
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsResponse.FromString,
38
- )
58
+ _registered_method=True)
59
+ self.PullMessages = channel.unary_unary(
60
+ '/flwr.proto.Fleet/PullMessages',
61
+ request_serializer=flwr_dot_proto_dot_fleet__pb2.PullMessagesRequest.SerializeToString,
62
+ response_deserializer=flwr_dot_proto_dot_fleet__pb2.PullMessagesResponse.FromString,
63
+ _registered_method=True)
39
64
  self.PushTaskRes = channel.unary_unary(
40
65
  '/flwr.proto.Fleet/PushTaskRes',
41
66
  request_serializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResRequest.SerializeToString,
42
67
  response_deserializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.FromString,
43
- )
68
+ _registered_method=True)
69
+ self.PushMessages = channel.unary_unary(
70
+ '/flwr.proto.Fleet/PushMessages',
71
+ request_serializer=flwr_dot_proto_dot_fleet__pb2.PushMessagesRequest.SerializeToString,
72
+ response_deserializer=flwr_dot_proto_dot_fleet__pb2.PushMessagesResponse.FromString,
73
+ _registered_method=True)
44
74
  self.GetRun = channel.unary_unary(
45
75
  '/flwr.proto.Fleet/GetRun',
46
76
  request_serializer=flwr_dot_proto_dot_run__pb2.GetRunRequest.SerializeToString,
47
77
  response_deserializer=flwr_dot_proto_dot_run__pb2.GetRunResponse.FromString,
48
- )
78
+ _registered_method=True)
49
79
  self.GetFab = channel.unary_unary(
50
80
  '/flwr.proto.Fleet/GetFab',
51
81
  request_serializer=flwr_dot_proto_dot_fab__pb2.GetFabRequest.SerializeToString,
52
82
  response_deserializer=flwr_dot_proto_dot_fab__pb2.GetFabResponse.FromString,
53
- )
83
+ _registered_method=True)
54
84
 
55
85
 
56
86
  class FleetServicer(object):
@@ -83,6 +113,13 @@ class FleetServicer(object):
83
113
  context.set_details('Method not implemented!')
84
114
  raise NotImplementedError('Method not implemented!')
85
115
 
116
+ def PullMessages(self, request, context):
117
+ """HTTP API path: /api/v1/fleet/pull-messages
118
+ """
119
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
120
+ context.set_details('Method not implemented!')
121
+ raise NotImplementedError('Method not implemented!')
122
+
86
123
  def PushTaskRes(self, request, context):
87
124
  """Complete one or more tasks, if possible
88
125
 
@@ -92,6 +129,13 @@ class FleetServicer(object):
92
129
  context.set_details('Method not implemented!')
93
130
  raise NotImplementedError('Method not implemented!')
94
131
 
132
+ def PushMessages(self, request, context):
133
+ """HTTP API path: /api/v1/fleet/push-messages
134
+ """
135
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
136
+ context.set_details('Method not implemented!')
137
+ raise NotImplementedError('Method not implemented!')
138
+
95
139
  def GetRun(self, request, context):
96
140
  """Missing associated documentation comment in .proto file."""
97
141
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -128,11 +172,21 @@ def add_FleetServicer_to_server(servicer, server):
128
172
  request_deserializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsRequest.FromString,
129
173
  response_serializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsResponse.SerializeToString,
130
174
  ),
175
+ 'PullMessages': grpc.unary_unary_rpc_method_handler(
176
+ servicer.PullMessages,
177
+ request_deserializer=flwr_dot_proto_dot_fleet__pb2.PullMessagesRequest.FromString,
178
+ response_serializer=flwr_dot_proto_dot_fleet__pb2.PullMessagesResponse.SerializeToString,
179
+ ),
131
180
  'PushTaskRes': grpc.unary_unary_rpc_method_handler(
132
181
  servicer.PushTaskRes,
133
182
  request_deserializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResRequest.FromString,
134
183
  response_serializer=flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.SerializeToString,
135
184
  ),
185
+ 'PushMessages': grpc.unary_unary_rpc_method_handler(
186
+ servicer.PushMessages,
187
+ request_deserializer=flwr_dot_proto_dot_fleet__pb2.PushMessagesRequest.FromString,
188
+ response_serializer=flwr_dot_proto_dot_fleet__pb2.PushMessagesResponse.SerializeToString,
189
+ ),
136
190
  'GetRun': grpc.unary_unary_rpc_method_handler(
137
191
  servicer.GetRun,
138
192
  request_deserializer=flwr_dot_proto_dot_run__pb2.GetRunRequest.FromString,
@@ -147,6 +201,7 @@ def add_FleetServicer_to_server(servicer, server):
147
201
  generic_handler = grpc.method_handlers_generic_handler(
148
202
  'flwr.proto.Fleet', rpc_method_handlers)
149
203
  server.add_generic_rpc_handlers((generic_handler,))
204
+ server.add_registered_method_handlers('flwr.proto.Fleet', rpc_method_handlers)
150
205
 
151
206
 
152
207
  # This class is part of an EXPERIMENTAL API.
@@ -164,11 +219,21 @@ class Fleet(object):
164
219
  wait_for_ready=None,
165
220
  timeout=None,
166
221
  metadata=None):
167
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/CreateNode',
222
+ return grpc.experimental.unary_unary(
223
+ request,
224
+ target,
225
+ '/flwr.proto.Fleet/CreateNode',
168
226
  flwr_dot_proto_dot_fleet__pb2.CreateNodeRequest.SerializeToString,
169
227
  flwr_dot_proto_dot_fleet__pb2.CreateNodeResponse.FromString,
170
- options, channel_credentials,
171
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
228
+ options,
229
+ channel_credentials,
230
+ insecure,
231
+ call_credentials,
232
+ compression,
233
+ wait_for_ready,
234
+ timeout,
235
+ metadata,
236
+ _registered_method=True)
172
237
 
173
238
  @staticmethod
174
239
  def DeleteNode(request,
@@ -181,11 +246,21 @@ class Fleet(object):
181
246
  wait_for_ready=None,
182
247
  timeout=None,
183
248
  metadata=None):
184
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/DeleteNode',
249
+ return grpc.experimental.unary_unary(
250
+ request,
251
+ target,
252
+ '/flwr.proto.Fleet/DeleteNode',
185
253
  flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.SerializeToString,
186
254
  flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.FromString,
187
- options, channel_credentials,
188
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
255
+ options,
256
+ channel_credentials,
257
+ insecure,
258
+ call_credentials,
259
+ compression,
260
+ wait_for_ready,
261
+ timeout,
262
+ metadata,
263
+ _registered_method=True)
189
264
 
190
265
  @staticmethod
191
266
  def Ping(request,
@@ -198,11 +273,21 @@ class Fleet(object):
198
273
  wait_for_ready=None,
199
274
  timeout=None,
200
275
  metadata=None):
201
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/Ping',
276
+ return grpc.experimental.unary_unary(
277
+ request,
278
+ target,
279
+ '/flwr.proto.Fleet/Ping',
202
280
  flwr_dot_proto_dot_fleet__pb2.PingRequest.SerializeToString,
203
281
  flwr_dot_proto_dot_fleet__pb2.PingResponse.FromString,
204
- options, channel_credentials,
205
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
282
+ options,
283
+ channel_credentials,
284
+ insecure,
285
+ call_credentials,
286
+ compression,
287
+ wait_for_ready,
288
+ timeout,
289
+ metadata,
290
+ _registered_method=True)
206
291
 
207
292
  @staticmethod
208
293
  def PullTaskIns(request,
@@ -215,11 +300,48 @@ class Fleet(object):
215
300
  wait_for_ready=None,
216
301
  timeout=None,
217
302
  metadata=None):
218
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/PullTaskIns',
303
+ return grpc.experimental.unary_unary(
304
+ request,
305
+ target,
306
+ '/flwr.proto.Fleet/PullTaskIns',
219
307
  flwr_dot_proto_dot_fleet__pb2.PullTaskInsRequest.SerializeToString,
220
308
  flwr_dot_proto_dot_fleet__pb2.PullTaskInsResponse.FromString,
221
- options, channel_credentials,
222
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
309
+ options,
310
+ channel_credentials,
311
+ insecure,
312
+ call_credentials,
313
+ compression,
314
+ wait_for_ready,
315
+ timeout,
316
+ metadata,
317
+ _registered_method=True)
318
+
319
+ @staticmethod
320
+ def PullMessages(request,
321
+ target,
322
+ options=(),
323
+ channel_credentials=None,
324
+ call_credentials=None,
325
+ insecure=False,
326
+ compression=None,
327
+ wait_for_ready=None,
328
+ timeout=None,
329
+ metadata=None):
330
+ return grpc.experimental.unary_unary(
331
+ request,
332
+ target,
333
+ '/flwr.proto.Fleet/PullMessages',
334
+ flwr_dot_proto_dot_fleet__pb2.PullMessagesRequest.SerializeToString,
335
+ flwr_dot_proto_dot_fleet__pb2.PullMessagesResponse.FromString,
336
+ options,
337
+ channel_credentials,
338
+ insecure,
339
+ call_credentials,
340
+ compression,
341
+ wait_for_ready,
342
+ timeout,
343
+ metadata,
344
+ _registered_method=True)
223
345
 
224
346
  @staticmethod
225
347
  def PushTaskRes(request,
@@ -232,11 +354,48 @@ class Fleet(object):
232
354
  wait_for_ready=None,
233
355
  timeout=None,
234
356
  metadata=None):
235
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/PushTaskRes',
357
+ return grpc.experimental.unary_unary(
358
+ request,
359
+ target,
360
+ '/flwr.proto.Fleet/PushTaskRes',
236
361
  flwr_dot_proto_dot_fleet__pb2.PushTaskResRequest.SerializeToString,
237
362
  flwr_dot_proto_dot_fleet__pb2.PushTaskResResponse.FromString,
238
- options, channel_credentials,
239
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
363
+ options,
364
+ channel_credentials,
365
+ insecure,
366
+ call_credentials,
367
+ compression,
368
+ wait_for_ready,
369
+ timeout,
370
+ metadata,
371
+ _registered_method=True)
372
+
373
+ @staticmethod
374
+ def PushMessages(request,
375
+ target,
376
+ options=(),
377
+ channel_credentials=None,
378
+ call_credentials=None,
379
+ insecure=False,
380
+ compression=None,
381
+ wait_for_ready=None,
382
+ timeout=None,
383
+ metadata=None):
384
+ return grpc.experimental.unary_unary(
385
+ request,
386
+ target,
387
+ '/flwr.proto.Fleet/PushMessages',
388
+ flwr_dot_proto_dot_fleet__pb2.PushMessagesRequest.SerializeToString,
389
+ flwr_dot_proto_dot_fleet__pb2.PushMessagesResponse.FromString,
390
+ options,
391
+ channel_credentials,
392
+ insecure,
393
+ call_credentials,
394
+ compression,
395
+ wait_for_ready,
396
+ timeout,
397
+ metadata,
398
+ _registered_method=True)
240
399
 
241
400
  @staticmethod
242
401
  def GetRun(request,
@@ -249,11 +408,21 @@ class Fleet(object):
249
408
  wait_for_ready=None,
250
409
  timeout=None,
251
410
  metadata=None):
252
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/GetRun',
411
+ return grpc.experimental.unary_unary(
412
+ request,
413
+ target,
414
+ '/flwr.proto.Fleet/GetRun',
253
415
  flwr_dot_proto_dot_run__pb2.GetRunRequest.SerializeToString,
254
416
  flwr_dot_proto_dot_run__pb2.GetRunResponse.FromString,
255
- options, channel_credentials,
256
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
417
+ options,
418
+ channel_credentials,
419
+ insecure,
420
+ call_credentials,
421
+ compression,
422
+ wait_for_ready,
423
+ timeout,
424
+ metadata,
425
+ _registered_method=True)
257
426
 
258
427
  @staticmethod
259
428
  def GetFab(request,
@@ -266,8 +435,18 @@ class Fleet(object):
266
435
  wait_for_ready=None,
267
436
  timeout=None,
268
437
  metadata=None):
269
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/GetFab',
438
+ return grpc.experimental.unary_unary(
439
+ request,
440
+ target,
441
+ '/flwr.proto.Fleet/GetFab',
270
442
  flwr_dot_proto_dot_fab__pb2.GetFabRequest.SerializeToString,
271
443
  flwr_dot_proto_dot_fab__pb2.GetFabResponse.FromString,
272
- options, channel_credentials,
273
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
444
+ options,
445
+ channel_credentials,
446
+ insecure,
447
+ call_credentials,
448
+ compression,
449
+ wait_for_ready,
450
+ timeout,
451
+ metadata,
452
+ _registered_method=True)
@@ -30,6 +30,11 @@ class FleetStub:
30
30
  HTTP API path: /api/v1/fleet/pull-task-ins
31
31
  """
32
32
 
33
+ PullMessages: grpc.UnaryUnaryMultiCallable[
34
+ flwr.proto.fleet_pb2.PullMessagesRequest,
35
+ flwr.proto.fleet_pb2.PullMessagesResponse]
36
+ """HTTP API path: /api/v1/fleet/pull-messages"""
37
+
33
38
  PushTaskRes: grpc.UnaryUnaryMultiCallable[
34
39
  flwr.proto.fleet_pb2.PushTaskResRequest,
35
40
  flwr.proto.fleet_pb2.PushTaskResResponse]
@@ -38,6 +43,11 @@ class FleetStub:
38
43
  HTTP API path: /api/v1/fleet/push-task-res
39
44
  """
40
45
 
46
+ PushMessages: grpc.UnaryUnaryMultiCallable[
47
+ flwr.proto.fleet_pb2.PushMessagesRequest,
48
+ flwr.proto.fleet_pb2.PushMessagesResponse]
49
+ """HTTP API path: /api/v1/fleet/push-messages"""
50
+
41
51
  GetRun: grpc.UnaryUnaryMultiCallable[
42
52
  flwr.proto.run_pb2.GetRunRequest,
43
53
  flwr.proto.run_pb2.GetRunResponse]
@@ -78,6 +88,14 @@ class FleetServicer(metaclass=abc.ABCMeta):
78
88
  """
79
89
  pass
80
90
 
91
+ @abc.abstractmethod
92
+ def PullMessages(self,
93
+ request: flwr.proto.fleet_pb2.PullMessagesRequest,
94
+ context: grpc.ServicerContext,
95
+ ) -> flwr.proto.fleet_pb2.PullMessagesResponse:
96
+ """HTTP API path: /api/v1/fleet/pull-messages"""
97
+ pass
98
+
81
99
  @abc.abstractmethod
82
100
  def PushTaskRes(self,
83
101
  request: flwr.proto.fleet_pb2.PushTaskResRequest,
@@ -89,6 +107,14 @@ class FleetServicer(metaclass=abc.ABCMeta):
89
107
  """
90
108
  pass
91
109
 
110
+ @abc.abstractmethod
111
+ def PushMessages(self,
112
+ request: flwr.proto.fleet_pb2.PushMessagesRequest,
113
+ context: grpc.ServicerContext,
114
+ ) -> flwr.proto.fleet_pb2.PushMessagesResponse:
115
+ """HTTP API path: /api/v1/fleet/push-messages"""
116
+ pass
117
+
92
118
  @abc.abstractmethod
93
119
  def GetRun(self,
94
120
  request: flwr.proto.run_pb2.GetRunRequest,