flwr-nightly 1.23.0.dev20251007__py3-none-any.whl → 1.23.0.dev20251008__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.
Files changed (32) hide show
  1. flwr/cli/auth_plugin/__init__.py +7 -3
  2. flwr/cli/log.py +2 -2
  3. flwr/cli/login/login.py +4 -13
  4. flwr/cli/ls.py +2 -2
  5. flwr/cli/pull.py +2 -2
  6. flwr/cli/run/run.py +2 -2
  7. flwr/cli/stop.py +2 -2
  8. flwr/cli/supernode/ls.py +2 -2
  9. flwr/cli/utils.py +28 -44
  10. flwr/client/grpc_rere_client/connection.py +6 -4
  11. flwr/client/grpc_rere_client/{client_interceptor.py → node_auth_client_interceptor.py} +2 -2
  12. flwr/client/rest_client/connection.py +7 -1
  13. flwr/common/constant.py +10 -0
  14. flwr/proto/fleet_pb2.py +22 -22
  15. flwr/proto/fleet_pb2.pyi +4 -1
  16. flwr/proto/node_pb2.py +1 -1
  17. flwr/server/app.py +32 -31
  18. flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +8 -4
  19. flwr/server/superlink/fleet/grpc_rere/{server_interceptor.py → node_auth_server_interceptor.py} +18 -37
  20. flwr/server/superlink/fleet/message_handler/message_handler.py +1 -1
  21. flwr/server/superlink/fleet/vce/vce_api.py +7 -1
  22. flwr/server/superlink/linkstate/in_memory_linkstate.py +39 -27
  23. flwr/server/superlink/linkstate/linkstate.py +1 -1
  24. flwr/server/superlink/linkstate/sqlite_linkstate.py +37 -21
  25. flwr/server/utils/validator.py +2 -3
  26. flwr/superlink/auth_plugin/__init__.py +29 -0
  27. flwr/superlink/servicer/control/control_grpc.py +9 -7
  28. flwr/superlink/servicer/control/control_servicer.py +34 -46
  29. {flwr_nightly-1.23.0.dev20251007.dist-info → flwr_nightly-1.23.0.dev20251008.dist-info}/METADATA +1 -1
  30. {flwr_nightly-1.23.0.dev20251007.dist-info → flwr_nightly-1.23.0.dev20251008.dist-info}/RECORD +32 -32
  31. {flwr_nightly-1.23.0.dev20251007.dist-info → flwr_nightly-1.23.0.dev20251008.dist-info}/WHEEL +0 -0
  32. {flwr_nightly-1.23.0.dev20251007.dist-info → flwr_nightly-1.23.0.dev20251008.dist-info}/entry_points.txt +0 -0
@@ -85,7 +85,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
85
85
  ffs_factory: FfsFactory,
86
86
  objectstore_factory: ObjectStoreFactory,
87
87
  is_simulation: bool,
88
- authn_plugin: Optional[ControlAuthnPlugin] = None,
88
+ authn_plugin: ControlAuthnPlugin,
89
89
  artifact_provider: Optional[ArtifactProvider] = None,
90
90
  ) -> None:
91
91
  self.linkstate_factory = linkstate_factory
@@ -111,7 +111,8 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
111
111
  )
112
112
  return StartRunResponse()
113
113
 
114
- flwr_aid = shared_account_info.get().flwr_aid if self.authn_plugin else None
114
+ flwr_aid = shared_account_info.get().flwr_aid
115
+ _check_flwr_aid_exists(flwr_aid, context)
115
116
  override_config = user_config_from_proto(request.override_config)
116
117
  federation_options = config_record_from_proto(request.federation_options)
117
118
  fab_file = request.fab.content
@@ -185,12 +186,9 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
185
186
  if not run:
186
187
  context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
187
188
 
188
- # If account auth is enabled, check if `flwr_aid` matches the run's `flwr_aid`
189
- if self.authn_plugin:
190
- flwr_aid = shared_account_info.get().flwr_aid
191
- _check_flwr_aid_in_run(
192
- flwr_aid=flwr_aid, run=cast(Run, run), context=context
193
- )
189
+ # Check if `flwr_aid` matches the run's `flwr_aid`
190
+ flwr_aid = shared_account_info.get().flwr_aid
191
+ _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=cast(Run, run), context=context)
194
192
 
195
193
  after_timestamp = request.after_timestamp + 1e-6
196
194
  while context.is_active():
@@ -226,20 +224,11 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
226
224
 
