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 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 check_body_len_consistency
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 check_body_len_consistency, get_descendant_object_ids
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.19.0.dev20250607
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
@@ -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=b8Br0TKB_yMijbICPVD4gbGMr4l0iXtH9s8MztTry4A,7717
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=SsMtj1EeOgumffWtYTQt-ii3JPldszXvP91C3axznq8,9176
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=GElRmXPxkrbnqD9lMVvJJHQF5hYJODL8uhAvvI97ItQ,17290
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=OPZPNM2CLi5tZq9bVBKAzPch4CRXrUz_20Op1bRsFJc,3913
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.dev20250607.dist-info/METADATA,sha256=YhYf05eYMhWNR6GdMIdEh39UZLZMmlX3x0MifwkcURo,15910
362
- flwr_nightly-1.19.0.dev20250607.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
363
- flwr_nightly-1.19.0.dev20250607.dist-info/entry_points.txt,sha256=jNpDXGBGgs21RqUxelF_jwGaxtqFwm-MQyfz-ZqSjrA,367
364
- flwr_nightly-1.19.0.dev20250607.dist-info/RECORD,,
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,,