flwr-nightly 1.19.0.dev20250609__py3-none-any.whl → 1.19.0.dev20250611__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.
@@ -24,7 +24,7 @@ from google.protobuf.message import Message as GrpcMessage
24
24
  from flwr.common.event_log_plugin.event_log_plugin import EventLogWriterPlugin
25
25
  from flwr.common.typing import LogEntry
26
26
 
27
- from .exec_user_auth_interceptor import shared_user_info
27
+ from .exec_user_auth_interceptor import shared_account_info
28
28
 
29
29
 
30
30
  class ExecEventLogInterceptor(grpc.ServerInterceptor): # type: ignore
@@ -62,7 +62,7 @@ class ExecEventLogInterceptor(grpc.ServerInterceptor): # type: ignore
62
62
  log_entry = self.log_plugin.compose_log_before_event(
63
63
  request=request,
64
64
  context=context,
65
- user_info=shared_user_info.get(),
65
+ account_info=shared_account_info.get(),
66
66
  method_name=method_name,
67
67
  )
68
68
  self.log_plugin.write_log(log_entry)
@@ -81,7 +81,7 @@ class ExecEventLogInterceptor(grpc.ServerInterceptor): # type: ignore
81
81
  log_entry = self.log_plugin.compose_log_after_event(
82
82
  request=request,
83
83
  context=context,
84
- user_info=shared_user_info.get(),
84
+ account_info=shared_account_info.get(),
85
85
  method_name=method_name,
86
86
  response=unary_response or error,
87
87
  )
@@ -111,7 +111,7 @@ class ExecEventLogInterceptor(grpc.ServerInterceptor): # type: ignore
111
111
  log_entry = self.log_plugin.compose_log_after_event(
112
112
  request=request,
113
113
  context=context,
114
- user_info=shared_user_info.get(),
114
+ account_info=shared_account_info.get(),
115
115
  method_name=method_name,
116
116
  response=stream_response or error,
117
117
  )
@@ -21,7 +21,7 @@ from typing import Any, Callable, Union
21
21
  import grpc
22
22
 
23
23
  from flwr.common.auth_plugin import ExecAuthPlugin, ExecAuthzPlugin
24
- from flwr.common.typing import UserInfo
24
+ from flwr.common.typing import AccountInfo
25
25
  from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
26
26
  GetAuthTokensRequest,
27
27
  GetAuthTokensResponse,
@@ -45,8 +45,8 @@ Response = Union[
45
45
  ]
46
46
 
47
47
 