227
225
  # Build a set of run IDs for `flwr ls --runs`
228
226
  if not request.HasField("run_id"):
229
- if self.authn_plugin:
230
- # If no `run_id` is specified and account auth is enabled,
231
- # return run IDs for the authenticated account
232
- flwr_aid = shared_account_info.get().flwr_aid
233
- if flwr_aid is None:
234
- context.abort(
235
- grpc.StatusCode.PERMISSION_DENIED,
236
- "️⛔️ Account authentication is enabled, but `flwr_aid` is None",
237
- )
238
- run_ids = state.get_run_ids(flwr_aid=flwr_aid)
239
- else:
240
- # If no `run_id` is specified and no account auth is enabled,
241
- # return all run IDs
242
- run_ids = state.get_run_ids(None)
227
+ # If no `run_id` is specified and account auth is enabled,
228
+ # return run IDs for the authenticated account
229
+ flwr_aid = shared_account_info.get().flwr_aid
230
+ _check_flwr_aid_exists(flwr_aid, context)
231
+ run_ids = state.get_run_ids(flwr_aid=flwr_aid)
243
232
  # Build a set of run IDs for `flwr ls --run-id <run_id>`
244
233
  else:
245
234
  # Retrieve run ID and run
@@ -249,14 +238,11 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
249
238
  # Exit if `run_id` not found
250
239
  if not run:
251
240
  context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
241
+ raise grpc.RpcError() # This line is unreachable
252
242
 
253
- # If account auth is enabled,
254
- # check if `flwr_aid` matches the run's `flwr_aid`
255
- if self.authn_plugin:
256
- flwr_aid = shared_account_info.get().flwr_aid
257
- _check_flwr_aid_in_run(
258
- flwr_aid=flwr_aid, run=cast(Run, run), context=context
259
- )
243
+ # Check if `flwr_aid` matches the run's `flwr_aid`
244
+ flwr_aid = shared_account_info.get().flwr_aid
245
+ _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
260
246
 
261
247
  run_ids = {run_id}
262
248
 
@@ -278,13 +264,11 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
278
264
  # Exit if `run_id` not found
279
265
  if not run:
280
266
  context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
267
+ raise grpc.RpcError() # This line is unreachable
281
268
 
282
- # If account auth is enabled, check if `flwr_aid` matches the run's `flwr_aid`
283
- if self.authn_plugin:
284
- flwr_aid = shared_account_info.get().flwr_aid
285
- _check_flwr_aid_in_run(
286
- flwr_aid=flwr_aid, run=cast(Run, run), context=context
287
- )
269
+ # Check if `flwr_aid` matches the run's `flwr_aid`
270
+ flwr_aid = shared_account_info.get().flwr_aid
271
+ _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
288
272
 
289
273
  run_status = state.get_run_status({run_id})[run_id]
290
274
  if run_status.status == Status.FINISHED:
@@ -392,10 +376,9 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
392
376
  grpc.StatusCode.FAILED_PRECONDITION, PULL_UNFINISHED_RUN_MESSAGE
393
377
  )
394
378
 
395
- # Check if `flwr_aid` matches the run's `flwr_aid` when account auth is enabled
396
- if self.authn_plugin:
397
- flwr_aid = shared_account_info.get().flwr_aid
398
- _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
379
+ # Check if `flwr_aid` matches the run's `flwr_aid`
380
+ flwr_aid = shared_account_info.get().flwr_aid
381
+ _check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
399
382
 
400
383
  # Call artifact provider
401
384
  download_url = self.artifact_provider.get_url(run_id)
@@ -494,24 +477,29 @@ def _create_list_runs_response(
494
477
  )
495
478
 
496
479
 
