flwr-nightly 1.16.0.dev20250306__py3-none-any.whl → 1.16.0.dev20250308__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/client/message_handler/message_handler.py +1 -1
- flwr/client/rest_client/connection.py +4 -6
- flwr/common/message.py +7 -7
- flwr/common/record/recordset.py +4 -12
- flwr/common/serde.py +8 -126
- flwr/server/compat/driver_client_proxy.py +2 -2
- flwr/server/driver/inmemory_driver.py +15 -18
- flwr/server/superlink/driver/serverappio_servicer.py +18 -23
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +2 -2
- flwr/server/superlink/fleet/message_handler/message_handler.py +8 -12
- flwr/server/superlink/fleet/vce/backend/backend.py +1 -1
- flwr/server/superlink/fleet/vce/vce_api.py +32 -35
- flwr/server/superlink/linkstate/in_memory_linkstate.py +1 -221
- flwr/server/superlink/linkstate/linkstate.py +0 -113
- flwr/server/superlink/linkstate/sqlite_linkstate.py +2 -511
- flwr/server/superlink/linkstate/utils.py +2 -179
- flwr/server/utils/__init__.py +0 -2
- flwr/server/utils/validator.py +0 -88
- flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +3 -3
- flwr/superexec/exec_servicer.py +3 -3
- {flwr_nightly-1.16.0.dev20250306.dist-info → flwr_nightly-1.16.0.dev20250308.dist-info}/METADATA +1 -1
- {flwr_nightly-1.16.0.dev20250306.dist-info → flwr_nightly-1.16.0.dev20250308.dist-info}/RECORD +25 -30
- flwr/client/message_handler/task_handler.py +0 -37
- flwr/proto/task_pb2.py +0 -33
- flwr/proto/task_pb2.pyi +0 -100
- flwr/proto/task_pb2_grpc.py +0 -4
- flwr/proto/task_pb2_grpc.pyi +0 -4
- {flwr_nightly-1.16.0.dev20250306.dist-info → flwr_nightly-1.16.0.dev20250308.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.16.0.dev20250306.dist-info → flwr_nightly-1.16.0.dev20250308.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.16.0.dev20250306.dist-info → flwr_nightly-1.16.0.dev20250308.dist-info}/entry_points.txt +0 -0
@@ -15,30 +15,17 @@
|
|
15
15
|
"""Utility functions for State."""
|
16
16
|
|
17
17
|
|
18
|
-
from logging import ERROR
|
19
18
|
from os import urandom
|
20
|
-
from typing import Optional
|
19
|
+
from typing import Optional
|
21
20
|
from uuid import UUID, uuid4
|
22
21
|
|
23
|
-
from flwr.common import
|
24
|
-
ConfigsRecord,
|
25
|
-
Context,
|
26
|
-
Error,
|
27
|
-
Message,
|
28
|
-
Metadata,
|
29
|
-
log,
|
30
|
-
now,
|
31
|
-
serde,
|
32
|
-
)
|
22
|
+
from flwr.common import ConfigsRecord, Context, Error, Message, Metadata, now, serde
|
33
23
|
from flwr.common.constant import SUPERLINK_NODE_ID, ErrorCode, Status, SubStatus
|
34
24
|
from flwr.common.typing import RunStatus
|
35
25
|
|
36
26
|
# pylint: disable=E0611
|
37
|
-
from flwr.proto.error_pb2 import Error as ProtoError
|
38
27
|
from flwr.proto.message_pb2 import Context as ProtoContext
|
39
|
-
from flwr.proto.node_pb2 import Node
|
40
28
|
from flwr.proto.recordset_pb2 import ConfigsRecord as ProtoConfigsRecord
|
41
|
-
from flwr.proto.task_pb2 import Task, TaskIns, TaskRes
|
42
29
|
|
43
30
|
# pylint: enable=E0611
|
44
31
|
|
@@ -244,80 +231,6 @@ def has_valid_sub_status(status: RunStatus) -> bool:
|
|
244
231
|
return status.sub_status == ""
|
245
232
|
|
246
233
|
|
247
|
-
def create_taskres_for_unavailable_taskins(taskins_id: Union[str, UUID]) -> TaskRes:
|
248
|
-
"""Generate a TaskRes with a TaskIns unavailable error.
|
249
|
-
|
250
|
-
Parameters
|
251
|
-
----------
|
252
|
-
taskins_id : Union[str, UUID]
|
253
|
-
The ID of the unavailable TaskIns.
|
254
|
-
|
255
|
-
Returns
|
256
|
-
-------
|
257
|
-
TaskRes
|
258
|
-
A TaskRes with an error code MESSAGE_UNAVAILABLE to indicate that the
|
259
|
-
inquired TaskIns ID cannot be found (due to non-existence or expiration).
|
260
|
-
"""
|
261
|
-
current_time = now().timestamp()
|
262
|
-
return TaskRes(
|
263
|
-
task_id=str(uuid4()),
|
264
|
-
group_id="", # Unknown group ID
|
265
|
-
run_id=0, # Unknown run ID
|
266
|
-
task=Task(
|
267
|
-
# This function is only called by SuperLink, and thus it's the producer.
|
268
|
-
producer=Node(node_id=SUPERLINK_NODE_ID),
|
269
|
-
consumer=Node(node_id=SUPERLINK_NODE_ID),
|
270
|
-
created_at=current_time,
|
271
|
-
ttl=0,
|
272
|
-
ancestry=[str(taskins_id)],
|
273
|
-
task_type="", # Unknown message type
|
274
|
-
error=ProtoError(
|
275
|
-
code=ErrorCode.MESSAGE_UNAVAILABLE,
|
276
|
-
reason=MESSAGE_UNAVAILABLE_ERROR_REASON,
|
277
|
-
),
|
278
|
-
),
|
279
|
-
)
|
280
|
-
|
281
|
-
|
282
|
-
def create_taskres_for_unavailable_taskres(ref_taskins: TaskIns) -> TaskRes:
|
283
|
-
"""Generate a TaskRes with a reply message unavailable error from a TaskIns.
|
284
|
-
|
285
|
-
Parameters
|
286
|
-
----------
|
287
|
-
ref_taskins : TaskIns
|
288
|
-
The reference TaskIns object.
|
289
|
-
|
290
|
-
Returns
|
291
|
-
-------
|
292
|
-
TaskRes
|
293
|
-
The generated TaskRes with an error code REPLY_MESSAGE_UNAVAILABLE_ERROR_REASON,
|
294
|
-
indicating that the original TaskRes has expired.
|
295
|
-
"""
|
296
|
-
current_time = now().timestamp()
|
297
|
-
ttl = ref_taskins.task.ttl - (current_time - ref_taskins.task.created_at)
|
298
|
-
if ttl < 0:
|
299
|
-
log(ERROR, "Creating TaskRes for TaskIns that exceeds its TTL.")
|
300
|
-
ttl = 0
|
301
|
-
return TaskRes(
|
302
|
-
task_id=str(uuid4()),
|
303
|
-
group_id=ref_taskins.group_id,
|
304
|
-
run_id=ref_taskins.run_id,
|
305
|
-
task=Task(
|
306
|
-
# This function is only called by SuperLink, and thus it's the producer.
|
307
|
-
producer=Node(node_id=SUPERLINK_NODE_ID),
|
308
|
-
consumer=Node(node_id=SUPERLINK_NODE_ID),
|
309
|
-
created_at=current_time,
|
310
|
-
ttl=ttl,
|
311
|
-
ancestry=[ref_taskins.task_id],
|
312
|
-
task_type=ref_taskins.task.task_type,
|
313
|
-
error=ProtoError(
|
314
|
-
code=ErrorCode.REPLY_MESSAGE_UNAVAILABLE,
|
315
|
-
reason=REPLY_MESSAGE_UNAVAILABLE_ERROR_REASON,
|
316
|
-
),
|
317
|
-
),
|
318
|
-
)
|
319
|
-
|
320
|
-
|
321
234
|
def create_message_error_unavailable_res_message(ins_metadata: Metadata) -> Message:
|
322
235
|
"""Generate an error Message that the SuperLink returns carrying the specified
|
323
236
|
error."""
|
@@ -366,55 +279,11 @@ def create_message_error_unavailable_ins_message(reply_to_message: UUID) -> Mess
|
|
366
279
|
)
|
367
280
|
|
368
281
|
|
369
|
-
def has_expired(task_ins_or_res: Union[TaskIns, TaskRes], current_time: float) -> bool:
|
370
|
-
"""Check if the TaskIns/TaskRes has expired."""
|
371
|
-
return task_ins_or_res.task.ttl + task_ins_or_res.task.created_at < current_time
|
372
|
-
|
373
|
-
|
374
282
|
def message_ttl_has_expired(message_metadata: Metadata, current_time: float) -> bool:
|
375
283
|
"""Check if the Message has expired."""
|
376
284
|
return message_metadata.ttl + message_metadata.created_at < current_time
|
377
285
|
|
378
286
|
|
379
|
-
def verify_taskins_ids(
|
380
|
-
inquired_taskins_ids: set[UUID],
|
381
|
-
found_taskins_dict: dict[UUID, TaskIns],
|
382
|
-
current_time: Optional[float] = None,
|
383
|
-
update_set: bool = True,
|
384
|
-
) -> dict[UUID, TaskRes]:
|
385
|
-
"""Verify found TaskIns and generate error TaskRes for invalid ones.
|
386
|
-
|
387
|
-
Parameters
|
388
|
-
----------
|
389
|
-
inquired_taskins_ids : set[UUID]
|
390
|
-
Set of TaskIns IDs for which to generate error TaskRes if invalid.
|
391
|
-
found_taskins_dict : dict[UUID, TaskIns]
|
392
|
-
Dictionary containing all found TaskIns indexed by their IDs.
|
393
|
-
current_time : Optional[float] (default: None)
|
394
|
-
The current time to check for expiration. If set to `None`, the current time
|
395
|
-
will automatically be set to the current timestamp using `now().timestamp()`.
|
396
|
-
update_set : bool (default: True)
|
397
|
-
If True, the `inquired_taskins_ids` will be updated to remove invalid ones,
|
398
|
-
by default True.
|
399
|
-
|
400
|
-
Returns
|
401
|
-
-------
|
402
|
-
dict[UUID, TaskRes]
|
403
|
-
A dictionary of error TaskRes indexed by the corresponding TaskIns ID.
|
404
|
-
"""
|
405
|
-
ret_dict = {}
|
406
|
-
current = current_time if current_time else now().timestamp()
|
407
|
-
for taskins_id in list(inquired_taskins_ids):
|
408
|
-
# Generate error TaskRes if the task_ins doesn't exist or has expired
|
409
|
-
taskins = found_taskins_dict.get(taskins_id)
|
410
|
-
if taskins is None or has_expired(taskins, current):
|
411
|
-
if update_set:
|
412
|
-
inquired_taskins_ids.remove(taskins_id)
|
413
|
-
taskres = create_taskres_for_unavailable_taskins(taskins_id)
|
414
|
-
ret_dict[taskins_id] = taskres
|
415
|
-
return ret_dict
|
416
|
-
|
417
|
-
|
418
287
|
def verify_message_ids(
|
419
288
|
inquired_message_ids: set[UUID],
|
420
289
|
found_message_ins_dict: dict[UUID, Message],
|
@@ -457,52 +326,6 @@ def verify_message_ids(
|
|
457
326
|
return ret_dict
|
458
327
|
|
459
328
|
|
460
|
-
def verify_found_taskres(
|
461
|
-
inquired_taskins_ids: set[UUID],
|
462
|
-
found_taskins_dict: dict[UUID, TaskIns],
|
463
|
-
found_taskres_list: list[TaskRes],
|
464
|
-
current_time: Optional[float] = None,
|
465
|
-
update_set: bool = True,
|
466
|
-
) -> dict[UUID, TaskRes]:
|
467
|
-
"""Verify found TaskRes and generate error TaskRes for invalid ones.
|
468
|
-
|
469
|
-
Parameters
|
470
|
-
----------
|
471
|
-
inquired_taskins_ids : set[UUID]
|
472
|
-
Set of TaskIns IDs for which to generate error TaskRes if invalid.
|
473
|
-
found_taskins_dict : dict[UUID, TaskIns]
|
474
|
-
Dictionary containing all found TaskIns indexed by their IDs.
|
475
|
-
found_taskres_list : dict[TaskIns, TaskRes]
|
476
|
-
List of found TaskRes to be verified.
|
477
|
-
current_time : Optional[float] (default: None)
|
478
|
-
The current time to check for expiration. If set to `None`, the current time
|
479
|
-
will automatically be set to the current timestamp using `now().timestamp()`.
|
480
|
-
update_set : bool (default: True)
|
481
|
-
If True, the `inquired_taskins_ids` will be updated to remove ones
|
482
|
-
that have a TaskRes, by default True.
|
483
|
-
|
484
|
-
Returns
|
485
|
-
-------
|
486
|
-
dict[UUID, TaskRes]
|
487
|
-
A dictionary of TaskRes indexed by the corresponding TaskIns ID.
|
488
|
-
"""
|
489
|
-
ret_dict: dict[UUID, TaskRes] = {}
|
490
|
-
current = current_time if current_time else now().timestamp()
|
491
|
-
for taskres in found_taskres_list:
|
492
|
-
taskins_id = UUID(taskres.task.ancestry[0])
|
493
|
-
if update_set:
|
494
|
-
inquired_taskins_ids.remove(taskins_id)
|
495
|
-
# Check if the TaskRes has expired
|
496
|
-
if has_expired(taskres, current):
|
497
|
-
# No need to insert the error TaskRes
|
498
|
-
taskres = create_taskres_for_unavailable_taskres(
|
499
|
-
found_taskins_dict[taskins_id]
|
500
|
-
)
|
501
|
-
taskres.task.delivered_at = now().isoformat()
|
502
|
-
ret_dict[taskins_id] = taskres
|
503
|
-
return ret_dict
|
504
|
-
|
505
|
-
|
506
329
|
def verify_found_message_replies(
|
507
330
|
inquired_message_ids: set[UUID],
|
508
331
|
found_message_ins_dict: dict[UUID, Message],
|
flwr/server/utils/__init__.py
CHANGED
@@ -17,10 +17,8 @@
|
|
17
17
|
|
18
18
|
from .tensorboard import tensorboard as tensorboard
|
19
19
|
from .validator import validate_message as validate_message
|
20
|
-
from .validator import validate_task_ins_or_res as validate_task_ins_or_res
|
21
20
|
|
22
21
|
__all__ = [
|
23
22
|
"tensorboard",
|
24
23
|
"validate_message",
|
25
|
-
"validate_task_ins_or_res",
|
26
24
|
]
|
flwr/server/utils/validator.py
CHANGED
@@ -16,97 +16,9 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
import time
|
19
|
-
from typing import Union
|
20
19
|
|
21
20
|
from flwr.common import Message
|
22
21
|
from flwr.common.constant import SUPERLINK_NODE_ID
|
23
|
-
from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
|
24
|
-
|
25
|
-
|
26
|
-
# pylint: disable-next=too-many-branches,too-many-statements
|
27
|
-
def validate_task_ins_or_res(tasks_ins_res: Union[TaskIns, TaskRes]) -> list[str]:
|
28
|
-
"""Validate a TaskIns or TaskRes."""
|
29
|
-
validation_errors = []
|
30
|
-
|
31
|
-
if tasks_ins_res.task_id != "":
|
32
|
-
validation_errors.append("non-empty `task_id`")
|
33
|
-
|
34
|
-
if not tasks_ins_res.HasField("task"):
|
35
|
-
validation_errors.append("`task` does not set field `task`")
|
36
|
-
|
37
|
-
# Created/delivered/TTL/Pushed
|
38
|
-
if (
|
39
|
-
tasks_ins_res.task.created_at < 1711497600.0
|
40
|
-
): # unix timestamp of 27 March 2024 00h:00m:00s UTC
|
41
|
-
validation_errors.append(
|
42
|
-
"`created_at` must be a float that records the unix timestamp "
|
43
|
-
"in seconds when the message was created."
|
44
|
-
)
|
45
|
-
if tasks_ins_res.task.delivered_at != "":
|
46
|
-
validation_errors.append("`delivered_at` must be an empty str")
|
47
|
-
if tasks_ins_res.task.ttl <= 0:
|
48
|
-
validation_errors.append("`ttl` must be higher than zero")
|
49
|
-
|
50
|
-
# Verify TTL and created_at time
|
51
|
-
current_time = time.time()
|
52
|
-
if tasks_ins_res.task.created_at + tasks_ins_res.task.ttl <= current_time:
|
53
|
-
validation_errors.append("Task TTL has expired")
|
54
|
-
|
55
|
-
# TaskIns specific
|
56
|
-
if isinstance(tasks_ins_res, TaskIns):
|
57
|
-
# Task producer
|
58
|
-
if not tasks_ins_res.task.HasField("producer"):
|
59
|
-
validation_errors.append("`producer` does not set field `producer`")
|
60
|
-
if tasks_ins_res.task.producer.node_id != SUPERLINK_NODE_ID:
|
61
|
-
validation_errors.append(f"`producer.node_id` is not {SUPERLINK_NODE_ID}")
|
62
|
-
|
63
|
-
# Task consumer
|
64
|
-
if not tasks_ins_res.task.HasField("consumer"):
|
65
|
-
validation_errors.append("`consumer` does not set field `consumer`")
|
66
|
-
if tasks_ins_res.task.consumer.node_id == SUPERLINK_NODE_ID:
|
67
|
-
validation_errors.append("consumer MUST provide a valid `node_id`")
|
68
|
-
|
69
|
-
# Content check
|
70
|
-
if tasks_ins_res.task.task_type == "":
|
71
|
-
validation_errors.append("`task_type` MUST be set")
|
72
|
-
if not (
|
73
|
-
tasks_ins_res.task.HasField("recordset")
|
74
|
-
^ tasks_ins_res.task.HasField("error")
|
75
|
-
):
|
76
|
-
validation_errors.append("Either `recordset` or `error` MUST be set")
|
77
|
-
|
78
|
-
# Ancestors
|
79
|
-
if len(tasks_ins_res.task.ancestry) != 0:
|
80
|
-
validation_errors.append("`ancestry` is not empty")
|
81
|
-
|
82
|
-
# TaskRes specific
|
83
|
-
if isinstance(tasks_ins_res, TaskRes):
|
84
|
-
# Task producer
|
85
|
-
if not tasks_ins_res.task.HasField("producer"):
|
86
|
-
validation_errors.append("`producer` does not set field `producer`")
|
87
|
-
if tasks_ins_res.task.producer.node_id == SUPERLINK_NODE_ID:
|
88
|
-
validation_errors.append("producer MUST provide a valid `node_id`")
|
89
|
-
|
90
|
-
# Task consumer
|
91
|
-
if not tasks_ins_res.task.HasField("consumer"):
|
92
|
-
validation_errors.append("`consumer` does not set field `consumer`")
|
93
|
-
if tasks_ins_res.task.consumer.node_id != SUPERLINK_NODE_ID:
|
94
|
-
validation_errors.append(f"consumer is not {SUPERLINK_NODE_ID}")
|
95
|
-
|
96
|
-
# Content check
|
97
|
-
if tasks_ins_res.task.task_type == "":
|
98
|
-
validation_errors.append("`task_type` MUST be set")
|
99
|
-
if not (
|
100
|
-
tasks_ins_res.task.HasField("recordset")
|
101
|
-
^ tasks_ins_res.task.HasField("error")
|
102
|
-
):
|
103
|
-
validation_errors.append("Either `recordset` or `error` MUST be set")
|
104
|
-
|
105
|
-
# Ancestors
|
106
|
-
if len(tasks_ins_res.task.ancestry) == 0:
|
107
|
-
validation_errors.append("`ancestry` is empty")
|
108
|
-
|
109
|
-
return validation_errors
|
110
22
|
|
111
23
|
|
112
24
|
# pylint: disable-next=too-many-branches
|
@@ -367,7 +367,7 @@ class SecAggPlusWorkflow:
|
|
367
367
|
|
368
368
|
# Send setup configuration to clients
|
369
369
|
cfgs_record = ConfigsRecord(sa_params_dict) # type: ignore
|
370
|
-
content = RecordSet(
|
370
|
+
content = RecordSet({RECORD_KEY_CONFIGS: cfgs_record})
|
371
371
|
|
372
372
|
def make(nid: int) -> Message:
|
373
373
|
return driver.create_message(
|
@@ -417,7 +417,7 @@ class SecAggPlusWorkflow:
|
|
417
417
|
{str(nid): state.nid_to_publickeys[nid] for nid in neighbours}
|
418
418
|
)
|
419
419
|
cfgs_record[Key.STAGE] = Stage.SHARE_KEYS
|
420
|
-
content = RecordSet(
|
420
|
+
content = RecordSet({RECORD_KEY_CONFIGS: cfgs_record})
|
421
421
|
return driver.create_message(
|
422
422
|
content=content,
|
423
423
|
message_type=MessageType.TRAIN,
|
@@ -566,7 +566,7 @@ class SecAggPlusWorkflow:
|
|
566
566
|
Key.DEAD_NODE_ID_LIST: list(neighbours & dead_nids),
|
567
567
|
}
|
568
568
|
cfgs_record = ConfigsRecord(cfgs_dict) # type: ignore
|
569
|
-
content = RecordSet(
|
569
|
+
content = RecordSet({RECORD_KEY_CONFIGS: cfgs_record})
|
570
570
|
return driver.create_message(
|
571
571
|
content=content,
|
572
572
|
message_type=MessageType.TRAIN,
|
flwr/superexec/exec_servicer.py
CHANGED
@@ -163,10 +163,10 @@ class ExecServicer(exec_pb2_grpc.ExecServicer):
|
|
163
163
|
)
|
164
164
|
|
165
165
|
if update_success:
|
166
|
-
|
166
|
+
message_ids: set[UUID] = state.get_message_ids_from_run_id(request.run_id)
|
167
167
|
|
168
|
-
# Delete
|
169
|
-
state.
|
168
|
+
# Delete Messages and their replies for the `run_id`
|
169
|
+
state.delete_messages(message_ids)
|
170
170
|
|
171
171
|
return StopRunResponse(success=update_success)
|
172
172
|
|
{flwr_nightly-1.16.0.dev20250306.dist-info → flwr_nightly-1.16.0.dev20250308.dist-info}/RECORD
RENAMED
@@ -90,8 +90,7 @@ flwr/client/grpc_rere_client/connection.py,sha256=CHC5ssg7SMIN78JsWFKHg2P_fT2G_N
|
|
90
90
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=4EixBCeceM-nLu-eqB1jr0pXaGdkvoSbKmrY1ushQok,5601
|
91
91
|
flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
|
92
92
|
flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
|
93
|
-
flwr/client/message_handler/message_handler.py,sha256=
|
94
|
-
flwr/client/message_handler/task_handler.py,sha256=zr5H2jJNKBTSI4hNGpMxbBAKUP0wSdHCJPAYjQYCxDw,1310
|
93
|
+
flwr/client/message_handler/message_handler.py,sha256=FspUe8JmH8pROpANZVjNtxHX-07yi9A6poLZ9Ro7WK4,6492
|
95
94
|
flwr/client/mod/__init__.py,sha256=37XeXZLFq_tzFVKVtC9JaigM2bSAU7BrGQvMPCE3Q28,1159
|
96
95
|
flwr/client/mod/centraldp_mods.py,sha256=UGwNuqpmOWfLdfJITFgdi1TG-nLjuSb-cbEyoyfDgxQ,5415
|
97
96
|
flwr/client/mod/comms_mods.py,sha256=s_H57ZXUPaWFifodCbRCOZW06IZRsilcOr9F-yWBtxg,2625
|
@@ -106,7 +105,7 @@ flwr/client/nodestate/nodestate.py,sha256=CmHZdR6kVO8tkffg42W0Yb9JdRmrUonZ9deXfU
|
|
106
105
|
flwr/client/nodestate/nodestate_factory.py,sha256=apUbcJG0a_FUVsc0TkNN3q9yovc9u_J34u9iuLFKTLQ,1430
|
107
106
|
flwr/client/numpy_client.py,sha256=chTkL9dOtK_wgUoYtzp5mfDOC1k8xPAd1qPIsB3hcjA,9581
|
108
107
|
flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
|
109
|
-
flwr/client/rest_client/connection.py,sha256=
|
108
|
+
flwr/client/rest_client/connection.py,sha256=c0mHsNXHAsbX4zNelbGd2qrV3vj90FfNE6FsiD6JzuY,12904
|
110
109
|
flwr/client/run_info_store.py,sha256=ZN2Phi4DSLbSyzg8RmzJcVYh1g6eurHOmWRCT7GMtw4,4040
|
111
110
|
flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
|
112
111
|
flwr/client/supernode/app.py,sha256=oBbggh56HoieksBkTdDHAJC8VUFbrmGOP0-D9wdcZek,9265
|
@@ -131,7 +130,7 @@ flwr/common/exit/exit_code.py,sha256=PNEnCrZfOILjfDAFu5m-2YWEJBrk97xglq4zCUlqV7E
|
|
131
130
|
flwr/common/exit_handlers.py,sha256=yclujry30954o0lI7vtknTajskPCvK8TXw2V3RdldXU,3174
|
132
131
|
flwr/common/grpc.py,sha256=K60AIvIqH0CvkkiqBfw5HoxQfbFOL2DrhKPjbZ8raIE,9786
|
133
132
|
flwr/common/logger.py,sha256=Hund1C6bEhMw3GemlzuFK22tXZ27YeHLrFB0b4LP5f8,13041
|
134
|
-
flwr/common/message.py,sha256=
|
133
|
+
flwr/common/message.py,sha256=rWH_JIPnIo263-pC6Ps6XWmIgakRJA_AMBYwhE0qHcQ,14251
|
135
134
|
flwr/common/object_ref.py,sha256=DXL8NtbN17DSYaR-Zc8WYhaG8rv0_D_cclvP7Sa66So,9134
|
136
135
|
flwr/common/parameter.py,sha256=-bFAUayToYDF50FZGrBC1hQYJCQDtB2bbr3ZuVLMtdE,2095
|
137
136
|
flwr/common/pyproject.py,sha256=vEAxl800XiJ1JNJDui8vuVV-08msnB6hLt7o95viZl0,1386
|
@@ -140,7 +139,7 @@ flwr/common/record/configsrecord.py,sha256=i40jOzBx04ysZKECwaw4FdUXMdY9HgdY8GAqK
|
|
140
139
|
flwr/common/record/conversion_utils.py,sha256=ZcsM-vTm_rVtLXLFD2RY3N47V_hUr3ywTdtnpVXnOGU,1202
|
141
140
|
flwr/common/record/metricsrecord.py,sha256=UywkEPbifiu_IyPUFoDJCi8WEVLujlqZERUWAWpc3vs,5752
|
142
141
|
flwr/common/record/parametersrecord.py,sha256=rR0LbeNrKrdK37CiAA56Z5WBq-ZzZ2YNSUkcmr5i2lI,12950
|
143
|
-
flwr/common/record/recordset.py,sha256=
|
142
|
+
flwr/common/record/recordset.py,sha256=ambtB74uF1pooQTfcBt1_xWsjvyDjGMc6awEt20ur2A,8547
|
144
143
|
flwr/common/record/typeddict.py,sha256=q5hL2xkXymuiCprHWb69mUmLpWQk_XXQq0hGQ69YPaw,3599
|
145
144
|
flwr/common/recordset_compat.py,sha256=ViSwA26h6Q55ZmV1LLjSJpcKiipV-p_JpCj4wxdE-Ow,14230
|
146
145
|
flwr/common/retry_invoker.py,sha256=UIDKsn0AitS3fOr43WTqZAdD-TaHkBeTj1QxD7SGba0,14481
|
@@ -152,7 +151,7 @@ flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=zvVAIrIyI6OSzGhpCi8
|
|
152
151
|
flwr/common/secure_aggregation/quantization.py,sha256=NE_ltC3Fx5Z3bMKqJHA95wQf2tkGQlN0VZf3d1w5ABA,2400
|
153
152
|
flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeNB-rHf2gBLd5GL3S9OejCxmILY,2183
|
154
153
|
flwr/common/secure_aggregation/secaggplus_utils.py,sha256=OgYd68YBRaHQYLc-YdExj9CSpwL58bVTaPrdHoAj2AE,3214
|
155
|
-
flwr/common/serde.py,sha256=
|
154
|
+
flwr/common/serde.py,sha256=dgPUMPoKh8r09NERMgfnZKmEiGuKVBje7bSVFwJVZyk,27340
|
156
155
|
flwr/common/telemetry.py,sha256=APKVubU_zJNrE-M_rip6S6Fsu41DxY3tAjFWNOgTmC0,9086
|
157
156
|
flwr/common/typing.py,sha256=Prl8_4tKnIl_Kh5UjJGbw1tnld543EkXrX0RWffJpiA,6900
|
158
157
|
flwr/common/version.py,sha256=aNSxLL49RKeLz8sPcZrsTEWtrAeQ0uxu6tjmfba4O60,1325
|
@@ -209,10 +208,6 @@ flwr/proto/simulationio_pb2.py,sha256=GOOmivAJPLQ6mPXrfKS8CyYeE6Kk-Q5mInLz5pyZSs
|
|
209
208
|
flwr/proto/simulationio_pb2.pyi,sha256=oXx8_FLBe5B54wduZj-f89kub73XxNtQbThuW8YfPAs,2660
|
210
209
|
flwr/proto/simulationio_pb2_grpc.py,sha256=9I3yAfJaeMuG-qH_5Ge45eFOftsIOmL9b8E_xHmcvKw,11232
|
211
210
|
flwr/proto/simulationio_pb2_grpc.pyi,sha256=YHvKtyo7UdbBgdhoN0ndzZeB5vIC3JuR5PAJLrl-OKM,3206
|
212
|
-
flwr/proto/task_pb2.py,sha256=pFKpq2QSvmFQOEpv2bgCG9jPAVauIHXQ9p5ASW-Z6lE,2322
|
213
|
-
flwr/proto/task_pb2.pyi,sha256=PZXt-QkD-hFzTlgNVVx6SGvgbTCweBfisivEi_HfDWc,4183
|
214
|
-
flwr/proto/task_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
215
|
-
flwr/proto/task_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
216
211
|
flwr/proto/transport_pb2.py,sha256=P-jX_tUyk_8xFe-vIUUSfZlHGtk2Ou3A8eXdBKkp5AY,9824
|
217
212
|
flwr/proto/transport_pb2.pyi,sha256=ipHQ03eFBqsxtAuAVefZ2lVr04BZ4YifJCS2eauNmy8,21627
|
218
213
|
flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPcosk,2598
|
@@ -225,13 +220,13 @@ flwr/server/client_proxy.py,sha256=4G-oTwhb45sfWLx2uZdcXD98IZwdTS6F88xe3akCdUg,2
|
|
225
220
|
flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw4,892
|
226
221
|
flwr/server/compat/app.py,sha256=Y0xAqXLn20e6XKGb2nHdeUYdCj_Dux-SyFCc-5ivhqk,3369
|
227
222
|
flwr/server/compat/app_utils.py,sha256=568PfvPME8KHjX-L5GB2rYQa_Wy8iUBGs22KJqn8Xk0,3824
|
228
|
-
flwr/server/compat/driver_client_proxy.py,sha256=
|
223
|
+
flwr/server/compat/driver_client_proxy.py,sha256=1ElUYvn85iMbxfyjbPiGGlmdWzNqKIIgrGJgZ18uS4E,4964
|
229
224
|
flwr/server/compat/legacy_context.py,sha256=wBzBcfV6YO6IQGriM_FdJ5XZfiBBEEJdS_OdAiF47dY,1804
|
230
225
|
flwr/server/criterion.py,sha256=ypbAexbztzGUxNen9RCHF91QeqiEQix4t4Ih3E-42MM,1061
|
231
226
|
flwr/server/driver/__init__.py,sha256=bikRv6CjTwSvYh7tf10gziU5o2YotOWhhftz2tr3KDc,886
|
232
227
|
flwr/server/driver/driver.py,sha256=X072eFWl8Kx-aZbahTkpAc1wwoojr8A4uO2yozwwSbE,5705
|
233
228
|
flwr/server/driver/grpc_driver.py,sha256=CLa9pxN2yf1lIdxkFHVVWrs_9EFHSNUU9SJluNIQwKM,9868
|
234
|
-
flwr/server/driver/inmemory_driver.py,sha256=
|
229
|
+
flwr/server/driver/inmemory_driver.py,sha256=p6p9RykDfoty94izzD4i11Xp7A8t1KUaHpbKbbVZAdU,6407
|
235
230
|
flwr/server/history.py,sha256=qSb5_pPTrwofpSYGsZWzMPkl_4uJ4mJFWesxXDrEvDU,5026
|
236
231
|
flwr/server/run_serverapp.py,sha256=vIPhvJx0i5sEZO4IKM6ruCXmx4ncat76rh0B4KhdhhM,2446
|
237
232
|
flwr/server/server.py,sha256=1ZsFEptmAV-L2vP2etNC9Ed5CLSxpuKzUFkAPQ4l5Xc,17893
|
@@ -267,7 +262,7 @@ flwr/server/strategy/strategy.py,sha256=cXapkD5uDrt5C-RbmWDn9FLoap3Q41i7GKvbmfbC
|
|
267
262
|
flwr/server/superlink/__init__.py,sha256=8tHYCfodUlRD8PCP9fHgvu8cz5N31A2QoRVL0jDJ15E,707
|
268
263
|
flwr/server/superlink/driver/__init__.py,sha256=5soEK5QSvxNjmJQ-CGTWROc4alSAeU0e9Ad9RDhsd3E,717
|
269
264
|
flwr/server/superlink/driver/serverappio_grpc.py,sha256=UzHwo6qYZMeOhr7nn1iZbcyDSmwvnq_kpYH0mEAndW0,2173
|
270
|
-
flwr/server/superlink/driver/serverappio_servicer.py,sha256=
|
265
|
+
flwr/server/superlink/driver/serverappio_servicer.py,sha256=sZKqHOLM7sOqOlnNedwWpPNAqx5hV43bSx6eo6fbfak,12953
|
271
266
|
flwr/server/superlink/ffs/__init__.py,sha256=FAY-zShcfPmOxosok2QyT6hTNMNctG8cH9s_nIl8jkI,840
|
272
267
|
flwr/server/superlink/ffs/disk_ffs.py,sha256=n_Ah0sQwXGVQ9wj5965nLjdkQQbpoHCljjXKFnwftsU,3297
|
273
268
|
flwr/server/superlink/ffs/ffs.py,sha256=qLI1UfosJugu2BKOJWqHIhafTm-YiuKqGf3OGWPH0NM,2395
|
@@ -281,37 +276,37 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=JkAH_nIZaqe_9kntrg26
|
|
281
276
|
flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=h3EhqgelegVC4EjOXH5birmAnMoCBJcP7jpHYCnHZPk,4887
|
282
277
|
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=mxPxyEF0IW0vV41Bqk1zfKOdRDEvXPwzJyMiRMg7nTI,5173
|
283
278
|
flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=j2hyC342am-_Hgp1g80Y3fGDzfTI6n8QOOn2PyWf4eg,758
|
284
|
-
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=
|
279
|
+
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=_J8kmdYiRoT8iUJenYic674VjX2lot8iigN3vnaWfMg,5528
|
285
280
|
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=KPgAcnYsKPPI7_iYNSnqGbyv4tsqZuBqrTiREwVBJiM,6984
|
286
281
|
flwr/server/superlink/fleet/message_handler/__init__.py,sha256=h8oLD7uo5lKICPy0rRdKRjTYe62u8PKkT_fA4xF5JPA,731
|
287
|
-
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=
|
282
|
+
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=1pC9U-9D7Nhh9bwRZjtLxgz3osgG-tcXS-k-cAQjeF0,5242
|
288
283
|
flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
|
289
284
|
flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=L7sg9Uyp7l1bViYNWjnpaDvcG_j7FYKWC1XL-8bMpsg,6710
|
290
285
|
flwr/server/superlink/fleet/vce/__init__.py,sha256=TZJsKTpYO_djv2EXx9Ji62I8TA0JiZF8jvRyJRZkAes,784
|
291
286
|
flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=cGgal5qpd0_MwEdIqjJbHHSIgGa6GSPoI5_byUwtG_k,1437
|
292
|
-
flwr/server/superlink/fleet/vce/backend/backend.py,sha256=
|
287
|
+
flwr/server/superlink/fleet/vce/backend/backend.py,sha256=lr_uBMaoCp7qs59ZRpCI07wp-EsClNB-7QWFfF0r95c,2195
|
293
288
|
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=jsUkFEVQTnrucK1jNQ_cUM8YwL7W4MQNA1GAf8ibRdg,7156
|
294
|
-
flwr/server/superlink/fleet/vce/vce_api.py,sha256=
|
289
|
+
flwr/server/superlink/fleet/vce/vce_api.py,sha256=xQbWzfIsXYwcEHoYxrgDcx3yGJKUoBdkc8zkJ8onzBs,12802
|
295
290
|
flwr/server/superlink/linkstate/__init__.py,sha256=v-2JyJlCB3qyhMNwMjmcNVOq4rkooqFU0LHH8Zo1jls,1064
|
296
|
-
flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=
|
297
|
-
flwr/server/superlink/linkstate/linkstate.py,sha256=
|
291
|
+
flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=Ss64nq7MgbHwx4LOER-YV7vynkzC1K4XVNk542oPg7s,21305
|
292
|
+
flwr/server/superlink/linkstate/linkstate.py,sha256=YB3SryGNvt-bE-unYjoloJt9d3xAUPBNLK4mor8gk3M,11851
|
298
293
|
flwr/server/superlink/linkstate/linkstate_factory.py,sha256=ISSMjDlwuN7swxjOeYlTNpI_kuZ8PGkMcJnf1dbhUSE,2069
|
299
|
-
flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=
|
300
|
-
flwr/server/superlink/linkstate/utils.py,sha256=
|
294
|
+
flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=Wsx5gD6WRIMLlKarvVV1_dlS7jmfno-yTVW1-rgcIto,38276
|
295
|
+
flwr/server/superlink/linkstate/utils.py,sha256=UunwphV90p9XzvGFJpZr3C64HgIyXjhRPNBVS3HSL8M,12696
|
301
296
|
flwr/server/superlink/simulation/__init__.py,sha256=mg-oapC9dkzEfjXPQFior5lpWj4g9kwbLovptyYM_g0,718
|
302
297
|
flwr/server/superlink/simulation/simulationio_grpc.py,sha256=8aUrZZLdvprKUfLLqFID4aItus9beU6m1qLQYIPB7k0,2224
|
303
298
|
flwr/server/superlink/simulation/simulationio_servicer.py,sha256=J_TmdqM-Bxgp-iPEI3tvCuBpykw1UX0FouMQalEYAF4,6907
|
304
299
|
flwr/server/superlink/utils.py,sha256=KVb3K_g2vYfu9TnftcN0ewmev133WZcjuEePMm8d7GE,2137
|
305
300
|
flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
|
306
|
-
flwr/server/utils/__init__.py,sha256=
|
301
|
+
flwr/server/utils/__init__.py,sha256=vnS9EAyVUsBOmWeYZXMoBcjeEFhqN4_KQQVk5EBiWG0,884
|
307
302
|
flwr/server/utils/tensorboard.py,sha256=gEBD8w_5uaIfp5aw5RYH66lYZpd_SfkObHQ7eDd9MUk,5466
|
308
|
-
flwr/server/utils/validator.py,sha256=
|
303
|
+
flwr/server/utils/validator.py,sha256=11olMv1UyeaxLa1ci5gsJ0WALk7VwWGCQYCvLsZ56LY,3604
|
309
304
|
flwr/server/workflow/__init__.py,sha256=SXY0XkwbkezFBxxrFB5hKUtmtAgnYISBkPouR1V71ss,902
|
310
305
|
flwr/server/workflow/constant.py,sha256=q4DLdR8Krlxuewq2AQjwTL75hphxE5ODNz4AhViHMXk,1082
|
311
306
|
flwr/server/workflow/default_workflows.py,sha256=RwDX7hXOI1-q4FH9A0onHvadqa5yXTzslpmShPpXodk,14152
|
312
307
|
flwr/server/workflow/secure_aggregation/__init__.py,sha256=3XlgDOjD_hcukTGl6Bc1B-8M_dPlVSJuTbvXIbiO-Ic,880
|
313
308
|
flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=l2IdMdJjs1bgHs5vQgLSOVzar7v2oxUn46oCrnVE1rM,5839
|
314
|
-
flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=
|
309
|
+
flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=acfqyzOebe0WvXG2Z7yd7WtEtGJI3eNK2f0d_kjSdnM,29623
|
315
310
|
flwr/simulation/__init__.py,sha256=5UcDVJNjFoSwWqHbGM1hKfTTUUNdwAtuoNvNrfvdkUY,1556
|
316
311
|
flwr/simulation/app.py,sha256=xRVSJBnTXQUqWIYOzENfTnJlZ24CSNhWkhVEFxIu4I0,9758
|
317
312
|
flwr/simulation/legacy_app.py,sha256=qpZI4Vvzr5TyWSLTRrMP-jN4rH2C25JI9nVSSjhFwSQ,15861
|
@@ -325,12 +320,12 @@ flwr/superexec/__init__.py,sha256=fcj366jh4RFby_vDwLroU4kepzqbnJgseZD_jUr_Mko,71
|
|
325
320
|
flwr/superexec/app.py,sha256=Z6kYHWd62YL0Q4YKyCAbt_BcefNfbKH6V-jCC-1NkZM,1842
|
326
321
|
flwr/superexec/deployment.py,sha256=wZ9G42gGS91knfplswh95MnQ83Fzu-rs6wcuNgDmmvY,6735
|
327
322
|
flwr/superexec/exec_grpc.py,sha256=ttA9qoZzSLF0Mfk1L4hzOkMSNuj5rR58_kKBYwcyrAg,2864
|
328
|
-
flwr/superexec/exec_servicer.py,sha256=
|
323
|
+
flwr/superexec/exec_servicer.py,sha256=4UpzJqPUHkBG2PZNe2lrX7XFVDOL6yw_HcoBHxuXE9A,8349
|
329
324
|
flwr/superexec/exec_user_auth_interceptor.py,sha256=YtvcjrD2hMVmZ3y9wHuGI6FwmG_Y__q112t4fFnypy0,3793
|
330
325
|
flwr/superexec/executor.py,sha256=_B55WW2TD1fBINpabSSDRenVHXYmvlfhv-k8hJKU4lQ,3115
|
331
326
|
flwr/superexec/simulation.py,sha256=WQDon15oqpMopAZnwRZoTICYCfHqtkvFSqiTQ2hLD_g,4088
|
332
|
-
flwr_nightly-1.16.0.
|
333
|
-
flwr_nightly-1.16.0.
|
334
|
-
flwr_nightly-1.16.0.
|
335
|
-
flwr_nightly-1.16.0.
|
336
|
-
flwr_nightly-1.16.0.
|
327
|
+
flwr_nightly-1.16.0.dev20250308.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
328
|
+
flwr_nightly-1.16.0.dev20250308.dist-info/METADATA,sha256=sVPMDNkXRJ3MgQLL52bkHUFA0gTGN3e0IPeMNaQ9tvg,15877
|
329
|
+
flwr_nightly-1.16.0.dev20250308.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
330
|
+
flwr_nightly-1.16.0.dev20250308.dist-info/entry_points.txt,sha256=JlNxX3qhaV18_2yj5a3kJW1ESxm31cal9iS_N_pf1Rk,538
|
331
|
+
flwr_nightly-1.16.0.dev20250308.dist-info/RECORD,,
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# Copyright 2023 Flower Labs GmbH. All Rights Reserved.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
# ==============================================================================
|
15
|
-
"""Task handling."""
|
16
|
-
|
17
|
-
|
18
|
-
from flwr.proto.task_pb2 import TaskIns # pylint: disable=E0611
|
19
|
-
|
20
|
-
|
21
|
-
def validate_task_ins(task_ins: TaskIns) -> bool:
|
22
|
-
"""Validate a TaskIns before it entering the message handling process.
|
23
|
-
|
24
|
-
Parameters
|
25
|
-
----------
|
26
|
-
task_ins: TaskIns
|
27
|
-
The task instruction coming from the server.
|
28
|
-
|
29
|
-
Returns
|
30
|
-
-------
|
31
|
-
is_valid: bool
|
32
|
-
True if the TaskIns is deemed valid and therefore suitable for
|
33
|
-
undergoing the message handling process, False otherwise.
|
34
|
-
"""
|
35
|
-
if not (task_ins.HasField("task") and task_ins.task.HasField("recordset")):
|
36
|
-
return False
|
37
|
-
return True
|
flwr/proto/task_pb2.py
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
-
# source: flwr/proto/task.proto
|
4
|
-
# Protobuf Python Version: 4.25.1
|
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
|
-
from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
|
17
|
-
from flwr.proto import error_pb2 as flwr_dot_proto_dot_error__pb2
|
18
|
-
|
19
|
-
|
20
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/task.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x16\x66lwr/proto/error.proto\"\xf6\x01\n\x04Task\x12\"\n\x08producer\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\"\n\x08\x63onsumer\x18\x02 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x12\n\ncreated_at\x18\x03 \x01(\x01\x12\x14\n\x0c\x64\x65livered_at\x18\x04 \x01(\t\x12\x0b\n\x03ttl\x18\x06 \x01(\x01\x12\x10\n\x08\x61ncestry\x18\x07 \x03(\t\x12\x11\n\ttask_type\x18\x08 \x01(\t\x12(\n\trecordset\x18\t \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\n \x01(\x0b\x32\x11.flwr.proto.Error\"\\\n\x07TaskIns\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x04\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Task\"\\\n\x07TaskRes\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x04\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Taskb\x06proto3')
|
21
|
-
|
22
|
-
_globals = globals()
|
23
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
24
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.task_pb2', _globals)
|
25
|
-
if _descriptor._USE_C_DESCRIPTORS == False:
|
26
|
-
DESCRIPTOR._options = None
|
27
|
-
_globals['_TASK']._serialized_start=113
|
28
|
-
_globals['_TASK']._serialized_end=359
|
29
|
-
_globals['_TASKINS']._serialized_start=361
|
30
|
-
_globals['_TASKINS']._serialized_end=453
|
31
|
-
_globals['_TASKRES']._serialized_start=455
|
32
|
-
_globals['_TASKRES']._serialized_end=547
|
33
|
-
# @@protoc_insertion_point(module_scope)
|