flwr-nightly 1.21.0.dev20250907__py3-none-any.whl → 1.21.0.dev20250908__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/app/__init__.py +10 -1
- flwr/cli/utils.py +18 -7
- flwr/common/constant.py +1 -0
- flwr/superlink/servicer/control/control_servicer.py +3 -2
- {flwr_nightly-1.21.0.dev20250907.dist-info → flwr_nightly-1.21.0.dev20250908.dist-info}/METADATA +1 -1
- {flwr_nightly-1.21.0.dev20250907.dist-info → flwr_nightly-1.21.0.dev20250908.dist-info}/RECORD +8 -8
- {flwr_nightly-1.21.0.dev20250907.dist-info → flwr_nightly-1.21.0.dev20250908.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.21.0.dev20250907.dist-info → flwr_nightly-1.21.0.dev20250908.dist-info}/entry_points.txt +0 -0
flwr/app/__init__.py
CHANGED
@@ -15,19 +15,28 @@
|
|
15
15
|
"""Public Flower App APIs."""
|
16
16
|
|
17
17
|
|
18
|
+
from flwr.common.constant import MessageType
|
18
19
|
from flwr.common.context import Context
|
19
20
|
from flwr.common.message import Message
|
20
|
-
from flwr.common.record import
|
21
|
+
from flwr.common.record import (
|
22
|
+
Array,
|
23
|
+
ArrayRecord,
|
24
|
+
ConfigRecord,
|
25
|
+
MetricRecord,
|
26
|
+
RecordDict,
|
27
|
+
)
|
21
28
|
|
22
29
|
from .error import Error
|
23
30
|
from .metadata import Metadata
|
24
31
|
|
25
32
|
__all__ = [
|
33
|
+
"Array",
|
26
34
|
"ArrayRecord",
|
27
35
|
"ConfigRecord",
|
28
36
|
"Context",
|
29
37
|
"Error",
|
30
38
|
"Message",
|
39
|
+
"MessageType",
|
31
40
|
"Metadata",
|
32
41
|
"MetricRecord",
|
33
42
|
"RecordDict",
|
flwr/cli/utils.py
CHANGED
@@ -32,6 +32,7 @@ from flwr.common.constant import (
|
|
32
32
|
AUTH_TYPE_JSON_KEY,
|
33
33
|
CREDENTIALS_DIR,
|
34
34
|
FLWR_DIR,
|
35
|
+
NO_USER_AUTH_MESSAGE,
|
35
36
|
RUN_ID_NOT_FOUND_MESSAGE,
|
36
37
|
)
|
37
38
|
from flwr.common.grpc import (
|
@@ -312,11 +313,21 @@ def flwr_cli_grpc_exc_handler() -> Iterator[None]:
|
|
312
313
|
)
|
313
314
|
raise typer.Exit(code=1) from None
|
314
315
|
if e.code() == grpc.StatusCode.UNIMPLEMENTED:
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
316
|
+
if e.details() == NO_USER_AUTH_MESSAGE: # pylint: disable=E1101
|
317
|
+
typer.secho(
|
318
|
+
"❌ User authentication is not enabled on this SuperLink.",
|
319
|
+
fg=typer.colors.RED,
|
320
|
+
bold=True,
|
321
|
+
)
|
322
|
+
else:
|
323
|
+
typer.secho(
|
324
|
+
"❌ The SuperLink cannot process this request. Please verify that "
|
325
|
+
"you set the address to its Control API endpoint correctly in your "
|
326
|
+
"`pyproject.toml`, and ensure that the Flower versions used by "
|
327
|
+
"the CLI and SuperLink are compatible.",
|
328
|
+
fg=typer.colors.RED,
|
329
|
+
bold=True,
|
330
|
+
)
|
320
331
|
raise typer.Exit(code=1) from None
|
321
332
|
if e.code() == grpc.StatusCode.PERMISSION_DENIED:
|
322
333
|
typer.secho(
|
@@ -324,7 +335,7 @@ def flwr_cli_grpc_exc_handler() -> Iterator[None]:
|
|
324
335
|
fg=typer.colors.RED,
|
325
336
|
bold=True,
|
326
337
|
)
|
327
|
-
# pylint: disable=E1101
|
338
|
+
# pylint: disable-next=E1101
|
328
339
|
typer.secho(e.details(), fg=typer.colors.RED, bold=True)
|
329
340
|
raise typer.Exit(code=1) from None
|
330
341
|
if e.code() == grpc.StatusCode.UNAVAILABLE:
|
@@ -337,7 +348,7 @@ def flwr_cli_grpc_exc_handler() -> Iterator[None]:
|
|
337
348
|
raise typer.Exit(code=1) from None
|
338
349
|
if (
|
339
350
|
e.code() == grpc.StatusCode.NOT_FOUND
|
340
|
-
and e.details() == RUN_ID_NOT_FOUND_MESSAGE
|
351
|
+
and e.details() == RUN_ID_NOT_FOUND_MESSAGE # pylint: disable=E1101
|
341
352
|
):
|
342
353
|
typer.secho(
|
343
354
|
"❌ Run ID not found.",
|
flwr/common/constant.py
CHANGED
@@ -154,6 +154,7 @@ PULL_BACKOFF_CAP = 10 # Maximum backoff time for pulling objects
|
|
154
154
|
|
155
155
|
# ControlServicer constants
|
156
156
|
RUN_ID_NOT_FOUND_MESSAGE = "Run ID not found"
|
157
|
+
NO_USER_AUTH_MESSAGE = "ControlServicer initialized without user authentication"
|
157
158
|
|
158
159
|
|
159
160
|
class MessageType:
|
@@ -29,6 +29,7 @@ from flwr.common.auth_plugin import ControlAuthPlugin
|
|
29
29
|
from flwr.common.constant import (
|
30
30
|
FAB_MAX_SIZE,
|
31
31
|
LOG_STREAM_INTERVAL,
|
32
|
+
NO_USER_AUTH_MESSAGE,
|
32
33
|
RUN_ID_NOT_FOUND_MESSAGE,
|
33
34
|
Status,
|
34
35
|
SubStatus,
|
@@ -291,7 +292,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
291
292
|
if self.auth_plugin is None:
|
292
293
|
context.abort(
|
293
294
|
grpc.StatusCode.UNIMPLEMENTED,
|
294
|
-
|
295
|
+
NO_USER_AUTH_MESSAGE,
|
295
296
|
)
|
296
297
|
raise grpc.RpcError() # This line is unreachable
|
297
298
|
|
@@ -318,7 +319,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
318
319
|
if self.auth_plugin is None:
|
319
320
|
context.abort(
|
320
321
|
grpc.StatusCode.UNIMPLEMENTED,
|
321
|
-
|
322
|
+
NO_USER_AUTH_MESSAGE,
|
322
323
|
)
|
323
324
|
raise grpc.RpcError() # This line is unreachable
|
324
325
|
|
{flwr_nightly-1.21.0.dev20250907.dist-info → flwr_nightly-1.21.0.dev20250908.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.21.0.
|
3
|
+
Version: 1.21.0.dev20250908
|
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.21.0.dev20250907.dist-info → flwr_nightly-1.21.0.dev20250908.dist-info}/RECORD
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
flwr/__init__.py,sha256=CXTKPZSm83CVKTxw9j_ge6AEVnqgd1rlcsm_2kPoVkU,1009
|
2
|
-
flwr/app/__init__.py,sha256=
|
2
|
+
flwr/app/__init__.py,sha256=Pqg1iWx_TiBuGYeGJnS1QgYYWcAnPnZ2h4Y5iacNSls,1195
|
3
3
|
flwr/app/error.py,sha256=0PwA-E_CAs5P_nWAA0kksVO1A44t4CNLEf7u-Su-uJ0,2342
|
4
4
|
flwr/app/exception.py,sha256=dAKSNrdh9YqKZTdYaN8hts4dAMVZHfNDV-ytzYby0LQ,1246
|
5
5
|
flwr/app/metadata.py,sha256=rdMBn0zhIOYmCvmGENQWSQqDwcxwsMJzCle4PQdlc_Y,7331
|
@@ -79,7 +79,7 @@ flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=mK8wOWqoQOVxZG6-
|
|
79
79
|
flwr/cli/run/__init__.py,sha256=RPyB7KbYTFl6YRiilCch6oezxrLQrl1kijV7BMGkLbA,790
|
80
80
|
flwr/cli/run/run.py,sha256=ECa0kup9dn15O70H74QdgUsEaeErbzDqVX_U0zZO5IM,8173
|
81
81
|
flwr/cli/stop.py,sha256=TR9F61suTxNUzGIktUdoBhXwdRtCdvzGhy3qCuvcfBg,5000
|
82
|
-
flwr/cli/utils.py,sha256=
|
82
|
+
flwr/cli/utils.py,sha256=tTI8PyJdA8BU1PoTS8ZItdCM5EVTeze_Z1zumffYY6A,12963
|
83
83
|
flwr/client/__init__.py,sha256=boIhKaK6I977zrILmoTutNx94x5jB0e6F1gnAjaRJnI,1250
|
84
84
|
flwr/client/client.py,sha256=3HAchxvknKG9jYbB7swNyDj-e5vUWDuMKoLvbT7jCVM,7895
|
85
85
|
flwr/client/client_app.py,sha256=zVhi-l3chAb06ozFsKwix3hU_RpOLjST13Ha50AVIPE,16918
|
@@ -115,7 +115,7 @@ flwr/common/args.py,sha256=Nq2u4yePbkSY0CWFamn0hZY6Rms8G1xYDeDGIcLIITE,5849
|
|
115
115
|
flwr/common/auth_plugin/__init__.py,sha256=DktrRcGZrRarLf7Jb_UlHtOyLp9_-kEplyq6PS5-vOA,988
|
116
116
|
flwr/common/auth_plugin/auth_plugin.py,sha256=mM7SuphO4OsVAVJR1GErYVgYT83ZjxDzS_gha12bT9E,4855
|
117
117
|
flwr/common/config.py,sha256=glcZDjco-amw1YfQcYTFJ4S1pt9APoexT-mf1QscuHs,13960
|
118
|
-
flwr/common/constant.py,sha256=
|
118
|
+
flwr/common/constant.py,sha256=FXG5HqwQG-mQXgfptHn4jTaXD4Y_kyDA1ntTKcp0qfs,8850
|
119
119
|
flwr/common/context.py,sha256=Be8obQR_OvEDy1OmshuUKxGRQ7Qx89mf5F4xlhkR10s,2407
|
120
120
|
flwr/common/date.py,sha256=1ZT2cRSpC2DJqprOVTLXYCR_O2_OZR0zXO_brJ3LqWc,1554
|
121
121
|
flwr/common/differential_privacy.py,sha256=FdlpdpPl_H_2HJa8CQM1iCUGBBQ5Dc8CzxmHERM-EoE,6148
|
@@ -386,7 +386,7 @@ flwr/superlink/servicer/control/__init__.py,sha256=qhUTMt_Mg4lxslCJYn5hDSrA-lXf5
|
|
386
386
|
flwr/superlink/servicer/control/control_event_log_interceptor.py,sha256=HauUd7Xq-b1TFZmZVl9wpBITfDttn8-1_KhlEq-HJ8M,5966
|
387
387
|
flwr/superlink/servicer/control/control_grpc.py,sha256=DUGArJvH3oZasutEU55NtYm0ZukPEO92UKhzOGu3qu8,4079
|
388
388
|
flwr/superlink/servicer/control/control_license_interceptor.py,sha256=T3AzmRt-PPwyTq3hrdpmZHQd5_CpPOk7TtnFZrB-JRY,3349
|
389
|
-
flwr/superlink/servicer/control/control_servicer.py,sha256=
|
389
|
+
flwr/superlink/servicer/control/control_servicer.py,sha256=RFttpc1O0pYBaru1SXE6v3hUoNfgR3_ijN02bSVhDsM,13914
|
390
390
|
flwr/superlink/servicer/control/control_user_auth_interceptor.py,sha256=9Aqhrt_UX80FXbIQVXUrqDHs5rD5CA7vEn0Bh-zPiYU,6232
|
391
391
|
flwr/supernode/__init__.py,sha256=KgeCaVvXWrU3rptNR1y0oBp4YtXbAcrnCcJAiOoWkI4,707
|
392
392
|
flwr/supernode/cli/__init__.py,sha256=JuEMr0-s9zv-PEWKuLB9tj1ocNfroSyNJ-oyv7ati9A,887
|
@@ -402,7 +402,7 @@ flwr/supernode/servicer/__init__.py,sha256=lucTzre5WPK7G1YLCfaqg3rbFWdNSb7ZTt-ca
|
|
402
402
|
flwr/supernode/servicer/clientappio/__init__.py,sha256=7Oy62Y_oijqF7Dxi6tpcUQyOpLc_QpIRZ83NvwmB0Yg,813
|
403
403
|
flwr/supernode/servicer/clientappio/clientappio_servicer.py,sha256=nIHRu38EWK-rpNOkcgBRAAKwYQQWFeCwu0lkO7OPZGQ,10239
|
404
404
|
flwr/supernode/start_client_internal.py,sha256=Y9S1-QlO2WP6eo4JvWzIpfaCoh2aoE7bjEYyxNNnlyg,20777
|
405
|
-
flwr_nightly-1.21.0.
|
406
|
-
flwr_nightly-1.21.0.
|
407
|
-
flwr_nightly-1.21.0.
|
408
|
-
flwr_nightly-1.21.0.
|
405
|
+
flwr_nightly-1.21.0.dev20250908.dist-info/METADATA,sha256=sOTcMr6_KLxcsaYqX3eou2bVcol4pTiC94t3qJOKZAA,15967
|
406
|
+
flwr_nightly-1.21.0.dev20250908.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
407
|
+
flwr_nightly-1.21.0.dev20250908.dist-info/entry_points.txt,sha256=hxHD2ixb_vJFDOlZV-zB4Ao32_BQlL34ftsDh1GXv14,420
|
408
|
+
flwr_nightly-1.21.0.dev20250908.dist-info/RECORD,,
|
{flwr_nightly-1.21.0.dev20250907.dist-info → flwr_nightly-1.21.0.dev20250908.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|