497
- def _check_flwr_aid_in_run(
498
- flwr_aid: Optional[str], run: Run, context: grpc.ServicerContext
480
+ def _check_flwr_aid_exists(
481
+ flwr_aid: Optional[str], context: grpc.ServicerContext
499
482
  ) -> None:
500
- """Guard clause to check if `flwr_aid` matches the run's `flwr_aid`."""
501
- # `flwr_aid` must not be None. Abort if it is None.
483
+ """Guard clause to check if `flwr_aid` exists."""
502
484
  if flwr_aid is None:
503
485
  context.abort(
504
486
  grpc.StatusCode.PERMISSION_DENIED,
505
- "️⛔️ Account authentication is enabled, but `flwr_aid` is None",
487
+ "️⛔️ Failed to fetch the account information.",
506
488
  )
489
+ raise RuntimeError # This line is unreachable
490
+
507
491
 
492
+ def _check_flwr_aid_in_run(
493
+ flwr_aid: Optional[str], run: Run, context: grpc.ServicerContext
494
+ ) -> None:
495
+ """Guard clause to check if `flwr_aid` matches the run's `flwr_aid`."""
496
+ _check_flwr_aid_exists(flwr_aid, context)
508
497
  # `run.flwr_aid` must not be an empty string. Abort if it is empty.
509
498
  run_flwr_aid = run.flwr_aid
510
499
  if not run_flwr_aid:
511
500
  context.abort(
512
501
  grpc.StatusCode.PERMISSION_DENIED,
513
- "⛔️ Account authentication is enabled, but the run is not associated "
514
- "with a `flwr_aid`.",
502
+ "⛔️ Run is not associated with a `flwr_aid`.",
515
503
  )
516
504
 
517
505
  # Exit if `flwr_aid` does not match the run's `flwr_aid`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.23.0.dev20251007
3
+ Version: 1.23.0.dev20251008
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
@@ -5,7 +5,7 @@ flwr/app/exception.py,sha256=WX45Yviu_CmYrYd8JHNjRkSsb-g4Br7XvVLKuVxwSdI,1298
5
5
  flwr/app/metadata.py,sha256=rdMBn0zhIOYmCvmGENQWSQqDwcxwsMJzCle4PQdlc_Y,7331
6
6
  flwr/cli/__init__.py,sha256=EfMGmHoobET6P2blBt_eOByXL8299MgFfB7XNdaPQ6I,720
7
7
  flwr/cli/app.py,sha256=xHbxFpdgQMMQojntdXVVijS2vWq4X7iPFbSiIuzFCyo,2457
8
- flwr/cli/auth_plugin/__init__.py,sha256=Hi4YiFWCFhm7G94N_RIF1OEapxpWy3SyUeXVXfJyZSY,1226
8
+ flwr/cli/auth_plugin/__init__.py,sha256=qpebWV9uLpx72_J8yTVgT1DlH2Y9MK_RraDoTYEqv-w,1359
9
9
  flwr/cli/auth_plugin/auth_plugin.py,sha256=LK-DYGk8J85Mjsbc5BX9ueDVOOPcFSo9cKWJX25X-QI,3050
10
10
  flwr/cli/auth_plugin/noop_auth_plugin.py,sha256=KRyxoYtrzOWAIlSuXznli9gqL-rmHSG3zESmYSCQ_rg,2093
11
11
  flwr/cli/auth_plugin/oidc_cli_plugin.py,sha256=9Oyd23g-2vgsXhRQdqG9JNocPylGXZM4UVPBB6l0GXA,5147
@@ -15,10 +15,10 @@ flwr/cli/config_utils.py,sha256=o75PJzgCTl9FdFo_I9OjCB02-ykK0VWZdhIAeR0A8QA,9130
15
15
  flwr/cli/constant.py,sha256=LtxufmhkEqNWQ9doWbbbkUKa12vN_RK_Of5u0So-GHA,1729
16
16
  flwr/cli/example.py,sha256=SNTorkKPrx1rOryGREUyZu8TcOc1-vFv1zEddaysdY0,2216
17
17
  flwr/cli/install.py,sha256=Jr883qR7qssVpUr3hEOEcLK-dfW67Rsve3lZchjA9RU,8180
18
- flwr/cli/log.py,sha256=n_fcoECKIkY3MTOfXhB8AjOG1LSQW_GSPY-2qc7rW9Q,6553
18
+ flwr/cli/log.py,sha256=3qVYY30QqchfnKRTeeRw2ojBUj_nwvfnZkdBr4lmjpc,6541
19
19
  flwr/cli/login/__init__.py,sha256=B1SXKU3HCQhWfFDMJhlC7FOl8UsvH4mxysxeBnrfyUE,800
20
- flwr/cli/login/login.py,sha256=TR2whArUBGd6TqS1v4MAKBGLrfABkFdRVQuzKpsUULE,4757
21
- flwr/cli/ls.py,sha256=WineydqrQKuNf8yuFPRcfptYLZ-peu9LEOi4at3lfuw,11107
20
+ flwr/cli/login/login.py,sha256=XeA6K9rZn3CBvtiFP3XWTAk7s8766BCqHvCsO_tJEuY,4558
21
+ flwr/cli/ls.py,sha256=VHF9xb4q0dOQwFZE_XmUhX_cw27eKyUvlIyxNx-crkw,11095
22
22
  flwr/cli/new/__init__.py,sha256=QA1E2QtzPvFCjLTUHnFnJbufuFiGyT_0Y53Wpbvg1F0,790
23
23
  flwr/cli/new/new.py,sha256=nIuUrQSGDjI4kqnymlq-rOT0RU3AHwZrat3abqHhCwM,10598
24
24
  flwr/cli/new/templates/__init__.py,sha256=FpjWCfIySU2DB4kh0HOXLAjlZNNFDTVU4w3HoE2TzcI,725
@@ -82,24 +82,24 @@ flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl,sha256=ZWW31QEd
82
82
  flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=Elh5bUTVBNRG1aDTrgQcZgjfrXcIaVXH00UduNJDZ2U,1484
83
83
  flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=g7SYiAJr6Uhwg4ZsQI2qsLVeizU8vd0CzR0_jka99_A,1508
84
84
  flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl,sha256=yAJ9jL2q6U_XXYwwUT9fpIqIKFuQR_Kgg82GpWfQ5J8,1661
85
- flwr/cli/pull.py,sha256=dHiMe6x8w8yRoFNKpjA-eiPD6eFiHz4Vah5HZrqNpuo,3364
85
+ flwr/cli/pull.py,sha256=sT3-f2zf7JcXfB-pHWLXmENrOzJeUDBoqK3oruJxzao,3352
86
86
  flwr/cli/run/__init__.py,sha256=RPyB7KbYTFl6YRiilCch6oezxrLQrl1kijV7BMGkLbA,790
87
- flwr/cli/run/run.py,sha256=ECa0kup9dn15O70H74QdgUsEaeErbzDqVX_U0zZO5IM,8173
88
- flwr/cli/stop.py,sha256=TR9F61suTxNUzGIktUdoBhXwdRtCdvzGhy3qCuvcfBg,5000
87
+ flwr/cli/run/run.py,sha256=ED1mDmO1PnSAgtVOrCeWwzwPm6t3aFYSs3Rh36BJzqk,8161
88
+ flwr/cli/stop.py,sha256=W7ynTYLm0-_1nC5Il4IaZTji6A3GCCm_0R-HQUudAsI,4988
89
89
  flwr/cli/supernode/__init__.py,sha256=DVrTcyCg9NFll6glPLAAA6WPi7boxu6pFY_PRqIyHMk,893
90
90
  flwr/cli/supernode/create.py,sha256=MloB7Rr-CE_37jH5lFoM8OsaSPUzWt0TSSB_GMwND5E,1959
91
91
  flwr/cli/supernode/delete.py,sha256=_oCfBnoeUFPLEq_1EAqQp_CHEdzIEP2N_vHZsFTgWn0,1958
92
- flwr/cli/supernode/ls.py,sha256=KZZHQczmXi4vmgMJlBntD893fYQ9a7ZJum-8K_BPWAw,8550
93
- flwr/cli/utils.py,sha256=3bCu_MndtJD2S5MPG9VKi7SxG0No8S651pcfBVb29Y8,14397
92
+ flwr/cli/supernode/ls.py,sha256=exeu-9fpkh27k2oyYNNT7uDhHgf8dlX0TR6WwMV8KIQ,8538
93
+ flwr/cli/utils.py,sha256=cdqtT8KrgaH20z2GWZjt2E26UTO6jfkp9qmmH-08hrs,13640
94
94
  flwr/client/__init__.py,sha256=Q0MIF442vLIGSkcwHKq_sIfECQynLARJrumAscq2Q6E,1241
95
95
  flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
96
96
  flwr/client/dpfedavg_numpy_client.py,sha256=3hul067cT2E9jBhzp7bFnFAZ_D2nWcIUEdHYE05FpzU,7404
97
97
  flwr/client/grpc_adapter_client/__init__.py,sha256=RQWP5mFPROLHKgombiRvPXVWSoVrQ81wvZm0-lOuuBA,742
98
98
  flwr/client/grpc_adapter_client/connection.py,sha256=JGv02EjSOAG1E5BRUD4lwXc1LLiYJ0OhInvp31qx1cU,4404
99
99
  flwr/client/grpc_rere_client/__init__.py,sha256=i7iS0Lt8B7q0E2L72e4F_YrKm6ClRKnd71PNA6PW2O0,752
100
- flwr/client/grpc_rere_client/client_interceptor.py,sha256=65MAcKpA7Sv2FRYGgyCQosnZlh7cSIlPn2lMqh-cqZw,2416
101
- flwr/client/grpc_rere_client/connection.py,sha256=OSRsZxeDoGE2avTStQMTV4z2o5ezO-nBrwy6qvCs430,12977
100
+ flwr/client/grpc_rere_client/connection.py,sha256=SaBuUcqF6r6ieT1sv0Tg5Isqmpeb8D184R0ayLvCScQ,13091
102
101
  flwr/client/grpc_rere_client/grpc_adapter.py,sha256=dLGB5GriszAmtgvuFGuz_F7rIwpzLfDxhJ7T3Un-Ce0,6694
102
+ flwr/client/grpc_rere_client/node_auth_client_interceptor.py,sha256=EdTyb5ThFrpkeyXy9_nTKH7E9GnfAdXjcNZ_-uxt1AA,2410
103
103
  flwr/client/message_handler/__init__.py,sha256=0lyljDVqre3WljiZbPcwCCf8GiIaSVI_yo_ylEyPwSE,719
104
104
  flwr/client/message_handler/message_handler.py,sha256=X9SXX6et97Lw9_DGD93HKsEBGNjXClcFgc_5aLK0oiU,6541
105
105
  flwr/client/mod/__init__.py,sha256=AtV4Y5UGuYqJdTg7bJ--KtfOZUYLGDPMy616LvtP5W4,1151
@@ -112,7 +112,7 @@ flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=Ib-HlhZOXB6-hAWGZ0Ip
112
112
  flwr/client/mod/utils.py,sha256=FUgD2TfcWqSeF6jUKZ4i6Ke56U4Nrv85AeVb93s6R9g,1201
113
113
  flwr/client/numpy_client.py,sha256=Qq6ghsIAop2slKqAfgiI5NiHJ4LIxGmrik3Ror4_XVc,9581
114
114
  flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMyl3zkZY,735
115
- flwr/client/rest_client/connection.py,sha256=fyiS1aXTv71jWczx7mSco94LYJTBXgTF-p2PnAk3CL8,15784
115
+ flwr/client/rest_client/connection.py,sha256=y7fhRoMsgHNKfMGHX1IE_uKgseEuD1eR4MgEmw3aXwE,15971
116
116
  flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
117
117
  flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
118
118
  flwr/clientapp/__init__.py,sha256=dsXH29kvCk1meJj9UYMCIak8zehuuhVp0uDJ2COU_1c,829
@@ -126,7 +126,7 @@ flwr/common/__init__.py,sha256=5GCLVk399Az_rTJHNticRlL0Sl_oPw_j5_LuFKfX7-M,4171
126
126
  flwr/common/address.py,sha256=9JucdTwlc-jpeJkRKeUboZoacUtErwSVtnDR9kAtLqE,4119
127
127
  flwr/common/args.py,sha256=Nq2u4yePbkSY0CWFamn0hZY6Rms8G1xYDeDGIcLIITE,5849
128
128
  flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
129
- flwr/common/constant.py,sha256=c3drkY6oYfQ45fYMYd1bHCgF3XxG7sXmtj8yP6RX4T4,9183
129
+ flwr/common/constant.py,sha256=WD-qFz_JiotwVS0VWfepNjpmGEf2QV2bsNCAkeAIJfI,9400
130
130
  flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
131
131
  flwr/common/date.py,sha256=1ZT2cRSpC2DJqprOVTLXYCR_O2_OZR0zXO_brJ3LqWc,1554
132
132
  flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHERM-EoE,6148
@@ -203,8 +203,8 @@ flwr/proto/fab_pb2.py,sha256=2Nu0WaWxDZ8TbutMtctjdcGM7OtXiyP4kmCgg5o7Jjw,1627
203
203
  flwr/proto/fab_pb2.pyi,sha256=AMXpiDK0fo3nZWjxsC2E4otSaVjyQbU7iiWKrsSZavs,2395
204
204
  flwr/proto/fab_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
205
205
  flwr/proto/fab_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
206
- flwr/proto/fleet_pb2.py,sha256=VZO6c1Vom-zfdRHgkuHROvsFdt4MOA8-R6p1TT-QXRo,5150
207
- flwr/proto/fleet_pb2.pyi,sha256=0aKdrVaugxVI1ySWiy86aan1cjw9RJkDv1mTcMPyW4I,7797
206
+ flwr/proto/fleet_pb2.py,sha256=xGnNGmBbPds6LeB34HN8_vy4U1oW25-w-r-C6xNpoRo,5190
207
+ flwr/proto/fleet_pb2.pyi,sha256=btn0ertRlY5LenpN-YoiqA4X8NQgbkZsAJZQWN8Tia0,7939
208
208
  flwr/proto/fleet_pb2_grpc.py,sha256=NmzrDYxyM3MQNh3vwYczQNuFimZz3prU6ke3E-fKk_g,17539
209
209
  flwr/proto/fleet_pb2_grpc.pyi,sha256=PDERhzOrBCMAytTLS65Qck8A45bTIYni7Lotq6_I0sM,4721
210
210
  flwr/proto/grpcadapter_pb2.py,sha256=PJ8DtfeV29g_y4Z3aNZlSZocLqSxeLmTsYCdOZDYCiE,1843
@@ -223,7 +223,7 @@ flwr/proto/message_pb2.py,sha256=giymevXYEUdpIO-3A0XKsmRabXW1xSz0sIo5oOlbQ8Y,519
223
223
  flwr/proto/message_pb2.pyi,sha256=EzXZHy2mtabofrd_ZgKSI6M4QH-soIaRZIZBPwBGPv0,11260
224
224
  flwr/proto/message_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
225
225
  flwr/proto/message_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
226
- flwr/proto/node_pb2.py,sha256=_5UD-yH9Y-qtAP-gO3LZeDH_WoSFfjXmNvngsb9G-YM,1534
226
+ flwr/proto/node_pb2.py,sha256=QVVaA_zxdQE_g_9iu45p9bUN6rABViJF9Tg-E0EOahg,1534
227
227
  flwr/proto/node_pb2.pyi,sha256=kmLGmDIqudRtveUop_uVU6w696ahPB_b-O94k3HQIpU,2226
228
228
  flwr/proto/node_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
229
229
  flwr/proto/node_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
@@ -249,7 +249,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
249
249
  flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
250
250
  flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
251
251
  flwr/server/__init__.py,sha256=LQQHiuL2jy7TpNaKastRdGsexlxSt5ZWAQNVqitDnrY,1598
252
- flwr/server/app.py,sha256=Axmw-BnqK3Tv2ObDDuMrdQTAFOfEWcxehKhzeAXtBNY,30667
252
+ flwr/server/app.py,sha256=2BAooGt3mKL9scCA0adFVKTps1J0WDmvHpUzUSI9qP0,30328
253
253
  flwr/server/client_manager.py,sha256=5jCGavVli7XdupvWWo7ru3PdFTlRU8IGvHFSSoUVLRs,6227
254
254
  flwr/server/client_proxy.py,sha256=sv0E9AldBYOvc3pusqFh-GnyreeMfsXQ1cuTtxTq_wY,2399
255
255
  flwr/server/compat/__init__.py,sha256=0IsttWvY15qO98_1GyzVC-vR1e_ZPXOdu2qUlOkYMPE,886
@@ -305,22 +305,22 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=KouR9PUcrPmMtoLooF4O
305
305
  flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=iSf0mbBAlig7G6subQwBSVjcUCgSihONKdZ1RmQPTOk,4887
306
306
  flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=OsS-6GgCIzMMZDVu5Y-OKjynHVUrpdc_5OrtuB-IbU0,5174
307
307
  flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=ahDJJ1e-lDxBpeBMgPk7YZt2wB38_QltcpOC0gLbpFs,758
308
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=X7-z4oReIH5ghMfmMXML3SSpa2bhRsuIvt2OZs82BUk,8675
309
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=Kr0CY2CObzvbUU1HB1aZa2CDwrD-oZYCt-O4eoZtvxE,6810
308
+ flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=xkmbYjzt7IZCSvtjgyZVTC7Mm18t7pUB6OUxN_Th8nU,8847
309
+ flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py,sha256=TNK_0-Cpt_s9qTVjm9imke2sF_o_Vb5c-4WDnVg5UGA,5998
310
310
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=fHsRV0KvJ8HtgSA4_YBsEzuhJLjO8p6xx4aCY2oE1p4,731
311
- flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=3Wg20bFo1tZfkzTQUerPVSHXyOuUqNuitEib3W_Dy-U,8691
311
+ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=-ztViMFASoqlokZp80iQ37svtHUzcp_PagYRD0A7kdc,8692
312
312
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=Lzc93nA7tDqoy-zRUaPG316oqFiZX1HUCL5ELaXY_xw,735
313
313
  flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=mxWKwGpgHPqd7cGFqd2ASnR-KZduIzLfT-d2yiNCqQ0,9257
314
314
  flwr/server/superlink/fleet/vce/__init__.py,sha256=XOKbAWOzlCqEOQ3M2cBYkH7HKA7PxlbCJMunt-ty-DY,784
315
315
  flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=PPH89Yqd1XKm-sRJN6R0WQlKT_b4v54Kzl2yzHAFzM8,1437
316
316
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=cSrHZ5SjCCvy4vI0pgsyjtx3cDMuMQve8KcKkK-dWWo,2196
317
317
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=cBZYTmfiAsb1HmVUmOQXYLU-UJmJTFWkj1wW4RYRDuc,7218
318
- flwr/server/superlink/fleet/vce/vce_api.py,sha256=Xd3k77J37ReyaumImUJ3szXUoMJNvuZ4qQKGraLeCXY,12942
318
+ flwr/server/superlink/fleet/vce/vce_api.py,sha256=DRnRXM8Zr49Qt5F1p39ictquXUxO8wcvV5_Sv5-YzJ4,13108
319
319
  flwr/server/superlink/linkstate/__init__.py,sha256=OtsgvDTnZLU3k0sUbkHbqoVwW6ql2FDmb6uT6DbNkZo,1064
320
- flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=eNjjQp6dJ_Qz54fYeOZ9XFebbB_k9syhBB6N2rXRTsA,27891
321
- flwr/server/superlink/linkstate/linkstate.py,sha256=TCLM9wZa2XGHs55B3LP9j5-WtUPhBjOUdMKQJELG2oY,13287
320
+ flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=2VZLVeJqvxx03ICjmHT_csUqpaMTrQXdBCfjswFGwo8,28677
321
+ flwr/server/superlink/linkstate/linkstate.py,sha256=Oo3RLrtQMuS_QMn8IQ-dQg7Mye-HHMMwKFV2AAfxFAw,13306
322
322
  flwr/server/superlink/linkstate/linkstate_factory.py,sha256=8RlosqSpKOoD_vhUUQPY0jtE3A84GeF96Z7sWNkRRcA,2069
323
- flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=NIJ1BDcj54TUpNaeb23af38wQE-TM6rnYVMJncJVKQ0,45503
323
+ flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=3gfHo3x2yW9ZVIjK8Jqo0fJGFdjIotly3NYmOcb97kE,46544
324
324
  flwr/server/superlink/linkstate/utils.py,sha256=IeLh7iGRCHU5MEWOl7iriaSE4L__8GWOa2OleXadK5M,15444
325
325
  flwr/server/superlink/serverappio/__init__.py,sha256=Fy4zJuoccZe5mZSEIpOmQvU6YeXFBa1M4eZuXXmJcn8,717
326
326
  flwr/server/superlink/serverappio/serverappio_grpc.py,sha256=-I7kBbr4w4ZVYwBZoAIle-xHKthFnZrsVfxa6WR8uxA,2310
@@ -332,7 +332,7 @@ flwr/server/superlink/utils.py,sha256=zXmyU2o535b9dgz-TvFklzfuQk4irNnMtiK8vT4Dm1
332
332
  flwr/server/typing.py,sha256=LvO6gq7H6TAWhA9JFx0WyqHxU7FycyvhSsLjBLPgpts,1011
333
333
  flwr/server/utils/__init__.py,sha256=U4gM84-uUFddarODDQkO6SjNUuGhFcsHJZMjSEbezkU,884
334
334
  flwr/server/utils/tensorboard.py,sha256=3z3MeF0cu_U6ghNgRd0UQ5bunyDQKxCLpIpEdGMoCJ0,5466
335
- flwr/server/utils/validator.py,sha256=_dFb6_aAqWSiTgFuR10p8PPRI1ojwf0GFXuT8kLL2H8,3612
335
+ flwr/server/utils/validator.py,sha256=ZDHWtDa2yFzicfUStIIzno8AZEeTCwERjBbuv_StAMs,3638
336
336
  flwr/server/workflow/__init__.py,sha256=N8G_xCBVrlV39Eov56bwImKMUTsqsaEoTCFYIQ0q8Bg,902
337
337
  flwr/server/workflow/constant.py,sha256=4t2MTvOJUlByJfuD9yZjl8Xn5SwBJQDBi15DphztXe8,1082
338
338
  flwr/server/workflow/default_workflows.py,sha256=RlD26dXbSksY-23f3ZspnN1YU1DOhDYOchMTEQvqFrM,13900
@@ -406,16 +406,16 @@ flwr/supercore/utils.py,sha256=ebuHMbeA8eXisX0oMPqBK3hk7uVnIE_yiqWVz8YbkpQ,1324
406
406
  flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
407
407
  flwr/superlink/artifact_provider/__init__.py,sha256=pgZEcVPKRE874LSu3cgy0HbwSJBIpVy_HxQOmne4PAs,810
408
408
  flwr/superlink/artifact_provider/artifact_provider.py,sha256=Gnlg2M2SOqCruji2B0U3ov68NJWKin9scmnWJTiSnNA,1267
409
- flwr/superlink/auth_plugin/__init__.py,sha256=ApYBHnDmtv5gVrnxdFq97zC58O1icqHogK2Dz6o8DVI,1000
409
+ flwr/superlink/auth_plugin/__init__.py,sha256=2INKscgltOxVMGqwuc7YyS2suR0mmBent0F5UA7ToBQ,2111
410
410
  flwr/superlink/auth_plugin/auth_plugin.py,sha256=mKaR2HanhKHmVrcvGqTUv47ut458QgqVU6enU4myB7Y,3038
411
411
  flwr/superlink/auth_plugin/noop_auth_plugin.py,sha256=BQ1v1jFZen7AHh6Gwr9arElW3e9aAAKgOO4zKikbd_4,3044
412
412
  flwr/superlink/servicer/__init__.py,sha256=ZC-kILcUGeh6IxJsfu24cTzUqIGXmQfEKsGfhsnhBpM,717
413
413
  flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5ya3617BT8kR-2Y,803
414
414
  flwr/superlink/servicer/control/control_account_auth_interceptor.py,sha256=Tbi4WVfWlNsOO-NNbe9iLdYp0thkO5xisi5O8ebzuCs,6252
415
415
  flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=5uBl6VcJlUOgCF0d4kmsmJc1Rs1qxyouaZv0-uH2axs,5969
416
- flwr/superlink/servicer/control/control_grpc.py,sha256=xajQdX9WuKJmyXZJOaMZKeiSwgSCrile1NOErOiXR5w,4270
416
+ flwr/superlink/servicer/control/control_grpc.py,sha256=MRCaX4I2a5ogjKmhtFs6Mj-VdWemxL2h3gU9QbQmvCA,4183
417
417
  flwr/superlink/servicer/control/control_license_interceptor.py,sha256=T3AzmRt-PPwyTq3hrdpmZHQd5_CpPOk7TtnFZrB-JRY,3349
418
- flwr/superlink/servicer/control/control_servicer.py,sha256=DJaHBHNRS_9UVuqAk9ELu-1IfmFNVbt3SilYG1awaXQ,19092
418
+ flwr/superlink/servicer/control/control_servicer.py,sha256=mus87XmRsJu_n2Qgm4lltxxvkeX5VkW2xG5HD9THcDY,18515
419
419
  flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
420
420
  flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
421
421
  flwr/supernode/cli/flower_supernode.py,sha256=7aBm0z03OU-npVd1onLCvUotyhSvlZLxAnFkGVMhZcw,8670
@@ -430,7 +430,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
430
430
  flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
431
431
  flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
432
432
  flwr/supernode/start_client_internal.py,sha256=Y9S1-QlO2WP6eo4JvWzIpfaCoh2aoE7bjEYyxNNnlyg,20777
433
- flwr_nightly-1.23.0.dev20251007.dist-info/METADATA,sha256=BTnTS1rjPnKyvChtLD-tLZYUSZbQdqpXxZOVL-ghaE4,14559
434
- flwr_nightly-1.23.0.dev20251007.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
435
- flwr_nightly-1.23.0.dev20251007.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
436
- flwr_nightly-1.23.0.dev20251007.dist-info/RECORD,,
433
+ flwr_nightly-1.23.0.dev20251008.dist-info/METADATA,sha256=v2GJDfsgn1KfcGY4ecjmYoEGrmOn9OHbjbo-lEMPfdQ,14559
434
+ flwr_nightly-1.23.0.dev20251008.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
435
+ flwr_nightly-1.23.0.dev20251008.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
436
+ flwr_nightly-1.23.0.dev20251008.dist-info/RECORD,,