flwr-nightly 1.26.0.dev20260202__py3-none-any.whl → 1.26.0.dev20260204__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.
- flwr/cli/federation/ls.py +4 -1
- flwr/cli/utils.py +2 -0
- flwr/common/typing.py +1 -0
- flwr/proto/federation_pb2.py +2 -2
- flwr/proto/federation_pb2.pyi +16 -4
- flwr/proto/run_pb2.py +5 -13
- flwr/proto/run_pb2.pyi +0 -57
- flwr/proto/serverappio_pb2.py +2 -2
- flwr/proto/serverappio_pb2_grpc.py +2 -91
- flwr/proto/serverappio_pb2_grpc.pyi +12 -53
- flwr/proto/simulationio_pb2.py +2 -2
- flwr/proto/simulationio_pb2_grpc.py +2 -46
- flwr/proto/simulationio_pb2_grpc.pyi +12 -32
- flwr/server/superlink/serverappio/serverappio_servicer.py +1 -33
- flwr/server/superlink/simulation/simulationio_servicer.py +0 -19
- flwr/supercore/constant.py +2 -0
- flwr/supercore/object_store/sql_object_store.py +22 -18
- flwr/superlink/federation/federation_manager.py +2 -2
- flwr/superlink/federation/noop_federation_manager.py +5 -4
- flwr/superlink/servicer/control/control_servicer.py +5 -3
- {flwr_nightly-1.26.0.dev20260202.dist-info → flwr_nightly-1.26.0.dev20260204.dist-info}/METADATA +1 -1
- {flwr_nightly-1.26.0.dev20260202.dist-info → flwr_nightly-1.26.0.dev20260204.dist-info}/RECORD +24 -24
- {flwr_nightly-1.26.0.dev20260202.dist-info → flwr_nightly-1.26.0.dev20260204.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.26.0.dev20260202.dist-info → flwr_nightly-1.26.0.dev20260204.dist-info}/entry_points.txt +0 -0
flwr/cli/federation/ls.py
CHANGED
|
@@ -126,9 +126,12 @@ def _to_table(federations: list[Federation]) -> Table:
|
|
|
126
126
|
table.add_column(
|
|
127
127
|
Text("Federation", justify="center"), style="bright_black", no_wrap=True
|
|
128
128
|
)
|
|
129
|
+
table.add_column(
|
|
130
|
+
Text("Description", justify="center"), style="bright_black", no_wrap=True
|
|
131
|
+
)
|
|
129
132
|
|
|
130
133
|
for federation in federations:
|
|
131
|
-
table.add_row(federation.name)
|
|
134
|
+
table.add_row(federation.name, federation.description)
|
|
132
135
|
|
|
133
136
|
return table
|
|
134
137
|
|
flwr/cli/utils.py
CHANGED
|
@@ -100,6 +100,8 @@ def cli_output_handler(
|
|
|
100
100
|
restore_output()
|
|
101
101
|
print_json_error(captured_output.getvalue(), err)
|
|
102
102
|
else:
|
|
103
|
+
if isinstance(err, typer.Exit):
|
|
104
|
+
raise # Allow typer.Exit to escape normally
|
|
103
105
|
raise click.ClickException(str(err)) from None
|
|
104
106
|
finally:
|
|
105
107
|
if is_json:
|
flwr/common/typing.py
CHANGED
flwr/proto/federation_pb2.py
CHANGED
|
@@ -26,7 +26,7 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
|
26
26
|
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lwr/proto/federation.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"#\n\x07\x41\x63\x63ount\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\
|
|
29
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lwr/proto/federation.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"#\n\x07\x41\x63\x63ount\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\xaf\x01\n\nFederation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bmember_aids\x18\x02 \x03(\t\x12#\n\x05nodes\x18\x03 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x1d\n\x04runs\x18\x04 \x03(\x0b\x32\x0f.flwr.proto.Run\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12%\n\x08\x61\x63\x63ounts\x18\x06 \x03(\x0b\x32\x13.flwr.proto.Accountb\x06proto3')
|
|
30
30
|
|
|
31
31
|
_globals = globals()
|
|
32
32
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -36,5 +36,5 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
36
36
|
_globals['_ACCOUNT']._serialized_start=88
|
|
37
37
|
_globals['_ACCOUNT']._serialized_end=123
|
|
38
38
|
_globals['_FEDERATION']._serialized_start=126
|
|
39
|
-
_globals['_FEDERATION']._serialized_end=
|
|
39
|
+
_globals['_FEDERATION']._serialized_end=301
|
|
40
40
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/federation_pb2.pyi
CHANGED
|
@@ -51,24 +51,36 @@ class Federation(google.protobuf.message.Message):
|
|
|
51
51
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
52
52
|
|
|
53
53
|
NAME_FIELD_NUMBER: builtins.int
|
|
54
|
-
|
|
54
|
+
MEMBER_AIDS_FIELD_NUMBER: builtins.int
|
|
55
55
|
NODES_FIELD_NUMBER: builtins.int
|
|
56
56
|
RUNS_FIELD_NUMBER: builtins.int
|
|
57
|
+
DESCRIPTION_FIELD_NUMBER: builtins.int
|
|
58
|
+
ACCOUNTS_FIELD_NUMBER: builtins.int
|
|
57
59
|
name: builtins.str
|
|
60
|
+
description: builtins.str
|
|
61
|
+
"""Added in v1.26.0"""
|
|
58
62
|
@property
|
|
59
|
-
def
|
|
63
|
+
def member_aids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
|
|
64
|
+
"""Deprecated in v1.26.0"""
|
|
65
|
+
|
|
60
66
|
@property
|
|
61
67
|
def nodes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.node_pb2.NodeInfo]: ...
|
|
62
68
|
@property
|
|
63
69
|
def runs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.run_pb2.Run]: ...
|
|
70
|
+
@property
|
|
71
|
+
def accounts(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Account]:
|
|
72
|
+
"""Added in v1.26.0"""
|
|
73
|
+
|
|
64
74
|
def __init__(
|
|
65
75
|
self,
|
|
66
76
|
*,
|
|
67
77
|
name: builtins.str = ...,
|
|
68
|
-
|
|
78
|
+
member_aids: collections.abc.Iterable[builtins.str] | None = ...,
|
|
69
79
|
nodes: collections.abc.Iterable[flwr.proto.node_pb2.NodeInfo] | None = ...,
|
|
70
80
|
runs: collections.abc.Iterable[flwr.proto.run_pb2.Run] | None = ...,
|
|
81
|
+
description: builtins.str = ...,
|
|
82
|
+
accounts: collections.abc.Iterable[global___Account] | None = ...,
|
|
71
83
|
) -> None: ...
|
|
72
|
-
def ClearField(self, field_name: typing.Literal["accounts", b"accounts", "name", b"name", "nodes", b"nodes", "runs", b"runs"]) -> None: ...
|
|
84
|
+
def ClearField(self, field_name: typing.Literal["accounts", b"accounts", "description", b"description", "member_aids", b"member_aids", "name", b"name", "nodes", b"nodes", "runs", b"runs"]) -> None: ...
|
|
73
85
|
|
|
74
86
|
global___Federation = Federation
|
flwr/proto/run_pb2.py
CHANGED
|
@@ -27,7 +27,7 @@ from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
|
|
|
27
27
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xb7\x03\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x12\x12\n\npending_at\x18\x06 \x01(\t\x12\x13\n\x0bstarting_at\x18\x07 \x01(\t\x12\x12\n\nrunning_at\x18\x08 \x01(\t\x12\x13\n\x0b\x66inished_at\x18\t \x01(\t\x12%\n\x06status\x18\n \x01(\x0b\x32\x15.flwr.proto.RunStatus\x12\x10\n\x08\x66lwr_aid\x18\x0b \x01(\t\x12\x12\n\nfederation\x18\x0c \x01(\t\x12\x12\n\nbytes_sent\x18\r \x01(\x04\x12\x12\n\nbytes_recv\x18\x0e \x01(\x04\x12\x19\n\x11\x63lientapp_runtime\x18\x0f \x01(\x01\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"@\n\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"
|
|
30
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/run.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xb7\x03\n\x03Run\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x0e\n\x06\x66\x61\x62_id\x18\x02 \x01(\t\x12\x13\n\x0b\x66\x61\x62_version\x18\x03 \x01(\t\x12<\n\x0foverride_config\x18\x04 \x03(\x0b\x32#.flwr.proto.Run.OverrideConfigEntry\x12\x10\n\x08\x66\x61\x62_hash\x18\x05 \x01(\t\x12\x12\n\npending_at\x18\x06 \x01(\t\x12\x13\n\x0bstarting_at\x18\x07 \x01(\t\x12\x12\n\nrunning_at\x18\x08 \x01(\t\x12\x13\n\x0b\x66inished_at\x18\t \x01(\t\x12%\n\x06status\x18\n \x01(\x0b\x32\x15.flwr.proto.RunStatus\x12\x10\n\x08\x66lwr_aid\x18\x0b \x01(\t\x12\x12\n\nfederation\x18\x0c \x01(\t\x12\x12\n\nbytes_sent\x18\r \x01(\x04\x12\x12\n\nbytes_recv\x18\x0e \x01(\x04\x12\x19\n\x11\x63lientapp_runtime\x18\x0f \x01(\x01\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"@\n\tRunStatus\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x12\n\nsub_status\x18\x02 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x03 \x01(\t\"?\n\rGetRunRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\".\n\x0eGetRunResponse\x12\x1c\n\x03run\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Run\"S\n\x16UpdateRunStatusRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12)\n\nrun_status\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RunStatus\"\x19\n\x17UpdateRunStatusResponse\"-\n\x1bGetFederationOptionsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"T\n\x1cGetFederationOptionsResponse\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x01 \x01(\x0b\x32\x18.flwr.proto.ConfigRecordb\x06proto3')
|
|
31
31
|
|
|
32
32
|
_globals = globals()
|
|
33
33
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -36,8 +36,6 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
36
36
|
DESCRIPTOR._loaded_options = None
|
|
37
37
|
_globals['_RUN_OVERRIDECONFIGENTRY']._loaded_options = None
|
|
38
38
|
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
39
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._loaded_options = None
|
|
40
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_options = b'8\001'
|
|
41
39
|
_globals['_RUN']._serialized_start=117
|
|
42
40
|
_globals['_RUN']._serialized_end=556
|
|
43
41
|
_globals['_RUN_OVERRIDECONFIGENTRY']._serialized_start=483
|
|
@@ -52,14 +50,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
52
50
|
_globals['_UPDATERUNSTATUSREQUEST']._serialized_end=820
|
|
53
51
|
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_start=822
|
|
54
52
|
_globals['_UPDATERUNSTATUSRESPONSE']._serialized_end=847
|
|
55
|
-
_globals['
|
|
56
|
-
_globals['
|
|
57
|
-
_globals['
|
|
58
|
-
_globals['
|
|
59
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_start=1024
|
|
60
|
-
_globals['_GETRUNSTATUSRESPONSE_RUNSTATUSDICTENTRY']._serialized_end=1099
|
|
61
|
-
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=1101
|
|
62
|
-
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=1146
|
|
63
|
-
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=1148
|
|
64
|
-
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=1232
|
|
53
|
+
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_start=849
|
|
54
|
+
_globals['_GETFEDERATIONOPTIONSREQUEST']._serialized_end=894
|
|
55
|
+
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_start=896
|
|
56
|
+
_globals['_GETFEDERATIONOPTIONSRESPONSE']._serialized_end=980
|
|
65
57
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/run_pb2.pyi
CHANGED
|
@@ -202,63 +202,6 @@ class UpdateRunStatusResponse(google.protobuf.message.Message):
|
|
|
202
202
|
|
|
203
203
|
global___UpdateRunStatusResponse = UpdateRunStatusResponse
|
|
204
204
|
|
|
205
|
-
@typing.final
|
|
206
|
-
class GetRunStatusRequest(google.protobuf.message.Message):
|
|
207
|
-
"""GetRunStatus"""
|
|
208
|
-
|
|
209
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
210
|
-
|
|
211
|
-
NODE_FIELD_NUMBER: builtins.int
|
|
212
|
-
RUN_IDS_FIELD_NUMBER: builtins.int
|
|
213
|
-
@property
|
|
214
|
-
def node(self) -> flwr.proto.node_pb2.Node: ...
|
|
215
|
-
@property
|
|
216
|
-
def run_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
|
|
217
|
-
def __init__(
|
|
218
|
-
self,
|
|
219
|
-
*,
|
|
220
|
-
node: flwr.proto.node_pb2.Node | None = ...,
|
|
221
|
-
run_ids: collections.abc.Iterable[builtins.int] | None = ...,
|
|
222
|
-
) -> None: ...
|
|
223
|
-
def HasField(self, field_name: typing.Literal["node", b"node"]) -> builtins.bool: ...
|
|
224
|
-
def ClearField(self, field_name: typing.Literal["node", b"node", "run_ids", b"run_ids"]) -> None: ...
|
|
225
|
-
|
|
226
|
-
global___GetRunStatusRequest = GetRunStatusRequest
|
|
227
|
-
|
|
228
|
-
@typing.final
|
|
229
|
-
class GetRunStatusResponse(google.protobuf.message.Message):
|
|
230
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
231
|
-
|
|
232
|
-
@typing.final
|
|
233
|
-
class RunStatusDictEntry(google.protobuf.message.Message):
|
|
234
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
235
|
-
|
|
236
|
-
KEY_FIELD_NUMBER: builtins.int
|
|
237
|
-
VALUE_FIELD_NUMBER: builtins.int
|
|
238
|
-
key: builtins.int
|
|
239
|
-
@property
|
|
240
|
-
def value(self) -> global___RunStatus: ...
|
|
241
|
-
def __init__(
|
|
242
|
-
self,
|
|
243
|
-
*,
|
|
244
|
-
key: builtins.int = ...,
|
|
245
|
-
value: global___RunStatus | None = ...,
|
|
246
|
-
) -> None: ...
|
|
247
|
-
def HasField(self, field_name: typing.Literal["value", b"value"]) -> builtins.bool: ...
|
|
248
|
-
def ClearField(self, field_name: typing.Literal["key", b"key", "value", b"value"]) -> None: ...
|
|
249
|
-
|
|
250
|
-
RUN_STATUS_DICT_FIELD_NUMBER: builtins.int
|
|
251
|
-
@property
|
|
252
|
-
def run_status_dict(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, global___RunStatus]: ...
|
|
253
|
-
def __init__(
|
|
254
|
-
self,
|
|
255
|
-
*,
|
|
256
|
-
run_status_dict: collections.abc.Mapping[builtins.int, global___RunStatus] | None = ...,
|
|
257
|
-
) -> None: ...
|
|
258
|
-
def ClearField(self, field_name: typing.Literal["run_status_dict", b"run_status_dict"]) -> None: ...
|
|
259
|
-
|
|
260
|
-
global___GetRunStatusResponse = GetRunStatusResponse
|
|
261
|
-
|
|
262
205
|
@typing.final
|
|
263
206
|
class GetFederationOptionsRequest(google.protobuf.message.Message):
|
|
264
207
|
"""Get Federation Options associated with run"""
|
flwr/proto/serverappio_pb2.py
CHANGED
|
@@ -31,7 +31,7 @@ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
|
31
31
|
from flwr.proto import appio_pb2 as flwr_dot_proto_dot_appio__pb2
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x16\x66lwr/proto/appio.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node2\
|
|
34
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/serverappio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x16\x66lwr/proto/appio.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node2\xd1\t\n\x0bServerAppIo\x12_\n\x10ListAppsToLaunch\x12#.flwr.proto.ListAppsToLaunchRequest\x1a$.flwr.proto.ListAppsToLaunchResponse\"\x00\x12S\n\x0cRequestToken\x12\x1f.flwr.proto.RequestTokenRequest\x1a .flwr.proto.RequestTokenResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x12V\n\rPullAppInputs\x12 .flwr.proto.PullAppInputsRequest\x1a!.flwr.proto.PullAppInputsResponse\"\x00\x12Y\n\x0ePushAppOutputs\x12!.flwr.proto.PushAppOutputsRequest\x1a\".flwr.proto.PushAppOutputsResponse\"\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\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12Y\n\x0cPushMessages\x12\".flwr.proto.PushAppMessagesRequest\x1a#.flwr.proto.PushAppMessagesResponse\"\x00\x12Y\n\x0cPullMessages\x12\".flwr.proto.PullAppMessagesRequest\x1a#.flwr.proto.PullAppMessagesResponse\"\x00\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x62\x06proto3')
|
|
35
35
|
|
|
36
36
|
_globals = globals()
|
|
37
37
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -43,5 +43,5 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
43
43
|
_globals['_GETNODESRESPONSE']._serialized_start=246
|
|
44
44
|
_globals['_GETNODESRESPONSE']._serialized_end=297
|
|
45
45
|
_globals['_SERVERAPPIO']._serialized_start=300
|
|
46
|
-
_globals['_SERVERAPPIO']._serialized_end=
|
|
46
|
+
_globals['_SERVERAPPIO']._serialized_end=1533
|
|
47
47
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -4,7 +4,6 @@ import grpc
|
|
|
4
4
|
import warnings
|
|
5
5
|
|
|
6
6
|
from flwr.proto import appio_pb2 as flwr_dot_proto_dot_appio__pb2
|
|
7
|
-
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
8
7
|
from flwr.proto import heartbeat_pb2 as flwr_dot_proto_dot_heartbeat__pb2
|
|
9
8
|
from flwr.proto import log_pb2 as flwr_dot_proto_dot_log__pb2
|
|
10
9
|
from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
|
|
@@ -85,11 +84,6 @@ class ServerAppIoStub(object):
|
|
|
85
84
|
request_serializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.SerializeToString,
|
|
86
85
|
response_deserializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.FromString,
|
|
87
86
|
_registered_method=True)
|
|
88
|
-
self.GetRunStatus = channel.unary_unary(
|
|
89
|
-
'/flwr.proto.ServerAppIo/GetRunStatus',
|
|
90
|
-
request_serializer=flwr_dot_proto_dot_run__pb2.GetRunStatusRequest.SerializeToString,
|
|
91
|
-
response_deserializer=flwr_dot_proto_dot_run__pb2.GetRunStatusResponse.FromString,
|
|
92
|
-
_registered_method=True)
|
|
93
87
|
self.UpdateRunStatus = channel.unary_unary(
|
|
94
88
|
'/flwr.proto.ServerAppIo/UpdateRunStatus',
|
|
95
89
|
request_serializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.SerializeToString,
|
|
@@ -115,11 +109,6 @@ class ServerAppIoStub(object):
|
|
|
115
109
|
request_serializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesRequest.SerializeToString,
|
|
116
110
|
response_deserializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesResponse.FromString,
|
|
117
111
|
_registered_method=True)
|
|
118
|
-
self.GetFab = channel.unary_unary(
|
|
119
|
-
'/flwr.proto.ServerAppIo/GetFab',
|
|
120
|
-
request_serializer=flwr_dot_proto_dot_fab__pb2.GetFabRequest.SerializeToString,
|
|
121
|
-
response_deserializer=flwr_dot_proto_dot_fab__pb2.GetFabResponse.FromString,
|
|
122
|
-
_registered_method=True)
|
|
123
112
|
|
|
124
113
|
|
|
125
114
|
class ServerAppIoServicer(object):
|
|
@@ -200,19 +189,12 @@ class ServerAppIoServicer(object):
|
|
|
200
189
|
context.set_details('Method not implemented!')
|
|
201
190
|
raise NotImplementedError('Method not implemented!')
|
|
202
191
|
|
|
203
|
-
def
|
|
192
|
+
def UpdateRunStatus(self, request, context):
|
|
204
193
|
"""///////////////////////////////////////////////////////////////////////////
|
|
205
194
|
Specific endpoints shared by ServerAppIo and SimulationIo
|
|
206
195
|
///////////////////////////////////////////////////////////////////////////
|
|
207
196
|
|
|
208
|
-
|
|
209
|
-
"""
|
|
210
|
-
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
211
|
-
context.set_details('Method not implemented!')
|
|
212
|
-
raise NotImplementedError('Method not implemented!')
|
|
213
|
-
|
|
214
|
-
def UpdateRunStatus(self, request, context):
|
|
215
|
-
"""Update the status of a given run
|
|
197
|
+
Update the status of a given run
|
|
216
198
|
"""
|
|
217
199
|
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
218
200
|
context.set_details('Method not implemented!')
|
|
@@ -250,13 +232,6 @@ class ServerAppIoServicer(object):
|
|
|
250
232
|
context.set_details('Method not implemented!')
|
|
251
233
|
raise NotImplementedError('Method not implemented!')
|
|
252
234
|
|
|
253
|
-
def GetFab(self, request, context):
|
|
254
|
-
"""Get FAB
|
|
255
|
-
"""
|
|
256
|
-
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
257
|
-
context.set_details('Method not implemented!')
|
|
258
|
-
raise NotImplementedError('Method not implemented!')
|
|
259
|
-
|
|
260
235
|
|
|
261
236
|
def add_ServerAppIoServicer_to_server(servicer, server):
|
|
262
237
|
rpc_method_handlers = {
|
|
@@ -305,11 +280,6 @@ def add_ServerAppIoServicer_to_server(servicer, server):
|
|
|
305
280
|
request_deserializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedRequest.FromString,
|
|
306
281
|
response_serializer=flwr_dot_proto_dot_message__pb2.ConfirmMessageReceivedResponse.SerializeToString,
|
|
307
282
|
),
|
|
308
|
-
'GetRunStatus': grpc.unary_unary_rpc_method_handler(
|
|
309
|
-
servicer.GetRunStatus,
|
|
310
|
-
request_deserializer=flwr_dot_proto_dot_run__pb2.GetRunStatusRequest.FromString,
|
|
311
|
-
response_serializer=flwr_dot_proto_dot_run__pb2.GetRunStatusResponse.SerializeToString,
|
|
312
|
-
),
|
|
313
283
|
'UpdateRunStatus': grpc.unary_unary_rpc_method_handler(
|
|
314
284
|
servicer.UpdateRunStatus,
|
|
315
285
|
request_deserializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.FromString,
|
|
@@ -335,11 +305,6 @@ def add_ServerAppIoServicer_to_server(servicer, server):
|
|
|
335
305
|
request_deserializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesRequest.FromString,
|
|
336
306
|
response_serializer=flwr_dot_proto_dot_serverappio__pb2.GetNodesResponse.SerializeToString,
|
|
337
307
|
),
|
|
338
|
-
'GetFab': grpc.unary_unary_rpc_method_handler(
|
|
339
|
-
servicer.GetFab,
|
|
340
|
-
request_deserializer=flwr_dot_proto_dot_fab__pb2.GetFabRequest.FromString,
|
|
341
|
-
response_serializer=flwr_dot_proto_dot_fab__pb2.GetFabResponse.SerializeToString,
|
|
342
|
-
),
|
|
343
308
|
}
|
|
344
309
|
generic_handler = grpc.method_handlers_generic_handler(
|
|
345
310
|
'flwr.proto.ServerAppIo', rpc_method_handlers)
|
|
@@ -594,33 +559,6 @@ class ServerAppIo(object):
|
|
|
594
559
|
metadata,
|
|
595
560
|
_registered_method=True)
|
|
596
561
|
|
|
597
|
-
@staticmethod
|
|
598
|
-
def GetRunStatus(request,
|
|
599
|
-
target,
|
|
600
|
-
options=(),
|
|
601
|
-
channel_credentials=None,
|
|
602
|
-
call_credentials=None,
|
|
603
|
-
insecure=False,
|
|
604
|
-
compression=None,
|
|
605
|
-
wait_for_ready=None,
|
|
606
|
-
timeout=None,
|
|
607
|
-
metadata=None):
|
|
608
|
-
return grpc.experimental.unary_unary(
|
|
609
|
-
request,
|
|
610
|
-
target,
|
|
611
|
-
'/flwr.proto.ServerAppIo/GetRunStatus',
|
|
612
|
-
flwr_dot_proto_dot_run__pb2.GetRunStatusRequest.SerializeToString,
|
|
613
|
-
flwr_dot_proto_dot_run__pb2.GetRunStatusResponse.FromString,
|
|
614
|
-
options,
|
|
615
|
-
channel_credentials,
|
|
616
|
-
insecure,
|
|
617
|
-
call_credentials,
|
|
618
|
-
compression,
|
|
619
|
-
wait_for_ready,
|
|
620
|
-
timeout,
|
|
621
|
-
metadata,
|
|
622
|
-
_registered_method=True)
|
|
623
|
-
|
|
624
562
|
@staticmethod
|
|
625
563
|
def UpdateRunStatus(request,
|
|
626
564
|
target,
|
|
@@ -755,30 +693,3 @@ class ServerAppIo(object):
|
|
|
755
693
|
timeout,
|
|
756
694
|
metadata,
|
|
757
695
|
_registered_method=True)
|
|
758
|
-
|
|
759
|
-
@staticmethod
|
|
760
|
-
def GetFab(request,
|
|
761
|
-
target,
|
|
762
|
-
options=(),
|
|
763
|
-
channel_credentials=None,
|
|
764
|
-
call_credentials=None,
|
|
765
|
-
insecure=False,
|
|
766
|
-
compression=None,
|
|
767
|
-
wait_for_ready=None,
|
|
768
|
-
timeout=None,
|
|
769
|
-
metadata=None):
|
|
770
|
-
return grpc.experimental.unary_unary(
|
|
771
|
-
request,
|
|
772
|
-
target,
|
|
773
|
-
'/flwr.proto.ServerAppIo/GetFab',
|
|
774
|
-
flwr_dot_proto_dot_fab__pb2.GetFabRequest.SerializeToString,
|
|
775
|
-
flwr_dot_proto_dot_fab__pb2.GetFabResponse.FromString,
|
|
776
|
-
options,
|
|
777
|
-
channel_credentials,
|
|
778
|
-
insecure,
|
|
779
|
-
call_credentials,
|
|
780
|
-
compression,
|
|
781
|
-
wait_for_ready,
|
|
782
|
-
timeout,
|
|
783
|
-
metadata,
|
|
784
|
-
_registered_method=True)
|
|
@@ -20,7 +20,6 @@ limitations under the License.
|
|
|
20
20
|
import abc
|
|
21
21
|
import collections.abc
|
|
22
22
|
import flwr.proto.appio_pb2
|
|
23
|
-
import flwr.proto.fab_pb2
|
|
24
23
|
import flwr.proto.heartbeat_pb2
|
|
25
24
|
import flwr.proto.log_pb2
|
|
26
25
|
import flwr.proto.message_pb2
|
|
@@ -108,23 +107,17 @@ class ServerAppIoStub:
|
|
|
108
107
|
]
|
|
109
108
|
"""Confirm Message Received"""
|
|
110
109
|
|
|
111
|
-
|
|
112
|
-
flwr.proto.run_pb2.
|
|
113
|
-
flwr.proto.run_pb2.
|
|
110
|
+
UpdateRunStatus: grpc.UnaryUnaryMultiCallable[
|
|
111
|
+
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
112
|
+
flwr.proto.run_pb2.UpdateRunStatusResponse,
|
|
114
113
|
]
|
|
115
114
|
"""///////////////////////////////////////////////////////////////////////////
|
|
116
115
|
Specific endpoints shared by ServerAppIo and SimulationIo
|
|
117
116
|
///////////////////////////////////////////////////////////////////////////
|
|
118
117
|
|
|
119
|
-
|
|
118
|
+
Update the status of a given run
|
|
120
119
|
"""
|
|
121
120
|
|
|
122
|
-
UpdateRunStatus: grpc.UnaryUnaryMultiCallable[
|
|
123
|
-
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
124
|
-
flwr.proto.run_pb2.UpdateRunStatusResponse,
|
|
125
|
-
]
|
|
126
|
-
"""Update the status of a given run"""
|
|
127
|
-
|
|
128
121
|
PushLogs: grpc.UnaryUnaryMultiCallable[
|
|
129
122
|
flwr.proto.log_pb2.PushLogsRequest,
|
|
130
123
|
flwr.proto.log_pb2.PushLogsResponse,
|
|
@@ -154,12 +147,6 @@ class ServerAppIoStub:
|
|
|
154
147
|
]
|
|
155
148
|
"""Return a set of nodes"""
|
|
156
149
|
|
|
157
|
-
GetFab: grpc.UnaryUnaryMultiCallable[
|
|
158
|
-
flwr.proto.fab_pb2.GetFabRequest,
|
|
159
|
-
flwr.proto.fab_pb2.GetFabResponse,
|
|
160
|
-
]
|
|
161
|
-
"""Get FAB"""
|
|
162
|
-
|
|
163
150
|
class ServerAppIoAsyncStub:
|
|
164
151
|
ListAppsToLaunch: grpc.aio.UnaryUnaryMultiCallable[
|
|
165
152
|
flwr.proto.appio_pb2.ListAppsToLaunchRequest,
|
|
@@ -230,23 +217,17 @@ class ServerAppIoAsyncStub:
|
|
|
230
217
|
]
|
|
231
218
|
"""Confirm Message Received"""
|
|
232
219
|
|
|
233
|
-
|
|
234
|
-
flwr.proto.run_pb2.
|
|
235
|
-
flwr.proto.run_pb2.
|
|
220
|
+
UpdateRunStatus: grpc.aio.UnaryUnaryMultiCallable[
|
|
221
|
+
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
222
|
+
flwr.proto.run_pb2.UpdateRunStatusResponse,
|
|
236
223
|
]
|
|
237
224
|
"""///////////////////////////////////////////////////////////////////////////
|
|
238
225
|
Specific endpoints shared by ServerAppIo and SimulationIo
|
|
239
226
|
///////////////////////////////////////////////////////////////////////////
|
|
240
227
|
|
|
241
|
-
|
|
228
|
+
Update the status of a given run
|
|
242
229
|
"""
|
|
243
230
|
|
|
244
|
-
UpdateRunStatus: grpc.aio.UnaryUnaryMultiCallable[
|
|
245
|
-
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
246
|
-
flwr.proto.run_pb2.UpdateRunStatusResponse,
|
|
247
|
-
]
|
|
248
|
-
"""Update the status of a given run"""
|
|
249
|
-
|
|
250
231
|
PushLogs: grpc.aio.UnaryUnaryMultiCallable[
|
|
251
232
|
flwr.proto.log_pb2.PushLogsRequest,
|
|
252
233
|
flwr.proto.log_pb2.PushLogsResponse,
|
|
@@ -276,12 +257,6 @@ class ServerAppIoAsyncStub:
|
|
|
276
257
|
]
|
|
277
258
|
"""Return a set of nodes"""
|
|
278
259
|
|
|
279
|
-
GetFab: grpc.aio.UnaryUnaryMultiCallable[
|
|
280
|
-
flwr.proto.fab_pb2.GetFabRequest,
|
|
281
|
-
flwr.proto.fab_pb2.GetFabResponse,
|
|
282
|
-
]
|
|
283
|
-
"""Get FAB"""
|
|
284
|
-
|
|
285
260
|
class ServerAppIoServicer(metaclass=abc.ABCMeta):
|
|
286
261
|
@abc.abstractmethod
|
|
287
262
|
def ListAppsToLaunch(
|
|
@@ -371,26 +346,18 @@ class ServerAppIoServicer(metaclass=abc.ABCMeta):
|
|
|
371
346
|
"""Confirm Message Received"""
|
|
372
347
|
|
|
373
348
|
@abc.abstractmethod
|
|
374
|
-
def
|
|
349
|
+
def UpdateRunStatus(
|
|
375
350
|
self,
|
|
376
|
-
request: flwr.proto.run_pb2.
|
|
351
|
+
request: flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
377
352
|
context: _ServicerContext,
|
|
378
|
-
) -> typing.Union[flwr.proto.run_pb2.
|
|
353
|
+
) -> typing.Union[flwr.proto.run_pb2.UpdateRunStatusResponse, collections.abc.Awaitable[flwr.proto.run_pb2.UpdateRunStatusResponse]]:
|
|
379
354
|
"""///////////////////////////////////////////////////////////////////////////
|
|
380
355
|
Specific endpoints shared by ServerAppIo and SimulationIo
|
|
381
356
|
///////////////////////////////////////////////////////////////////////////
|
|
382
357
|
|
|
383
|
-
|
|
358
|
+
Update the status of a given run
|
|
384
359
|
"""
|
|
385
360
|
|
|
386
|
-
@abc.abstractmethod
|
|
387
|
-
def UpdateRunStatus(
|
|
388
|
-
self,
|
|
389
|
-
request: flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
390
|
-
context: _ServicerContext,
|
|
391
|
-
) -> typing.Union[flwr.proto.run_pb2.UpdateRunStatusResponse, collections.abc.Awaitable[flwr.proto.run_pb2.UpdateRunStatusResponse]]:
|
|
392
|
-
"""Update the status of a given run"""
|
|
393
|
-
|
|
394
361
|
@abc.abstractmethod
|
|
395
362
|
def PushLogs(
|
|
396
363
|
self,
|
|
@@ -428,12 +395,4 @@ class ServerAppIoServicer(metaclass=abc.ABCMeta):
|
|
|
428
395
|
) -> typing.Union[flwr.proto.serverappio_pb2.GetNodesResponse, collections.abc.Awaitable[flwr.proto.serverappio_pb2.GetNodesResponse]]:
|
|
429
396
|
"""Return a set of nodes"""
|
|
430
397
|
|
|
431
|
-
@abc.abstractmethod
|
|
432
|
-
def GetFab(
|
|
433
|
-
self,
|
|
434
|
-
request: flwr.proto.fab_pb2.GetFabRequest,
|
|
435
|
-
context: _ServicerContext,
|
|
436
|
-
) -> typing.Union[flwr.proto.fab_pb2.GetFabResponse, collections.abc.Awaitable[flwr.proto.fab_pb2.GetFabResponse]]:
|
|
437
|
-
"""Get FAB"""
|
|
438
|
-
|
|
439
398
|
def add_ServerAppIoServicer_to_server(servicer: ServerAppIoServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ...
|
flwr/proto/simulationio_pb2.py
CHANGED
|
@@ -28,7 +28,7 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
|
28
28
|
from flwr.proto import appio_pb2 as flwr_dot_proto_dot_appio__pb2
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66lwr/proto/simulationio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x16\x66lwr/proto/appio.proto2\
|
|
31
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66lwr/proto/simulationio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x16\x66lwr/proto/appio.proto2\xaf\x06\n\x0cSimulationIo\x12_\n\x10ListAppsToLaunch\x12#.flwr.proto.ListAppsToLaunchRequest\x1a$.flwr.proto.ListAppsToLaunchResponse\"\x00\x12S\n\x0cRequestToken\x12\x1f.flwr.proto.RequestTokenRequest\x1a .flwr.proto.RequestTokenResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x12V\n\rPullAppInputs\x12 .flwr.proto.PullAppInputsRequest\x1a!.flwr.proto.PullAppInputsResponse\"\x00\x12Y\n\x0ePushAppOutputs\x12!.flwr.proto.PushAppOutputsRequest\x1a\".flwr.proto.PushAppOutputsResponse\"\x00\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12k\n\x14GetFederationOptions\x12\'.flwr.proto.GetFederationOptionsRequest\x1a(.flwr.proto.GetFederationOptionsResponse\"\x00\x62\x06proto3')
|
|
32
32
|
|
|
33
33
|
_globals = globals()
|
|
34
34
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -36,5 +36,5 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.simulationio_pb2
|
|
|
36
36
|
if not _descriptor._USE_C_DESCRIPTORS:
|
|
37
37
|
DESCRIPTOR._loaded_options = None
|
|
38
38
|
_globals['_SIMULATIONIO']._serialized_start=142
|
|
39
|
-
_globals['_SIMULATIONIO']._serialized_end=
|
|
39
|
+
_globals['_SIMULATIONIO']._serialized_end=957
|
|
40
40
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -67,11 +67,6 @@ class SimulationIoStub(object):
|
|
|
67
67
|
request_serializer=flwr_dot_proto_dot_appio__pb2.PushAppOutputsRequest.SerializeToString,
|
|
68
68
|
response_deserializer=flwr_dot_proto_dot_appio__pb2.PushAppOutputsResponse.FromString,
|
|
69
69
|
_registered_method=True)
|
|
70
|
-
self.GetRunStatus = channel.unary_unary(
|
|
71
|
-
'/flwr.proto.SimulationIo/GetRunStatus',
|
|
72
|
-
request_serializer=flwr_dot_proto_dot_run__pb2.GetRunStatusRequest.SerializeToString,
|
|
73
|
-
response_deserializer=flwr_dot_proto_dot_run__pb2.GetRunStatusResponse.FromString,
|
|
74
|
-
_registered_method=True)
|
|
75
70
|
self.UpdateRunStatus = channel.unary_unary(
|
|
76
71
|
'/flwr.proto.SimulationIo/UpdateRunStatus',
|
|
77
72
|
request_serializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.SerializeToString,
|
|
@@ -142,19 +137,12 @@ class SimulationIoServicer(object):
|
|
|
142
137
|
context.set_details('Method not implemented!')
|
|
143
138
|
raise NotImplementedError('Method not implemented!')
|
|
144
139
|
|
|
145
|
-
def
|
|
140
|
+
def UpdateRunStatus(self, request, context):
|
|
146
141
|
"""///////////////////////////////////////////////////////////////////////////
|
|
147
142
|
Specific endpoints shared by ServerAppIo and SimulationIo
|
|
148
143
|
///////////////////////////////////////////////////////////////////////////
|
|
149
144
|
|
|
150
|
-
|
|
151
|
-
"""
|
|
152
|
-
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
153
|
-
context.set_details('Method not implemented!')
|
|
154
|
-
raise NotImplementedError('Method not implemented!')
|
|
155
|
-
|
|
156
|
-
def UpdateRunStatus(self, request, context):
|
|
157
|
-
"""Update the status of a given run
|
|
145
|
+
Update the status of a given run
|
|
158
146
|
"""
|
|
159
147
|
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
160
148
|
context.set_details('Method not implemented!')
|
|
@@ -211,11 +199,6 @@ def add_SimulationIoServicer_to_server(servicer, server):
|
|
|
211
199
|
request_deserializer=flwr_dot_proto_dot_appio__pb2.PushAppOutputsRequest.FromString,
|
|
212
200
|
response_serializer=flwr_dot_proto_dot_appio__pb2.PushAppOutputsResponse.SerializeToString,
|
|
213
201
|
),
|
|
214
|
-
'GetRunStatus': grpc.unary_unary_rpc_method_handler(
|
|
215
|
-
servicer.GetRunStatus,
|
|
216
|
-
request_deserializer=flwr_dot_proto_dot_run__pb2.GetRunStatusRequest.FromString,
|
|
217
|
-
response_serializer=flwr_dot_proto_dot_run__pb2.GetRunStatusResponse.SerializeToString,
|
|
218
|
-
),
|
|
219
202
|
'UpdateRunStatus': grpc.unary_unary_rpc_method_handler(
|
|
220
203
|
servicer.UpdateRunStatus,
|
|
221
204
|
request_deserializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.FromString,
|
|
@@ -404,33 +387,6 @@ class SimulationIo(object):
|
|
|
404
387
|
metadata,
|
|
405
388
|
_registered_method=True)
|
|
406
389
|
|
|
407
|
-
@staticmethod
|
|
408
|
-
def GetRunStatus(request,
|
|
409
|
-
target,
|
|
410
|
-
options=(),
|
|
411
|
-
channel_credentials=None,
|
|
412
|
-
call_credentials=None,
|
|
413
|
-
insecure=False,
|
|
414
|
-
compression=None,
|
|
415
|
-
wait_for_ready=None,
|
|
416
|
-
timeout=None,
|
|
417
|
-
metadata=None):
|
|
418
|
-
return grpc.experimental.unary_unary(
|
|
419
|
-
request,
|
|
420
|
-
target,
|
|
421
|
-
'/flwr.proto.SimulationIo/GetRunStatus',
|
|
422
|
-
flwr_dot_proto_dot_run__pb2.GetRunStatusRequest.SerializeToString,
|
|
423
|
-
flwr_dot_proto_dot_run__pb2.GetRunStatusResponse.FromString,
|
|
424
|
-
options,
|
|
425
|
-
channel_credentials,
|
|
426
|
-
insecure,
|
|
427
|
-
call_credentials,
|
|
428
|
-
compression,
|
|
429
|
-
wait_for_ready,
|
|
430
|
-
timeout,
|
|
431
|
-
metadata,
|
|
432
|
-
_registered_method=True)
|
|
433
|
-
|
|
434
390
|
@staticmethod
|
|
435
391
|
def UpdateRunStatus(request,
|
|
436
392
|
target,
|
|
@@ -82,23 +82,17 @@ class SimulationIoStub:
|
|
|
82
82
|
]
|
|
83
83
|
"""Push app outputs"""
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
flwr.proto.run_pb2.
|
|
87
|
-
flwr.proto.run_pb2.
|
|
85
|
+
UpdateRunStatus: grpc.UnaryUnaryMultiCallable[
|
|
86
|
+
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
87
|
+
flwr.proto.run_pb2.UpdateRunStatusResponse,
|
|
88
88
|
]
|
|
89
89
|
"""///////////////////////////////////////////////////////////////////////////
|
|
90
90
|
Specific endpoints shared by ServerAppIo and SimulationIo
|
|
91
91
|
///////////////////////////////////////////////////////////////////////////
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
Update the status of a given run
|
|
94
94
|
"""
|
|
95
95
|
|
|
96
|
-
UpdateRunStatus: grpc.UnaryUnaryMultiCallable[
|
|
97
|
-
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
98
|
-
flwr.proto.run_pb2.UpdateRunStatusResponse,
|
|
99
|
-
]
|
|
100
|
-
"""Update the status of a given run"""
|
|
101
|
-
|
|
102
96
|
PushLogs: grpc.UnaryUnaryMultiCallable[
|
|
103
97
|
flwr.proto.log_pb2.PushLogsRequest,
|
|
104
98
|
flwr.proto.log_pb2.PushLogsResponse,
|
|
@@ -163,23 +157,17 @@ class SimulationIoAsyncStub:
|
|
|
163
157
|
]
|
|
164
158
|
"""Push app outputs"""
|
|
165
159
|
|
|
166
|
-
|
|
167
|
-
flwr.proto.run_pb2.
|
|
168
|
-
flwr.proto.run_pb2.
|
|
160
|
+
UpdateRunStatus: grpc.aio.UnaryUnaryMultiCallable[
|
|
161
|
+
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
162
|
+
flwr.proto.run_pb2.UpdateRunStatusResponse,
|
|
169
163
|
]
|
|
170
164
|
"""///////////////////////////////////////////////////////////////////////////
|
|
171
165
|
Specific endpoints shared by ServerAppIo and SimulationIo
|
|
172
166
|
///////////////////////////////////////////////////////////////////////////
|
|
173
167
|
|
|
174
|
-
|
|
168
|
+
Update the status of a given run
|
|
175
169
|
"""
|
|
176
170
|
|
|
177
|
-
UpdateRunStatus: grpc.aio.UnaryUnaryMultiCallable[
|
|
178
|
-
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
179
|
-
flwr.proto.run_pb2.UpdateRunStatusResponse,
|
|
180
|
-
]
|
|
181
|
-
"""Update the status of a given run"""
|
|
182
|
-
|
|
183
171
|
PushLogs: grpc.aio.UnaryUnaryMultiCallable[
|
|
184
172
|
flwr.proto.log_pb2.PushLogsRequest,
|
|
185
173
|
flwr.proto.log_pb2.PushLogsResponse,
|
|
@@ -257,26 +245,18 @@ class SimulationIoServicer(metaclass=abc.ABCMeta):
|
|
|
257
245
|
"""Push app outputs"""
|
|
258
246
|
|
|
259
247
|
@abc.abstractmethod
|
|
260
|
-
def
|
|
248
|
+
def UpdateRunStatus(
|
|
261
249
|
self,
|
|
262
|
-
request: flwr.proto.run_pb2.
|
|
250
|
+
request: flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
263
251
|
context: _ServicerContext,
|
|
264
|
-
) -> typing.Union[flwr.proto.run_pb2.
|
|
252
|
+
) -> typing.Union[flwr.proto.run_pb2.UpdateRunStatusResponse, collections.abc.Awaitable[flwr.proto.run_pb2.UpdateRunStatusResponse]]:
|
|
265
253
|
"""///////////////////////////////////////////////////////////////////////////
|
|
266
254
|
Specific endpoints shared by ServerAppIo and SimulationIo
|
|
267
255
|
///////////////////////////////////////////////////////////////////////////
|
|
268
256
|
|
|
269
|
-
|
|
257
|
+
Update the status of a given run
|
|
270
258
|
"""
|
|
271
259
|
|
|
272
|
-
@abc.abstractmethod
|
|
273
|
-
def UpdateRunStatus(
|
|
274
|
-
self,
|
|
275
|
-
request: flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
276
|
-
context: _ServicerContext,
|
|
277
|
-
) -> typing.Union[flwr.proto.run_pb2.UpdateRunStatusResponse, collections.abc.Awaitable[flwr.proto.run_pb2.UpdateRunStatusResponse]]:
|
|
278
|
-
"""Update the status of a given run"""
|
|
279
|
-
|
|
280
260
|
@abc.abstractmethod
|
|
281
261
|
def PushLogs(
|
|
282
262
|
self,
|
|
@@ -36,7 +36,6 @@ from flwr.common.serde import (
|
|
|
36
36
|
message_from_proto,
|
|
37
37
|
message_to_proto,
|
|
38
38
|
run_status_from_proto,
|
|
39
|
-
run_status_to_proto,
|
|
40
39
|
run_to_proto,
|
|
41
40
|
)
|
|
42
41
|
from flwr.common.typing import Fab, RunStatus
|
|
@@ -55,7 +54,6 @@ from flwr.proto.appio_pb2 import ( # pylint: disable=E0611
|
|
|
55
54
|
RequestTokenRequest,
|
|
56
55
|
RequestTokenResponse,
|
|
57
56
|
)
|
|
58
|
-
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
|
59
57
|
from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
|
|
60
58
|
SendAppHeartbeatRequest,
|
|
61
59
|
SendAppHeartbeatResponse,
|
|
@@ -76,8 +74,6 @@ from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
|
|
76
74
|
from flwr.proto.run_pb2 import ( # pylint: disable=E0611
|
|
77
75
|
GetRunRequest,
|
|
78
76
|
GetRunResponse,
|
|
79
|
-
GetRunStatusRequest,
|
|
80
|
-
GetRunStatusResponse,
|
|
81
77
|
UpdateRunStatusRequest,
|
|
82
78
|
UpdateRunStatusResponse,
|
|
83
79
|
)
|
|
@@ -88,7 +84,7 @@ from flwr.proto.serverappio_pb2 import ( # pylint: disable=E0611
|
|
|
88
84
|
from flwr.server.superlink.linkstate import LinkState, LinkStateFactory
|
|
89
85
|
from flwr.server.superlink.utils import abort_if
|
|
90
86
|
from flwr.server.utils.validator import validate_message
|
|
91
|
-
from flwr.supercore.ffs import
|
|
87
|
+
from flwr.supercore.ffs import FfsFactory
|
|
92
88
|
from flwr.supercore.object_store import NoObjectInStoreError, ObjectStoreFactory
|
|
93
89
|
|
|
94
90
|
|
|
@@ -315,19 +311,6 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
|
|
|
315
311
|
|
|
316
312
|
return GetRunResponse(run=run_to_proto(run))
|
|
317
313
|
|
|
318
|
-
def GetFab(
|
|
319
|
-
self, request: GetFabRequest, context: grpc.ServicerContext
|
|
320
|
-
) -> GetFabResponse:
|
|
321
|
-
"""Get FAB from Ffs."""
|
|
322
|
-
log(DEBUG, "ServerAppIoServicer.GetFab")
|
|
323
|
-
|
|
324
|
-
ffs: Ffs = self.ffs_factory.ffs()
|
|
325
|
-
if result := ffs.get(request.hash_str):
|
|
326
|
-
fab = Fab(request.hash_str, result[0], result[1])
|
|
327
|
-
return GetFabResponse(fab=fab_to_proto(fab))
|
|
328
|
-
|
|
329
|
-
raise ValueError(f"Found no FAB with hash: {request.hash_str}")
|
|
330
|
-
|
|
331
314
|
def PullAppInputs(
|
|
332
315
|
self, request: PullAppInputsRequest, context: grpc.ServicerContext
|
|
333
316
|
) -> PullAppInputsResponse:
|
|
@@ -434,21 +417,6 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
|
|
|
434
417
|
state.add_serverapp_log(request.run_id, merged_logs)
|
|
435
418
|
return PushLogsResponse()
|
|
436
419
|
|
|
437
|
-
def GetRunStatus(
|
|
438
|
-
self, request: GetRunStatusRequest, context: grpc.ServicerContext
|
|
439
|
-
) -> GetRunStatusResponse:
|
|
440
|
-
"""Get the status of a run."""
|
|
441
|
-
log(DEBUG, "ServerAppIoServicer.GetRunStatus")
|
|
442
|
-
state = self.state_factory.state()
|
|
443
|
-
|
|
444
|
-
# Get run status from LinkState
|
|
445
|
-
run_statuses = state.get_run_status(set(request.run_ids))
|
|
446
|
-
run_status_dict = {
|
|
447
|
-
run_id: run_status_to_proto(run_status)
|
|
448
|
-
for run_id, run_status in run_statuses.items()
|
|
449
|
-
}
|
|
450
|
-
return GetRunStatusResponse(run_status_dict=run_status_dict)
|
|
451
|
-
|
|
452
420
|
def SendAppHeartbeat(
|
|
453
421
|
self, request: SendAppHeartbeatRequest, context: grpc.ServicerContext
|
|
454
422
|
) -> SendAppHeartbeatResponse:
|
|
@@ -29,7 +29,6 @@ from flwr.common.serde import (
|
|
|
29
29
|
context_to_proto,
|
|
30
30
|
fab_to_proto,
|
|
31
31
|
run_status_from_proto,
|
|
32
|
-
run_status_to_proto,
|
|
33
32
|
run_to_proto,
|
|
34
33
|
)
|
|
35
34
|
from flwr.common.typing import Fab, RunStatus
|
|
@@ -57,8 +56,6 @@ from flwr.proto.run_pb2 import ( # pylint: disable=E0611
|
|
|
57
56
|
GetFederationOptionsResponse,
|
|
58
57
|
GetRunRequest,
|
|
59
58
|
GetRunResponse,
|
|
60
|
-
GetRunStatusRequest,
|
|
61
|
-
GetRunStatusResponse,
|
|
62
59
|
UpdateRunStatusRequest,
|
|
63
60
|
UpdateRunStatusResponse,
|
|
64
61
|
)
|
|
@@ -219,22 +216,6 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
|
|
|
219
216
|
)
|
|
220
217
|
return UpdateRunStatusResponse()
|
|
221
218
|
|
|
222
|
-
def GetRunStatus(
|
|
223
|
-
self, request: GetRunStatusRequest, context: ServicerContext
|
|
224
|
-
) -> GetRunStatusResponse:
|
|
225
|
-
"""Get status of requested runs."""
|
|
226
|
-
log(DEBUG, "SimultionIoServicer.GetRunStatus")
|
|
227
|
-
state = self.state_factory.state()
|
|
228
|
-
|
|
229
|
-
statuses = state.get_run_status(set(request.run_ids))
|
|
230
|
-
|
|
231
|
-
return GetRunStatusResponse(
|
|
232
|
-
run_status_dict={
|
|
233
|
-
run_id: run_status_to_proto(status)
|
|
234
|
-
for run_id, status in statuses.items()
|
|
235
|
-
}
|
|
236
|
-
)
|
|
237
|
-
|
|
238
219
|
def PushLogs(
|
|
239
220
|
self, request: PushLogsRequest, context: grpc.ServicerContext
|
|
240
221
|
) -> PushLogsResponse:
|
flwr/supercore/constant.py
CHANGED
|
@@ -59,6 +59,7 @@ MIME_MAP = {
|
|
|
59
59
|
|
|
60
60
|
# Constants for federations
|
|
61
61
|
NOOP_FEDERATION = f"@{NOOP_ACCOUNT_NAME}/default"
|
|
62
|
+
NOOP_FEDERATION_DESCRIPTION = "A federation for testing and development purposes."
|
|
62
63
|
|
|
63
64
|
# Constants for exit handling
|
|
64
65
|
FORCE_EXIT_TIMEOUT_SECONDS = 5 # Used in `flwr_exit` function
|
|
@@ -72,6 +73,7 @@ SYSTEM_MESSAGE_TYPE = "system"
|
|
|
72
73
|
|
|
73
74
|
# SQLite PRAGMA settings for optimal performance and correctness
|
|
74
75
|
SQLITE_PRAGMAS = (
|
|
76
|
+
("busy_timeout", "5000"), # Retry lock acquisition for up to 5s before SQLITE_BUSY
|
|
75
77
|
("journal_mode", "WAL"), # Enable Write-Ahead Logging for better concurrency
|
|
76
78
|
("synchronous", "NORMAL"),
|
|
77
79
|
("foreign_keys", "ON"),
|
|
@@ -52,24 +52,24 @@ class SqlObjectStore(ObjectStore, SqlMixin):
|
|
|
52
52
|
|
|
53
53
|
child_ids = [child.object_id for child in tree_node.children]
|
|
54
54
|
with self.session():
|
|
55
|
+
# Insert new object if it doesn't exist (race-condition safe)
|
|
56
|
+
# RETURNING returns a row only if the insert succeeded
|
|
55
57
|
rows = self.query(
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
|
|
58
|
+
"INSERT INTO objects "
|
|
59
|
+
"(object_id, content, is_available, ref_count) "
|
|
60
|
+
"VALUES (:object_id, :content, :is_available, :ref_count) "
|
|
61
|
+
"ON CONFLICT (object_id) DO NOTHING "
|
|
62
|
+
"RETURNING object_id",
|
|
63
|
+
{
|
|
64
|
+
"object_id": obj_id,
|
|
65
|
+
"content": b"",
|
|
66
|
+
"is_available": 0,
|
|
67
|
+
"ref_count": 0,
|
|
68
|
+
},
|
|
59
69
|
)
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"INSERT INTO objects "
|
|
64
|
-
"(object_id, content, is_available, ref_count) "
|
|
65
|
-
"VALUES (:object_id, :content, :is_available, :ref_count)",
|
|
66
|
-
{
|
|
67
|
-
"object_id": obj_id,
|
|
68
|
-
"content": b"",
|
|
69
|
-
"is_available": 0,
|
|
70
|
-
"ref_count": 0,
|
|
71
|
-
},
|
|
72
|
-
)
|
|
70
|
+
|
|
71
|
+
if rows:
|
|
72
|
+
# New object inserted: set up child relationships
|
|
73
73
|
for cid in child_ids:
|
|
74
74
|
self.query(
|
|
75
75
|
"INSERT INTO object_children (parent_id, child_id) "
|
|
@@ -83,8 +83,12 @@ class SqlObjectStore(ObjectStore, SqlMixin):
|
|
|
83
83
|
)
|
|
84
84
|
new_objects.append(obj_id)
|
|
85
85
|
else:
|
|
86
|
-
#
|
|
87
|
-
|
|
86
|
+
# Object exists: check if unavailable
|
|
87
|
+
rows = self.query(
|
|
88
|
+
"SELECT is_available FROM objects WHERE object_id = :object_id",
|
|
89
|
+
{"object_id": obj_id},
|
|
90
|
+
)
|
|
91
|
+
if rows and not rows[0]["is_available"]:
|
|
88
92
|
new_objects.append(obj_id)
|
|
89
93
|
|
|
90
94
|
# Ensure run mapping
|
|
@@ -56,8 +56,8 @@ class FederationManager(ABC):
|
|
|
56
56
|
"""Given a node ID, check if it is in the federation."""
|
|
57
57
|
|
|
58
58
|
@abstractmethod
|
|
59
|
-
def get_federations(self, flwr_aid: str) -> list[str]:
|
|
60
|
-
"""Get federations of which the account is a member."""
|
|
59
|
+
def get_federations(self, flwr_aid: str) -> list[tuple[str, str]]:
|
|
60
|
+
"""Get federations (name, description) of which the account is a member."""
|
|
61
61
|
|
|
62
62
|
@abstractmethod
|
|
63
63
|
def get_details(self, federation: str) -> Federation:
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
from flwr.common.constant import NOOP_ACCOUNT_NAME, NOOP_FLWR_AID
|
|
19
19
|
from flwr.common.typing import Federation
|
|
20
20
|
from flwr.proto.federation_pb2 import Account # pylint: disable=E0611
|
|
21
|
-
from flwr.supercore.constant import NOOP_FEDERATION
|
|
21
|
+
from flwr.supercore.constant import NOOP_FEDERATION, NOOP_FEDERATION_DESCRIPTION
|
|
22
22
|
|
|
23
23
|
from .federation_manager import FederationManager
|
|
24
24
|
|
|
@@ -48,11 +48,11 @@ class NoOpFederationManager(FederationManager):
|
|
|
48
48
|
raise ValueError(f"Federation '{federation}' does not exist.")
|
|
49
49
|
return True
|
|
50
50
|
|
|
51
|
-
def get_federations(self, flwr_aid: str) -> list[str]:
|
|
52
|
-
"""Get federations of which the account is a member."""
|
|
51
|
+
def get_federations(self, flwr_aid: str) -> list[tuple[str, str]]:
|
|
52
|
+
"""Get federations (name, description) of which the account is a member."""
|
|
53
53
|
if flwr_aid != NOOP_FLWR_AID:
|
|
54
54
|
return []
|
|
55
|
-
return [NOOP_FEDERATION]
|
|
55
|
+
return [(NOOP_FEDERATION, NOOP_FEDERATION_DESCRIPTION)]
|
|
56
56
|
|
|
57
57
|
def get_details(self, federation: str) -> Federation:
|
|
58
58
|
"""Get details of the federation."""
|
|
@@ -66,6 +66,7 @@ class NoOpFederationManager(FederationManager):
|
|
|
66
66
|
]
|
|
67
67
|
return Federation(
|
|
68
68
|
name=NOOP_FEDERATION,
|
|
69
|
+
description=NOOP_FEDERATION_DESCRIPTION,
|
|
69
70
|
accounts=[Account(id=NOOP_FLWR_AID, name=NOOP_ACCOUNT_NAME)],
|
|
70
71
|
nodes=nodes,
|
|
71
72
|
runs=runs,
|
|
@@ -536,9 +536,10 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
|
536
536
|
|
|
537
537
|
# Get federations the account is a member of
|
|
538
538
|
federations = state.federation_manager.get_federations(flwr_aid=flwr_aid)
|
|
539
|
-
|
|
540
539
|
return ListFederationsResponse(
|
|
541
|
-
federations=[
|
|
540
|
+
federations=[
|
|
541
|
+
Federation(name=fed[0], description=fed[1]) for fed in federations
|
|
542
|
+
]
|
|
542
543
|
)
|
|
543
544
|
|
|
544
545
|
def ShowFederation(
|
|
@@ -558,7 +559,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
|
558
559
|
|
|
559
560
|
# Ensure flwr_aid is a member of the requested federation
|
|
560
561
|
federation = request.federation_name
|
|
561
|
-
if federation not in federations:
|
|
562
|
+
if federation not in [fed[0] for fed in federations]:
|
|
562
563
|
context.abort(
|
|
563
564
|
grpc.StatusCode.FAILED_PRECONDITION,
|
|
564
565
|
f"Federation '{federation}' does not exist or you are "
|
|
@@ -571,6 +572,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
|
571
572
|
# Build Federation proto object
|
|
572
573
|
federation_proto = Federation(
|
|
573
574
|
name=federation,
|
|
575
|
+
member_aids=[acc.id for acc in details.accounts], # Deprecated in v1.26.0
|
|
574
576
|
accounts=details.accounts,
|
|
575
577
|
nodes=details.nodes,
|
|
576
578
|
runs=[run_to_proto(run) for run in details.runs],
|
{flwr_nightly-1.26.0.dev20260202.dist-info → flwr_nightly-1.26.0.dev20260204.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.26.0.
|
|
3
|
+
Version: 1.26.0.dev20260204
|
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
|
{flwr_nightly-1.26.0.dev20260202.dist-info → flwr_nightly-1.26.0.dev20260204.dist-info}/RECORD
RENAMED
|
@@ -23,7 +23,7 @@ flwr/cli/config_utils.py,sha256=LNmbPODWefsEtt4ov63BFtuTcK1Pb8Z-AHt1_haWWdA,7841
|
|
|
23
23
|
flwr/cli/constant.py,sha256=MYLI7m9ntwWNkFgEEtKVo1JWX3umf_0EdqY8nJy-83Y,3525
|
|
24
24
|
flwr/cli/example.py,sha256=SNTorkKPrx1rOryGREUyZu8TcOc1-vFv1zEddaysdY0,2216
|
|
25
25
|
flwr/cli/federation/__init__.py,sha256=okxswL4fAjApI9gV_alU1lRkTUcQRbwlzvtUTLz61fE,793
|
|
26
|
-
flwr/cli/federation/ls.py,sha256=
|
|
26
|
+
flwr/cli/federation/ls.py,sha256=k3FyGrH_xh_OdHqw5oj1S5RTKm8ZBqxeA4m6fEEoQx8,10278
|
|
27
27
|
flwr/cli/flower_config.py,sha256=YQfuFGW52jf6EoAxWrXQYw6lmuH0j2qsZ0twHRLxx4k,15278
|
|
28
28
|
flwr/cli/install.py,sha256=AKjJxDr_kBJirpqMg_EemlP23CfH5UF3h5IjtJQ_xPs,9124
|
|
29
29
|
flwr/cli/log.py,sha256=BPA0dvGlXx5PrtURPua5fJyF7iVrb28K4fEY2Uth0EE,7317
|
|
@@ -42,7 +42,7 @@ flwr/cli/supernode/ls.py,sha256=mmpwIpwp5YZSdq3gDlv0h8QpKoMBgZWrMrvJm_ltiRw,7594
|
|
|
42
42
|
flwr/cli/supernode/register.py,sha256=HzgJ1Q8Mlx7oJE-2kRLbIX2OrQP7wM0IeywirLqyz9Y,4724
|
|
43
43
|
flwr/cli/supernode/unregister.py,sha256=ha8-oTXA4NW8xHLyQPHn-e0f7-9bF2QyjXxUD299O6s,2938
|
|
44
44
|
flwr/cli/typing.py,sha256=xGAIv9mAVzs6UXapzu4i8bQ-MckzHMSihtLcnu5SWGU,7562
|
|
45
|
-
flwr/cli/utils.py,sha256=
|
|
45
|
+
flwr/cli/utils.py,sha256=BTPz9p6X5_u6cZvr43pzfuT26t6XJnXPwUu-0Tp2yCk,17442
|
|
46
46
|
flwr/client/__init__.py,sha256=xwkPJfdeWxIIfmiPE5vnmnY_JbTlErP0Qs9eBP6qRFg,1252
|
|
47
47
|
flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
|
|
48
48
|
flwr/client/dpfedavg_numpy_client.py,sha256=ELDHyEJcTB-FlLhHC-JXy8HuB3ZFHfT0HL3g1VSWY5w,7451
|
|
@@ -119,7 +119,7 @@ flwr/common/secure_aggregation/secaggplus_utils.py,sha256=E_xU-Zd45daO1em7M6C2wO
|
|
|
119
119
|
flwr/common/serde.py,sha256=FqqJqNqCk-DryCOgTGkabENvFeU2Q0LieLe0bt3qBbU,22342
|
|
120
120
|
flwr/common/serde_utils.py,sha256=Vk49PnZWRgo0NrvBhFqH-Li7sMFVVgyrs3Ck7kHB-ZE,5820
|
|
121
121
|
flwr/common/telemetry.py,sha256=7HNy5ytioJ3SbFtaKNucwYYC-IXEOXphitZbdHmSlfk,8924
|
|
122
|
-
flwr/common/typing.py,sha256=
|
|
122
|
+
flwr/common/typing.py,sha256=5wBdrZ2VFDlerywQyI_WTgrgPcZ68YGamok79Tg8U60,7388
|
|
123
123
|
flwr/compat/__init__.py,sha256=gbfDQKKKMZzi3GswyVRgyLdDlHiWj3wU6dg7y6m5O_s,752
|
|
124
124
|
flwr/compat/client/__init__.py,sha256=qpbo0lcxdNL4qy5KHqiGm8OLxSxkYgI_-dLh5rwhtcI,746
|
|
125
125
|
flwr/compat/client/app.py,sha256=oBOB-gYm0oqxtfAp58QZtv3dyUsPxjFm__f1_teenHU,27178
|
|
@@ -151,8 +151,8 @@ flwr/proto/fab_pb2.py,sha256=QDkVHGRGmugjQQUiN8A_okppZ5e2pJi5KipjnWmF6e4,2320
|
|
|
151
151
|
flwr/proto/fab_pb2.pyi,sha256=PUUZ1FHeTwXxjVmTX14Vx5gmgRSFvoW_e5v_Z5qkT54,3948
|
|
152
152
|
flwr/proto/fab_pb2_grpc.py,sha256=jmhCnnwSqBpZ0329XGUGARbcz5sHrr0WrXwccqzc3Vs,895
|
|
153
153
|
flwr/proto/fab_pb2_grpc.pyi,sha256=fMwjLr-QCljWBa8uk0fvMCytnrF1-IzFLCbezqEmvdU,1071
|
|
154
|
-
flwr/proto/federation_pb2.py,sha256=
|
|
155
|
-
flwr/proto/federation_pb2.pyi,sha256=
|
|
154
|
+
flwr/proto/federation_pb2.py,sha256=strZ42K6S-50tuRVCqXqGcaLR6suXrGFT0SQOqNcpLQ,1974
|
|
155
|
+
flwr/proto/federation_pb2.pyi,sha256=mk1qfH85SURZWXGVpAzpPCgPTu3L4dlEefucG3lMyu8,3203
|
|
156
156
|
flwr/proto/federation_pb2_grpc.py,sha256=HPErt9uXJPbY8jLtTNFr941z82uMm7cOx10hTHgcwZM,902
|
|
157
157
|
flwr/proto/federation_pb2_grpc.pyi,sha256=fMwjLr-QCljWBa8uk0fvMCytnrF1-IzFLCbezqEmvdU,1071
|
|
158
158
|
flwr/proto/fleet_pb2.py,sha256=HnxtM2pqVdn2xhl3e1NlLazpSMaGoUUEG9Nd17egxqU,6543
|
|
@@ -183,18 +183,18 @@ flwr/proto/recorddict_pb2.py,sha256=L2mNSyIVWA2dcI1xWI3gj0nktuDHYgxbbLuVRQKVU74,
|
|
|
183
183
|
flwr/proto/recorddict_pb2.pyi,sha256=BYgVNk985Ww4dCXCjDGg1YU6q7MuMqbDa0usGVH3ktg,15208
|
|
184
184
|
flwr/proto/recorddict_pb2_grpc.py,sha256=kw9_kXNcRe3y6j6HquG1P1MqccFFAogfi48djxbOLDE,902
|
|
185
185
|
flwr/proto/recorddict_pb2_grpc.pyi,sha256=fMwjLr-QCljWBa8uk0fvMCytnrF1-IzFLCbezqEmvdU,1071
|
|
186
|
-
flwr/proto/run_pb2.py,sha256=
|
|
187
|
-
flwr/proto/run_pb2.pyi,sha256=
|
|
186
|
+
flwr/proto/run_pb2.py,sha256=0HsPXXNxKq0uefBY3gJOBvu9gQGZ-FhKaGhJiAwMKgU,4146
|
|
187
|
+
flwr/proto/run_pb2.pyi,sha256=m6YeVUE2LnljsF_1FTpJWpxPEKw8RB_X1HuRFvijHG0,8689
|
|
188
188
|
flwr/proto/run_pb2_grpc.py,sha256=l5u1Ww6JxVLVN784Z2OQbkQ-tAf5yYGh6QbNDc4F5II,895
|
|
189
189
|
flwr/proto/run_pb2_grpc.pyi,sha256=fMwjLr-QCljWBa8uk0fvMCytnrF1-IzFLCbezqEmvdU,1071
|
|
190
|
-
flwr/proto/serverappio_pb2.py,sha256=
|
|
190
|
+
flwr/proto/serverappio_pb2.py,sha256=Df4l7tMVEt4gIR_Vg9ttIMau6rDwU5NFJPZeRqCN4C4,3847
|
|
191
191
|
flwr/proto/serverappio_pb2.pyi,sha256=KpVM8B_O0M3RFJ-DtnNlQapJs4V-7pHcdEb2G3ECbhE,1998
|
|
192
|
-
flwr/proto/serverappio_pb2_grpc.py,sha256=
|
|
193
|
-
flwr/proto/serverappio_pb2_grpc.pyi,sha256=
|
|
194
|
-
flwr/proto/simulationio_pb2.py,sha256=
|
|
192
|
+
flwr/proto/serverappio_pb2_grpc.py,sha256=EVMV7JdjrTJhgg7NmcLdEGleBFZlYCNT_6ed1DZkuVo,28565
|
|
193
|
+
flwr/proto/serverappio_pb2_grpc.pyi,sha256=AHoGbatng1p72_epB9k3k5-gL8ENr8wtaUOm82ogvuM,14940
|
|
194
|
+
flwr/proto/simulationio_pb2.py,sha256=b7B2VXAwKcfgKPulDmOBQs0RvEWKnWbGuTwF4GvMnn8,2681
|
|
195
195
|
flwr/proto/simulationio_pb2.pyi,sha256=OsUGEduv1iJCew8C4cMz87Y5uQAhHDmxNyVfwA4kXd8,824
|
|
196
|
-
flwr/proto/simulationio_pb2_grpc.py,sha256=
|
|
197
|
-
flwr/proto/simulationio_pb2_grpc.pyi,sha256=
|
|
196
|
+
flwr/proto/simulationio_pb2_grpc.py,sha256=JVJ_u2RR64amAnacdH6op6eOW7CT0RAzZbRBfqPLBQk,19201
|
|
197
|
+
flwr/proto/simulationio_pb2_grpc.pyi,sha256=SHge7XK0FJoPsZzXBrVeagBUlmpRzMAiXDMaYkjB3eI,10614
|
|
198
198
|
flwr/proto/transport_pb2.py,sha256=xqDF2oI0PzAndH17O80SQkyOT_QF9m7CQ0166He7UDQ,10122
|
|
199
199
|
flwr/proto/transport_pb2.pyi,sha256=A-AzbyDAyp4hzJCuC6MOA1NewkFmtuhPwFCjPKqQP0Q,22450
|
|
200
200
|
flwr/proto/transport_pb2_grpc.py,sha256=jYsbV3KYdp4TaNfWxv3ljFEvB-Yjsa8MIPtTH-vVPPk,3600
|
|
@@ -276,10 +276,10 @@ flwr/server/superlink/linkstate/sql_linkstate.py,sha256=ziZvpEQBVV9GSxjHiS0fAyaY
|
|
|
276
276
|
flwr/server/superlink/linkstate/utils.py,sha256=IA1mKKhGVBPoD61VXKFa8dZ_prnfuyWIuKAeeHPLmuE,16000
|
|
277
277
|
flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
|
|
278
278
|
flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=2NFPynJMpYpT9C98Fr4n0QrTTjWBWbeUzlHcc6pg2kY,2279
|
|
279
|
-
flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=
|
|
279
|
+
flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=Ki2DGKbyhIxPXslP6YDhS0wdeBnKZ7T9zxh7qmXwH1Y,19021
|
|
280
280
|
flwr/server/superlink/simulation/__init__.py,sha256=Ry8DrNaZCMcQXvUc4FoCN2m3dvUQgWjasfp015o3Ec4,718
|
|
281
281
|
flwr/server/superlink/simulation/simulationio_grpc.py,sha256=fHFW8SOR4iyfBxQeYOXWwqUStGsv0P4EAIVkBk69BN4,2174
|
|
282
|
-
flwr/server/superlink/simulation/simulationio_servicer.py,sha256=
|
|
282
|
+
flwr/server/superlink/simulation/simulationio_servicer.py,sha256=QghTkyaNrSR41HMwQPtWAqhv6kWqdoj44tuto1K5x6A,9558
|
|
283
283
|
flwr/server/superlink/utils.py,sha256=pdeB9dm21e5D2Vuymme8069VWW5XuWZfi1LAm7nKjeQ,2400
|
|
284
284
|
flwr/server/typing.py,sha256=qr04ihK3cARvw2Cz64axwzbdCbLtK8R5DDtlh5kWXEU,1020
|
|
285
285
|
flwr/server/utils/__init__.py,sha256=U4gM84-uUFddarODDQkO6SjNUuGhFcsHJZMjSEbezkU,884
|
|
@@ -328,7 +328,7 @@ flwr/supercore/address.py,sha256=SgM_pazKsw1Avo5nms0WWgIZFUGS349O0gOP7N3bFW4,331
|
|
|
328
328
|
flwr/supercore/app_utils.py,sha256=P558DOr5a4UPyOdRCxbDQueQF-L-kSc6qzouPPuqj0U,1773
|
|
329
329
|
flwr/supercore/cli/__init__.py,sha256=EDl2aO-fuQfxSbL-T1W9RAfA2N0hpWHmqX_GSwblJbQ,845
|
|
330
330
|
flwr/supercore/cli/flower_superexec.py,sha256=IQIGzxgaeLNMNzGXGemfYK3lp8God5bTkXpVkbeP_ig,6109
|
|
331
|
-
flwr/supercore/constant.py,sha256=
|
|
331
|
+
flwr/supercore/constant.py,sha256=HSjxmgQsKC44EeaOZQ659DaZj8SDIEJ7XOGUKX122jU,3096
|
|
332
332
|
flwr/supercore/corestate/__init__.py,sha256=Vau6-L_JG5QzNqtCTa9xCKGGljc09wY8avZmIjSJemg,774
|
|
333
333
|
flwr/supercore/corestate/corestate.py,sha256=EZg4gPXqVOXwS7t0tlPfedajoWj5T80oeDBNxpV2y2I,2874
|
|
334
334
|
flwr/supercore/corestate/in_memory_corestate.py,sha256=9qa6RuRZfCp6vs-ARYdiZjCL31VOAAxw0a_VkBXR5zY,5116
|
|
@@ -351,7 +351,7 @@ flwr/supercore/object_store/__init__.py,sha256=cdfPAmjINY6iOp8oI_LdcVh2simg469Mk
|
|
|
351
351
|
flwr/supercore/object_store/in_memory_object_store.py,sha256=-DU6n1Ef3EmllHY9SzeXw57ftoU0mR_6or4NIDSZlcs,9322
|
|
352
352
|
flwr/supercore/object_store/object_store.py,sha256=XLo-xe258TmCel9dNLCJepFjXaQtEi0wBqzU9YsyJVg,5221
|
|
353
353
|
flwr/supercore/object_store/object_store_factory.py,sha256=RByhm8Ow6TxmklP1MTluaze3v5kw0O1CILrA7Y0nWMg,2604
|
|
354
|
-
flwr/supercore/object_store/sql_object_store.py,sha256=
|
|
354
|
+
flwr/supercore/object_store/sql_object_store.py,sha256=z0zqPNwkx7tay3vFJ2Bd1Ddv3nWXBB3zcK-LP8ZfsbI,10349
|
|
355
355
|
flwr/supercore/primitives/__init__.py,sha256=Tx8GOjnmMo8Y74RsDGrMpfr-E0Nl8dcUDF784_ge6F8,745
|
|
356
356
|
flwr/supercore/primitives/asymmetric.py,sha256=1643niHYj3uEbfPd06VuMHwN3tKVwg0uVyR3RhTdWIU,3778
|
|
357
357
|
flwr/supercore/primitives/asymmetric_ed25519.py,sha256=eIhOTMibQW0FJX4MXdplHdL3HcfCiKuFu2mQ8GQTUz8,5025
|
|
@@ -385,15 +385,15 @@ flwr/superlink/auth_plugin/__init__.py,sha256=ApYBHnDmtv5gVrnxdFq97zC58O1icqHogK
|
|
|
385
385
|
flwr/superlink/auth_plugin/auth_plugin.py,sha256=xLqAYFG7sjAhYgyeTvvEY6fSMjPRq0offmTDRYpIs78,2956
|
|
386
386
|
flwr/superlink/auth_plugin/noop_auth_plugin.py,sha256=0MWjNXZdz6zGRfitlnZfVKu4sKVn0HhJvnp09c3xVUA,2962
|
|
387
387
|
flwr/superlink/federation/__init__.py,sha256=A1pFFvkEQrHzvRAOstr2o7nphx3JbuJgkNRFKJ9qD3M,890
|
|
388
|
-
flwr/superlink/federation/federation_manager.py,sha256
|
|
389
|
-
flwr/superlink/federation/noop_federation_manager.py,sha256=
|
|
388
|
+
flwr/superlink/federation/federation_manager.py,sha256=vpVaW-WS-mGAazxh9fy9Xp3gLPQozRsUoJiloG5_tBI,2354
|
|
389
|
+
flwr/superlink/federation/noop_federation_manager.py,sha256=LuBDncifAvcn8KszumZBmsp7-9PIp_5iHiHoPLahlBE,3149
|
|
390
390
|
flwr/superlink/servicer/__init__.py,sha256=ZC-kILcUGeh6IxJsfu24cTzUqIGXmQfEKsGfhsnhBpM,717
|
|
391
391
|
flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5ya3617BT8kR-2Y,803
|
|
392
392
|
flwr/superlink/servicer/control/control_account_auth_interceptor.py,sha256=AJs7GE-fyUBLcUEUzB058TpFzC7gyDOL17THvYkJTn8,6529
|
|
393
393
|
flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=r9LjF5VkrE1sZIcml-sO2uOPAwpvr6dj4tFchqoDcR4,5965
|
|
394
394
|
flwr/superlink/servicer/control/control_grpc.py,sha256=AD7q2eo7RvXEhntcfVLgoKAR7AWfD_Z56Qw51wGLanY,4218
|
|
395
395
|
flwr/superlink/servicer/control/control_license_interceptor.py,sha256=8d28soJ0mLLhpSGCpuY2YzgbX0vVO7Sqe2DcApEgILc,3336
|
|
396
|
-
flwr/superlink/servicer/control/control_servicer.py,sha256=
|
|
396
|
+
flwr/superlink/servicer/control/control_servicer.py,sha256=7z4orYaoEO0Zm5JDtlvJ6TKBOO5cDy20ieloCZ0K8iU,25682
|
|
397
397
|
flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
|
|
398
398
|
flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
|
|
399
399
|
flwr/supernode/cli/flower_supernode.py,sha256=LhciYbUwUfvkR4hiHxizERhQzpqZOAG9d6qVm6-V4jY,10891
|
|
@@ -408,7 +408,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
|
|
|
408
408
|
flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
|
|
409
409
|
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=5TOp0SelGqiWzRHfhYpoKzUd7EuVTqt5_PXvnUy7_Ok,11615
|
|
410
410
|
flwr/supernode/start_client_internal.py,sha256=3MkeDiWZr-SsvACuuAxJi8nYw6GYNKOO6q8b36E3R9k,26250
|
|
411
|
-
flwr_nightly-1.26.0.
|
|
412
|
-
flwr_nightly-1.26.0.
|
|
413
|
-
flwr_nightly-1.26.0.
|
|
414
|
-
flwr_nightly-1.26.0.
|
|
411
|
+
flwr_nightly-1.26.0.dev20260204.dist-info/METADATA,sha256=e3WZONWWxLHHRCHLnL2DXp_JOdwVUs4HAK28LUNqSYE,14447
|
|
412
|
+
flwr_nightly-1.26.0.dev20260204.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
413
|
+
flwr_nightly-1.26.0.dev20260204.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
|
|
414
|
+
flwr_nightly-1.26.0.dev20260204.dist-info/RECORD,,
|
{flwr_nightly-1.26.0.dev20260202.dist-info → flwr_nightly-1.26.0.dev20260204.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|