flwr 1.22.0__py3-none-any.whl → 1.23.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flwr/cli/app.py +15 -1
- flwr/cli/auth_plugin/__init__.py +15 -6
- flwr/cli/auth_plugin/auth_plugin.py +95 -0
- flwr/cli/auth_plugin/noop_auth_plugin.py +58 -0
- flwr/cli/auth_plugin/oidc_cli_plugin.py +16 -25
- flwr/cli/build.py +118 -47
- flwr/cli/{cli_user_auth_interceptor.py → cli_account_auth_interceptor.py} +6 -5
- flwr/cli/log.py +2 -2
- flwr/cli/login/login.py +34 -23
- flwr/cli/ls.py +13 -9
- flwr/cli/new/new.py +187 -35
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +1 -1
- flwr/cli/pull.py +2 -2
- flwr/cli/run/run.py +11 -7
- flwr/cli/stop.py +2 -2
- flwr/cli/supernode/__init__.py +25 -0
- flwr/cli/supernode/ls.py +260 -0
- flwr/cli/supernode/register.py +185 -0
- flwr/cli/supernode/unregister.py +138 -0
- flwr/cli/utils.py +92 -69
- flwr/client/__init__.py +2 -1
- flwr/client/grpc_adapter_client/connection.py +6 -8
- flwr/client/grpc_rere_client/connection.py +59 -31
- flwr/client/grpc_rere_client/grpc_adapter.py +28 -12
- flwr/client/grpc_rere_client/{client_interceptor.py → node_auth_client_interceptor.py} +3 -6
- flwr/client/mod/secure_aggregation/secaggplus_mod.py +7 -5
- flwr/client/rest_client/connection.py +82 -37
- flwr/clientapp/__init__.py +1 -2
- flwr/{client/clientapp → clientapp}/utils.py +1 -1
- flwr/common/constant.py +53 -13
- flwr/common/exit/exit_code.py +20 -10
- flwr/common/inflatable_utils.py +10 -10
- flwr/common/record/array.py +3 -3
- flwr/common/record/arrayrecord.py +10 -1
- flwr/common/secure_aggregation/crypto/symmetric_encryption.py +1 -89
- flwr/common/serde.py +4 -2
- flwr/common/typing.py +7 -6
- flwr/compat/client/app.py +1 -1
- flwr/compat/client/grpc_client/connection.py +2 -2
- flwr/proto/control_pb2.py +48 -35
- flwr/proto/control_pb2.pyi +71 -5
- flwr/proto/control_pb2_grpc.py +102 -0
- flwr/proto/control_pb2_grpc.pyi +39 -0
- flwr/proto/fab_pb2.py +11 -7
- flwr/proto/fab_pb2.pyi +21 -1
- flwr/proto/fleet_pb2.py +31 -23
- flwr/proto/fleet_pb2.pyi +63 -23
- flwr/proto/fleet_pb2_grpc.py +98 -28
- flwr/proto/fleet_pb2_grpc.pyi +45 -13
- flwr/proto/node_pb2.py +3 -1
- flwr/proto/node_pb2.pyi +48 -0
- flwr/server/app.py +139 -114
- flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +17 -7
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +132 -38
- flwr/server/superlink/fleet/grpc_rere/{server_interceptor.py → node_auth_server_interceptor.py} +27 -51
- flwr/server/superlink/fleet/message_handler/message_handler.py +67 -22
- flwr/server/superlink/fleet/rest_rere/rest_api.py +52 -31
- flwr/server/superlink/fleet/vce/backend/backend.py +1 -1
- flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -1
- flwr/server/superlink/fleet/vce/vce_api.py +18 -5
- flwr/server/superlink/linkstate/in_memory_linkstate.py +167 -73
- flwr/server/superlink/linkstate/linkstate.py +107 -24
- flwr/server/superlink/linkstate/linkstate_factory.py +2 -1
- flwr/server/superlink/linkstate/sqlite_linkstate.py +306 -255
- flwr/server/superlink/linkstate/utils.py +3 -54
- flwr/server/superlink/serverappio/serverappio_servicer.py +2 -2
- flwr/server/superlink/simulation/simulationio_servicer.py +1 -1
- flwr/server/utils/validator.py +2 -3
- flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +4 -2
- flwr/simulation/ray_transport/ray_actor.py +1 -1
- flwr/simulation/ray_transport/ray_client_proxy.py +1 -1
- flwr/simulation/run_simulation.py +3 -2
- flwr/supercore/constant.py +22 -0
- flwr/supercore/object_store/in_memory_object_store.py +0 -4
- flwr/supercore/object_store/object_store_factory.py +26 -6
- flwr/supercore/object_store/sqlite_object_store.py +252 -0
- flwr/{client/clientapp → supercore/primitives}/__init__.py +1 -1
- flwr/supercore/primitives/asymmetric.py +117 -0
- flwr/supercore/primitives/asymmetric_ed25519.py +165 -0
- flwr/supercore/sqlite_mixin.py +156 -0
- flwr/supercore/utils.py +20 -0
- flwr/{common → superlink}/auth_plugin/__init__.py +6 -6
- flwr/superlink/auth_plugin/auth_plugin.py +91 -0
- flwr/superlink/auth_plugin/noop_auth_plugin.py +87 -0
- flwr/superlink/servicer/control/{control_user_auth_interceptor.py → control_account_auth_interceptor.py} +19 -19
- flwr/superlink/servicer/control/control_event_log_interceptor.py +1 -1
- flwr/superlink/servicer/control/control_grpc.py +13 -11
- flwr/superlink/servicer/control/control_servicer.py +152 -60
- flwr/supernode/cli/flower_supernode.py +19 -26
- flwr/supernode/runtime/run_clientapp.py +2 -2
- flwr/supernode/servicer/clientappio/clientappio_servicer.py +1 -1
- flwr/supernode/start_client_internal.py +17 -9
- {flwr-1.22.0.dist-info → flwr-1.23.0.dist-info}/METADATA +1 -1
- {flwr-1.22.0.dist-info → flwr-1.23.0.dist-info}/RECORD +107 -96
- flwr/common/auth_plugin/auth_plugin.py +0 -149
- /flwr/{client → clientapp}/client_app.py +0 -0
- {flwr-1.22.0.dist-info → flwr-1.23.0.dist-info}/WHEEL +0 -0
- {flwr-1.22.0.dist-info → flwr-1.23.0.dist-info}/entry_points.txt +0 -0
flwr/common/serde.py
CHANGED
|
@@ -501,12 +501,14 @@ def recorddict_from_proto(recorddict_proto: ProtoRecordDict) -> RecordDict:
|
|
|
501
501
|
|
|
502
502
|
def fab_to_proto(fab: typing.Fab) -> ProtoFab:
|
|
503
503
|
"""Create a proto Fab object from a Python Fab."""
|
|
504
|
-
return ProtoFab(
|
|
504
|
+
return ProtoFab(
|
|
505
|
+
hash_str=fab.hash_str, content=fab.content, verifications=fab.verifications
|
|
506
|
+
)
|
|
505
507
|
|
|
506
508
|
|
|
507
509
|
def fab_from_proto(fab: ProtoFab) -> typing.Fab:
|
|
508
510
|
"""Create a Python Fab object from a proto Fab."""
|
|
509
|
-
return typing.Fab(fab.hash_str, fab.content)
|
|
511
|
+
return typing.Fab(fab.hash_str, fab.content, dict(fab.verifications))
|
|
510
512
|
|
|
511
513
|
|
|
512
514
|
# === User configs ===
|
flwr/common/typing.py
CHANGED
|
@@ -256,6 +256,7 @@ class Fab:
|
|
|
256
256
|
|
|
257
257
|
hash_str: str
|
|
258
258
|
content: bytes
|
|
259
|
+
verifications: dict[str, str]
|
|
259
260
|
|
|
260
261
|
|
|
261
262
|
class RunNotRunningException(BaseException):
|
|
@@ -270,12 +271,12 @@ class InvalidRunStatusException(BaseException):
|
|
|
270
271
|
self.message = message
|
|
271
272
|
|
|
272
273
|
|
|
273
|
-
# OIDC
|
|
274
|
+
# OIDC account authentication types
|
|
274
275
|
@dataclass
|
|
275
|
-
class
|
|
276
|
-
"""
|
|
276
|
+
class AccountAuthLoginDetails:
|
|
277
|
+
"""Account authentication login details."""
|
|
277
278
|
|
|
278
|
-
|
|
279
|
+
authn_type: str
|
|
279
280
|
device_code: str
|
|
280
281
|
verification_uri_complete: str
|
|
281
282
|
expires_in: int
|
|
@@ -283,8 +284,8 @@ class UserAuthLoginDetails:
|
|
|
283
284
|
|
|
284
285
|
|
|
285
286
|
@dataclass
|
|
286
|
-
class
|
|
287
|
-
"""
|
|
287
|
+
class AccountAuthCredentials:
|
|
288
|
+
"""Account authentication tokens."""
|
|
288
289
|
|
|
289
290
|
access_token: str
|
|
290
291
|
refresh_token: str
|
flwr/compat/client/app.py
CHANGED
|
@@ -28,11 +28,11 @@ from flwr.app.error import Error
|
|
|
28
28
|
from flwr.cli.config_utils import get_fab_metadata
|
|
29
29
|
from flwr.cli.install import install_from_fab
|
|
30
30
|
from flwr.client.client import Client
|
|
31
|
-
from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
32
31
|
from flwr.client.message_handler.message_handler import handle_control_message
|
|
33
32
|
from flwr.client.numpy_client import NumPyClient
|
|
34
33
|
from flwr.client.run_info_store import DeprecatedRunInfoStore
|
|
35
34
|
from flwr.client.typing import ClientFnExt
|
|
35
|
+
from flwr.clientapp.client_app import ClientApp, LoadClientAppError
|
|
36
36
|
from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, event
|
|
37
37
|
from flwr.common.address import parse_address
|
|
38
38
|
from flwr.common.constant import (
|
|
@@ -96,7 +96,7 @@ def grpc_connection( # pylint: disable=R0913,R0915,too-many-positional-argument
|
|
|
96
96
|
If provided, a secure connection using the certificates will be
|
|
97
97
|
established to an SSL-enabled Flower server.
|
|
98
98
|
authentication_keys : Optional[Tuple[PrivateKey, PublicKey]] (default: None)
|
|
99
|
-
|
|
99
|
+
SuperNode authentication is not supported for this transport type.
|
|
100
100
|
|
|
101
101
|
Returns
|
|
102
102
|
-------
|
|
@@ -120,7 +120,7 @@ def grpc_connection( # pylint: disable=R0913,R0915,too-many-positional-argument
|
|
|
120
120
|
if isinstance(root_certificates, str):
|
|
121
121
|
root_certificates = Path(root_certificates).read_bytes()
|
|
122
122
|
if authentication_keys is not None:
|
|
123
|
-
log(ERROR, "
|
|
123
|
+
log(ERROR, "SuperNode authentication is not supported for this transport type.")
|
|
124
124
|
|
|
125
125
|
channel = create_channel(
|
|
126
126
|
server_address=server_address,
|
flwr/proto/control_pb2.py
CHANGED
|
@@ -16,9 +16,10 @@ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
|
16
16
|
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
17
17
|
from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
|
|
18
18
|
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
19
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
19
20
|
|
|
20
21
|
|
|
21
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/control.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x14\x66lwr/proto/run.proto\"\
|
|
22
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/control.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"\x8a\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x18.flwr.proto.ConfigRecord\x12\x0e\n\x06\x61pp_id\x18\x04 \x01(\t\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\"2\n\x10StartRunResponse\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\"1\n\x0fListRunsRequest\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"\x9d\x01\n\x10ListRunsResponse\x12;\n\x08run_dict\x18\x01 \x03(\x0b\x32).flwr.proto.ListRunsResponse.RunDictEntry\x12\x0b\n\x03now\x18\x02 \x01(\t\x1a?\n\x0cRunDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run:\x02\x38\x01\"\x18\n\x16GetLoginDetailsRequest\"\x8b\x01\n\x17GetLoginDetailsResponse\x12\x12\n\nauthn_type\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65vice_code\x18\x02 \x01(\t\x12!\n\x19verification_uri_complete\x18\x03 \x01(\t\x12\x12\n\nexpires_in\x18\x04 \x01(\x03\x12\x10\n\x08interval\x18\x05 \x01(\x03\"+\n\x14GetAuthTokensRequest\x12\x13\n\x0b\x64\x65vice_code\x18\x01 \x01(\t\"D\n\x15GetAuthTokensResponse\x12\x14\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\t\x12\x15\n\rrefresh_token\x18\x02 \x01(\t\" \n\x0eStopRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\"\n\x0fStopRunResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"&\n\x14PullArtifactsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"1\n\x15PullArtifactsResponse\x12\x10\n\x03url\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x06\n\x04_url\")\n\x13RegisterNodeRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\"8\n\x14RegisterNodeResponse\x12\x14\n\x07node_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_node_id\"(\n\x15UnregisterNodeRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x18\n\x16UnregisterNodeResponse\"\x12\n\x10ListNodesRequest\"J\n\x11ListNodesResponse\x12(\n\nnodes_info\x18\x01 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x0b\n\x03now\x18\x02 \x01(\t2\xbc\x06\n\x07\x43ontrol\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12\x44\n\x07StopRun\x12\x1a.flwr.proto.StopRunRequest\x1a\x1b.flwr.proto.StopRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x12G\n\x08ListRuns\x12\x1b.flwr.proto.ListRunsRequest\x1a\x1c.flwr.proto.ListRunsResponse\"\x00\x12\\\n\x0fGetLoginDetails\x12\".flwr.proto.GetLoginDetailsRequest\x1a#.flwr.proto.GetLoginDetailsResponse\"\x00\x12V\n\rGetAuthTokens\x12 .flwr.proto.GetAuthTokensRequest\x1a!.flwr.proto.GetAuthTokensResponse\"\x00\x12V\n\rPullArtifacts\x12 .flwr.proto.PullArtifactsRequest\x1a!.flwr.proto.PullArtifactsResponse\"\x00\x12S\n\x0cRegisterNode\x12\x1f.flwr.proto.RegisterNodeRequest\x1a .flwr.proto.RegisterNodeResponse\"\x00\x12Y\n\x0eUnregisterNode\x12!.flwr.proto.UnregisterNodeRequest\x1a\".flwr.proto.UnregisterNodeResponse\"\x00\x12J\n\tListNodes\x12\x1c.flwr.proto.ListNodesRequest\x1a\x1d.flwr.proto.ListNodesResponse\"\x00\x62\x06proto3')
|
|
22
23
|
|
|
23
24
|
_globals = globals()
|
|
24
25
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -29,38 +30,50 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
29
30
|
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
30
31
|
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._options = None
|
|
31
32
|
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_options = b'8\001'
|
|
32
|
-
_globals['_STARTRUNREQUEST']._serialized_start=
|
|
33
|
-
_globals['_STARTRUNREQUEST']._serialized_end=
|
|
34
|
-
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=
|
|
35
|
-
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=
|
|
36
|
-
_globals['_STARTRUNRESPONSE']._serialized_start=
|
|
37
|
-
_globals['_STARTRUNRESPONSE']._serialized_end=
|
|
38
|
-
_globals['_STREAMLOGSREQUEST']._serialized_start=
|
|
39
|
-
_globals['_STREAMLOGSREQUEST']._serialized_end=
|
|
40
|
-
_globals['_STREAMLOGSRESPONSE']._serialized_start=
|
|
41
|
-
_globals['_STREAMLOGSRESPONSE']._serialized_end=
|
|
42
|
-
_globals['_LISTRUNSREQUEST']._serialized_start=
|
|
43
|
-
_globals['_LISTRUNSREQUEST']._serialized_end=
|
|
44
|
-
_globals['_LISTRUNSRESPONSE']._serialized_start=
|
|
45
|
-
_globals['_LISTRUNSRESPONSE']._serialized_end=
|
|
46
|
-
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_start=
|
|
47
|
-
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_end=
|
|
48
|
-
_globals['_GETLOGINDETAILSREQUEST']._serialized_start=
|
|
49
|
-
_globals['_GETLOGINDETAILSREQUEST']._serialized_end=
|
|
50
|
-
_globals['_GETLOGINDETAILSRESPONSE']._serialized_start=
|
|
51
|
-
_globals['_GETLOGINDETAILSRESPONSE']._serialized_end=
|
|
52
|
-
_globals['_GETAUTHTOKENSREQUEST']._serialized_start=
|
|
53
|
-
_globals['_GETAUTHTOKENSREQUEST']._serialized_end=
|
|
54
|
-
_globals['_GETAUTHTOKENSRESPONSE']._serialized_start=
|
|
55
|
-
_globals['_GETAUTHTOKENSRESPONSE']._serialized_end=
|
|
56
|
-
_globals['_STOPRUNREQUEST']._serialized_start=
|
|
57
|
-
_globals['_STOPRUNREQUEST']._serialized_end=
|
|
58
|
-
_globals['_STOPRUNRESPONSE']._serialized_start=
|
|
59
|
-
_globals['_STOPRUNRESPONSE']._serialized_end=
|
|
60
|
-
_globals['_PULLARTIFACTSREQUEST']._serialized_start=
|
|
61
|
-
_globals['_PULLARTIFACTSREQUEST']._serialized_end=
|
|
62
|
-
_globals['_PULLARTIFACTSRESPONSE']._serialized_start=
|
|
63
|
-
_globals['_PULLARTIFACTSRESPONSE']._serialized_end=
|
|
64
|
-
_globals['
|
|
65
|
-
_globals['
|
|
33
|
+
_globals['_STARTRUNREQUEST']._serialized_start=165
|
|
34
|
+
_globals['_STARTRUNREQUEST']._serialized_end=431
|
|
35
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=358
|
|
36
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=431
|
|
37
|
+
_globals['_STARTRUNRESPONSE']._serialized_start=433
|
|
38
|
+
_globals['_STARTRUNRESPONSE']._serialized_end=483
|
|
39
|
+
_globals['_STREAMLOGSREQUEST']._serialized_start=485
|
|
40
|
+
_globals['_STREAMLOGSREQUEST']._serialized_end=545
|
|
41
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_start=547
|
|
42
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_end=613
|
|
43
|
+
_globals['_LISTRUNSREQUEST']._serialized_start=615
|
|
44
|
+
_globals['_LISTRUNSREQUEST']._serialized_end=664
|
|
45
|
+
_globals['_LISTRUNSRESPONSE']._serialized_start=667
|
|
46
|
+
_globals['_LISTRUNSRESPONSE']._serialized_end=824
|
|
47
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_start=761
|
|
48
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_end=824
|
|
49
|
+
_globals['_GETLOGINDETAILSREQUEST']._serialized_start=826
|
|
50
|
+
_globals['_GETLOGINDETAILSREQUEST']._serialized_end=850
|
|
51
|
+
_globals['_GETLOGINDETAILSRESPONSE']._serialized_start=853
|
|
52
|
+
_globals['_GETLOGINDETAILSRESPONSE']._serialized_end=992
|
|
53
|
+
_globals['_GETAUTHTOKENSREQUEST']._serialized_start=994
|
|
54
|
+
_globals['_GETAUTHTOKENSREQUEST']._serialized_end=1037
|
|
55
|
+
_globals['_GETAUTHTOKENSRESPONSE']._serialized_start=1039
|
|
56
|
+
_globals['_GETAUTHTOKENSRESPONSE']._serialized_end=1107
|
|
57
|
+
_globals['_STOPRUNREQUEST']._serialized_start=1109
|
|
58
|
+
_globals['_STOPRUNREQUEST']._serialized_end=1141
|
|
59
|
+
_globals['_STOPRUNRESPONSE']._serialized_start=1143
|
|
60
|
+
_globals['_STOPRUNRESPONSE']._serialized_end=1177
|
|
61
|
+
_globals['_PULLARTIFACTSREQUEST']._serialized_start=1179
|
|
62
|
+
_globals['_PULLARTIFACTSREQUEST']._serialized_end=1217
|
|
63
|
+
_globals['_PULLARTIFACTSRESPONSE']._serialized_start=1219
|
|
64
|
+
_globals['_PULLARTIFACTSRESPONSE']._serialized_end=1268
|
|
65
|
+
_globals['_REGISTERNODEREQUEST']._serialized_start=1270
|
|
66
|
+
_globals['_REGISTERNODEREQUEST']._serialized_end=1311
|
|
67
|
+
_globals['_REGISTERNODERESPONSE']._serialized_start=1313
|
|
68
|
+
_globals['_REGISTERNODERESPONSE']._serialized_end=1369
|
|
69
|
+
_globals['_UNREGISTERNODEREQUEST']._serialized_start=1371
|
|
70
|
+
_globals['_UNREGISTERNODEREQUEST']._serialized_end=1411
|
|
71
|
+
_globals['_UNREGISTERNODERESPONSE']._serialized_start=1413
|
|
72
|
+
_globals['_UNREGISTERNODERESPONSE']._serialized_end=1437
|
|
73
|
+
_globals['_LISTNODESREQUEST']._serialized_start=1439
|
|
74
|
+
_globals['_LISTNODESREQUEST']._serialized_end=1457
|
|
75
|
+
_globals['_LISTNODESRESPONSE']._serialized_start=1459
|
|
76
|
+
_globals['_LISTNODESRESPONSE']._serialized_end=1533
|
|
77
|
+
_globals['_CONTROL']._serialized_start=1536
|
|
78
|
+
_globals['_CONTROL']._serialized_end=2364
|
|
66
79
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/control_pb2.pyi
CHANGED
|
@@ -4,6 +4,7 @@ isort:skip_file
|
|
|
4
4
|
"""
|
|
5
5
|
import builtins
|
|
6
6
|
import flwr.proto.fab_pb2
|
|
7
|
+
import flwr.proto.node_pb2
|
|
7
8
|
import flwr.proto.recorddict_pb2
|
|
8
9
|
import flwr.proto.run_pb2
|
|
9
10
|
import flwr.proto.transport_pb2
|
|
@@ -35,20 +36,23 @@ class StartRunRequest(google.protobuf.message.Message):
|
|
|
35
36
|
FAB_FIELD_NUMBER: builtins.int
|
|
36
37
|
OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
|
|
37
38
|
FEDERATION_OPTIONS_FIELD_NUMBER: builtins.int
|
|
39
|
+
APP_ID_FIELD_NUMBER: builtins.int
|
|
38
40
|
@property
|
|
39
41
|
def fab(self) -> flwr.proto.fab_pb2.Fab: ...
|
|
40
42
|
@property
|
|
41
43
|
def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
42
44
|
@property
|
|
43
45
|
def federation_options(self) -> flwr.proto.recorddict_pb2.ConfigRecord: ...
|
|
46
|
+
app_id: typing.Text
|
|
44
47
|
def __init__(self,
|
|
45
48
|
*,
|
|
46
49
|
fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
|
|
47
50
|
override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
48
51
|
federation_options: typing.Optional[flwr.proto.recorddict_pb2.ConfigRecord] = ...,
|
|
52
|
+
app_id: typing.Text = ...,
|
|
49
53
|
) -> None: ...
|
|
50
54
|
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options"]) -> builtins.bool: ...
|
|
51
|
-
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options","override_config",b"override_config"]) -> None: ...
|
|
55
|
+
def ClearField(self, field_name: typing_extensions.Literal["app_id",b"app_id","fab",b"fab","federation_options",b"federation_options","override_config",b"override_config"]) -> None: ...
|
|
52
56
|
global___StartRunRequest = StartRunRequest
|
|
53
57
|
|
|
54
58
|
class StartRunResponse(google.protobuf.message.Message):
|
|
@@ -143,25 +147,25 @@ global___GetLoginDetailsRequest = GetLoginDetailsRequest
|
|
|
143
147
|
|
|
144
148
|
class GetLoginDetailsResponse(google.protobuf.message.Message):
|
|
145
149
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
146
|
-
|
|
150
|
+
AUTHN_TYPE_FIELD_NUMBER: builtins.int
|
|
147
151
|
DEVICE_CODE_FIELD_NUMBER: builtins.int
|
|
148
152
|
VERIFICATION_URI_COMPLETE_FIELD_NUMBER: builtins.int
|
|
149
153
|
EXPIRES_IN_FIELD_NUMBER: builtins.int
|
|
150
154
|
INTERVAL_FIELD_NUMBER: builtins.int
|
|
151
|
-
|
|
155
|
+
authn_type: typing.Text
|
|
152
156
|
device_code: typing.Text
|
|
153
157
|
verification_uri_complete: typing.Text
|
|
154
158
|
expires_in: builtins.int
|
|
155
159
|
interval: builtins.int
|
|
156
160
|
def __init__(self,
|
|
157
161
|
*,
|
|
158
|
-
|
|
162
|
+
authn_type: typing.Text = ...,
|
|
159
163
|
device_code: typing.Text = ...,
|
|
160
164
|
verification_uri_complete: typing.Text = ...,
|
|
161
165
|
expires_in: builtins.int = ...,
|
|
162
166
|
interval: builtins.int = ...,
|
|
163
167
|
) -> None: ...
|
|
164
|
-
def ClearField(self, field_name: typing_extensions.Literal["
|
|
168
|
+
def ClearField(self, field_name: typing_extensions.Literal["authn_type",b"authn_type","device_code",b"device_code","expires_in",b"expires_in","interval",b"interval","verification_uri_complete",b"verification_uri_complete"]) -> None: ...
|
|
165
169
|
global___GetLoginDetailsResponse = GetLoginDetailsResponse
|
|
166
170
|
|
|
167
171
|
class GetAuthTokensRequest(google.protobuf.message.Message):
|
|
@@ -234,3 +238,65 @@ class PullArtifactsResponse(google.protobuf.message.Message):
|
|
|
234
238
|
def ClearField(self, field_name: typing_extensions.Literal["_url",b"_url","url",b"url"]) -> None: ...
|
|
235
239
|
def WhichOneof(self, oneof_group: typing_extensions.Literal["_url",b"_url"]) -> typing.Optional[typing_extensions.Literal["url"]]: ...
|
|
236
240
|
global___PullArtifactsResponse = PullArtifactsResponse
|
|
241
|
+
|
|
242
|
+
class RegisterNodeRequest(google.protobuf.message.Message):
|
|
243
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
244
|
+
PUBLIC_KEY_FIELD_NUMBER: builtins.int
|
|
245
|
+
public_key: builtins.bytes
|
|
246
|
+
def __init__(self,
|
|
247
|
+
*,
|
|
248
|
+
public_key: builtins.bytes = ...,
|
|
249
|
+
) -> None: ...
|
|
250
|
+
def ClearField(self, field_name: typing_extensions.Literal["public_key",b"public_key"]) -> None: ...
|
|
251
|
+
global___RegisterNodeRequest = RegisterNodeRequest
|
|
252
|
+
|
|
253
|
+
class RegisterNodeResponse(google.protobuf.message.Message):
|
|
254
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
255
|
+
NODE_ID_FIELD_NUMBER: builtins.int
|
|
256
|
+
node_id: builtins.int
|
|
257
|
+
def __init__(self,
|
|
258
|
+
*,
|
|
259
|
+
node_id: typing.Optional[builtins.int] = ...,
|
|
260
|
+
) -> None: ...
|
|
261
|
+
def HasField(self, field_name: typing_extensions.Literal["_node_id",b"_node_id","node_id",b"node_id"]) -> builtins.bool: ...
|
|
262
|
+
def ClearField(self, field_name: typing_extensions.Literal["_node_id",b"_node_id","node_id",b"node_id"]) -> None: ...
|
|
263
|
+
def WhichOneof(self, oneof_group: typing_extensions.Literal["_node_id",b"_node_id"]) -> typing.Optional[typing_extensions.Literal["node_id"]]: ...
|
|
264
|
+
global___RegisterNodeResponse = RegisterNodeResponse
|
|
265
|
+
|
|
266
|
+
class UnregisterNodeRequest(google.protobuf.message.Message):
|
|
267
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
268
|
+
NODE_ID_FIELD_NUMBER: builtins.int
|
|
269
|
+
node_id: builtins.int
|
|
270
|
+
def __init__(self,
|
|
271
|
+
*,
|
|
272
|
+
node_id: builtins.int = ...,
|
|
273
|
+
) -> None: ...
|
|
274
|
+
def ClearField(self, field_name: typing_extensions.Literal["node_id",b"node_id"]) -> None: ...
|
|
275
|
+
global___UnregisterNodeRequest = UnregisterNodeRequest
|
|
276
|
+
|
|
277
|
+
class UnregisterNodeResponse(google.protobuf.message.Message):
|
|
278
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
279
|
+
def __init__(self,
|
|
280
|
+
) -> None: ...
|
|
281
|
+
global___UnregisterNodeResponse = UnregisterNodeResponse
|
|
282
|
+
|
|
283
|
+
class ListNodesRequest(google.protobuf.message.Message):
|
|
284
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
285
|
+
def __init__(self,
|
|
286
|
+
) -> None: ...
|
|
287
|
+
global___ListNodesRequest = ListNodesRequest
|
|
288
|
+
|
|
289
|
+
class ListNodesResponse(google.protobuf.message.Message):
|
|
290
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
291
|
+
NODES_INFO_FIELD_NUMBER: builtins.int
|
|
292
|
+
NOW_FIELD_NUMBER: builtins.int
|
|
293
|
+
@property
|
|
294
|
+
def nodes_info(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.node_pb2.NodeInfo]: ...
|
|
295
|
+
now: typing.Text
|
|
296
|
+
def __init__(self,
|
|
297
|
+
*,
|
|
298
|
+
nodes_info: typing.Optional[typing.Iterable[flwr.proto.node_pb2.NodeInfo]] = ...,
|
|
299
|
+
now: typing.Text = ...,
|
|
300
|
+
) -> None: ...
|
|
301
|
+
def ClearField(self, field_name: typing_extensions.Literal["nodes_info",b"nodes_info","now",b"now"]) -> None: ...
|
|
302
|
+
global___ListNodesResponse = ListNodesResponse
|
flwr/proto/control_pb2_grpc.py
CHANGED
|
@@ -49,6 +49,21 @@ class ControlStub(object):
|
|
|
49
49
|
request_serializer=flwr_dot_proto_dot_control__pb2.PullArtifactsRequest.SerializeToString,
|
|
50
50
|
response_deserializer=flwr_dot_proto_dot_control__pb2.PullArtifactsResponse.FromString,
|
|
51
51
|
)
|
|
52
|
+
self.RegisterNode = channel.unary_unary(
|
|
53
|
+
'/flwr.proto.Control/RegisterNode',
|
|
54
|
+
request_serializer=flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.SerializeToString,
|
|
55
|
+
response_deserializer=flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.FromString,
|
|
56
|
+
)
|
|
57
|
+
self.UnregisterNode = channel.unary_unary(
|
|
58
|
+
'/flwr.proto.Control/UnregisterNode',
|
|
59
|
+
request_serializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.SerializeToString,
|
|
60
|
+
response_deserializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.FromString,
|
|
61
|
+
)
|
|
62
|
+
self.ListNodes = channel.unary_unary(
|
|
63
|
+
'/flwr.proto.Control/ListNodes',
|
|
64
|
+
request_serializer=flwr_dot_proto_dot_control__pb2.ListNodesRequest.SerializeToString,
|
|
65
|
+
response_deserializer=flwr_dot_proto_dot_control__pb2.ListNodesResponse.FromString,
|
|
66
|
+
)
|
|
52
67
|
|
|
53
68
|
|
|
54
69
|
class ControlServicer(object):
|
|
@@ -103,6 +118,27 @@ class ControlServicer(object):
|
|
|
103
118
|
context.set_details('Method not implemented!')
|
|
104
119
|
raise NotImplementedError('Method not implemented!')
|
|
105
120
|
|
|
121
|
+
def RegisterNode(self, request, context):
|
|
122
|
+
"""Register SuperNode
|
|
123
|
+
"""
|
|
124
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
125
|
+
context.set_details('Method not implemented!')
|
|
126
|
+
raise NotImplementedError('Method not implemented!')
|
|
127
|
+
|
|
128
|
+
def UnregisterNode(self, request, context):
|
|
129
|
+
"""Unregister SuperNode
|
|
130
|
+
"""
|
|
131
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
132
|
+
context.set_details('Method not implemented!')
|
|
133
|
+
raise NotImplementedError('Method not implemented!')
|
|
134
|
+
|
|
135
|
+
def ListNodes(self, request, context):
|
|
136
|
+
"""List SuperNodes
|
|
137
|
+
"""
|
|
138
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
139
|
+
context.set_details('Method not implemented!')
|
|
140
|
+
raise NotImplementedError('Method not implemented!')
|
|
141
|
+
|
|
106
142
|
|
|
107
143
|
def add_ControlServicer_to_server(servicer, server):
|
|
108
144
|
rpc_method_handlers = {
|
|
@@ -141,6 +177,21 @@ def add_ControlServicer_to_server(servicer, server):
|
|
|
141
177
|
request_deserializer=flwr_dot_proto_dot_control__pb2.PullArtifactsRequest.FromString,
|
|
142
178
|
response_serializer=flwr_dot_proto_dot_control__pb2.PullArtifactsResponse.SerializeToString,
|
|
143
179
|
),
|
|
180
|
+
'RegisterNode': grpc.unary_unary_rpc_method_handler(
|
|
181
|
+
servicer.RegisterNode,
|
|
182
|
+
request_deserializer=flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.FromString,
|
|
183
|
+
response_serializer=flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.SerializeToString,
|
|
184
|
+
),
|
|
185
|
+
'UnregisterNode': grpc.unary_unary_rpc_method_handler(
|
|
186
|
+
servicer.UnregisterNode,
|
|
187
|
+
request_deserializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.FromString,
|
|
188
|
+
response_serializer=flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.SerializeToString,
|
|
189
|
+
),
|
|
190
|
+
'ListNodes': grpc.unary_unary_rpc_method_handler(
|
|
191
|
+
servicer.ListNodes,
|
|
192
|
+
request_deserializer=flwr_dot_proto_dot_control__pb2.ListNodesRequest.FromString,
|
|
193
|
+
response_serializer=flwr_dot_proto_dot_control__pb2.ListNodesResponse.SerializeToString,
|
|
194
|
+
),
|
|
144
195
|
}
|
|
145
196
|
generic_handler = grpc.method_handlers_generic_handler(
|
|
146
197
|
'flwr.proto.Control', rpc_method_handlers)
|
|
@@ -269,3 +320,54 @@ class Control(object):
|
|
|
269
320
|
flwr_dot_proto_dot_control__pb2.PullArtifactsResponse.FromString,
|
|
270
321
|
options, channel_credentials,
|
|
271
322
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
323
|
+
|
|
324
|
+
@staticmethod
|
|
325
|
+
def RegisterNode(request,
|
|
326
|
+
target,
|
|
327
|
+
options=(),
|
|
328
|
+
channel_credentials=None,
|
|
329
|
+
call_credentials=None,
|
|
330
|
+
insecure=False,
|
|
331
|
+
compression=None,
|
|
332
|
+
wait_for_ready=None,
|
|
333
|
+
timeout=None,
|
|
334
|
+
metadata=None):
|
|
335
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/RegisterNode',
|
|
336
|
+
flwr_dot_proto_dot_control__pb2.RegisterNodeRequest.SerializeToString,
|
|
337
|
+
flwr_dot_proto_dot_control__pb2.RegisterNodeResponse.FromString,
|
|
338
|
+
options, channel_credentials,
|
|
339
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
340
|
+
|
|
341
|
+
@staticmethod
|
|
342
|
+
def UnregisterNode(request,
|
|
343
|
+
target,
|
|
344
|
+
options=(),
|
|
345
|
+
channel_credentials=None,
|
|
346
|
+
call_credentials=None,
|
|
347
|
+
insecure=False,
|
|
348
|
+
compression=None,
|
|
349
|
+
wait_for_ready=None,
|
|
350
|
+
timeout=None,
|
|
351
|
+
metadata=None):
|
|
352
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/UnregisterNode',
|
|
353
|
+
flwr_dot_proto_dot_control__pb2.UnregisterNodeRequest.SerializeToString,
|
|
354
|
+
flwr_dot_proto_dot_control__pb2.UnregisterNodeResponse.FromString,
|
|
355
|
+
options, channel_credentials,
|
|
356
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
357
|
+
|
|
358
|
+
@staticmethod
|
|
359
|
+
def ListNodes(request,
|
|
360
|
+
target,
|
|
361
|
+
options=(),
|
|
362
|
+
channel_credentials=None,
|
|
363
|
+
call_credentials=None,
|
|
364
|
+
insecure=False,
|
|
365
|
+
compression=None,
|
|
366
|
+
wait_for_ready=None,
|
|
367
|
+
timeout=None,
|
|
368
|
+
metadata=None):
|
|
369
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Control/ListNodes',
|
|
370
|
+
flwr_dot_proto_dot_control__pb2.ListNodesRequest.SerializeToString,
|
|
371
|
+
flwr_dot_proto_dot_control__pb2.ListNodesResponse.FromString,
|
|
372
|
+
options, channel_credentials,
|
|
373
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
flwr/proto/control_pb2_grpc.pyi
CHANGED
|
@@ -44,6 +44,21 @@ class ControlStub:
|
|
|
44
44
|
flwr.proto.control_pb2.PullArtifactsResponse]
|
|
45
45
|
"""Pull artifacts generated during a run (flwr pull)"""
|
|
46
46
|
|
|
47
|
+
RegisterNode: grpc.UnaryUnaryMultiCallable[
|
|
48
|
+
flwr.proto.control_pb2.RegisterNodeRequest,
|
|
49
|
+
flwr.proto.control_pb2.RegisterNodeResponse]
|
|
50
|
+
"""Register SuperNode"""
|
|
51
|
+
|
|
52
|
+
UnregisterNode: grpc.UnaryUnaryMultiCallable[
|
|
53
|
+
flwr.proto.control_pb2.UnregisterNodeRequest,
|
|
54
|
+
flwr.proto.control_pb2.UnregisterNodeResponse]
|
|
55
|
+
"""Unregister SuperNode"""
|
|
56
|
+
|
|
57
|
+
ListNodes: grpc.UnaryUnaryMultiCallable[
|
|
58
|
+
flwr.proto.control_pb2.ListNodesRequest,
|
|
59
|
+
flwr.proto.control_pb2.ListNodesResponse]
|
|
60
|
+
"""List SuperNodes"""
|
|
61
|
+
|
|
47
62
|
|
|
48
63
|
class ControlServicer(metaclass=abc.ABCMeta):
|
|
49
64
|
@abc.abstractmethod
|
|
@@ -102,5 +117,29 @@ class ControlServicer(metaclass=abc.ABCMeta):
|
|
|
102
117
|
"""Pull artifacts generated during a run (flwr pull)"""
|
|
103
118
|
pass
|
|
104
119
|
|
|
120
|
+
@abc.abstractmethod
|
|
121
|
+
def RegisterNode(self,
|
|
122
|
+
request: flwr.proto.control_pb2.RegisterNodeRequest,
|
|
123
|
+
context: grpc.ServicerContext,
|
|
124
|
+
) -> flwr.proto.control_pb2.RegisterNodeResponse:
|
|
125
|
+
"""Register SuperNode"""
|
|
126
|
+
pass
|
|
127
|
+
|
|
128
|
+
@abc.abstractmethod
|
|
129
|
+
def UnregisterNode(self,
|
|
130
|
+
request: flwr.proto.control_pb2.UnregisterNodeRequest,
|
|
131
|
+
context: grpc.ServicerContext,
|
|
132
|
+
) -> flwr.proto.control_pb2.UnregisterNodeResponse:
|
|
133
|
+
"""Unregister SuperNode"""
|
|
134
|
+
pass
|
|
135
|
+
|
|
136
|
+
@abc.abstractmethod
|
|
137
|
+
def ListNodes(self,
|
|
138
|
+
request: flwr.proto.control_pb2.ListNodesRequest,
|
|
139
|
+
context: grpc.ServicerContext,
|
|
140
|
+
) -> flwr.proto.control_pb2.ListNodesResponse:
|
|
141
|
+
"""List SuperNodes"""
|
|
142
|
+
pass
|
|
143
|
+
|
|
105
144
|
|
|
106
145
|
def add_ControlServicer_to_server(servicer: ControlServicer, server: grpc.Server) -> None: ...
|
flwr/proto/fab_pb2.py
CHANGED
|
@@ -15,17 +15,21 @@ _sym_db = _symbol_database.Default()
|
|
|
15
15
|
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"\x99\x01\n\x03\x46\x61\x62\x12\x10\n\x08hash_str\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\x12\x39\n\rverifications\x18\x03 \x03(\x0b\x32\".flwr.proto.Fab.VerificationsEntry\x1a\x34\n\x12VerificationsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"Q\n\rGetFabRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08hash_str\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x04\".\n\x0eGetFabResponse\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fabb\x06proto3')
|
|
19
19
|
|
|
20
20
|
_globals = globals()
|
|
21
21
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
22
22
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fab_pb2', _globals)
|
|
23
23
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
24
24
|
DESCRIPTOR._options = None
|
|
25
|
-
_globals['
|
|
26
|
-
_globals['
|
|
27
|
-
_globals['
|
|
28
|
-
_globals['
|
|
29
|
-
_globals['
|
|
30
|
-
_globals['
|
|
25
|
+
_globals['_FAB_VERIFICATIONSENTRY']._options = None
|
|
26
|
+
_globals['_FAB_VERIFICATIONSENTRY']._serialized_options = b'8\001'
|
|
27
|
+
_globals['_FAB']._serialized_start=60
|
|
28
|
+
_globals['_FAB']._serialized_end=213
|
|
29
|
+
_globals['_FAB_VERIFICATIONSENTRY']._serialized_start=161
|
|
30
|
+
_globals['_FAB_VERIFICATIONSENTRY']._serialized_end=213
|
|
31
|
+
_globals['_GETFABREQUEST']._serialized_start=215
|
|
32
|
+
_globals['_GETFABREQUEST']._serialized_end=296
|
|
33
|
+
_globals['_GETFABRESPONSE']._serialized_start=298
|
|
34
|
+
_globals['_GETFABRESPONSE']._serialized_end=344
|
|
31
35
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/fab_pb2.pyi
CHANGED
|
@@ -5,6 +5,7 @@ isort:skip_file
|
|
|
5
5
|
import builtins
|
|
6
6
|
import flwr.proto.node_pb2
|
|
7
7
|
import google.protobuf.descriptor
|
|
8
|
+
import google.protobuf.internal.containers
|
|
8
9
|
import google.protobuf.message
|
|
9
10
|
import typing
|
|
10
11
|
import typing_extensions
|
|
@@ -13,8 +14,22 @@ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
|
13
14
|
|
|
14
15
|
class Fab(google.protobuf.message.Message):
|
|
15
16
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
17
|
+
class VerificationsEntry(google.protobuf.message.Message):
|
|
18
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
19
|
+
KEY_FIELD_NUMBER: builtins.int
|
|
20
|
+
VALUE_FIELD_NUMBER: builtins.int
|
|
21
|
+
key: typing.Text
|
|
22
|
+
value: typing.Text
|
|
23
|
+
def __init__(self,
|
|
24
|
+
*,
|
|
25
|
+
key: typing.Text = ...,
|
|
26
|
+
value: typing.Text = ...,
|
|
27
|
+
) -> None: ...
|
|
28
|
+
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
29
|
+
|
|
16
30
|
HASH_STR_FIELD_NUMBER: builtins.int
|
|
17
31
|
CONTENT_FIELD_NUMBER: builtins.int
|
|
32
|
+
VERIFICATIONS_FIELD_NUMBER: builtins.int
|
|
18
33
|
hash_str: typing.Text
|
|
19
34
|
"""This field is the hash of the data field. It is used to identify the data.
|
|
20
35
|
The hash is calculated using the SHA-256 algorithm and is represented as a
|
|
@@ -24,12 +39,17 @@ class Fab(google.protobuf.message.Message):
|
|
|
24
39
|
content: builtins.bytes
|
|
25
40
|
"""This field contains the fab file contents a one bytes blob."""
|
|
26
41
|
|
|
42
|
+
@property
|
|
43
|
+
def verifications(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, typing.Text]:
|
|
44
|
+
"""Verifications."""
|
|
45
|
+
pass
|
|
27
46
|
def __init__(self,
|
|
28
47
|
*,
|
|
29
48
|
hash_str: typing.Text = ...,
|
|
30
49
|
content: builtins.bytes = ...,
|
|
50
|
+
verifications: typing.Optional[typing.Mapping[typing.Text, typing.Text]] = ...,
|
|
31
51
|
) -> None: ...
|
|
32
|
-
def ClearField(self, field_name: typing_extensions.Literal["content",b"content","hash_str",b"hash_str"]) -> None: ...
|
|
52
|
+
def ClearField(self, field_name: typing_extensions.Literal["content",b"content","hash_str",b"hash_str","verifications",b"verifications"]) -> None: ...
|
|
33
53
|
global___Fab = Fab
|
|
34
54
|
|
|
35
55
|
class GetFabRequest(google.protobuf.message.Message):
|