48
- shared_user_info: contextvars.ContextVar[UserInfo] = contextvars.ContextVar(
49
- "user_info", default=UserInfo(user_id=None, user_name=None)
48
+ shared_account_info: contextvars.ContextVar[AccountInfo] = contextvars.ContextVar(
49
+ "account_info", default=AccountInfo(flwr_aid=None, account_name=None)
50
50
  )
51
51
 
52
52
 
@@ -93,20 +93,20 @@ class ExecUserAuthInterceptor(grpc.ServerInterceptor): # type: ignore
93
93
  return call(request, context) # type: ignore
94
94
 
95
95
  # For other requests, check if the user is authenticated
96
- valid_tokens, user_info = self.auth_plugin.validate_tokens_in_metadata(
96
+ valid_tokens, account_info = self.auth_plugin.validate_tokens_in_metadata(
97
97
  metadata
98
98
  )
99
99
  if valid_tokens:
100
- if user_info is None:
100
+ if account_info is None:
101
101
  context.abort(
102
102
  grpc.StatusCode.UNAUTHENTICATED,
103
103
  "Tokens validated, but user info not found",
104
104
  )
105
105
  raise grpc.RpcError()
106
106
  # Store user info in contextvars for authenticated users
107
- shared_user_info.set(user_info)
107
+ shared_account_info.set(account_info)
108
108
  # Check if the user is authorized
109
- if not self.authz_plugin.verify_user_authorization(user_info):
109
+ if not self.authz_plugin.verify_user_authorization(account_info):
110
110
  context.abort(
111
111
  grpc.StatusCode.PERMISSION_DENIED, "User not authorized"
112
112
  )
@@ -114,18 +114,18 @@ class ExecUserAuthInterceptor(grpc.ServerInterceptor): # type: ignore
114
114
  return call(request, context) # type: ignore
115
115
 
116
116
  # If the user is not authenticated, refresh tokens
117
- tokens, user_info = self.auth_plugin.refresh_tokens(metadata)
117
+ tokens, account_info = self.auth_plugin.refresh_tokens(metadata)
118
118
  if tokens is not None:
119
- if user_info is None:
119
+ if account_info is None:
120
120
  context.abort(
121
121
  grpc.StatusCode.UNAUTHENTICATED,
122
122
  "Tokens refreshed, but user info not found",
123
123
  )
124
124
  raise grpc.RpcError()
125
125
  # Store user info in contextvars for authenticated users
126
- shared_user_info.set(user_info)
126
+ shared_account_info.set(account_info)
127
127
  # Check if the user is authorized
128
- if not self.authz_plugin.verify_user_authorization(user_info):
128
+ if not self.authz_plugin.verify_user_authorization(account_info):
129
129
  context.abort(
130
130
  grpc.StatusCode.PERMISSION_DENIED, "User not authorized"
131
131
  )
@@ -52,9 +52,9 @@ from flwr.common.logger import log
52
52
  from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
53
53
  from flwr.common.typing import Fab, Run, RunNotRunningException, UserConfig
54
54
  from flwr.proto.clientappio_pb2_grpc import add_ClientAppIoServicer_to_server
55
- from flwr.server.superlink.ffs import FfsFactory
56
- from flwr.supercore.object_store import ObjectStoreFactory
57
- from flwr.supernode.nodestate import NodeStateFactory
55
+ from flwr.server.superlink.ffs import Ffs, FfsFactory
56
+ from flwr.supercore.object_store import ObjectStore, ObjectStoreFactory
57
+ from flwr.supernode.nodestate import NodeState, NodeStateFactory
58
58
  from flwr.supernode.servicer.clientappio import ClientAppInputs, ClientAppIoServicer
59
59
 
60
60
  DEFAULT_FFS_DIR = get_flwr_dir() / "supernode" / "ffs"
@@ -145,7 +145,7 @@ def start_client_internal(
145
145
  # Initialize NodeState, Ffs, and ObjectStore
146
146
  state = state_factory.state()
147
147
  ffs = ffs_factory.ffs()
148
- _store = object_store_factory.store()
148
+ store = object_store_factory.store()
149
149
 
150
150
  with _init_connection(
151
151
  transport=transport,
@@ -166,63 +166,20 @@ def start_client_internal(
166
166
 
167
167
  # pylint: disable=too-many-nested-blocks
168
168
  while True:
169
- # Pull message
170
- if (message := receive()) is None:
171
- time.sleep(3)
172
- continue
173
-
174
- # Log message reception
175
- log(INFO, "")
176
- if message.metadata.group_id:
177
- log(
178
- INFO,
179
- "[RUN %s, ROUND %s]",
180
- message.metadata.run_id,
181
- message.metadata.group_id,
182
- )
183
- else:
184
- log(INFO, "[RUN %s]", message.metadata.run_id)
185
- log(
186
- INFO,
187
- "Received: %s message %s",
188
- message.metadata.message_type,
189
- message.metadata.message_id,
169
+ # The signature of the function will change after
170
+ # completing the transition to the `NodeState`-based SuperNode
171
+ run_id = _pull_and_store_message(
172
+ state=state,
173
+ ffs=ffs,
174
+ object_store=store,
175
+ node_config=node_config,
176
+ receive=receive,
177
+ get_run=get_run,
178
+ get_fab=get_fab,
190
179
  )
191
180
 
192
- # Ensure the run and FAB are available
193
- run_id = message.metadata.run_id
194
- try:
195
- # Check if the message is from an unknown run
196
- if (run_info := state.get_run(run_id)) is None:
197
- # Pull run info from SuperLink
198
- run_info = get_run(run_id)
199
- state.store_run(run_info)
200
-
201
- # Pull and store the FAB
202
- fab = get_fab(run_info.fab_hash, run_id)
203
- ffs.put(fab.content, {})
204
-
205
- # Initialize the context
206
- run_cfg = get_fused_config_from_fab(fab.content, run_info)
207
- run_ctx = Context(
208
- run_id=run_id,
209
- node_id=state.get_node_id(),
210
- node_config=node_config,
211
- state=RecordDict(),
212
- run_config=run_cfg,
213
- )
214
- state.store_context(run_ctx)
215
-
216
- # Store the message in the state
217
- state.store_message(message)
218
- except RunNotRunningException:
219
- log(
220
- INFO,
221
- "Run ID %s is not in `RUNNING` status. Ignoring message %s.",
222
- run_id,
223
- message.metadata.message_id,
224
- )
225
- time.sleep(3)
181
+ if run_id is None:
182
+ time.sleep(3) # Wait for 3s before asking again
226
183
  continue
227
184
 
228
185
  try:
@@ -302,6 +259,91 @@ def start_client_internal(
302
259
  log(INFO, "")
303
260
 
304
261
 
262
+ def _pull_and_store_message( # pylint: disable=too-many-positional-arguments
263
+ state: NodeState,
264
+ ffs: Ffs,
265
+ object_store: ObjectStore, # pylint: disable=unused-argument
266
+ node_config: UserConfig,
267
+ receive: Callable[[], Optional[Message]],
268
+ get_run: Callable[[int], Run],
269
+ get_fab: Callable[[str, int], Fab],
270
+ ) -> Optional[int]:
271
+ """Pull a message from the SuperLink and store it in the state.
272
+
273
+ This function current returns None if no message is received,
274
+ or run_id if a message is received and processed successfully.
275
+ This behavior will change in the future to return None after
276
+ completing transition to the `NodeState`-based SuperNode.
277
+ """
278
+ message = None
279
+ try:
280
+ # Pull message
281
+ if (message := receive()) is None:
282
+ return None
283
+
284
+ # Log message reception
285
+ log(INFO, "")
286
+ if message.metadata.group_id:
287
+ log(
288
+ INFO,
289
+ "[RUN %s, ROUND %s]",
290
+ message.metadata.run_id,
291
+ message.metadata.group_id,
292
+ )
293
+ else:
294
+ log(INFO, "[RUN %s]", message.metadata.run_id)
295
+ log(
296
+ INFO,
297
+ "Received: %s message %s",
298
+ message.metadata.message_type,
299
+ message.metadata.message_id,
300
+ )
301
+
302
+ # Ensure the run and FAB are available
303
+ run_id = message.metadata.run_id
304
+
305
+ # Check if the message is from an unknown run
306
+ if (run_info := state.get_run(run_id)) is None:
307
+ # Pull run info from SuperLink
308
+ run_info = get_run(run_id)
309
+ state.store_run(run_info)
310
+
311
+ # Pull and store the FAB
312
+ fab = get_fab(run_info.fab_hash, run_id)
313
+ ffs.put(fab.content, {})
314
+
315
+ # Initialize the context
316
+ run_cfg = get_fused_config_from_fab(fab.content, run_info)
317
+ run_ctx = Context(
318
+ run_id=run_id,
319
+ node_id=state.get_node_id(),
320
+ node_config=node_config,
321
+ state=RecordDict(),
322
+ run_config=run_cfg,
323
+ )
324
+ state.store_context(run_ctx)
325
+
326
+ # Store the message in the state
327
+ state.store_message(message)
328
+ except RunNotRunningException:
329
+ if message is None:
330
+ log(
331
+ INFO,
332
+ "Run transitioned to a non-`RUNNING` status while receiving a message. "
333
+ "Ignoring the message.",
334
+ )
335
+ else:
336
+ log(
337
+ INFO,
338
+ "Run ID %s is not in `RUNNING` status. Ignoring message %s.",
339
+ run_id,
340
+ message.metadata.message_id,
341
+ )
342
+ return None
343
+
344
+ return run_id
345
+
346
+
305
347
  @contextmanager
306
348
  def _init_connection( # pylint: disable=too-many-positional-arguments
307
349
  transport: str,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.19.0.dev20250609
3
+ Version: 1.19.0.dev20250611
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
@@ -84,7 +84,7 @@ flwr/client/grpc_adapter_client/__init__.py,sha256=RQWP5mFPROLHKgombiRvPXVWSoVrQ
84
84
  flwr/client/grpc_adapter_client/connection.py,sha256=aj5tTYyE8z2hQLXPPydsJiz8gBDIWLUhfWvqYkAL1L4,3966
85
85
  flwr/client/grpc_rere_client/__init__.py,sha256=i7iS0Lt8B7q0E2L72e4F_YrKm6ClRKnd71PNA6PW2O0,752
86
86
  flwr/client/grpc_rere_client/client_interceptor.py,sha256=zFaVHw6AxeNO-7eCKKb-RxrPa7zbM5Z-2-1Efc4adQY,2451
87
- flwr/client/grpc_rere_client/connection.py,sha256=nk4xSjBKG_mvoZsCVkkGLPPc6juxBId7RNcckgA6VSE,13994
87
+ flwr/client/grpc_rere_client/connection.py,sha256=eJJpfD0jE0X63W5ASUEcC5Gvn2xPeM5TBryMbNJD4Wc,14040
88
88
  flwr/client/grpc_rere_client/grpc_adapter.py,sha256=JvMZ7vCFTaTEo6AzKYh3zDmeQAU7VSjdysbC6t3ufWg,6351
89
89
  flwr/client/message_handler/__init__.py,sha256=0lyljDVqre3WljiZbPcwCCf8GiIaSVI_yo_ylEyPwSE,719
90
90
  flwr/client/message_handler/message_handler.py,sha256=X9SXX6et97Lw9_DGD93HKsEBGNjXClcFgc_5aLK0oiU,6541
@@ -98,7 +98,7 @@ flwr/client/mod/secure_aggregation/secaggplus_mod.py,sha256=aKqjZCrikF73y3E-7h40
98
98
  flwr/client/mod/utils.py,sha256=FUgD2TfcWqSeF6jUKZ4i6Ke56U4Nrv85AeVb93s6R9g,1201
99
99
  flwr/client/numpy_client.py,sha256=Qq6ghsIAop2slKqAfgiI5NiHJ4LIxGmrik3Ror4_XVc,9581
100
100
  flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMyl3zkZY,735
101
- flwr/client/rest_client/connection.py,sha256=6yBh2Eeso0XLtinAs2kOHkSnge7C-co_a_QfBaAEudU,12766
101
+ flwr/client/rest_client/connection.py,sha256=vTunkzFe9eouw8bSEww3zigl-QmTu9-hyeKCNKPS6PY,16388
102
102
  flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
103
103
  flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
104
104
  flwr/clientapp/__init__.py,sha256=zGW4z49Ojzoi1hDiRC7kyhLjijUilc6fqHhtM_ATRVA,719
@@ -106,7 +106,7 @@ flwr/common/__init__.py,sha256=5GCLVk399Az_rTJHNticRlL0Sl_oPw_j5_LuFKfX7-M,4171
106
106
  flwr/common/address.py,sha256=9JucdTwlc-jpeJkRKeUboZoacUtErwSVtnDR9kAtLqE,4119
107
107
  flwr/common/args.py,sha256=-aX_jVnSaDrJR2KZ8Wq0Y3dQHII4R4MJtJOIXzVUA0c,5417
108
108
  flwr/common/auth_plugin/__init__.py,sha256=3rzPkVLn9WyB5n7HLk1XGDw3SLCqRWAU1_CnglcWPfw,970
109
- flwr/common/auth_plugin/auth_plugin.py,sha256=yEIapwim14tn99oGhkQKun_WifoY8hscAtU8Z6fcGXE,4796
109
+ flwr/common/auth_plugin/auth_plugin.py,sha256=kXx5o39vJchaPv28sK9qO6H_UXSWym6zRBbCa7sUwtQ,4825
110
110
  flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
111
111
  flwr/common/constant.py,sha256=A8rWHZZUH4Rxbx-bCKW5pNJ_BG4W9Xfw4fLevNhZ8l0,8077
112
112
  flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
@@ -115,16 +115,17 @@ flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHE
115
115
  flwr/common/differential_privacy_constants.py,sha256=ruEjH4qF_S2bgxRI6brWCGWQPxFk-P7pviFguy9KvQ0,1074
116
116
  flwr/common/dp.py,sha256=ftqWheOICK5N_zPaofnbFb474lMb5w9lclwxf5DKY0w,1978
117
117
  flwr/common/event_log_plugin/__init__.py,sha256=ts3VAL3Fk6Grp1EK_1Qg_V-BfOof9F86iBx4rbrEkyo,838
118
- flwr/common/event_log_plugin/event_log_plugin.py,sha256=up7a9H0UxmxdDKlEMNLBhUn5APVJ0fFS2qH0IO3j_rg,2046
118
+ flwr/common/event_log_plugin/event_log_plugin.py,sha256=eK8OaDFagQRwqpb9eV0cJcm2ErtEBpMxFbhxJNx6n5w,2061
119
119
  flwr/common/exit/__init__.py,sha256=-ZOJYLaNnR729a7VzZiFsLiqngzKQh3xc27svYStZ_Q,826
120
120
  flwr/common/exit/exit.py,sha256=mJgbqMlVlwAgYtq-Vedj53wO4VxcDcy_P-GzqGK-1GQ,3452
121
121
  flwr/common/exit/exit_code.py,sha256=PNEnCrZfOILjfDAFu5m-2YWEJBrk97xglq4zCUlqV7E,3470
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=gdAICtXklkQRMrxoTYEbzJl7AeFqZtUm4JU6f2it9FM,7264
126
- flwr/common/inflatable_grpc_utils.py,sha256=M982VQ8x1wh4QnLXR-IKWdtGuOFACvIsU6lYbbs1TI8,13040
127
- flwr/common/inflatable_utils.py,sha256=hPwap-P9pxHcxo-EtxtrnKNiFA2HsNGJaKX2b002PnE,2892
125
+ flwr/common/inflatable.py,sha256=RmGq0FF_zH0OyTSVANhQw9xUmS_4f_c5CZTZkPeMnH4,8726
126
+ flwr/common/inflatable_grpc_utils.py,sha256=ZpwtgF1tGD6NwQkCidbhbeBPDBZ1Nx9eGMHQ04eNEE8,3554
127
+ flwr/common/inflatable_rest_utils.py,sha256=KiZd06XRiXcl_WewOrag0JTvUQt5kZ74UIsQ3FCAXGc,3580
128
+ flwr/common/inflatable_utils.py,sha256=-GTdgR1zLS9WtXrbOGJMpaoyVEL8KmoQ2yF4HeLxTI0,12406
128
129
  flwr/common/logger.py,sha256=JbRf6E2vQxXzpDBq1T8IDUJo_usu3gjWEBPQ6uKcmdg,13049
129
130
  flwr/common/message.py,sha256=xAL7iZN5-n-xPQpgoSFvxNrzs8fmiiPfoU0DjNQEhRw,19953
130
131
  flwr/common/object_ref.py,sha256=p3SfTeqo3Aj16SkB-vsnNn01zswOPdGNBitcbRnqmUk,9134
@@ -151,7 +152,7 @@ flwr/common/secure_aggregation/secaggplus_utils.py,sha256=E_xU-Zd45daO1em7M6C2wO
151
152
  flwr/common/serde.py,sha256=hHqXbAF-MtSRWsROz4v-P_C4dMDSIt1XJ3Hecxp8os0,23020
152
153
  flwr/common/serde_utils.py,sha256=krx2C_W31KpfmDqnDCtULoTkT8WKweWTJ7FHYWtF1r4,5815
153
154
  flwr/common/telemetry.py,sha256=jF47v0SbnBd43XamHtl3wKxs3knFUY2p77cm_2lzZ8M,8762
154
- flwr/common/typing.py,sha256=97QRfRRS7sQnjkAI5FDZ01-38oQUSz4i1qqewQmBWRg,6886
155
+ flwr/common/typing.py,sha256=Mi95fKobBHfAoqMh-xQB1QgXTxuWtpJ-z1lR7Bxp63o,6893
155
156
  flwr/common/version.py,sha256=7GAGzPn73Mkh09qhrjbmjZQtcqVhBuzhFBaK4Mk4VRk,1325
156
157
  flwr/compat/__init__.py,sha256=gbfDQKKKMZzi3GswyVRgyLdDlHiWj3wU6dg7y6m5O_s,752
157
158
  flwr/compat/client/__init__.py,sha256=qpbo0lcxdNL4qy5KHqiGm8OLxSxkYgI_-dLh5rwhtcI,746
@@ -234,10 +235,10 @@ flwr/server/compat/app_utils.py,sha256=Uz6m-NV90cQ6k-gW6wlWQuhoFoK78qlMr0CEmALKX
234
235
  flwr/server/compat/grid_client_proxy.py,sha256=FxMgGtrzBoBAPby2ZjTWzpCJsCht8FwMm4PzqW80dmQ,4956
235
236
  flwr/server/compat/legacy_context.py,sha256=94JsRQxyOdLI6lZZkFjS3-TMd0YJGAgSBBO0M_s_9ts,1804
236
237
  flwr/server/criterion.py,sha256=G4e-6B48Pc7d5rmGVUpIzNKb6UF88O3VmTRuUltgjzM,1061
237
- flwr/server/fleet_event_log_interceptor.py,sha256=AkL7Y5d3xm2vRhL3ahmEVVoOvAP7PA7dRgB-je4v-Ys,3774
238
+ flwr/server/fleet_event_log_interceptor.py,sha256=ifV4gUB_hSg7QPLIrAyDpjciqZBOKb0L0abZno3GTwA,3780
238
239
  flwr/server/grid/__init__.py,sha256=aWZHezoR2UGMJISB_gPMCm2N_2GSbm97A3lAp7ruhRQ,888
239
240
  flwr/server/grid/grid.py,sha256=naGCYt5J6dnmUvrcGkdNyKPe3MBd-0awGm1ALmgahqY,6625
240
- flwr/server/grid/grpc_grid.py,sha256=rVzPh0BGQOI3Dzhd8upBXNLEA5bKy82eBZkU4a1qFJY,13257
241
+ flwr/server/grid/grpc_grid.py,sha256=qhJPS4tCWATHx24dDZoxtEPq6rjFu0lNggX70lstLkw,13302
241
242
  flwr/server/grid/inmemory_grid.py,sha256=RjejYT-d-hHuTs1KSs_5wvOdAWKLus8w5_UAcnGt4iw,6168
242
243
  flwr/server/history.py,sha256=cCkFhBN4GoHsYYNk5GG1Y089eKJh2DH_ZJbYPwLaGyk,5026
243
244
  flwr/server/run_serverapp.py,sha256=v0p6jXj2dFxlRUdoEeF1mnaFd9XRQi6dZCflPY6d3qI,2063
@@ -285,12 +286,12 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=KouR9PUcrPmMtoLooF4O
285
286
  flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=iSf0mbBAlig7G6subQwBSVjcUCgSihONKdZ1RmQPTOk,4887
286
287
  flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=OsS-6GgCIzMMZDVu5Y-OKjynHVUrpdc_5OrtuB-IbU0,5174
287
288
  flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=ahDJJ1e-lDxBpeBMgPk7YZt2wB38_QltcpOC0gLbpFs,758
288
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=iD45MSaGxPmkmPp_Y6XR-crUaQIcAcfyw0qJZwt7C0o,9106
289
+ flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=wp6I4BKv82dBlIJA8D2gx9CRgahkwnsVnKTkU6M06Og,7802
289
290
  flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=DrHubsaLgJCwCeeJPYogQTiP0xYqjxwnT9rh7OP7BoU,6984
290
291
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=fHsRV0KvJ8HtgSA4_YBsEzuhJLjO8p6xx4aCY2oE1p4,731
291
- flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=P43PapLZJKbZ0Oo0kP_KcO5zSMvO53SakQgPMiR5d1M,6500
292
+ flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=hbaukJ7EpfBiaXHa_R50MZKTkesxosx5IwFtDyIAO-0,8076
292
293
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=Lzc93nA7tDqoy-zRUaPG316oqFiZX1HUCL5ELaXY_xw,735
293
- flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=jIljUNMvZ8dDvSlkyn1c2y9sDAf_QoBr-q_o3BWxJ7o,7199
294
+ flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=cmNBbqb1aHgGgu_8Cuqvf7FAf2i7xs1evTuJRgRaSnI,8381
294
295
  flwr/server/superlink/fleet/vce/__init__.py,sha256=XOKbAWOzlCqEOQ3M2cBYkH7HKA7PxlbCJMunt-ty-DY,784
295
296
  flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=PPH89Yqd1XKm-sRJN6R0WQlKT_b4v54Kzl2yzHAFzM8,1437
296
297
  flwr/server/superlink/fleet/vce/backend/backend.py,sha256=-wDHjgAy5mrfEgXj0GxkJI7lhEbgSUyPwmNAf9ZcDzc,2193
@@ -337,10 +338,10 @@ flwr/supercore/object_store/object_store_factory.py,sha256=QVwE2ywi7vsj2iKfvWWnN
337
338
  flwr/superexec/__init__.py,sha256=YFqER0IJc1XEWfsX6AxZ9LSRq0sawPYrNYki-brvTIc,715
338
339
  flwr/superexec/app.py,sha256=U2jjOHb2LGWoU7vrl9_czTzre9O2mPxu3CPGUZ86sK4,1465
339
340
  flwr/superexec/deployment.py,sha256=2wBBZgdNAn1Ik1M3HGg4t23CV8oZqzDz1zkOBzHjZLE,6734
340
- flwr/superexec/exec_event_log_interceptor.py,sha256=IlQ_w-GpGNMJ4g1gTI3H4LHfWli1-8O7a2-pCqB3yeA,5753
341
+ flwr/superexec/exec_event_log_interceptor.py,sha256=7aBjZ4lkpOIyWut0s394OpMePr16g_Te594s-9aDM9Q,5774
341
342
  flwr/superexec/exec_grpc.py,sha256=LS-CrwBayHQAvJz-zmzV5JsaEC49VumsS25nC0NgYXg,3364
342
343
  flwr/superexec/exec_servicer.py,sha256=nSqAzrWDQFQm9xE6oejoFZqgWhPchbdkC2mCMrWTbhE,8324
343
- flwr/superexec/exec_user_auth_interceptor.py,sha256=L-oYmcf35HJFnqNVyfAPwhbkyaTEjkNM_ooioOVATCQ,5771
344
+ flwr/superexec/exec_user_auth_interceptor.py,sha256=HpGHTcDKzB7XUiQHXgntNVFYL-VfP9Wj5tEVc04VOOw,5820
344
345
  flwr/superexec/executor.py,sha256=M5ucqSE53jfRtuCNf59WFLqQvA1Mln4741TySeZE7qQ,3112
345
346
  flwr/superexec/simulation.py,sha256=j6YwUvBN7EQ09ID7MYOCVZ70PGbuyBy8f9bXU0EszEM,4088
346
347
  flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
@@ -357,8 +358,8 @@ flwr/supernode/runtime/run_clientapp.py,sha256=cvWSby7u31u97QapWHxJM-Wer6F1k6mbb
357
358
  flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca8gxdEo,717
358
359
  flwr/supernode/servicer/clientappio/__init__.py,sha256=vJyOjO2FXZ2URbnthmdsgs6948wbYfdq1L1V8Um-Lr8,895
359
360
  flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=LmzkxtNQBn5vVrHc0Bhq2WqaK6-LM2v4kfLBN0PiNNM,8522
360
- flwr/supernode/start_client_internal.py,sha256=5CwTNV-XmIhwR1jv3G7aQAXGhf6OFWS6U-vmxY1iKGA,16984
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,,
361
+ flwr/supernode/start_client_internal.py,sha256=AkJ1FsBK6EpK7cmIGcae5WZazPhU71gileiSQogTZ-k,18164
362
+ flwr_nightly-1.19.0.dev20250611.dist-info/METADATA,sha256=QYsNnMDXwVNpA9FWBxANzI_NTfAHv-AlvxHMxmeeiTE,15910
363
+ flwr_nightly-1.19.0.dev20250611.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
364
+ flwr_nightly-1.19.0.dev20250611.dist-info/entry_points.txt,sha256=jNpDXGBGgs21RqUxelF_jwGaxtqFwm-MQyfz-ZqSjrA,367
365
+ flwr_nightly-1.19.0.dev20250611.dist-info/RECORD,,