flwr-nightly 1.19.0.dev20250607__py3-none-any.whl → 1.19.0.dev20250609__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/common/inflatable.py +0 -12
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +4 -7
- flwr/server/superlink/serverappio/serverappio_servicer.py +7 -7
- flwr/supercore/object_store/in_memory_object_store.py +5 -1
- {flwr_nightly-1.19.0.dev20250607.dist-info → flwr_nightly-1.19.0.dev20250609.dist-info}/METADATA +1 -1
- {flwr_nightly-1.19.0.dev20250607.dist-info → flwr_nightly-1.19.0.dev20250609.dist-info}/RECORD +8 -8
- {flwr_nightly-1.19.0.dev20250607.dist-info → flwr_nightly-1.19.0.dev20250609.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.19.0.dev20250607.dist-info → flwr_nightly-1.19.0.dev20250609.dist-info}/entry_points.txt +0 -0
flwr/common/inflatable.py
CHANGED
@@ -18,11 +18,9 @@
|
|
18
18
|
from __future__ import annotations
|
19
19
|
|
20
20
|
import hashlib
|
21
|
-
from logging import ERROR
|
22
21
|
from typing import TypeVar, cast
|
23
22
|
|
24
23
|
from .constant import HEAD_BODY_DIVIDER, HEAD_VALUE_DIVIDER
|
25
|
-
from .logger import log
|
26
24
|
|
27
25
|
|
28
26
|
class UnexpectedObjectContentError(Exception):
|
@@ -175,16 +173,6 @@ def get_object_body_len_from_object_content(object_content: bytes) -> int:
|
|
175
173
|
return get_object_head_values_from_object_content(object_content)[2]
|
176
174
|
|
177
175
|
|
178
|
-
def check_body_len_consistency(object_content: bytes) -> bool:
|
179
|
-
"""Check that the object body is of length as specified in the head."""
|
180
|
-
try:
|
181
|
-
body_len = get_object_body_len_from_object_content(object_content)
|
182
|
-
return body_len == len(_get_object_body(object_content))
|
183
|
-
except ValueError:
|
184
|
-
log(ERROR, "Object content does match the expected format.")
|
185
|
-
return False
|
186
|
-
|
187
|
-
|
188
176
|
def get_object_head_values_from_object_content(
|
189
177
|
object_content: bytes,
|
190
178
|
) -> tuple[str, list[str], int]:
|
@@ -21,7 +21,7 @@ import grpc
|
|
21
21
|
from google.protobuf.json_format import MessageToDict
|
22
22
|
|
23
23
|
from flwr.common.constant import Status
|
24
|
-
from flwr.common.inflatable import
|
24
|
+
from flwr.common.inflatable import UnexpectedObjectContentError
|
25
25
|
from flwr.common.logger import log
|
26
26
|
from flwr.common.typing import InvalidRunStatusException
|
27
27
|
from flwr.proto import fleet_pb2_grpc # pylint: disable=E0611
|
@@ -200,12 +200,6 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
|
|
200
200
|
# Cancel insertion in ObjectStore
|
201
201
|
context.abort(grpc.StatusCode.FAILED_PRECONDITION, "Unexpected node ID.")
|
202
202
|
|
203
|
-
if not check_body_len_consistency(request.object_content):
|
204
|
-
# Cancel insertion in ObjectStore
|
205
|
-
context.abort(
|
206
|
-
grpc.StatusCode.FAILED_PRECONDITION, "Unexpected object length"
|
207
|
-
)
|
208
|
-
|
209
203
|
# Init store
|
210
204
|
store = self.objectstore_factory.store()
|
211
205
|
|
@@ -216,6 +210,9 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
|
|
216
210
|
stored = True
|
217
211
|
except (NoObjectInStoreError, ValueError) as e:
|
218
212
|
log(ERROR, str(e))
|
213
|
+
except UnexpectedObjectContentError as e:
|
214
|
+
# Object content is not valid
|
215
|
+
context.abort(grpc.StatusCode.FAILED_PRECONDITION, str(e))
|
219
216
|
|
220
217
|
return PushObjectResponse(stored=stored)
|
221
218
|
|
@@ -23,7 +23,10 @@ import grpc
|
|
23
23
|
|
24
24
|
from flwr.common import Message
|
25
25
|
from flwr.common.constant import SUPERLINK_NODE_ID, Status
|
26
|
-
from flwr.common.inflatable import
|
26
|
+
from flwr.common.inflatable import (
|
27
|
+
UnexpectedObjectContentError,
|
28
|
+
get_descendant_object_ids,
|
29
|
+
)
|
27
30
|
from flwr.common.logger import log
|
28
31
|
from flwr.common.serde import (
|
29
32
|
context_from_proto,
|
@@ -424,12 +427,6 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
|
|
424
427
|
# Cancel insertion in ObjectStore
|
425
428
|
context.abort(grpc.StatusCode.FAILED_PRECONDITION, "Unexpected node ID.")
|
426
429
|
|
427
|
-
if not check_body_len_consistency(request.object_content):
|
428
|
-
# Cancel insertion in ObjectStore
|
429
|
-
context.abort(
|
430
|
-
grpc.StatusCode.FAILED_PRECONDITION, "Unexpected object length."
|
431
|
-
)
|
432
|
-
|
433
430
|
# Init store
|
434
431
|
store = self.objectstore_factory.store()
|
435
432
|
|
@@ -440,6 +437,9 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
|
|
440
437
|
stored = True
|
441
438
|
except (NoObjectInStoreError, ValueError) as e:
|
442
439
|
log(ERROR, str(e))
|
440
|
+
except UnexpectedObjectContentError as e:
|
441
|
+
# Object content is not valid
|
442
|
+
context.abort(grpc.StatusCode.FAILED_PRECONDITION, str(e))
|
443
443
|
|
444
444
|
return PushObjectResponse(stored=stored)
|
445
445
|
|
@@ -18,6 +18,7 @@
|
|
18
18
|
from typing import Optional
|
19
19
|
|
20
20
|
from flwr.common.inflatable import get_object_id, is_valid_sha256_hash
|
21
|
+
from flwr.common.inflatable_utils import validate_object_content
|
21
22
|
|
22
23
|
from .object_store import NoObjectInStoreError, ObjectStore
|
23
24
|
|
@@ -52,12 +53,15 @@ class InMemoryObjectStore(ObjectStore):
|
|
52
53
|
f"Object with ID '{object_id}' was not pre-registered."
|
53
54
|
)
|
54
55
|
|
55
|
-
# Verify object_id and object_content match
|
56
56
|
if self.verify:
|
57
|
+
# Verify object_id and object_content match
|
57
58
|
object_id_from_content = get_object_id(object_content)
|
58
59
|
if object_id != object_id_from_content:
|
59
60
|
raise ValueError(f"Object ID {object_id} does not match content hash")
|
60
61
|
|
62
|
+
# Validate object content
|
63
|
+
validate_object_content(content=object_content)
|
64
|
+
|
61
65
|
# Return if object is already present in the store
|
62
66
|
if self.store[object_id] != b"":
|
63
67
|
return
|
{flwr_nightly-1.19.0.dev20250607.dist-info → flwr_nightly-1.19.0.dev20250609.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.19.0.
|
3
|
+
Version: 1.19.0.dev20250609
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
5
5
|
License: Apache-2.0
|
6
6
|
Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
|
{flwr_nightly-1.19.0.dev20250607.dist-info → flwr_nightly-1.19.0.dev20250609.dist-info}/RECORD
RENAMED
@@ -122,7 +122,7 @@ flwr/common/exit/exit_code.py,sha256=PNEnCrZfOILjfDAFu5m-2YWEJBrk97xglq4zCUlqV7E
|
|
122
122
|
flwr/common/exit_handlers.py,sha256=IaqJ60fXZuu7McaRYnoYKtlbH9t4Yl9goNExKqtmQbs,4304
|
123
123
|
flwr/common/grpc.py,sha256=manTaHaPiyYngUq1ErZvvV2B2GxlXUUUGRy3jc3TBIQ,9798
|
124
124
|
flwr/common/heartbeat.py,sha256=SyEpNDnmJ0lni0cWO67rcoJVKasCLmkNHm3dKLeNrLU,5749
|
125
|
-
flwr/common/inflatable.py,sha256=
|
125
|
+
flwr/common/inflatable.py,sha256=gdAICtXklkQRMrxoTYEbzJl7AeFqZtUm4JU6f2it9FM,7264
|
126
126
|
flwr/common/inflatable_grpc_utils.py,sha256=M982VQ8x1wh4QnLXR-IKWdtGuOFACvIsU6lYbbs1TI8,13040
|
127
127
|
flwr/common/inflatable_utils.py,sha256=hPwap-P9pxHcxo-EtxtrnKNiFA2HsNGJaKX2b002PnE,2892
|
128
128
|
flwr/common/logger.py,sha256=JbRf6E2vQxXzpDBq1T8IDUJo_usu3gjWEBPQ6uKcmdg,13049
|
@@ -285,7 +285,7 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=KouR9PUcrPmMtoLooF4O
|
|
285
285
|
flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=iSf0mbBAlig7G6subQwBSVjcUCgSihONKdZ1RmQPTOk,4887
|
286
286
|
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=OsS-6GgCIzMMZDVu5Y-OKjynHVUrpdc_5OrtuB-IbU0,5174
|
287
287
|
flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=ahDJJ1e-lDxBpeBMgPk7YZt2wB38_QltcpOC0gLbpFs,758
|
288
|
-
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=
|
288
|
+
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=iD45MSaGxPmkmPp_Y6XR-crUaQIcAcfyw0qJZwt7C0o,9106
|
289
289
|
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=DrHubsaLgJCwCeeJPYogQTiP0xYqjxwnT9rh7OP7BoU,6984
|
290
290
|
flwr/server/superlink/fleet/message_handler/__init__.py,sha256=fHsRV0KvJ8HtgSA4_YBsEzuhJLjO8p6xx4aCY2oE1p4,731
|
291
291
|
flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=P43PapLZJKbZ0Oo0kP_KcO5zSMvO53SakQgPMiR5d1M,6500
|
@@ -304,7 +304,7 @@ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=sHJPK1w0tP0m2WCXH2F9l
|
|
304
304
|
flwr/server/superlink/linkstate/utils.py,sha256=IeLh7iGRCHU5MEWOl7iriaSE4L__8GWOa2OleXadK5M,15444
|
305
305
|
flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
|
306
306
|
flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=6-FUUt0GiLcBPljj8bBrUNeAITUoDQOLzaMihKo52hg,2326
|
307
|
-
flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=
|
307
|
+
flwr/server/superlink/serverappio/serverappio_servicer.py,sha256=mRDMklbizitbDcN6hrCSp0NpsFegdAE84MHEulW7eBQ,17232
|
308
308
|
flwr/server/superlink/simulation/__init__.py,sha256=Ry8DrNaZCMcQXvUc4FoCN2m3dvUQgWjasfp015o3Ec4,718
|
309
309
|
flwr/server/superlink/simulation/simulationio_grpc.py,sha256=0l0F-UjYEk6W7HZmI28PbJQLFxSi_vBHRkdchgdaSMQ,2224
|
310
310
|
flwr/server/superlink/simulation/simulationio_servicer.py,sha256=aJezU8RSJswcmWm7Eoy0BqsU13jrcfuFwX3ljm-cORM,7719
|
@@ -331,7 +331,7 @@ flwr/simulation/run_simulation.py,sha256=Nvw_6hI71aE2nU95_tt1F9VSo3OJWrvA97e3XZu
|
|
331
331
|
flwr/simulation/simulationio_connection.py,sha256=mzS1C6EEREwQDPceDo30anAasmTDLb9qqV2tXlBhOUA,3494
|
332
332
|
flwr/supercore/__init__.py,sha256=pqkFoow_E6UhbBlhmoD1gmTH-33yJRhBsIZqxRPFZ7U,755
|
333
333
|
flwr/supercore/object_store/__init__.py,sha256=cdfPAmjINY6iOp8oI_LdcVh2simg469Mkdl4LLV4kHI,911
|
334
|
-
flwr/supercore/object_store/in_memory_object_store.py,sha256=
|
334
|
+
flwr/supercore/object_store/in_memory_object_store.py,sha256=8EfTJHb6-RObWmzb2ZxBgxMobCod6NP820DzrMnYdbY,4081
|
335
335
|
flwr/supercore/object_store/object_store.py,sha256=yZ6A_JgK_aGF54zlPISLK_d9FvxpYJlI2qNfmQBdlzM,4328
|
336
336
|
flwr/supercore/object_store/object_store_factory.py,sha256=QVwE2ywi7vsj2iKfvWWnNw3N_I7Rz91NUt2RpcbJ7iM,1527
|
337
337
|
flwr/superexec/__init__.py,sha256=YFqER0IJc1XEWfsX6AxZ9LSRq0sawPYrNYki-brvTIc,715
|
@@ -358,7 +358,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
|
|
358
358
|
flwr/supernode/servicer/clientappio/__init__.py,sha256=vJyOjO2FXZ2URbnthmdsgs6948wbYfdq1L1V8Um-Lr8,895
|
359
359
|
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=LmzkxtNQBn5vVrHc0Bhq2WqaK6-LM2v4kfLBN0PiNNM,8522
|
360
360
|
flwr/supernode/start_client_internal.py,sha256=5CwTNV-XmIhwR1jv3G7aQAXGhf6OFWS6U-vmxY1iKGA,16984
|
361
|
-
flwr_nightly-1.19.0.
|
362
|
-
flwr_nightly-1.19.0.
|
363
|
-
flwr_nightly-1.19.0.
|
364
|
-
flwr_nightly-1.19.0.
|
361
|
+
flwr_nightly-1.19.0.dev20250609.dist-info/METADATA,sha256=HloLs2HPXsSLn_UVyxQf1G9yLasbznXJstMQ1Cr1mo4,15910
|
362
|
+
flwr_nightly-1.19.0.dev20250609.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
363
|
+
flwr_nightly-1.19.0.dev20250609.dist-info/entry_points.txt,sha256=jNpDXGBGgs21RqUxelF_jwGaxtqFwm-MQyfz-ZqSjrA,367
|
364
|
+
flwr_nightly-1.19.0.dev20250609.dist-info/RECORD,,
|
{flwr_nightly-1.19.0.dev20250607.dist-info → flwr_nightly-1.19.0.dev20250609.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|