flwr-nightly 1.23.0.dev20251001__py3-none-any.whl → 1.23.0.dev20251003__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/cli/app.py +13 -0
- flwr/cli/auth_plugin/__init__.py +7 -4
- flwr/cli/auth_plugin/auth_plugin.py +23 -11
- flwr/cli/auth_plugin/noop_auth_plugin.py +58 -0
- flwr/cli/auth_plugin/oidc_cli_plugin.py +15 -25
- flwr/cli/{cli_user_auth_interceptor.py → cli_account_auth_interceptor.py} +4 -4
- flwr/cli/login/login.py +34 -14
- flwr/{client/clientapp → cli/supernode}/__init__.py +11 -1
- flwr/cli/supernode/create.py +58 -0
- flwr/cli/supernode/delete.py +58 -0
- flwr/cli/supernode/ls.py +51 -0
- flwr/cli/utils.py +36 -22
- flwr/client/__init__.py +2 -1
- flwr/clientapp/__init__.py +1 -2
- flwr/{client/clientapp → clientapp}/utils.py +1 -1
- flwr/common/constant.py +14 -8
- flwr/common/typing.py +6 -6
- flwr/compat/client/app.py +1 -1
- flwr/proto/control_pb2.py +48 -35
- flwr/proto/control_pb2.pyi +67 -4
- flwr/proto/control_pb2_grpc.py +102 -0
- flwr/proto/control_pb2_grpc.pyi +39 -0
- flwr/proto/node_pb2.py +3 -1
- flwr/proto/node_pb2.pyi +33 -0
- flwr/server/app.py +34 -16
- flwr/server/superlink/fleet/vce/backend/backend.py +1 -1
- flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -1
- flwr/server/superlink/fleet/vce/vce_api.py +2 -2
- flwr/simulation/ray_transport/ray_actor.py +1 -1
- flwr/simulation/ray_transport/ray_client_proxy.py +1 -1
- flwr/simulation/run_simulation.py +1 -1
- flwr/superlink/auth_plugin/__init__.py +5 -2
- flwr/superlink/auth_plugin/auth_plugin.py +16 -12
- flwr/superlink/auth_plugin/noop_auth_plugin.py +87 -0
- flwr/superlink/servicer/control/{control_user_auth_interceptor.py → control_account_auth_interceptor.py} +19 -19
- flwr/superlink/servicer/control/control_event_log_interceptor.py +1 -1
- flwr/superlink/servicer/control/control_grpc.py +9 -9
- flwr/superlink/servicer/control/control_servicer.py +57 -29
- flwr/supernode/runtime/run_clientapp.py +2 -2
- {flwr_nightly-1.23.0.dev20251001.dist-info → flwr_nightly-1.23.0.dev20251003.dist-info}/METADATA +1 -1
- {flwr_nightly-1.23.0.dev20251001.dist-info → flwr_nightly-1.23.0.dev20251003.dist-info}/RECORD +44 -39
- /flwr/{client → clientapp}/client_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251001.dist-info → flwr_nightly-1.23.0.dev20251003.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.23.0.dev20251001.dist-info → flwr_nightly-1.23.0.dev20251003.dist-info}/entry_points.txt +0 -0
@@ -28,8 +28,8 @@ from flwr.common import Context, RecordDict, now
|
|
28
28
|
from flwr.common.constant import (
|
29
29
|
FAB_MAX_SIZE,
|
30
30
|
LOG_STREAM_INTERVAL,
|
31
|
+
NO_ACCOUNT_AUTH_MESSAGE,
|
31
32
|
NO_ARTIFACT_PROVIDER_MESSAGE,
|
32
|
-
NO_USER_AUTH_MESSAGE,
|
33
33
|
PULL_UNFINISHED_RUN_MESSAGE,
|
34
34
|
RUN_ID_NOT_FOUND_MESSAGE,
|
35
35
|
Status,
|
@@ -44,10 +44,16 @@ from flwr.common.serde import (
|
|
44
44
|
from flwr.common.typing import Fab, Run, RunStatus
|
45
45
|
from flwr.proto import control_pb2_grpc # pylint: disable=E0611
|
46
46
|
from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
47
|
+
CreateNodeCliRequest,
|
48
|
+
CreateNodeCliResponse,
|
49
|
+
DeleteNodeCliRequest,
|
50
|
+
DeleteNodeCliResponse,
|
47
51
|
GetAuthTokensRequest,
|
48
52
|
GetAuthTokensResponse,
|
49
53
|
GetLoginDetailsRequest,
|
50
54
|
GetLoginDetailsResponse,
|
55
|
+
ListNodesCliRequest,
|
56
|
+
ListNodesCliResponse,
|
51
57
|
ListRunsRequest,
|
52
58
|
ListRunsResponse,
|
53
59
|
PullArtifactsRequest,
|
@@ -63,9 +69,9 @@ from flwr.server.superlink.linkstate import LinkState, LinkStateFactory
|
|
63
69
|
from flwr.supercore.ffs import FfsFactory
|
64
70
|
from flwr.supercore.object_store import ObjectStore, ObjectStoreFactory
|
65
71
|
from flwr.superlink.artifact_provider import ArtifactProvider
|
66
|
-
from flwr.superlink.auth_plugin import
|
72
|
+
from flwr.superlink.auth_plugin import ControlAuthnPlugin
|
67
73
|
|
68
|
-
from .
|
74
|
+
from .control_account_auth_interceptor import shared_account_info
|
69
75
|
|
70
76
|
|
71
77
|
class ControlServicer(control_pb2_grpc.ControlServicer):
|
@@ -77,14 +83,14 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
77
83
|
ffs_factory: FfsFactory,
|
78
84
|
objectstore_factory: ObjectStoreFactory,
|
79
85
|
is_simulation: bool,
|
80
|
-
|
86
|
+
authn_plugin: Optional[ControlAuthnPlugin] = None,
|
81
87
|
artifact_provider: Optional[ArtifactProvider] = None,
|
82
88
|
) -> None:
|
83
89
|
self.linkstate_factory = linkstate_factory
|
84
90
|
self.ffs_factory = ffs_factory
|
85
91
|
self.objectstore_factory = objectstore_factory
|
86
92
|
self.is_simulation = is_simulation
|
87
|
-
self.
|
93
|
+
self.authn_plugin = authn_plugin
|
88
94
|
self.artifact_provider = artifact_provider
|
89
95
|
|
90
96
|
def StartRun( # pylint: disable=too-many-locals
|
@@ -103,7 +109,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
103
109
|
)
|
104
110
|
return StartRunResponse()
|
105
111
|
|
106
|
-
flwr_aid = shared_account_info.get().flwr_aid if self.
|
112
|
+
flwr_aid = shared_account_info.get().flwr_aid if self.authn_plugin else None
|
107
113
|
override_config = user_config_from_proto(request.override_config)
|
108
114
|
federation_options = config_record_from_proto(request.federation_options)
|
109
115
|
fab_file = request.fab.content
|
@@ -177,8 +183,8 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
177
183
|
if not run:
|
178
184
|
context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
|
179
185
|
|
180
|
-
# If
|
181
|
-
if self.
|
186
|
+
# If account auth is enabled, check if `flwr_aid` matches the run's `flwr_aid`
|
187
|
+
if self.authn_plugin:
|
182
188
|
flwr_aid = shared_account_info.get().flwr_aid
|
183
189
|
_check_flwr_aid_in_run(
|
184
190
|
flwr_aid=flwr_aid, run=cast(Run, run), context=context
|
@@ -218,18 +224,18 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
218
224
|
|
219
225
|
# Build a set of run IDs for `flwr ls --runs`
|
220
226
|
if not request.HasField("run_id"):
|
221
|
-
if self.
|
222
|
-
# If no `run_id` is specified and
|
223
|
-
# return run IDs for the authenticated
|
227
|
+
if self.authn_plugin:
|
228
|
+
# If no `run_id` is specified and account auth is enabled,
|
229
|
+
# return run IDs for the authenticated account
|
224
230
|
flwr_aid = shared_account_info.get().flwr_aid
|
225
231
|
if flwr_aid is None:
|
226
232
|
context.abort(
|
227
233
|
grpc.StatusCode.PERMISSION_DENIED,
|
228
|
-
"️⛔️
|
234
|
+
"️⛔️ Account authentication is enabled, but `flwr_aid` is None",
|
229
235
|
)
|
230
236
|
run_ids = state.get_run_ids(flwr_aid=flwr_aid)
|
231
237
|
else:
|
232
|
-
# If no `run_id` is specified and no
|
238
|
+
# If no `run_id` is specified and no account auth is enabled,
|
233
239
|
# return all run IDs
|
234
240
|
run_ids = state.get_run_ids(None)
|
235
241
|
# Build a set of run IDs for `flwr ls --run-id <run_id>`
|
@@ -242,8 +248,9 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
242
248
|
if not run:
|
243
249
|
context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
|
244
250
|
|
245
|
-
# If
|
246
|
-
if
|
251
|
+
# If account auth is enabled,
|
252
|
+
# check if `flwr_aid` matches the run's `flwr_aid`
|
253
|
+
if self.authn_plugin:
|
247
254
|
flwr_aid = shared_account_info.get().flwr_aid
|
248
255
|
_check_flwr_aid_in_run(
|
249
256
|
flwr_aid=flwr_aid, run=cast(Run, run), context=context
|
@@ -270,8 +277,8 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
270
277
|
if not run:
|
271
278
|
context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
|
272
279
|
|
273
|
-
# If
|
274
|
-
if self.
|
280
|
+
# If account auth is enabled, check if `flwr_aid` matches the run's `flwr_aid`
|
281
|
+
if self.authn_plugin:
|
275
282
|
flwr_aid = shared_account_info.get().flwr_aid
|
276
283
|
_check_flwr_aid_in_run(
|
277
284
|
flwr_aid=flwr_aid, run=cast(Run, run), context=context
|
@@ -305,22 +312,22 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
305
312
|
) -> GetLoginDetailsResponse:
|
306
313
|
"""Start login."""
|
307
314
|
log(INFO, "ControlServicer.GetLoginDetails")
|
308
|
-
if self.
|
315
|
+
if self.authn_plugin is None:
|
309
316
|
context.abort(
|
310
317
|
grpc.StatusCode.UNIMPLEMENTED,
|
311
|
-
|
318
|
+
NO_ACCOUNT_AUTH_MESSAGE,
|
312
319
|
)
|
313
320
|
raise grpc.RpcError() # This line is unreachable
|
314
321
|
|
315
322
|
# Get login details
|
316
|
-
details = self.
|
323
|
+
details = self.authn_plugin.get_login_details()
|
317
324
|
|
318
325
|
# Return empty response if details is None
|
319
326
|
if details is None:
|
320
327
|
return GetLoginDetailsResponse()
|
321
328
|
|
322
329
|
return GetLoginDetailsResponse(
|
323
|
-
|
330
|
+
authn_type=details.authn_type,
|
324
331
|
device_code=details.device_code,
|
325
332
|
verification_uri_complete=details.verification_uri_complete,
|
326
333
|
expires_in=details.expires_in,
|
@@ -332,15 +339,15 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
332
339
|
) -> GetAuthTokensResponse:
|
333
340
|
"""Get auth token."""
|
334
341
|
log(INFO, "ControlServicer.GetAuthTokens")
|
335
|
-
if self.
|
342
|
+
if self.authn_plugin is None:
|
336
343
|
context.abort(
|
337
344
|
grpc.StatusCode.UNIMPLEMENTED,
|
338
|
-
|
345
|
+
NO_ACCOUNT_AUTH_MESSAGE,
|
339
346
|
)
|
340
347
|
raise grpc.RpcError() # This line is unreachable
|
341
348
|
|
342
349
|
# Get auth tokens
|
343
|
-
credentials = self.
|
350
|
+
credentials = self.authn_plugin.get_auth_tokens(request.device_code)
|
344
351
|
|
345
352
|
# Return empty response if credentials is None
|
346
353
|
if credentials is None:
|
@@ -383,8 +390,8 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
383
390
|
grpc.StatusCode.FAILED_PRECONDITION, PULL_UNFINISHED_RUN_MESSAGE
|
384
391
|
)
|
385
392
|
|
386
|
-
# Check if `flwr_aid` matches the run's `flwr_aid` when
|
387
|
-
if self.
|
393
|
+
# Check if `flwr_aid` matches the run's `flwr_aid` when account auth is enabled
|
394
|
+
if self.authn_plugin:
|
388
395
|
flwr_aid = shared_account_info.get().flwr_aid
|
389
396
|
_check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
|
390
397
|
|
@@ -392,6 +399,27 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
392
399
|
download_url = self.artifact_provider.get_url(run_id)
|
393
400
|
return PullArtifactsResponse(url=download_url)
|
394
401
|
|
402
|
+
def CreateNodeCli(
|
403
|
+
self, request: CreateNodeCliRequest, context: grpc.ServicerContext
|
404
|
+
) -> CreateNodeCliResponse:
|
405
|
+
"""Add a SuperNode."""
|
406
|
+
log(INFO, "ControlServicer.CreateNodeCli")
|
407
|
+
return CreateNodeCliResponse()
|
408
|
+
|
409
|
+
def DeleteNodeCli(
|
410
|
+
self, request: DeleteNodeCliRequest, context: grpc.ServicerContext
|
411
|
+
) -> DeleteNodeCliResponse:
|
412
|
+
"""Remove a SuperNode."""
|
413
|
+
log(INFO, "ControlServicer.RemoveNode")
|
414
|
+
return DeleteNodeCliResponse()
|
415
|
+
|
416
|
+
def ListNodesCli(
|
417
|
+
self, request: ListNodesCliRequest, context: grpc.ServicerContext
|
418
|
+
) -> ListNodesCliResponse:
|
419
|
+
"""List all SuperNodes."""
|
420
|
+
log(INFO, "ControlServicer.ListNodesCli")
|
421
|
+
return ListNodesCliResponse()
|
422
|
+
|
395
423
|
|
396
424
|
def _create_list_runs_response(
|
397
425
|
run_ids: set[int], state: LinkState, store: ObjectStore
|
@@ -418,7 +446,7 @@ def _check_flwr_aid_in_run(
|
|
418
446
|
if flwr_aid is None:
|
419
447
|
context.abort(
|
420
448
|
grpc.StatusCode.PERMISSION_DENIED,
|
421
|
-
"️⛔️
|
449
|
+
"️⛔️ Account authentication is enabled, but `flwr_aid` is None",
|
422
450
|
)
|
423
451
|
|
424
452
|
# `run.flwr_aid` must not be an empty string. Abort if it is empty.
|
@@ -426,7 +454,7 @@ def _check_flwr_aid_in_run(
|
|
426
454
|
if not run_flwr_aid:
|
427
455
|
context.abort(
|
428
456
|
grpc.StatusCode.PERMISSION_DENIED,
|
429
|
-
"⛔️
|
457
|
+
"⛔️ Account authentication is enabled, but the run is not associated "
|
430
458
|
"with a `flwr_aid`.",
|
431
459
|
)
|
432
460
|
|
@@ -434,5 +462,5 @@ def _check_flwr_aid_in_run(
|
|
434
462
|
if run_flwr_aid != flwr_aid:
|
435
463
|
context.abort(
|
436
464
|
grpc.StatusCode.PERMISSION_DENIED,
|
437
|
-
"⛔️ Run ID does not belong to the
|
465
|
+
"⛔️ Run ID does not belong to the account",
|
438
466
|
)
|
@@ -23,8 +23,8 @@ import grpc
|
|
23
23
|
|
24
24
|
from flwr.app.error import Error
|
25
25
|
from flwr.cli.install import install_from_fab
|
26
|
-
from flwr.
|
27
|
-
from flwr.
|
26
|
+
from flwr.clientapp.client_app import ClientApp, LoadClientAppError
|
27
|
+
from flwr.clientapp.utils import get_load_client_app_fn
|
28
28
|
from flwr.common import Context, Message
|
29
29
|
from flwr.common.config import get_flwr_dir
|
30
30
|
from flwr.common.constant import ErrorCode
|
{flwr_nightly-1.23.0.dev20251001.dist-info → flwr_nightly-1.23.0.dev20251003.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.23.0.
|
3
|
+
Version: 1.23.0.dev20251003
|
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.23.0.dev20251001.dist-info → flwr_nightly-1.23.0.dev20251003.dist-info}/RECORD
RENAMED
@@ -4,19 +4,20 @@ flwr/app/error.py,sha256=0PwA-E_CAs5P_nWAA0kksVO1A44t4CNLEf7u-Su-uJ0,2342
|
|
4
4
|
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
|
-
flwr/cli/app.py,sha256=
|
8
|
-
flwr/cli/auth_plugin/__init__.py,sha256=
|
9
|
-
flwr/cli/auth_plugin/auth_plugin.py,sha256=
|
10
|
-
flwr/cli/auth_plugin/
|
7
|
+
flwr/cli/app.py,sha256=tNSJcp8D3iVbWgyPF9rWO9lcYgsZMnXYVJunahRiQe8,2422
|
8
|
+
flwr/cli/auth_plugin/__init__.py,sha256=Hi4YiFWCFhm7G94N_RIF1OEapxpWy3SyUeXVXfJyZSY,1226
|
9
|
+
flwr/cli/auth_plugin/auth_plugin.py,sha256=LK-DYGk8J85Mjsbc5BX9ueDVOOPcFSo9cKWJX25X-QI,3050
|
10
|
+
flwr/cli/auth_plugin/noop_auth_plugin.py,sha256=KRyxoYtrzOWAIlSuXznli9gqL-rmHSG3zESmYSCQ_rg,2093
|
11
|
+
flwr/cli/auth_plugin/oidc_cli_plugin.py,sha256=9Oyd23g-2vgsXhRQdqG9JNocPylGXZM4UVPBB6l0GXA,5147
|
11
12
|
flwr/cli/build.py,sha256=hE54Q_eMdWLpVKSVC2aQaUxVaiUlWnAosGNvIPSEg6Y,7284
|
12
|
-
flwr/cli/
|
13
|
+
flwr/cli/cli_account_auth_interceptor.py,sha256=o_D6-al3TgLRUAX2OZhzLlYF_LXDsK5dLkjbi082JNU,3131
|
13
14
|
flwr/cli/config_utils.py,sha256=o75PJzgCTl9FdFo_I9OjCB02-ykK0VWZdhIAeR0A8QA,9130
|
14
15
|
flwr/cli/constant.py,sha256=LtxufmhkEqNWQ9doWbbbkUKa12vN_RK_Of5u0So-GHA,1729
|
15
16
|
flwr/cli/example.py,sha256=SNTorkKPrx1rOryGREUyZu8TcOc1-vFv1zEddaysdY0,2216
|
16
17
|
flwr/cli/install.py,sha256=Jr883qR7qssVpUr3hEOEcLK-dfW67Rsve3lZchjA9RU,8180
|
17
18
|
flwr/cli/log.py,sha256=n_fcoECKIkY3MTOfXhB8AjOG1LSQW_GSPY-2qc7rW9Q,6553
|
18
19
|
flwr/cli/login/__init__.py,sha256=B1SXKU3HCQhWfFDMJhlC7FOl8UsvH4mxysxeBnrfyUE,800
|
19
|
-
flwr/cli/login/login.py,sha256=
|
20
|
+
flwr/cli/login/login.py,sha256=TR2whArUBGd6TqS1v4MAKBGLrfABkFdRVQuzKpsUULE,4757
|
20
21
|
flwr/cli/ls.py,sha256=3YK7cpoImJ7PbjlP_JgYRQWz1GymX2q7Reu-mKJEpao,10957
|
21
22
|
flwr/cli/new/__init__.py,sha256=QA1E2QtzPvFCjLTUHnFnJbufuFiGyT_0Y53Wpbvg1F0,790
|
22
23
|
flwr/cli/new/new.py,sha256=nIuUrQSGDjI4kqnymlq-rOT0RU3AHwZrat3abqHhCwM,10598
|
@@ -85,12 +86,13 @@ flwr/cli/pull.py,sha256=dHiMe6x8w8yRoFNKpjA-eiPD6eFiHz4Vah5HZrqNpuo,3364
|
|
85
86
|
flwr/cli/run/__init__.py,sha256=RPyB7KbYTFl6YRiilCch6oezxrLQrl1kijV7BMGkLbA,790
|
86
87
|
flwr/cli/run/run.py,sha256=ECa0kup9dn15O70H74QdgUsEaeErbzDqVX_U0zZO5IM,8173
|
87
88
|
flwr/cli/stop.py,sha256=TR9F61suTxNUzGIktUdoBhXwdRtCdvzGhy3qCuvcfBg,5000
|
88
|
-
flwr/cli/
|
89
|
-
flwr/
|
89
|
+
flwr/cli/supernode/__init__.py,sha256=DVrTcyCg9NFll6glPLAAA6WPi7boxu6pFY_PRqIyHMk,893
|
90
|
+
flwr/cli/supernode/create.py,sha256=MloB7Rr-CE_37jH5lFoM8OsaSPUzWt0TSSB_GMwND5E,1959
|
91
|
+
flwr/cli/supernode/delete.py,sha256=_oCfBnoeUFPLEq_1EAqQp_CHEdzIEP2N_vHZsFTgWn0,1958
|
92
|
+
flwr/cli/supernode/ls.py,sha256=j850KQEMpS0rdpL8m9icx7DlRMDRtns6I_iTwUudC_0,1801
|
93
|
+
flwr/cli/utils.py,sha256=3bCu_MndtJD2S5MPG9VKi7SxG0No8S651pcfBVb29Y8,14397
|
94
|
+
flwr/client/__init__.py,sha256=Q0MIF442vLIGSkcwHKq_sIfECQynLARJrumAscq2Q6E,1241
|
90
95
|
flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
|
91
|
-
flwr/client/client_app.py,sha256=zVhi-l3chAb06ozFsKwix3hU_RpOLjST13Ha50AVIPE,16918
|
92
|
-
flwr/client/clientapp/__init__.py,sha256=Zw9qP5nHFnJ9K1dcR4cdY0fRqN-FaMYFSHJFXoFpUvo,711
|
93
|
-
flwr/client/clientapp/utils.py,sha256=LsiW1OL2VPcjom3xN29pgBQC0UrttQ-xWL_GF1fkKDo,4344
|
94
96
|
flwr/client/dpfedavg_numpy_client.py,sha256=3hul067cT2E9jBhzp7bFnFAZ_D2nWcIUEdHYE05FpzU,7404
|
95
97
|
flwr/client/grpc_adapter_client/__init__.py,sha256=RQWP5mFPROLHKgombiRvPXVWSoVrQ81wvZm0-lOuuBA,742
|
96
98
|
flwr/client/grpc_adapter_client/connection.py,sha256=JGv02EjSOAG1E5BRUD4lwXc1LLiYJ0OhInvp31qx1cU,4404
|
@@ -113,16 +115,18 @@ flwr/client/rest_client/__init__.py,sha256=MBiuK62hj439m9rtwSwI184Hth6Tt5GbmpNMy
|
|
113
115
|
flwr/client/rest_client/connection.py,sha256=fyiS1aXTv71jWczx7mSco94LYJTBXgTF-p2PnAk3CL8,15784
|
114
116
|
flwr/client/run_info_store.py,sha256=MaJ3UQ-07hWtK67wnWu0zR29jrk0fsfgJX506dvEOfE,4042
|
115
117
|
flwr/client/typing.py,sha256=Jw3rawDzI_-ZDcRmEQcs5gZModY7oeQlEeltYsdOhlU,1048
|
116
|
-
flwr/clientapp/__init__.py,sha256=
|
118
|
+
flwr/clientapp/__init__.py,sha256=dsXH29kvCk1meJj9UYMCIak8zehuuhVp0uDJ2COU_1c,829
|
119
|
+
flwr/clientapp/client_app.py,sha256=zVhi-l3chAb06ozFsKwix3hU_RpOLjST13Ha50AVIPE,16918
|
117
120
|
flwr/clientapp/mod/__init__.py,sha256=w18mDPUmjlm5P_er2GJ7l6Zbh8qyiHfMKoVqXxaTxdE,1024
|
118
121
|
flwr/clientapp/mod/centraldp_mods.py,sha256=bL2NMxbin9nj2OYSHbuOvIPk0rKH6xyAxG-pbtP9ISY,8954
|
119
122
|
flwr/clientapp/mod/localdp_mod.py,sha256=L3kQK3kjc-vwlhJcBwFIK6EiwBYlpHQkv4jiR7K9abQ,5642
|
120
123
|
flwr/clientapp/typing.py,sha256=x1GvXWy112RqZh27liJqz-yZ7SSCOwiOSmAQsUxk9MY,853
|
124
|
+
flwr/clientapp/utils.py,sha256=K_cqX4PvrifMHi_wKpwnwXQqmjKX_FEfv6Ji85B9ce0,4347
|
121
125
|
flwr/common/__init__.py,sha256=5GCLVk399Az_rTJHNticRlL0Sl_oPw_j5_LuFKfX7-M,4171
|
122
126
|
flwr/common/address.py,sha256=9JucdTwlc-jpeJkRKeUboZoacUtErwSVtnDR9kAtLqE,4119
|
123
127
|
flwr/common/args.py,sha256=Nq2u4yePbkSY0CWFamn0hZY6Rms8G1xYDeDGIcLIITE,5849
|
124
128
|
flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
|
125
|
-
flwr/common/constant.py,sha256=
|
129
|
+
flwr/common/constant.py,sha256=c3drkY6oYfQ45fYMYd1bHCgF3XxG7sXmtj8yP6RX4T4,9183
|
126
130
|
flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
|
127
131
|
flwr/common/date.py,sha256=1ZT2cRSpC2DJqprOVTLXYCR_O2_OZR0zXO_brJ3LqWc,1554
|
128
132
|
flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHERM-EoE,6148
|
@@ -167,11 +171,11 @@ flwr/common/secure_aggregation/secaggplus_utils.py,sha256=E_xU-Zd45daO1em7M6C2wO
|
|
167
171
|
flwr/common/serde.py,sha256=dx66gumR1BpwK45qDwvDLd_05VoKfzkUzWZ7zuZi1-0,21960
|
168
172
|
flwr/common/serde_utils.py,sha256=krx2C_W31KpfmDqnDCtULoTkT8WKweWTJ7FHYWtF1r4,5815
|
169
173
|
flwr/common/telemetry.py,sha256=xfx3KLFQKy0Qx8P7MAsOQxr5J3sEAQF5Kr5J-4jPz-o,8859
|
170
|
-
flwr/common/typing.py,sha256=
|
174
|
+
flwr/common/typing.py,sha256=MwHVRa1oPzUCbaz32MZKUIeou-4UuNXrMqZnrQzLNoY,6952
|
171
175
|
flwr/common/version.py,sha256=7GAGzPn73Mkh09qhrjbmjZQtcqVhBuzhFBaK4Mk4VRk,1325
|
172
176
|
flwr/compat/__init__.py,sha256=gbfDQKKKMZzi3GswyVRgyLdDlHiWj3wU6dg7y6m5O_s,752
|
173
177
|
flwr/compat/client/__init__.py,sha256=qpbo0lcxdNL4qy5KHqiGm8OLxSxkYgI_-dLh5rwhtcI,746
|
174
|
-
flwr/compat/client/app.py,sha256=
|
178
|
+
flwr/compat/client/app.py,sha256=d-BlxXzkabQq8f0w82k_pQf1hSuze7rIWbZFfjm6sUI,27129
|
175
179
|
flwr/compat/client/grpc_client/__init__.py,sha256=MDOckOODn-FJnkkFEfb2JO-2G97wrBr_TTqht-LhOcY,735
|
176
180
|
flwr/compat/client/grpc_client/connection.py,sha256=xAyvcTVr7bkwUfR5P3D_LKlZYiyySpt5sEwORA1h8Gc,9189
|
177
181
|
flwr/compat/common/__init__.py,sha256=OMnKw4ad0qYMSIA9LZRa2gOkhSOXwAZCpAHnBQE_hFc,746
|
@@ -187,10 +191,10 @@ flwr/proto/clientappio_pb2.py,sha256=vJjzwWydhg7LruK8cvRAeVQeHPsJztgdIW9nyiPBZF0
|
|
187
191
|
flwr/proto/clientappio_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
|
188
192
|
flwr/proto/clientappio_pb2_grpc.py,sha256=iobNROP0qvn5zddx7k-uIi_dJWP3T_BRp_kbKq086i8,17550
|
189
193
|
flwr/proto/clientappio_pb2_grpc.pyi,sha256=Ytf1O1ktKB0Vsuc3AWLIErGjIJYokzKYzi2uA7mdMeg,4785
|
190
|
-
flwr/proto/control_pb2.py,sha256=
|
191
|
-
flwr/proto/control_pb2.pyi,sha256=
|
192
|
-
flwr/proto/control_pb2_grpc.py,sha256=
|
193
|
-
flwr/proto/control_pb2_grpc.pyi,sha256=
|
194
|
+
flwr/proto/control_pb2.py,sha256=JR38sRRmlrXbr0QgKXyCZ5WsrwOMut1me_gYtBWU3NM,7742
|
195
|
+
flwr/proto/control_pb2.pyi,sha256=nOvDYkVU0WmsVkkfMs-c0rxS2XvQwO7arq0QjDFRyXs,13380
|
196
|
+
flwr/proto/control_pb2_grpc.py,sha256=Of6tnetwnzvJfJWEXhuTFszz4T_IJbdLJD9uRXBdG04,17182
|
197
|
+
flwr/proto/control_pb2_grpc.pyi,sha256=9z_MRrexz0o3_owST8SvhCjQIIAn-SwMWKIihPHzqdM,4801
|
194
198
|
flwr/proto/error_pb2.py,sha256=PQVWrfjVPo88ql_KgV9nCxyQNCcV9PVfmcw7sOzTMro,1084
|
195
199
|
flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
|
196
200
|
flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
@@ -219,8 +223,8 @@ flwr/proto/message_pb2.py,sha256=giymevXYEUdpIO-3A0XKsmRabXW1xSz0sIo5oOlbQ8Y,519
|
|
219
223
|
flwr/proto/message_pb2.pyi,sha256=EzXZHy2mtabofrd_ZgKSI6M4QH-soIaRZIZBPwBGPv0,11260
|
220
224
|
flwr/proto/message_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
221
225
|
flwr/proto/message_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
222
|
-
flwr/proto/node_pb2.py,sha256=
|
223
|
-
flwr/proto/node_pb2.pyi,sha256=
|
226
|
+
flwr/proto/node_pb2.py,sha256=gvFzmkEBB4Prp9y27RZKDoy1O5r56GqN-wpCdjoW5BA,1508
|
227
|
+
flwr/proto/node_pb2.pyi,sha256=THEURTmlD-23XOULcu2AH6Mvy7pl2N9eWUSntCutO8o,2060
|
224
228
|
flwr/proto/node_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
225
229
|
flwr/proto/node_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
|
226
230
|
flwr/proto/recorddict_pb2.py,sha256=eVkcnxMTFa3rvknRNiFuJ8z8xxPqgw7bV04aFiTe1j4,5290
|
@@ -245,7 +249,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
|
|
245
249
|
flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
|
246
250
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
247
251
|
flwr/server/__init__.py,sha256=LQQHiuL2jy7TpNaKastRdGsexlxSt5ZWAQNVqitDnrY,1598
|
248
|
-
flwr/server/app.py,sha256=
|
252
|
+
flwr/server/app.py,sha256=ESJ55Gl77zptQC10YwZg7WyK8Zr6zisI0rPtQJrx_-w,30698
|
249
253
|
flwr/server/client_manager.py,sha256=5jCGavVli7XdupvWWo7ru3PdFTlRU8IGvHFSSoUVLRs,6227
|
250
254
|
flwr/server/client_proxy.py,sha256=sv0E9AldBYOvc3pusqFh-GnyreeMfsXQ1cuTtxTq_wY,2399
|
251
255
|
flwr/server/compat/__init__.py,sha256=0IsttWvY15qO98_1GyzVC-vR1e_ZPXOdu2qUlOkYMPE,886
|
@@ -309,9 +313,9 @@ flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=Lzc93nA7tDqoy-zRUaPG316
|
|
309
313
|
flwr/server/superlink/fleet/rest_rere/rest_api.py,sha256=mxWKwGpgHPqd7cGFqd2ASnR-KZduIzLfT-d2yiNCqQ0,9257
|
310
314
|
flwr/server/superlink/fleet/vce/__init__.py,sha256=XOKbAWOzlCqEOQ3M2cBYkH7HKA7PxlbCJMunt-ty-DY,784
|
311
315
|
flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=PPH89Yqd1XKm-sRJN6R0WQlKT_b4v54Kzl2yzHAFzM8,1437
|
312
|
-
flwr/server/superlink/fleet/vce/backend/backend.py,sha256
|
313
|
-
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=
|
314
|
-
flwr/server/superlink/fleet/vce/vce_api.py,sha256=
|
316
|
+
flwr/server/superlink/fleet/vce/backend/backend.py,sha256=cSrHZ5SjCCvy4vI0pgsyjtx3cDMuMQve8KcKkK-dWWo,2196
|
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
|
315
319
|
flwr/server/superlink/linkstate/__init__.py,sha256=OtsgvDTnZLU3k0sUbkHbqoVwW6ql2FDmb6uT6DbNkZo,1064
|
316
320
|
flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=eNjjQp6dJ_Qz54fYeOZ9XFebbB_k9syhBB6N2rXRTsA,27891
|
317
321
|
flwr/server/superlink/linkstate/linkstate.py,sha256=TCLM9wZa2XGHs55B3LP9j5-WtUPhBjOUdMKQJELG2oY,13287
|
@@ -362,10 +366,10 @@ flwr/simulation/__init__.py,sha256=Gg6OsP1Z-ixc3-xxzvl7j7rz2Fijy9rzyEPpxgAQCeM,1
|
|
362
366
|
flwr/simulation/app.py,sha256=b_bDyZFwBf2zpKs37Vmd5cFJSzDRE0fL-8uqA0UkAv4,10393
|
363
367
|
flwr/simulation/legacy_app.py,sha256=nMISQqW0otJL1-2Kfd94O6BLlGS2IEmEPKTM2WGKrIs,15861
|
364
368
|
flwr/simulation/ray_transport/__init__.py,sha256=ogd-0AMv2U-wBZ1r3sHWaDIOIrVqr88Xi6C8o4Dviy0,734
|
365
|
-
flwr/simulation/ray_transport/ray_actor.py,sha256=
|
366
|
-
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=
|
369
|
+
flwr/simulation/ray_transport/ray_actor.py,sha256=z8XB_Pq9k5FrEUaBFpU_Oi0ATpSr5YCGBvnAGjb91nM,19150
|
370
|
+
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=eiQ75U-w82HDS728drEejo4ueJL-ZVLs8bZxuLcWKxU,7509
|
367
371
|
flwr/simulation/ray_transport/utils.py,sha256=KrexpWYCF-dAF3UHc9yDbPQWO-ahMT-BbD8nURLgiHk,2393
|
368
|
-
flwr/simulation/run_simulation.py,sha256=
|
372
|
+
flwr/simulation/run_simulation.py,sha256=FjWnBtJtVlrFMsLpvyBdSw9wUikHcpgIBGsU5m-WKUo,20669
|
369
373
|
flwr/simulation/simulationio_connection.py,sha256=mzS1C6EEREwQDPceDo30anAasmTDLb9qqV2tXlBhOUA,3494
|
370
374
|
flwr/supercore/__init__.py,sha256=pqkFoow_E6UhbBlhmoD1gmTH-33yJRhBsIZqxRPFZ7U,755
|
371
375
|
flwr/supercore/app_utils.py,sha256=K76Zt6R670b1hUmxOsNc1WUCVYvF7lejXPcCO9K0Q0g,1753
|
@@ -400,15 +404,16 @@ flwr/supercore/utils.py,sha256=ebuHMbeA8eXisX0oMPqBK3hk7uVnIE_yiqWVz8YbkpQ,1324
|
|
400
404
|
flwr/superlink/__init__.py,sha256=GNSuJ4-N6Z8wun2iZNlXqENt5beUyzC0Gi_tN396bbM,707
|
401
405
|
flwr/superlink/artifact_provider/__init__.py,sha256=pgZEcVPKRE874LSu3cgy0HbwSJBIpVy_HxQOmne4PAs,810
|
402
406
|
flwr/superlink/artifact_provider/artifact_provider.py,sha256=Gnlg2M2SOqCruji2B0U3ov68NJWKin9scmnWJTiSnNA,1267
|
403
|
-
flwr/superlink/auth_plugin/__init__.py,sha256=
|
404
|
-
flwr/superlink/auth_plugin/auth_plugin.py,sha256=
|
407
|
+
flwr/superlink/auth_plugin/__init__.py,sha256=ApYBHnDmtv5gVrnxdFq97zC58O1icqHogK2Dz6o8DVI,1000
|
408
|
+
flwr/superlink/auth_plugin/auth_plugin.py,sha256=mKaR2HanhKHmVrcvGqTUv47ut458QgqVU6enU4myB7Y,3038
|
409
|
+
flwr/superlink/auth_plugin/noop_auth_plugin.py,sha256=BQ1v1jFZen7AHh6Gwr9arElW3e9aAAKgOO4zKikbd_4,3044
|
405
410
|
flwr/superlink/servicer/__init__.py,sha256=ZC-kILcUGeh6IxJsfu24cTzUqIGXmQfEKsGfhsnhBpM,717
|
406
411
|
flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5ya3617BT8kR-2Y,803
|
407
|
-
flwr/superlink/servicer/control/
|
408
|
-
flwr/superlink/servicer/control/
|
412
|
+
flwr/superlink/servicer/control/control_account_auth_interceptor.py,sha256=Tbi4WVfWlNsOO-NNbe9iLdYp0thkO5xisi5O8ebzuCs,6252
|
413
|
+
flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=5uBl6VcJlUOgCF0d4kmsmJc1Rs1qxyouaZv0-uH2axs,5969
|
414
|
+
flwr/superlink/servicer/control/control_grpc.py,sha256=xajQdX9WuKJmyXZJOaMZKeiSwgSCrile1NOErOiXR5w,4270
|
409
415
|
flwr/superlink/servicer/control/control_license_interceptor.py,sha256=T3AzmRt-PPwyTq3hrdpmZHQd5_CpPOk7TtnFZrB-JRY,3349
|
410
|
-
flwr/superlink/servicer/control/control_servicer.py,sha256=
|
411
|
-
flwr/superlink/servicer/control/control_user_auth_interceptor.py,sha256=OpEP_vvY6H-anJHIOG6CRTNfl7FE_G-x2LchATDpilI,6235
|
416
|
+
flwr/superlink/servicer/control/control_servicer.py,sha256=KUj45Fu5d6jugLWBkWzPre0l3TqD13NYQCWr-KeiSZ0,17134
|
412
417
|
flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
|
413
418
|
flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
|
414
419
|
flwr/supernode/cli/flower_supernode.py,sha256=7aBm0z03OU-npVd1onLCvUotyhSvlZLxAnFkGVMhZcw,8670
|
@@ -418,12 +423,12 @@ flwr/supernode/nodestate/in_memory_nodestate.py,sha256=rr_tg7YXhf_seYFipSB59TAfh
|
|
418
423
|
flwr/supernode/nodestate/nodestate.py,sha256=jCOewZyctecMxsM0-_-pQwef9P3O5QjnKCgCGyx2PK4,5047
|
419
424
|
flwr/supernode/nodestate/nodestate_factory.py,sha256=UYTDCcwK_baHUmkzkJDxL0UEqvtTfOMlQRrROMCd0Xo,1430
|
420
425
|
flwr/supernode/runtime/__init__.py,sha256=JQdqd2EMTn-ORMeTvewYYh52ls0YKP68jrps1qioxu4,718
|
421
|
-
flwr/supernode/runtime/run_clientapp.py,sha256=
|
426
|
+
flwr/supernode/runtime/run_clientapp.py,sha256=BuaAKTzRuFmNX-IJky3kJzoWMmZkz9joHodbz_wmgpA,8771
|
422
427
|
flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca8gxdEo,717
|
423
428
|
flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
|
424
429
|
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
|
425
430
|
flwr/supernode/start_client_internal.py,sha256=Y9S1-QlO2WP6eo4JvWzIpfaCoh2aoE7bjEYyxNNnlyg,20777
|
426
|
-
flwr_nightly-1.23.0.
|
427
|
-
flwr_nightly-1.23.0.
|
428
|
-
flwr_nightly-1.23.0.
|
429
|
-
flwr_nightly-1.23.0.
|
431
|
+
flwr_nightly-1.23.0.dev20251003.dist-info/METADATA,sha256=7xBlC8J1OJ5gxeh0YlD3fyUQSdf7TTX1KYnrfGh5G9w,14559
|
432
|
+
flwr_nightly-1.23.0.dev20251003.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
433
|
+
flwr_nightly-1.23.0.dev20251003.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
|
434
|
+
flwr_nightly-1.23.0.dev20251003.dist-info/RECORD,,
|
File without changes
|
{flwr_nightly-1.23.0.dev20251001.dist-info → flwr_nightly-1.23.0.dev20251003.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|