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.
- flwr/client/grpc_rere_client/connection.py +4 -1
- flwr/client/rest_client/connection.py +118 -26
- flwr/common/auth_plugin/auth_plugin.py +6 -4
- flwr/common/event_log_plugin/event_log_plugin.py +3 -3
- flwr/common/inflatable.py +46 -1
- flwr/common/inflatable_grpc_utils.py +3 -266
- flwr/common/inflatable_rest_utils.py +99 -0
- flwr/common/inflatable_utils.py +268 -2
- flwr/common/typing.py +3 -3
- flwr/server/fleet_event_log_interceptor.py +2 -2
- flwr/server/grid/grpc_grid.py +3 -1
- flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +21 -56
- flwr/server/superlink/fleet/message_handler/message_handler.py +57 -1
- flwr/server/superlink/fleet/rest_rere/rest_api.py +30 -0
- flwr/superexec/exec_event_log_interceptor.py +4 -4
- flwr/superexec/exec_user_auth_interceptor.py +11 -11
- flwr/supernode/start_client_internal.py +101 -59
- {flwr_nightly-1.19.0.dev20250609.dist-info → flwr_nightly-1.19.0.dev20250611.dist-info}/METADATA +1 -1
- {flwr_nightly-1.19.0.dev20250609.dist-info → flwr_nightly-1.19.0.dev20250611.dist-info}/RECORD +21 -20
- {flwr_nightly-1.19.0.dev20250609.dist-info → flwr_nightly-1.19.0.dev20250611.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.19.0.dev20250609.dist-info → flwr_nightly-1.19.0.dev20250611.dist-info}/entry_points.txt +0 -0
@@ -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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
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
|
-
|
49
|
-
"
|
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,
|
96
|
+
valid_tokens, account_info = self.auth_plugin.validate_tokens_in_metadata(
|
97
97
|
metadata
|
98
98
|
)
|
99
99
|
if valid_tokens:
|
100
|
-
if
|
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
|
-
|
107
|
+
shared_account_info.set(account_info)
|
108
108
|
# Check if the user is authorized
|
109
|
-
if not self.authz_plugin.verify_user_authorization(
|
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,
|
117
|
+
tokens, account_info = self.auth_plugin.refresh_tokens(metadata)
|
118
118
|
if tokens is not None:
|
119
|
-
if
|
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
|
-
|
126
|
+
shared_account_info.set(account_info)
|
127
127
|
# Check if the user is authorized
|
128
|
-
if not self.authz_plugin.verify_user_authorization(
|
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
|
-
|
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
|
-
#
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
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
|
-
|
193
|
-
|
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,
|
{flwr_nightly-1.19.0.dev20250609.dist-info → flwr_nightly-1.19.0.dev20250611.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.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
|
{flwr_nightly-1.19.0.dev20250609.dist-info → flwr_nightly-1.19.0.dev20250611.dist-info}/RECORD
RENAMED
@@ -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=
|
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=
|
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=
|
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=
|
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=
|
126
|
-
flwr/common/inflatable_grpc_utils.py,sha256=
|
127
|
-
flwr/common/
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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/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,,
|
{flwr_nightly-1.19.0.dev20250609.dist-info → flwr_nightly-1.19.0.dev20250611.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|