flwr-nightly 1.13.0.dev20241028__py3-none-any.whl → 1.13.0.dev20241030__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.
Potentially problematic release.
This version of flwr-nightly might be problematic. Click here for more details.
- flwr/cli/build.py +2 -2
- flwr/cli/log.py +46 -17
- flwr/common/constant.py +6 -0
- flwr/common/date.py +3 -3
- flwr/common/logger.py +103 -0
- flwr/common/serde.py +22 -0
- flwr/proto/driver_pb2.py +24 -23
- flwr/proto/driver_pb2.pyi +0 -5
- flwr/proto/driver_pb2_grpc.py +69 -0
- flwr/proto/driver_pb2_grpc.pyi +27 -0
- flwr/proto/exec_pb2.py +6 -6
- flwr/proto/exec_pb2.pyi +8 -2
- flwr/proto/log_pb2.py +29 -0
- flwr/proto/log_pb2.pyi +39 -0
- flwr/proto/log_pb2_grpc.py +4 -0
- flwr/proto/log_pb2_grpc.pyi +4 -0
- flwr/server/app.py +1 -5
- flwr/server/driver/driver.py +14 -0
- flwr/server/driver/grpc_driver.py +8 -15
- flwr/server/driver/inmemory_driver.py +3 -11
- flwr/server/run_serverapp.py +3 -4
- flwr/server/serverapp/app.py +148 -18
- flwr/server/superlink/driver/driver_servicer.py +36 -9
- flwr/server/superlink/linkstate/in_memory_linkstate.py +28 -2
- flwr/server/superlink/linkstate/linkstate.py +35 -0
- flwr/server/superlink/linkstate/sqlite_linkstate.py +50 -0
- flwr/simulation/run_simulation.py +2 -1
- flwr/superexec/deployment.py +22 -40
- flwr/superexec/exec_servicer.py +23 -62
- flwr/superexec/executor.py +3 -4
- flwr/superexec/simulation.py +4 -7
- {flwr_nightly-1.13.0.dev20241028.dist-info → flwr_nightly-1.13.0.dev20241030.dist-info}/METADATA +1 -1
- {flwr_nightly-1.13.0.dev20241028.dist-info → flwr_nightly-1.13.0.dev20241030.dist-info}/RECORD +36 -32
- {flwr_nightly-1.13.0.dev20241028.dist-info → flwr_nightly-1.13.0.dev20241030.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241028.dist-info → flwr_nightly-1.13.0.dev20241030.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.13.0.dev20241028.dist-info → flwr_nightly-1.13.0.dev20241030.dist-info}/entry_points.txt +0 -0
flwr/cli/build.py
CHANGED
|
@@ -81,8 +81,8 @@ def build(
|
|
|
81
81
|
if not is_valid_project_name(app.name):
|
|
82
82
|
typer.secho(
|
|
83
83
|
f"❌ The project name {app.name} is invalid, "
|
|
84
|
-
"a valid project name must start with a letter
|
|
85
|
-
"and can only contain letters, digits, and
|
|
84
|
+
"a valid project name must start with a letter, "
|
|
85
|
+
"and can only contain letters, digits, and hyphens.",
|
|
86
86
|
fg=typer.colors.RED,
|
|
87
87
|
bold=True,
|
|
88
88
|
)
|
flwr/cli/log.py
CHANGED
|
@@ -18,29 +18,30 @@ import sys
|
|
|
18
18
|
import time
|
|
19
19
|
from logging import DEBUG, ERROR, INFO
|
|
20
20
|
from pathlib import Path
|
|
21
|
-
from typing import Annotated, Optional
|
|
21
|
+
from typing import Annotated, Optional, cast
|
|
22
22
|
|
|
23
23
|
import grpc
|
|
24
24
|
import typer
|
|
25
25
|
|
|
26
26
|
from flwr.cli.config_utils import load_and_validate
|
|
27
|
+
from flwr.common.constant import CONN_RECONNECT_INTERVAL, CONN_REFRESH_PERIOD
|
|
27
28
|
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
|
28
29
|
from flwr.common.logger import log as logger
|
|
29
30
|
from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
|
|
30
31
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
31
32
|
|
|
32
|
-
CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
|
|
33
|
-
|
|
34
33
|
|
|
35
34
|
def start_stream(
|
|
36
35
|
run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
|
|
37
36
|
) -> None:
|
|
38
37
|
"""Start log streaming for a given run ID."""
|
|
38
|
+
stub = ExecStub(channel)
|
|
39
|
+
after_timestamp = 0.0
|
|
39
40
|
try:
|
|
41
|
+
logger(INFO, "Starting logstream for run_id `%s`", run_id)
|
|
40
42
|
while True:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
time.sleep(2)
|
|
43
|
+
after_timestamp = stream_logs(run_id, stub, refresh_period, after_timestamp)
|
|
44
|
+
time.sleep(CONN_RECONNECT_INTERVAL)
|
|
44
45
|
logger(DEBUG, "Reconnecting to logstream")
|
|
45
46
|
except KeyboardInterrupt:
|
|
46
47
|
logger(INFO, "Exiting logstream")
|
|
@@ -54,16 +55,44 @@ def start_stream(
|
|
|
54
55
|
channel.close()
|
|
55
56
|
|
|
56
57
|
|
|
57
|
-
def stream_logs(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
def stream_logs(
|
|
59
|
+
run_id: int, stub: ExecStub, duration: int, after_timestamp: float
|
|
60
|
+
) -> float:
|
|
61
|
+
"""Stream logs from the beginning of a run with connection refresh.
|
|
62
|
+
|
|
63
|
+
Parameters
|
|
64
|
+
----------
|
|
65
|
+
run_id : int
|
|
66
|
+
The identifier of the run.
|
|
67
|
+
stub : ExecStub
|
|
68
|
+
The gRPC stub to interact with the Exec service.
|
|
69
|
+
duration : int
|
|
70
|
+
The timeout duration for each stream connection in seconds.
|
|
71
|
+
after_timestamp : float
|
|
72
|
+
The timestamp to start streaming logs from.
|
|
73
|
+
|
|
74
|
+
Returns
|
|
75
|
+
-------
|
|
76
|
+
float
|
|
77
|
+
The latest timestamp from the streamed logs or the provided `after_timestamp`
|
|
78
|
+
if no logs are returned.
|
|
79
|
+
"""
|
|
80
|
+
req = StreamLogsRequest(run_id=run_id, after_timestamp=after_timestamp)
|
|
81
|
+
|
|
82
|
+
latest_timestamp = 0.0
|
|
83
|
+
res = None
|
|
84
|
+
try:
|
|
85
|
+
for res in stub.StreamLogs(req, timeout=duration):
|
|
86
|
+
print(res.log_output, end="")
|
|
87
|
+
except grpc.RpcError as e:
|
|
88
|
+
# pylint: disable=E1101
|
|
89
|
+
if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED:
|
|
90
|
+
raise e
|
|
91
|
+
finally:
|
|
92
|
+
if res is not None:
|
|
93
|
+
latest_timestamp = cast(float, res.latest_timestamp)
|
|
62
94
|
|
|
63
|
-
|
|
64
|
-
print(res.log_output)
|
|
65
|
-
if time.time() - start_time > duration:
|
|
66
|
-
break
|
|
95
|
+
return max(latest_timestamp, after_timestamp)
|
|
67
96
|
|
|
68
97
|
|
|
69
98
|
def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
|
|
@@ -181,11 +210,11 @@ def log(
|
|
|
181
210
|
)
|
|
182
211
|
raise typer.Exit(code=1)
|
|
183
212
|
|
|
184
|
-
|
|
213
|
+
_log_with_exec_api(federation_config, run_id, stream)
|
|
185
214
|
|
|
186
215
|
|
|
187
216
|
# pylint: disable-next=too-many-branches
|
|
188
|
-
def
|
|
217
|
+
def _log_with_exec_api(
|
|
189
218
|
federation_config: dict[str, str],
|
|
190
219
|
run_id: int,
|
|
191
220
|
stream: bool,
|
flwr/common/constant.py
CHANGED
|
@@ -87,6 +87,12 @@ MESSAGE_TTL_TOLERANCE = 1e-1
|
|
|
87
87
|
ISOLATION_MODE_SUBPROCESS = "subprocess"
|
|
88
88
|
ISOLATION_MODE_PROCESS = "process"
|
|
89
89
|
|
|
90
|
+
# Log streaming configurations
|
|
91
|
+
CONN_REFRESH_PERIOD = 60 # Stream connection refresh period
|
|
92
|
+
CONN_RECONNECT_INTERVAL = 0.5 # Reconnect interval between two stream connections
|
|
93
|
+
LOG_STREAM_INTERVAL = 0.5 # Log stream interval for `ExecServicer.StreamLogs`
|
|
94
|
+
LOG_UPLOAD_INTERVAL = 0.2 # Minimum interval between two log uploads
|
|
95
|
+
|
|
90
96
|
|
|
91
97
|
class MessageType:
|
|
92
98
|
"""Message type."""
|
flwr/common/date.py
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"""Flower date utils."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
import datetime
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
def now() -> datetime:
|
|
21
|
+
def now() -> datetime.datetime:
|
|
22
22
|
"""Construct a datetime from time.time() with time zone set to UTC."""
|
|
23
|
-
return datetime.now(tz=timezone.utc)
|
|
23
|
+
return datetime.datetime.now(tz=datetime.timezone.utc)
|
flwr/common/logger.py
CHANGED
|
@@ -16,10 +16,22 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
import logging
|
|
19
|
+
import sys
|
|
20
|
+
import threading
|
|
21
|
+
import time
|
|
19
22
|
from logging import WARN, LogRecord
|
|
20
23
|
from logging.handlers import HTTPHandler
|
|
24
|
+
from queue import Empty, Queue
|
|
21
25
|
from typing import TYPE_CHECKING, Any, Optional, TextIO
|
|
22
26
|
|
|
27
|
+
import grpc
|
|
28
|
+
|
|
29
|
+
from flwr.proto.driver_pb2_grpc import DriverStub # pylint: disable=E0611
|
|
30
|
+
from flwr.proto.log_pb2 import PushLogsRequest # pylint: disable=E0611
|
|
31
|
+
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
|
32
|
+
|
|
33
|
+
from .constant import LOG_UPLOAD_INTERVAL
|
|
34
|
+
|
|
23
35
|
# Create logger
|
|
24
36
|
LOGGER_NAME = "flwr"
|
|
25
37
|
FLOWER_LOGGER = logging.getLogger(LOGGER_NAME)
|
|
@@ -259,3 +271,94 @@ def set_logger_propagation(
|
|
|
259
271
|
if not child_logger.propagate:
|
|
260
272
|
child_logger.log(logging.DEBUG, "Logger propagate set to False")
|
|
261
273
|
return child_logger
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def mirror_output_to_queue(log_queue: Queue[Optional[str]]) -> None:
|
|
277
|
+
"""Mirror stdout and stderr output to the provided queue."""
|
|
278
|
+
|
|
279
|
+
def get_write_fn(stream: TextIO) -> Any:
|
|
280
|
+
original_write = stream.write
|
|
281
|
+
|
|
282
|
+
def fn(s: str) -> int:
|
|
283
|
+
ret = original_write(s)
|
|
284
|
+
stream.flush()
|
|
285
|
+
log_queue.put(s)
|
|
286
|
+
return ret
|
|
287
|
+
|
|
288
|
+
return fn
|
|
289
|
+
|
|
290
|
+
sys.stdout.write = get_write_fn(sys.stdout) # type: ignore[method-assign]
|
|
291
|
+
sys.stderr.write = get_write_fn(sys.stderr) # type: ignore[method-assign]
|
|
292
|
+
console_handler.stream = sys.stdout
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def restore_output() -> None:
|
|
296
|
+
"""Restore stdout and stderr.
|
|
297
|
+
|
|
298
|
+
This will stop mirroring output to queues.
|
|
299
|
+
"""
|
|
300
|
+
sys.stdout = sys.__stdout__
|
|
301
|
+
sys.stderr = sys.__stderr__
|
|
302
|
+
console_handler.stream = sys.stdout
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def _log_uploader(
|
|
306
|
+
log_queue: Queue[Optional[str]], node_id: int, run_id: int, stub: DriverStub
|
|
307
|
+
) -> None:
|
|
308
|
+
"""Upload logs to the SuperLink."""
|
|
309
|
+
exit_flag = False
|
|
310
|
+
node = Node(node_id=node_id, anonymous=False)
|
|
311
|
+
msgs: list[str] = []
|
|
312
|
+
while True:
|
|
313
|
+
# Fetch all messages from the queue
|
|
314
|
+
try:
|
|
315
|
+
while True:
|
|
316
|
+
msg = log_queue.get_nowait()
|
|
317
|
+
# Quit the loops if the returned message is `None`
|
|
318
|
+
# This is a signal that the run has finished
|
|
319
|
+
if msg is None:
|
|
320
|
+
exit_flag = True
|
|
321
|
+
break
|
|
322
|
+
msgs.append(msg)
|
|
323
|
+
except Empty:
|
|
324
|
+
pass
|
|
325
|
+
|
|
326
|
+
# Upload if any logs
|
|
327
|
+
if msgs:
|
|
328
|
+
req = PushLogsRequest(
|
|
329
|
+
node=node,
|
|
330
|
+
run_id=run_id,
|
|
331
|
+
logs=msgs,
|
|
332
|
+
)
|
|
333
|
+
try:
|
|
334
|
+
stub.PushLogs(req)
|
|
335
|
+
msgs.clear()
|
|
336
|
+
except grpc.RpcError as e:
|
|
337
|
+
# Ignore minor network errors
|
|
338
|
+
# pylint: disable-next=no-member
|
|
339
|
+
if e.code() != grpc.StatusCode.UNAVAILABLE:
|
|
340
|
+
raise e
|
|
341
|
+
|
|
342
|
+
if exit_flag:
|
|
343
|
+
break
|
|
344
|
+
|
|
345
|
+
time.sleep(LOG_UPLOAD_INTERVAL)
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
def start_log_uploader(
|
|
349
|
+
log_queue: Queue[Optional[str]], node_id: int, run_id: int, stub: DriverStub
|
|
350
|
+
) -> threading.Thread:
|
|
351
|
+
"""Start the log uploader thread and return it."""
|
|
352
|
+
thread = threading.Thread(
|
|
353
|
+
target=_log_uploader, args=(log_queue, node_id, run_id, stub)
|
|
354
|
+
)
|
|
355
|
+
thread.start()
|
|
356
|
+
return thread
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def stop_log_uploader(
|
|
360
|
+
log_queue: Queue[Optional[str]], log_uploader: threading.Thread
|
|
361
|
+
) -> None:
|
|
362
|
+
"""Stop the log uploader thread."""
|
|
363
|
+
log_queue.put(None)
|
|
364
|
+
log_uploader.join()
|
flwr/common/serde.py
CHANGED
|
@@ -40,6 +40,7 @@ from flwr.proto.recordset_pb2 import ParametersRecord as ProtoParametersRecord
|
|
|
40
40
|
from flwr.proto.recordset_pb2 import RecordSet as ProtoRecordSet
|
|
41
41
|
from flwr.proto.recordset_pb2 import SintList, StringList, UintList
|
|
42
42
|
from flwr.proto.run_pb2 import Run as ProtoRun
|
|
43
|
+
from flwr.proto.run_pb2 import RunStatus as ProtoRunStatus
|
|
43
44
|
from flwr.proto.task_pb2 import Task, TaskIns, TaskRes
|
|
44
45
|
from flwr.proto.transport_pb2 import (
|
|
45
46
|
ClientMessage,
|
|
@@ -910,3 +911,24 @@ def clientappstatus_from_proto(
|
|
|
910
911
|
if msg.code == ClientAppOutputCode.UNKNOWN_ERROR:
|
|
911
912
|
code = typing.ClientAppOutputCode.UNKNOWN_ERROR
|
|
912
913
|
return typing.ClientAppOutputStatus(code=code, message=msg.message)
|
|
914
|
+
|
|
915
|
+
|
|
916
|
+
# === Run status ===
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
def run_status_to_proto(run_status: typing.RunStatus) -> ProtoRunStatus:
|
|
920
|
+
"""Serialize `RunStatus` to ProtoBuf."""
|
|
921
|
+
return ProtoRunStatus(
|
|
922
|
+
status=run_status.status,
|
|
923
|
+
sub_status=run_status.sub_status,
|
|
924
|
+
details=run_status.details,
|
|
925
|
+
)
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
def run_status_from_proto(run_status_proto: ProtoRunStatus) -> typing.RunStatus:
|
|
929
|
+
"""Deserialize `RunStatus` from ProtoBuf."""
|
|
930
|
+
return typing.RunStatus(
|
|
931
|
+
status=run_status_proto.status,
|
|
932
|
+
sub_status=run_status_proto.sub_status,
|
|
933
|
+
details=run_status_proto.details,
|
|
934
|
+
)
|
flwr/proto/driver_pb2.py
CHANGED
|
@@ -12,6 +12,7 @@ from google.protobuf.internal import builder as _builder
|
|
|
12
12
|
_sym_db = _symbol_database.Default()
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
from flwr.proto import log_pb2 as flwr_dot_proto_dot_log__pb2
|
|
15
16
|
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
16
17
|
from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
|
|
17
18
|
from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
|
|
@@ -19,33 +20,33 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
|
19
20
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
20
21
|
|
|
21
22
|
|
|
22
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.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.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"
|
|
23
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.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.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"\x1c\n\x1aPullServerAppInputsRequest\"\x7f\n\x1bPullServerAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"S\n\x1bPushServerAppOutputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\"\x1e\n\x1cPushServerAppOutputsResponse2\xc5\x06\n\x06\x44river\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12P\n\x0bPushTaskIns\x12\x1e.flwr.proto.PushTaskInsRequest\x1a\x1f.flwr.proto.PushTaskInsResponse\"\x00\x12P\n\x0bPullTaskRes\x12\x1e.flwr.proto.PullTaskResRequest\x1a\x1f.flwr.proto.PullTaskResResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12h\n\x13PullServerAppInputs\x12&.flwr.proto.PullServerAppInputsRequest\x1a\'.flwr.proto.PullServerAppInputsResponse\"\x00\x12k\n\x14PushServerAppOutputs\x12\'.flwr.proto.PushServerAppOutputsRequest\x1a(.flwr.proto.PushServerAppOutputsResponse\"\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\x62\x06proto3')
|
|
23
24
|
|
|
24
25
|
_globals = globals()
|
|
25
26
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
26
27
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.driver_pb2', _globals)
|
|
27
28
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
28
29
|
DESCRIPTOR._options = None
|
|
29
|
-
_globals['_GETNODESREQUEST']._serialized_start=
|
|
30
|
-
_globals['_GETNODESREQUEST']._serialized_end=
|
|
31
|
-
_globals['_GETNODESRESPONSE']._serialized_start=
|
|
32
|
-
_globals['_GETNODESRESPONSE']._serialized_end=
|
|
33
|
-
_globals['_PUSHTASKINSREQUEST']._serialized_start=
|
|
34
|
-
_globals['_PUSHTASKINSREQUEST']._serialized_end=
|
|
35
|
-
_globals['_PUSHTASKINSRESPONSE']._serialized_start=
|
|
36
|
-
_globals['_PUSHTASKINSRESPONSE']._serialized_end=
|
|
37
|
-
_globals['_PULLTASKRESREQUEST']._serialized_start=
|
|
38
|
-
_globals['_PULLTASKRESREQUEST']._serialized_end=
|
|
39
|
-
_globals['_PULLTASKRESRESPONSE']._serialized_start=
|
|
40
|
-
_globals['_PULLTASKRESRESPONSE']._serialized_end=
|
|
41
|
-
_globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=
|
|
42
|
-
_globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=
|
|
43
|
-
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=
|
|
44
|
-
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=
|
|
45
|
-
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=
|
|
46
|
-
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=
|
|
47
|
-
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=
|
|
48
|
-
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=
|
|
49
|
-
_globals['_DRIVER']._serialized_start=
|
|
50
|
-
_globals['_DRIVER']._serialized_end=
|
|
30
|
+
_globals['_GETNODESREQUEST']._serialized_start=177
|
|
31
|
+
_globals['_GETNODESREQUEST']._serialized_end=210
|
|
32
|
+
_globals['_GETNODESRESPONSE']._serialized_start=212
|
|
33
|
+
_globals['_GETNODESRESPONSE']._serialized_end=263
|
|
34
|
+
_globals['_PUSHTASKINSREQUEST']._serialized_start=265
|
|
35
|
+
_globals['_PUSHTASKINSREQUEST']._serialized_end=329
|
|
36
|
+
_globals['_PUSHTASKINSRESPONSE']._serialized_start=331
|
|
37
|
+
_globals['_PUSHTASKINSRESPONSE']._serialized_end=370
|
|
38
|
+
_globals['_PULLTASKRESREQUEST']._serialized_start=372
|
|
39
|
+
_globals['_PULLTASKRESREQUEST']._serialized_end=442
|
|
40
|
+
_globals['_PULLTASKRESRESPONSE']._serialized_start=444
|
|
41
|
+
_globals['_PULLTASKRESRESPONSE']._serialized_end=509
|
|
42
|
+
_globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=511
|
|
43
|
+
_globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=539
|
|
44
|
+
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=541
|
|
45
|
+
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=668
|
|
46
|
+
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=670
|
|
47
|
+
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=753
|
|
48
|
+
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=755
|
|
49
|
+
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=785
|
|
50
|
+
_globals['_DRIVER']._serialized_start=788
|
|
51
|
+
_globals['_DRIVER']._serialized_end=1625
|
|
51
52
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/driver_pb2.pyi
CHANGED
|
@@ -98,13 +98,8 @@ global___PullTaskResResponse = PullTaskResResponse
|
|
|
98
98
|
class PullServerAppInputsRequest(google.protobuf.message.Message):
|
|
99
99
|
"""PullServerAppInputs messages"""
|
|
100
100
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
101
|
-
RUN_ID_FIELD_NUMBER: builtins.int
|
|
102
|
-
run_id: builtins.int
|
|
103
101
|
def __init__(self,
|
|
104
|
-
*,
|
|
105
|
-
run_id: builtins.int = ...,
|
|
106
102
|
) -> None: ...
|
|
107
|
-
def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
|
|
108
103
|
global___PullServerAppInputsRequest = PullServerAppInputsRequest
|
|
109
104
|
|
|
110
105
|
class PullServerAppInputsResponse(google.protobuf.message.Message):
|
flwr/proto/driver_pb2_grpc.py
CHANGED
|
@@ -4,6 +4,7 @@ import grpc
|
|
|
4
4
|
|
|
5
5
|
from flwr.proto import driver_pb2 as flwr_dot_proto_dot_driver__pb2
|
|
6
6
|
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
7
|
+
from flwr.proto import log_pb2 as flwr_dot_proto_dot_log__pb2
|
|
7
8
|
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
8
9
|
|
|
9
10
|
|
|
@@ -56,6 +57,16 @@ class DriverStub(object):
|
|
|
56
57
|
request_serializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsRequest.SerializeToString,
|
|
57
58
|
response_deserializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.FromString,
|
|
58
59
|
)
|
|
60
|
+
self.UpdateRunStatus = channel.unary_unary(
|
|
61
|
+
'/flwr.proto.Driver/UpdateRunStatus',
|
|
62
|
+
request_serializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.SerializeToString,
|
|
63
|
+
response_deserializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusResponse.FromString,
|
|
64
|
+
)
|
|
65
|
+
self.PushLogs = channel.unary_unary(
|
|
66
|
+
'/flwr.proto.Driver/PushLogs',
|
|
67
|
+
request_serializer=flwr_dot_proto_dot_log__pb2.PushLogsRequest.SerializeToString,
|
|
68
|
+
response_deserializer=flwr_dot_proto_dot_log__pb2.PushLogsResponse.FromString,
|
|
69
|
+
)
|
|
59
70
|
|
|
60
71
|
|
|
61
72
|
class DriverServicer(object):
|
|
@@ -117,6 +128,20 @@ class DriverServicer(object):
|
|
|
117
128
|
context.set_details('Method not implemented!')
|
|
118
129
|
raise NotImplementedError('Method not implemented!')
|
|
119
130
|
|
|
131
|
+
def UpdateRunStatus(self, request, context):
|
|
132
|
+
"""Update the status of a given run
|
|
133
|
+
"""
|
|
134
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
135
|
+
context.set_details('Method not implemented!')
|
|
136
|
+
raise NotImplementedError('Method not implemented!')
|
|
137
|
+
|
|
138
|
+
def PushLogs(self, request, context):
|
|
139
|
+
"""Push ServerApp logs
|
|
140
|
+
"""
|
|
141
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
142
|
+
context.set_details('Method not implemented!')
|
|
143
|
+
raise NotImplementedError('Method not implemented!')
|
|
144
|
+
|
|
120
145
|
|
|
121
146
|
def add_DriverServicer_to_server(servicer, server):
|
|
122
147
|
rpc_method_handlers = {
|
|
@@ -160,6 +185,16 @@ def add_DriverServicer_to_server(servicer, server):
|
|
|
160
185
|
request_deserializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsRequest.FromString,
|
|
161
186
|
response_serializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.SerializeToString,
|
|
162
187
|
),
|
|
188
|
+
'UpdateRunStatus': grpc.unary_unary_rpc_method_handler(
|
|
189
|
+
servicer.UpdateRunStatus,
|
|
190
|
+
request_deserializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.FromString,
|
|
191
|
+
response_serializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusResponse.SerializeToString,
|
|
192
|
+
),
|
|
193
|
+
'PushLogs': grpc.unary_unary_rpc_method_handler(
|
|
194
|
+
servicer.PushLogs,
|
|
195
|
+
request_deserializer=flwr_dot_proto_dot_log__pb2.PushLogsRequest.FromString,
|
|
196
|
+
response_serializer=flwr_dot_proto_dot_log__pb2.PushLogsResponse.SerializeToString,
|
|
197
|
+
),
|
|
163
198
|
}
|
|
164
199
|
generic_handler = grpc.method_handlers_generic_handler(
|
|
165
200
|
'flwr.proto.Driver', rpc_method_handlers)
|
|
@@ -305,3 +340,37 @@ class Driver(object):
|
|
|
305
340
|
flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.FromString,
|
|
306
341
|
options, channel_credentials,
|
|
307
342
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
343
|
+
|
|
344
|
+
@staticmethod
|
|
345
|
+
def UpdateRunStatus(request,
|
|
346
|
+
target,
|
|
347
|
+
options=(),
|
|
348
|
+
channel_credentials=None,
|
|
349
|
+
call_credentials=None,
|
|
350
|
+
insecure=False,
|
|
351
|
+
compression=None,
|
|
352
|
+
wait_for_ready=None,
|
|
353
|
+
timeout=None,
|
|
354
|
+
metadata=None):
|
|
355
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Driver/UpdateRunStatus',
|
|
356
|
+
flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.SerializeToString,
|
|
357
|
+
flwr_dot_proto_dot_run__pb2.UpdateRunStatusResponse.FromString,
|
|
358
|
+
options, channel_credentials,
|
|
359
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
360
|
+
|
|
361
|
+
@staticmethod
|
|
362
|
+
def PushLogs(request,
|
|
363
|
+
target,
|
|
364
|
+
options=(),
|
|
365
|
+
channel_credentials=None,
|
|
366
|
+
call_credentials=None,
|
|
367
|
+
insecure=False,
|
|
368
|
+
compression=None,
|
|
369
|
+
wait_for_ready=None,
|
|
370
|
+
timeout=None,
|
|
371
|
+
metadata=None):
|
|
372
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Driver/PushLogs',
|
|
373
|
+
flwr_dot_proto_dot_log__pb2.PushLogsRequest.SerializeToString,
|
|
374
|
+
flwr_dot_proto_dot_log__pb2.PushLogsResponse.FromString,
|
|
375
|
+
options, channel_credentials,
|
|
376
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
flwr/proto/driver_pb2_grpc.pyi
CHANGED
|
@@ -5,6 +5,7 @@ isort:skip_file
|
|
|
5
5
|
import abc
|
|
6
6
|
import flwr.proto.driver_pb2
|
|
7
7
|
import flwr.proto.fab_pb2
|
|
8
|
+
import flwr.proto.log_pb2
|
|
8
9
|
import flwr.proto.run_pb2
|
|
9
10
|
import grpc
|
|
10
11
|
|
|
@@ -50,6 +51,16 @@ class DriverStub:
|
|
|
50
51
|
flwr.proto.driver_pb2.PushServerAppOutputsResponse]
|
|
51
52
|
"""Push ServerApp outputs"""
|
|
52
53
|
|
|
54
|
+
UpdateRunStatus: grpc.UnaryUnaryMultiCallable[
|
|
55
|
+
flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
56
|
+
flwr.proto.run_pb2.UpdateRunStatusResponse]
|
|
57
|
+
"""Update the status of a given run"""
|
|
58
|
+
|
|
59
|
+
PushLogs: grpc.UnaryUnaryMultiCallable[
|
|
60
|
+
flwr.proto.log_pb2.PushLogsRequest,
|
|
61
|
+
flwr.proto.log_pb2.PushLogsResponse]
|
|
62
|
+
"""Push ServerApp logs"""
|
|
63
|
+
|
|
53
64
|
|
|
54
65
|
class DriverServicer(metaclass=abc.ABCMeta):
|
|
55
66
|
@abc.abstractmethod
|
|
@@ -116,5 +127,21 @@ class DriverServicer(metaclass=abc.ABCMeta):
|
|
|
116
127
|
"""Push ServerApp outputs"""
|
|
117
128
|
pass
|
|
118
129
|
|
|
130
|
+
@abc.abstractmethod
|
|
131
|
+
def UpdateRunStatus(self,
|
|
132
|
+
request: flwr.proto.run_pb2.UpdateRunStatusRequest,
|
|
133
|
+
context: grpc.ServicerContext,
|
|
134
|
+
) -> flwr.proto.run_pb2.UpdateRunStatusResponse:
|
|
135
|
+
"""Update the status of a given run"""
|
|
136
|
+
pass
|
|
137
|
+
|
|
138
|
+
@abc.abstractmethod
|
|
139
|
+
def PushLogs(self,
|
|
140
|
+
request: flwr.proto.log_pb2.PushLogsRequest,
|
|
141
|
+
context: grpc.ServicerContext,
|
|
142
|
+
) -> flwr.proto.log_pb2.PushLogsResponse:
|
|
143
|
+
"""Push ServerApp logs"""
|
|
144
|
+
pass
|
|
145
|
+
|
|
119
146
|
|
|
120
147
|
def add_DriverServicer_to_server(servicer: DriverServicer, server: grpc.Server) -> None: ...
|
flwr/proto/exec_pb2.py
CHANGED
|
@@ -16,7 +16,7 @@ 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
|
|
|
18
18
|
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\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\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\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\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"
|
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\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\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\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\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"<\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\x32\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
|
|
20
20
|
|
|
21
21
|
_globals = globals()
|
|
22
22
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -36,9 +36,9 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
36
36
|
_globals['_STARTRUNRESPONSE']._serialized_start=441
|
|
37
37
|
_globals['_STARTRUNRESPONSE']._serialized_end=475
|
|
38
38
|
_globals['_STREAMLOGSREQUEST']._serialized_start=477
|
|
39
|
-
_globals['_STREAMLOGSREQUEST']._serialized_end=
|
|
40
|
-
_globals['_STREAMLOGSRESPONSE']._serialized_start=
|
|
41
|
-
_globals['_STREAMLOGSRESPONSE']._serialized_end=
|
|
42
|
-
_globals['_EXEC']._serialized_start=
|
|
43
|
-
_globals['_EXEC']._serialized_end=
|
|
39
|
+
_globals['_STREAMLOGSREQUEST']._serialized_end=537
|
|
40
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_start=539
|
|
41
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_end=605
|
|
42
|
+
_globals['_EXEC']._serialized_start=608
|
|
43
|
+
_globals['_EXEC']._serialized_end=768
|
|
44
44
|
# @@protoc_insertion_point(module_scope)
|
flwr/proto/exec_pb2.pyi
CHANGED
|
@@ -78,21 +78,27 @@ global___StartRunResponse = StartRunResponse
|
|
|
78
78
|
class StreamLogsRequest(google.protobuf.message.Message):
|
|
79
79
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
80
80
|
RUN_ID_FIELD_NUMBER: builtins.int
|
|
81
|
+
AFTER_TIMESTAMP_FIELD_NUMBER: builtins.int
|
|
81
82
|
run_id: builtins.int
|
|
83
|
+
after_timestamp: builtins.float
|
|
82
84
|
def __init__(self,
|
|
83
85
|
*,
|
|
84
86
|
run_id: builtins.int = ...,
|
|
87
|
+
after_timestamp: builtins.float = ...,
|
|
85
88
|
) -> None: ...
|
|
86
|
-
def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
|
|
89
|
+
def ClearField(self, field_name: typing_extensions.Literal["after_timestamp",b"after_timestamp","run_id",b"run_id"]) -> None: ...
|
|
87
90
|
global___StreamLogsRequest = StreamLogsRequest
|
|
88
91
|
|
|
89
92
|
class StreamLogsResponse(google.protobuf.message.Message):
|
|
90
93
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
91
94
|
LOG_OUTPUT_FIELD_NUMBER: builtins.int
|
|
95
|
+
LATEST_TIMESTAMP_FIELD_NUMBER: builtins.int
|
|
92
96
|
log_output: typing.Text
|
|
97
|
+
latest_timestamp: builtins.float
|
|
93
98
|
def __init__(self,
|
|
94
99
|
*,
|
|
95
100
|
log_output: typing.Text = ...,
|
|
101
|
+
latest_timestamp: builtins.float = ...,
|
|
96
102
|
) -> None: ...
|
|
97
|
-
def ClearField(self, field_name: typing_extensions.Literal["log_output",b"log_output"]) -> None: ...
|
|
103
|
+
def ClearField(self, field_name: typing_extensions.Literal["latest_timestamp",b"latest_timestamp","log_output",b"log_output"]) -> None: ...
|
|
98
104
|
global___StreamLogsResponse = StreamLogsResponse
|
flwr/proto/log_pb2.py
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/log.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.0
|
|
5
|
+
"""Generated protocol buffer code."""
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/log.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"O\n\x0fPushLogsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x0c\n\x04logs\x18\x03 \x03(\t\"\x12\n\x10PushLogsResponseb\x06proto3')
|
|
19
|
+
|
|
20
|
+
_globals = globals()
|
|
21
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
22
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.log_pb2', _globals)
|
|
23
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
24
|
+
DESCRIPTOR._options = None
|
|
25
|
+
_globals['_PUSHLOGSREQUEST']._serialized_start=59
|
|
26
|
+
_globals['_PUSHLOGSREQUEST']._serialized_end=138
|
|
27
|
+
_globals['_PUSHLOGSRESPONSE']._serialized_start=140
|
|
28
|
+
_globals['_PUSHLOGSRESPONSE']._serialized_end=158
|
|
29
|
+
# @@protoc_insertion_point(module_scope)
|
flwr/proto/log_pb2.pyi
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
"""
|
|
5
|
+
import builtins
|
|
6
|
+
import flwr.proto.node_pb2
|
|
7
|
+
import google.protobuf.descriptor
|
|
8
|
+
import google.protobuf.internal.containers
|
|
9
|
+
import google.protobuf.message
|
|
10
|
+
import typing
|
|
11
|
+
import typing_extensions
|
|
12
|
+
|
|
13
|
+
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
14
|
+
|
|
15
|
+
class PushLogsRequest(google.protobuf.message.Message):
|
|
16
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
17
|
+
NODE_FIELD_NUMBER: builtins.int
|
|
18
|
+
RUN_ID_FIELD_NUMBER: builtins.int
|
|
19
|
+
LOGS_FIELD_NUMBER: builtins.int
|
|
20
|
+
@property
|
|
21
|
+
def node(self) -> flwr.proto.node_pb2.Node: ...
|
|
22
|
+
run_id: builtins.int
|
|
23
|
+
@property
|
|
24
|
+
def logs(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
|
|
25
|
+
def __init__(self,
|
|
26
|
+
*,
|
|
27
|
+
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
|
28
|
+
run_id: builtins.int = ...,
|
|
29
|
+
logs: typing.Optional[typing.Iterable[typing.Text]] = ...,
|
|
30
|
+
) -> None: ...
|
|
31
|
+
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
|
32
|
+
def ClearField(self, field_name: typing_extensions.Literal["logs",b"logs","node",b"node","run_id",b"run_id"]) -> None: ...
|
|
33
|
+
global___PushLogsRequest = PushLogsRequest
|
|
34
|
+
|
|
35
|
+
class PushLogsResponse(google.protobuf.message.Message):
|
|
36
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
37
|
+
def __init__(self,
|
|
38
|
+
) -> None: ...
|
|
39
|
+
global___PushLogsResponse = PushLogsResponse
|