flwr-nightly 1.26.0.dev20260123__tar.gz → 1.26.0.dev20260126__tar.gz
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_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/PKG-INFO +1 -1
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app_cmd/publish.py +18 -44
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app_cmd/review.py +8 -25
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +3 -6
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/build.py +8 -19
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config/ls.py +8 -13
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config_utils.py +19 -39
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/federation/ls.py +3 -7
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/flower_config.py +28 -47
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/install.py +18 -57
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/log.py +2 -2
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/login/login.py +8 -21
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/ls.py +3 -7
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/new/new.py +9 -29
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/pull.py +3 -7
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/run/run.py +6 -15
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/stop.py +5 -17
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/supernode/register.py +6 -22
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/supernode/unregister.py +3 -13
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/utils.py +64 -114
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/config.py +5 -9
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/constant.py +2 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +4 -4
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/sql_linkstate.py +38 -10
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_servicer.py +11 -12
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/pyproject.toml +1 -1
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/README.md +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/exception.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/message_type.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/app/user_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app_cmd/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config_migration.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/federation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/run_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/supernode/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/supernode/ls.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/client_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/mod/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/clientapp/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/exit_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/exit/signal_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/inflatable_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/array.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/arraychunk.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/common/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/appio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/appio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/appio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/federation_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/federation_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/federation_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/grid/grpc_grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/exception.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/bulyan.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedadam.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedopt.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedprox.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/krum.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/multikrum.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/result.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/strategy.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/address.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/app_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/cli/flower_superexec.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/corestate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/corestate/corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/corestate/sql_corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/credential_store/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/credential_store/credential_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/date.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/ffs/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/ffs/ffs.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/grpc_health/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/grpc_health/health_server.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/heartbeat.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/license_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/object_store/sql_object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/primitives/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/primitives/asymmetric.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/sql_mixin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/README.md +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/superexec/run_superexec.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supercore/version.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/federation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/federation/federation_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/supernode/start_client_internal.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.26.0.
|
|
3
|
+
Version: 1.26.0.dev20260126
|
|
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.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app_cmd/publish.py
RENAMED
|
@@ -19,6 +19,7 @@ from contextlib import ExitStack
|
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
from typing import IO, Annotated
|
|
21
21
|
|
|
22
|
+
import click
|
|
22
23
|
import requests
|
|
23
24
|
import typer
|
|
24
25
|
from requests import Response
|
|
@@ -62,12 +63,7 @@ def publish(
|
|
|
62
63
|
auth_plugin = load_cli_auth_plugin_from_connection(SUPERGRID_ADDRESS)
|
|
63
64
|
auth_plugin.load_tokens()
|
|
64
65
|
if not isinstance(auth_plugin, OidcCliPlugin) or not auth_plugin.access_token:
|
|
65
|
-
|
|
66
|
-
"❌ Please log in before publishing app.",
|
|
67
|
-
fg=typer.colors.RED,
|
|
68
|
-
err=True,
|
|
69
|
-
)
|
|
70
|
-
raise typer.Exit(code=1)
|
|
66
|
+
raise click.ClickException("Please log in before publishing app.")
|
|
71
67
|
|
|
72
68
|
# Load token from the plugin
|
|
73
69
|
token = auth_plugin.access_token
|
|
@@ -82,19 +78,17 @@ def publish(
|
|
|
82
78
|
try:
|
|
83
79
|
resp = _post_files(files_param, token)
|
|
84
80
|
except requests.RequestException as err:
|
|
85
|
-
|
|
86
|
-
raise typer.Exit(code=1) from err
|
|
81
|
+
raise click.ClickException(f"Network error: {err}") from err
|
|
87
82
|
|
|
88
83
|
if resp.ok:
|
|
89
84
|
typer.secho("🎊 Upload successful", fg=typer.colors.GREEN, bold=True)
|
|
90
85
|
return # success
|
|
91
86
|
|
|
92
87
|
# Error path:
|
|
93
|
-
msg = f"
|
|
88
|
+
msg = f"Upload failed with status {resp.status_code}"
|
|
94
89
|
if resp.text:
|
|
95
90
|
msg += f": {resp.text}"
|
|
96
|
-
|
|
97
|
-
raise typer.Exit(code=1)
|
|
91
|
+
raise click.ClickException(msg)
|
|
98
92
|
|
|
99
93
|
|
|
100
94
|
def _depth_of(relative_path_to_root: Path) -> int:
|
|
@@ -138,14 +132,9 @@ def _collect_file_paths(root: Path) -> list[Path]:
|
|
|
138
132
|
|
|
139
133
|
# Check max depth
|
|
140
134
|
if _depth_of(relative_path) > MAX_DIR_DEPTH:
|
|
141
|
-
|
|
142
|
-
f"
|
|
143
|
-
f"exceeds the maximum directory depth "
|
|
144
|
-
f"of {MAX_DIR_DEPTH}.",
|
|
145
|
-
fg=typer.colors.RED,
|
|
146
|
-
err=True,
|
|
135
|
+
raise click.ClickException(
|
|
136
|
+
f"'{path}' exceeds the maximum directory depth of {MAX_DIR_DEPTH}."
|
|
147
137
|
)
|
|
148
|
-
raise typer.Exit(code=2)
|
|
149
138
|
|
|
150
139
|
file_paths.append(path)
|
|
151
140
|
|
|
@@ -160,21 +149,15 @@ def _validate_files(file_paths: list[Path]) -> None:
|
|
|
160
149
|
Checks file count, individual file size, total size, and UTF-8 encoding.
|
|
161
150
|
"""
|
|
162
151
|
if len(file_paths) == 0:
|
|
163
|
-
|
|
152
|
+
raise click.ClickException(
|
|
164
153
|
"Nothing to upload: no files matched after applying .gitignore and "
|
|
165
|
-
"allowed extensions."
|
|
166
|
-
fg=typer.colors.RED,
|
|
167
|
-
err=True,
|
|
154
|
+
"allowed extensions."
|
|
168
155
|
)
|
|
169
|
-
raise typer.Exit(code=2)
|
|
170
156
|
|
|
171
157
|
if len(file_paths) > MAX_FILE_COUNT:
|
|
172
|
-
|
|
173
|
-
f"Too many files: {len(file_paths)} > allowed maximum of {MAX_FILE_COUNT}."
|
|
174
|
-
fg=typer.colors.RED,
|
|
175
|
-
err=True,
|
|
158
|
+
raise click.ClickException(
|
|
159
|
+
f"Too many files: {len(file_paths)} > allowed maximum of {MAX_FILE_COUNT}."
|
|
176
160
|
)
|
|
177
|
-
raise typer.Exit(code=2)
|
|
178
161
|
|
|
179
162
|
# Calculate files size
|
|
180
163
|
total_size = 0
|
|
@@ -184,34 +167,25 @@ def _validate_files(file_paths: list[Path]) -> None:
|
|
|
184
167
|
|
|
185
168
|
# Check single file size
|
|
186
169
|
if file_size > MAX_FILE_BYTES:
|
|
187
|
-
|
|
170
|
+
raise click.ClickException(
|
|
188
171
|
f"File too large: '{path.as_posix()}' is {file_size:,} bytes, "
|
|
189
|
-
f"exceeding the per-file limit of {MAX_FILE_BYTES:,} bytes."
|
|
190
|
-
fg=typer.colors.RED,
|
|
191
|
-
err=True,
|
|
172
|
+
f"exceeding the per-file limit of {MAX_FILE_BYTES:,} bytes."
|
|
192
173
|
)
|
|
193
|
-
raise typer.Exit(code=2)
|
|
194
174
|
|
|
195
175
|
# Ensure we can decode as UTF-8.
|
|
196
176
|
try:
|
|
197
177
|
path.read_text(encoding=UTF8)
|
|
198
178
|
except UnicodeDecodeError as err:
|
|
199
|
-
|
|
200
|
-
f"Encoding error: '{path}' is not UTF-8 encoded."
|
|
201
|
-
|
|
202
|
-
err=True,
|
|
203
|
-
)
|
|
204
|
-
raise typer.Exit(code=2) from err
|
|
179
|
+
raise click.ClickException(
|
|
180
|
+
f"Encoding error: '{path}' is not UTF-8 encoded."
|
|
181
|
+
) from err
|
|
205
182
|
|
|
206
183
|
# Check total files size
|
|
207
184
|
if total_size > MAX_TOTAL_BYTES:
|
|
208
|
-
|
|
185
|
+
raise click.ClickException(
|
|
209
186
|
"Total size of all files is too large: "
|
|
210
|
-
f"{total_size:,} bytes > {MAX_TOTAL_BYTES:,} bytes."
|
|
211
|
-
fg=typer.colors.RED,
|
|
212
|
-
err=True,
|
|
187
|
+
f"{total_size:,} bytes > {MAX_TOTAL_BYTES:,} bytes."
|
|
213
188
|
)
|
|
214
|
-
raise typer.Exit(code=2)
|
|
215
189
|
|
|
216
190
|
# Print validation passed prompt
|
|
217
191
|
typer.echo(typer.style("✅ Validation passed", fg=typer.colors.GREEN, bold=True))
|
{flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/app_cmd/review.py
RENAMED
|
@@ -21,6 +21,7 @@ import re
|
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
from typing import Annotated
|
|
23
23
|
|
|
24
|
+
import click
|
|
24
25
|
import requests
|
|
25
26
|
import typer
|
|
26
27
|
from cryptography.exceptions import UnsupportedAlgorithm
|
|
@@ -60,12 +61,7 @@ def review(
|
|
|
60
61
|
|
|
61
62
|
auth_plugin.load_tokens()
|
|
62
63
|
if not isinstance(auth_plugin, OidcCliPlugin) or not auth_plugin.access_token:
|
|
63
|
-
|
|
64
|
-
"❌ Please log in before reviewing app.",
|
|
65
|
-
fg=typer.colors.RED,
|
|
66
|
-
err=True,
|
|
67
|
-
)
|
|
68
|
-
raise typer.Exit(code=1)
|
|
64
|
+
raise click.ClickException("Please log in before reviewing app.")
|
|
69
65
|
|
|
70
66
|
# Load token from the plugin
|
|
71
67
|
token = auth_plugin.access_token
|
|
@@ -74,8 +70,7 @@ def review(
|
|
|
74
70
|
try:
|
|
75
71
|
app_id, app_version = parse_app_spec(app_spec)
|
|
76
72
|
except ValueError as e:
|
|
77
|
-
|
|
78
|
-
raise typer.Exit(code=1) from e
|
|
73
|
+
raise click.ClickException(str(e)) from e
|
|
79
74
|
|
|
80
75
|
# Download FAB
|
|
81
76
|
typer.secho("Downloading FAB... ", fg=typer.colors.BLUE)
|
|
@@ -83,8 +78,7 @@ def review(
|
|
|
83
78
|
try:
|
|
84
79
|
presigned_url, _ = request_download_link(app_id, app_version, url, "fab_url")
|
|
85
80
|
except ValueError as e:
|
|
86
|
-
|
|
87
|
-
raise typer.Exit(code=1) from e
|
|
81
|
+
raise click.ClickException(str(e)) from e
|
|
88
82
|
|
|
89
83
|
fab_bytes = _download_fab(presigned_url)
|
|
90
84
|
|
|
@@ -170,12 +164,7 @@ def _download_fab(url: str) -> bytes:
|
|
|
170
164
|
r = requests.get(url, timeout=60)
|
|
171
165
|
r.raise_for_status()
|
|
172
166
|
except requests.RequestException as e:
|
|
173
|
-
|
|
174
|
-
f"❌ FAB download failed: {e}",
|
|
175
|
-
fg=typer.colors.RED,
|
|
176
|
-
err=True,
|
|
177
|
-
)
|
|
178
|
-
raise typer.Exit(code=1) from e
|
|
167
|
+
raise click.ClickException(f"FAB download failed: {e}") from e
|
|
179
168
|
return r.content
|
|
180
169
|
|
|
181
170
|
|
|
@@ -209,20 +198,14 @@ def _submit_review(
|
|
|
209
198
|
try:
|
|
210
199
|
resp = requests.post(url, headers=headers, json=payload, timeout=120)
|
|
211
200
|
except requests.RequestException as e:
|
|
212
|
-
|
|
213
|
-
f"❌ Network error while submitting review: {e}",
|
|
214
|
-
fg=typer.colors.RED,
|
|
215
|
-
err=True,
|
|
216
|
-
)
|
|
217
|
-
raise typer.Exit(code=1) from e
|
|
201
|
+
raise click.ClickException(f"Network error while submitting review: {e}") from e
|
|
218
202
|
|
|
219
203
|
if resp.ok:
|
|
220
204
|
typer.secho("🎊 Review submitted", fg=typer.colors.GREEN, bold=True)
|
|
221
205
|
return
|
|
222
206
|
|
|
223
207
|
# Error path:
|
|
224
|
-
msg = f"
|
|
208
|
+
msg = f"Review submission failed (HTTP {resp.status_code})"
|
|
225
209
|
if resp.text:
|
|
226
210
|
msg += f": {resp.text}"
|
|
227
|
-
|
|
228
|
-
raise typer.Exit(code=1)
|
|
211
|
+
raise click.ClickException(msg)
|
|
@@ -19,6 +19,7 @@ import time
|
|
|
19
19
|
import webbrowser
|
|
20
20
|
from collections.abc import Sequence
|
|
21
21
|
|
|
22
|
+
import click
|
|
22
23
|
import typer
|
|
23
24
|
|
|
24
25
|
from flwr.cli.constant import (
|
|
@@ -137,13 +138,9 @@ class OidcCliPlugin(CliAuthPlugin):
|
|
|
137
138
|
) -> Sequence[tuple[str, str | bytes]]:
|
|
138
139
|
"""Write authentication tokens to the provided metadata."""
|
|
139
140
|
if self.access_token is None or self.refresh_token is None:
|
|
140
|
-
|
|
141
|
-
"
|
|
142
|
-
fg=typer.colors.RED,
|
|
143
|
-
bold=True,
|
|
144
|
-
err=True,
|
|
141
|
+
raise click.ClickException(
|
|
142
|
+
"Missing authentication tokens. Please login first."
|
|
145
143
|
)
|
|
146
|
-
raise typer.Exit(code=1)
|
|
147
144
|
|
|
148
145
|
return list(metadata) + [
|
|
149
146
|
(ACCESS_TOKEN_KEY, self.access_token),
|
|
@@ -21,6 +21,7 @@ from io import BytesIO
|
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
from typing import Annotated, Any
|
|
23
23
|
|
|
24
|
+
import click
|
|
24
25
|
import pathspec
|
|
25
26
|
import tomli
|
|
26
27
|
import tomli_w
|
|
@@ -107,35 +108,23 @@ def build(
|
|
|
107
108
|
|
|
108
109
|
app = app.resolve()
|
|
109
110
|
if not app.is_dir():
|
|
110
|
-
|
|
111
|
-
f"
|
|
112
|
-
fg=typer.colors.RED,
|
|
113
|
-
bold=True,
|
|
114
|
-
err=True,
|
|
111
|
+
raise click.ClickException(
|
|
112
|
+
f"The path {app} is not a valid path to a Flower app."
|
|
115
113
|
)
|
|
116
|
-
raise typer.Exit(code=1)
|
|
117
114
|
|
|
118
115
|
if not is_valid_project_name(app.name):
|
|
119
|
-
|
|
120
|
-
f"
|
|
116
|
+
raise click.ClickException(
|
|
117
|
+
f"The project name {app.name} is invalid, "
|
|
121
118
|
"a valid project name must start with a letter, "
|
|
122
|
-
"and can only contain letters, digits, and hyphens."
|
|
123
|
-
fg=typer.colors.RED,
|
|
124
|
-
bold=True,
|
|
125
|
-
err=True,
|
|
119
|
+
"and can only contain letters, digits, and hyphens."
|
|
126
120
|
)
|
|
127
|
-
raise typer.Exit(code=1)
|
|
128
121
|
|
|
129
122
|
config, errors, warnings = load_and_validate(app / "pyproject.toml")
|
|
130
123
|
if config is None:
|
|
131
|
-
|
|
124
|
+
raise click.ClickException(
|
|
132
125
|
"Project configuration could not be loaded.\npyproject.toml is invalid:\n"
|
|
133
|
-
+ "\n".join([f"- {line}" for line in errors])
|
|
134
|
-
fg=typer.colors.RED,
|
|
135
|
-
bold=True,
|
|
136
|
-
err=True,
|
|
126
|
+
+ "\n".join([f"- {line}" for line in errors])
|
|
137
127
|
)
|
|
138
|
-
raise typer.Exit(code=1)
|
|
139
128
|
|
|
140
129
|
if warnings:
|
|
141
130
|
typer.secho(
|
{flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config/ls.py
RENAMED
|
@@ -19,6 +19,7 @@ import io
|
|
|
19
19
|
import json
|
|
20
20
|
from typing import Annotated
|
|
21
21
|
|
|
22
|
+
import click
|
|
22
23
|
import typer
|
|
23
24
|
from rich.console import Console
|
|
24
25
|
|
|
@@ -66,6 +67,8 @@ def ls(
|
|
|
66
67
|
}
|
|
67
68
|
Console().print_json(json.dumps(conn))
|
|
68
69
|
else:
|
|
70
|
+
typer.secho("Flower Config file: ", fg=typer.colors.BLUE, nl=False)
|
|
71
|
+
typer.secho(f"{config_path}", fg=typer.colors.GREEN)
|
|
69
72
|
typer.secho("SuperLink connections:", fg=typer.colors.BLUE)
|
|
70
73
|
# List SuperLink connections and highlight default
|
|
71
74
|
for k in connection_names:
|
|
@@ -77,26 +80,18 @@ def ls(
|
|
|
77
80
|
nl=False,
|
|
78
81
|
)
|
|
79
82
|
typer.echo()
|
|
80
|
-
except typer.Exit as err:
|
|
81
|
-
# log the error if json format requested
|
|
82
|
-
# else do nothing since it will be logged by typer
|
|
83
|
-
if suppress_output:
|
|
84
|
-
restore_output()
|
|
85
|
-
e_message = captured_output.getvalue()
|
|
86
|
-
print_json_error(e_message, err)
|
|
87
83
|
|
|
88
84
|
except Exception as err: # pylint: disable=broad-except
|
|
85
|
+
# log the error if json format requested
|
|
89
86
|
if suppress_output:
|
|
90
87
|
restore_output()
|
|
91
88
|
e_message = captured_output.getvalue()
|
|
92
89
|
print_json_error(e_message, err)
|
|
93
90
|
else:
|
|
94
|
-
|
|
95
|
-
f"
|
|
96
|
-
f"connections in the Flower configuration file ({config_path}): {err}"
|
|
97
|
-
|
|
98
|
-
err=True,
|
|
99
|
-
)
|
|
91
|
+
raise click.ClickException(
|
|
92
|
+
f"An unexpected error occurred while listing the SuperLink "
|
|
93
|
+
f"connections in the Flower configuration file ({config_path}): {err}"
|
|
94
|
+
) from err
|
|
100
95
|
|
|
101
96
|
finally:
|
|
102
97
|
if suppress_output:
|
{flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/config_utils.py
RENAMED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
from pathlib import Path
|
|
19
19
|
from typing import Any
|
|
20
20
|
|
|
21
|
+
import click
|
|
21
22
|
import tomli
|
|
22
|
-
import typer
|
|
23
23
|
|
|
24
24
|
from flwr.cli.typing import SuperLinkConnection
|
|
25
25
|
from flwr.common.config import (
|
|
@@ -137,22 +137,18 @@ def validate_federation_in_project_config(
|
|
|
137
137
|
|
|
138
138
|
Raises
|
|
139
139
|
------
|
|
140
|
-
|
|
140
|
+
click.ClickException
|
|
141
141
|
If no federation name provided and no default found, or if federation
|
|
142
142
|
doesn't exist in config.
|
|
143
143
|
"""
|
|
144
144
|
federation = federation or config["tool"]["flwr"]["federations"].get("default")
|
|
145
145
|
|
|
146
146
|
if federation is None:
|
|
147
|
-
|
|
148
|
-
"
|
|
147
|
+
raise click.ClickException(
|
|
148
|
+
"No federation name was provided and the project's `pyproject.toml` "
|
|
149
149
|
"doesn't declare a default federation (with an Control API address or an "
|
|
150
|
-
"`options.num-supernodes` value)."
|
|
151
|
-
fg=typer.colors.RED,
|
|
152
|
-
bold=True,
|
|
153
|
-
err=True,
|
|
150
|
+
"`options.num-supernodes` value)."
|
|
154
151
|
)
|
|
155
|
-
raise typer.Exit(code=1)
|
|
156
152
|
|
|
157
153
|
# Validate the federation exists in the configuration
|
|
158
154
|
federation_config = config["tool"]["flwr"]["federations"].get(federation)
|
|
@@ -160,15 +156,11 @@ def validate_federation_in_project_config(
|
|
|
160
156
|
available_feds = {
|
|
161
157
|
fed for fed in config["tool"]["flwr"]["federations"] if fed != "default"
|
|
162
158
|
}
|
|
163
|
-
|
|
164
|
-
f"
|
|
159
|
+
raise click.ClickException(
|
|
160
|
+
f"There is no `{federation}` federation declared in the "
|
|
165
161
|
"`pyproject.toml`.\n The following federations were found:\n\n"
|
|
166
|
-
+ "\n".join(available_feds)
|
|
167
|
-
fg=typer.colors.RED,
|
|
168
|
-
bold=True,
|
|
169
|
-
err=True,
|
|
162
|
+
+ "\n".join(available_feds)
|
|
170
163
|
)
|
|
171
|
-
raise typer.Exit(code=1)
|
|
172
164
|
|
|
173
165
|
# Override the federation configuration if provided
|
|
174
166
|
if overrides:
|
|
@@ -198,32 +190,24 @@ def load_certificate_in_connection(
|
|
|
198
190
|
------
|
|
199
191
|
ValueError
|
|
200
192
|
If required TLS settings are missing.
|
|
201
|
-
|
|
193
|
+
click.ClickException
|
|
202
194
|
If the configuration is invalid or the certificate file cannot be read.
|
|
203
195
|
"""
|
|
204
196
|
# Process root certificates
|
|
205
197
|
if root_certificates := connection.root_certificates:
|
|
206
198
|
if connection.insecure:
|
|
207
|
-
|
|
208
|
-
"
|
|
209
|
-
"is set to `True`."
|
|
210
|
-
fg=typer.colors.RED,
|
|
211
|
-
bold=True,
|
|
212
|
-
err=True,
|
|
199
|
+
raise click.ClickException(
|
|
200
|
+
"`root-certificates` were provided but the `insecure` parameter "
|
|
201
|
+
"is set to `True`."
|
|
213
202
|
)
|
|
214
|
-
raise typer.Exit(code=1)
|
|
215
203
|
|
|
216
204
|
# TLS is enabled with self-signed certificates: attempt to read the file
|
|
217
205
|
try:
|
|
218
206
|
root_certificates_bytes = Path(root_certificates).read_bytes()
|
|
219
207
|
except Exception as e:
|
|
220
|
-
|
|
221
|
-
f"
|
|
222
|
-
|
|
223
|
-
bold=True,
|
|
224
|
-
err=True,
|
|
225
|
-
)
|
|
226
|
-
raise typer.Exit(code=1) from e
|
|
208
|
+
raise click.ClickException(
|
|
209
|
+
f"Failed to read certificate file `{root_certificates}`: {e}"
|
|
210
|
+
) from e
|
|
227
211
|
else:
|
|
228
212
|
root_certificates_bytes = None
|
|
229
213
|
|
|
@@ -245,7 +229,7 @@ def get_insecure_flag(federation_config: dict[str, Any]) -> bool:
|
|
|
245
229
|
|
|
246
230
|
Raises
|
|
247
231
|
------
|
|
248
|
-
|
|
232
|
+
click.ClickException
|
|
249
233
|
If insecure value is not a boolean type.
|
|
250
234
|
"""
|
|
251
235
|
insecure_value = federation_config.get("insecure")
|
|
@@ -255,11 +239,7 @@ def get_insecure_flag(federation_config: dict[str, Any]) -> bool:
|
|
|
255
239
|
return False
|
|
256
240
|
if isinstance(insecure_value, bool):
|
|
257
241
|
return insecure_value
|
|
258
|
-
|
|
259
|
-
"
|
|
260
|
-
"(`insecure = true` or `insecure = false`)"
|
|
261
|
-
fg=typer.colors.RED,
|
|
262
|
-
bold=True,
|
|
263
|
-
err=True,
|
|
242
|
+
raise click.ClickException(
|
|
243
|
+
"Invalid type for `insecure`: expected a boolean if provided. "
|
|
244
|
+
"(`insecure = true` or `insecure = false`)"
|
|
264
245
|
)
|
|
265
|
-
raise typer.Exit(code=1)
|
{flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/federation/ls.py
RENAMED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import io
|
|
19
19
|
from typing import Annotated, Any
|
|
20
20
|
|
|
21
|
+
import click
|
|
21
22
|
import typer
|
|
22
23
|
from rich.console import Console
|
|
23
24
|
from rich.table import Table
|
|
@@ -112,18 +113,13 @@ def ls( # pylint: disable=R0914, R0913, R0917, R0912
|
|
|
112
113
|
finally:
|
|
113
114
|
if channel:
|
|
114
115
|
channel.close()
|
|
115
|
-
except
|
|
116
|
+
except Exception as err: # pylint: disable=broad-except
|
|
116
117
|
if suppress_output:
|
|
117
118
|
restore_output()
|
|
118
119
|
e_message = captured_output.getvalue()
|
|
119
120
|
print_json_error(e_message, err)
|
|
120
121
|
else:
|
|
121
|
-
|
|
122
|
-
f"{err}",
|
|
123
|
-
fg=typer.colors.RED,
|
|
124
|
-
bold=True,
|
|
125
|
-
err=True,
|
|
126
|
-
)
|
|
122
|
+
raise click.ClickException(str(err)) from None
|
|
127
123
|
finally:
|
|
128
124
|
if suppress_output:
|
|
129
125
|
restore_output()
|
{flwr_nightly-1.26.0.dev20260123 → flwr_nightly-1.26.0.dev20260126}/py/flwr/cli/flower_config.py
RENAMED
|
@@ -19,6 +19,7 @@ import re
|
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
from typing import Any, cast
|
|
21
21
|
|
|
22
|
+
import click
|
|
22
23
|
import tomli
|
|
23
24
|
import tomli_w
|
|
24
25
|
import typer
|
|
@@ -251,7 +252,7 @@ def read_superlink_connection(
|
|
|
251
252
|
|
|
252
253
|
Raises
|
|
253
254
|
------
|
|
254
|
-
|
|
255
|
+
click.ClickException
|
|
255
256
|
Raised if the configuration file is corrupted, or if the requested
|
|
256
257
|
connection (or default) cannot be found.
|
|
257
258
|
"""
|
|
@@ -266,56 +267,42 @@ def read_superlink_connection(
|
|
|
266
267
|
|
|
267
268
|
# Exit when no connection name is available
|
|
268
269
|
if connection_name is None:
|
|
269
|
-
|
|
270
|
-
"
|
|
270
|
+
raise click.ClickException(
|
|
271
|
+
"No SuperLink connection set. A SuperLink connection needs to be "
|
|
271
272
|
"provided or one must be set as default in the Flower "
|
|
272
273
|
f"configuration file ({config_path}). Specify a default SuperLink "
|
|
273
274
|
"connection by adding: \n\n[superlink]\ndefault = 'connection_name'\n\n"
|
|
274
|
-
f"to the Flower configuration file ({config_path})."
|
|
275
|
-
fg=typer.colors.RED,
|
|
276
|
-
err=True,
|
|
275
|
+
f"to the Flower configuration file ({config_path})."
|
|
277
276
|
)
|
|
278
|
-
raise typer.Exit(code=1)
|
|
279
277
|
|
|
280
278
|
# Try to find the connection with the given name
|
|
281
279
|
if connection_name not in superlink_config:
|
|
282
|
-
|
|
283
|
-
f"
|
|
284
|
-
f"Flower configuration file ({config_path})."
|
|
285
|
-
fg=typer.colors.RED,
|
|
286
|
-
err=True,
|
|
280
|
+
msg = (
|
|
281
|
+
f"SuperLink connection '{connection_name}' not found in the "
|
|
282
|
+
f"Flower configuration file ({config_path})."
|
|
287
283
|
)
|
|
288
284
|
# If default was used, show a specific error message
|
|
289
285
|
if connection_name == superlink_config.get(
|
|
290
286
|
SuperLinkConnectionTomlKey.DEFAULT
|
|
291
287
|
):
|
|
292
|
-
|
|
293
|
-
f"
|
|
294
|
-
"is defined in the [superlink] section."
|
|
295
|
-
fg=typer.colors.RED,
|
|
296
|
-
err=True,
|
|
288
|
+
msg += (
|
|
289
|
+
f"\nPlease check that the default connection '{connection_name}' "
|
|
290
|
+
"is defined in the [superlink] section."
|
|
297
291
|
)
|
|
298
|
-
raise
|
|
292
|
+
raise click.ClickException(msg)
|
|
299
293
|
|
|
300
294
|
conn_dict = superlink_config[connection_name]
|
|
301
295
|
return parse_superlink_connection(conn_dict, connection_name)
|
|
302
296
|
|
|
303
297
|
except ValueError as err:
|
|
304
|
-
|
|
305
|
-
f"
|
|
306
|
-
|
|
307
|
-
fg=typer.colors.RED,
|
|
308
|
-
err=True,
|
|
309
|
-
)
|
|
310
|
-
raise typer.Exit(code=1) from err
|
|
298
|
+
raise click.ClickException(
|
|
299
|
+
f"Failed to parse the Flower configuration file ({config_path}). {err}"
|
|
300
|
+
) from err
|
|
311
301
|
except Exception as err:
|
|
312
|
-
|
|
313
|
-
f"
|
|
314
|
-
f"file ({config_path}). {err}"
|
|
315
|
-
|
|
316
|
-
err=True,
|
|
317
|
-
)
|
|
318
|
-
raise typer.Exit(code=1) from err
|
|
302
|
+
raise click.ClickException(
|
|
303
|
+
f"An unexpected error occurred while reading the Flower configuration "
|
|
304
|
+
f"file ({config_path}). {err}"
|
|
305
|
+
) from err
|
|
319
306
|
|
|
320
307
|
|
|
321
308
|
def write_superlink_connection(connection: SuperLinkConnection) -> None:
|
|
@@ -328,7 +315,7 @@ def write_superlink_connection(connection: SuperLinkConnection) -> None:
|
|
|
328
315
|
|
|
329
316
|
Raises
|
|
330
317
|
------
|
|
331
|
-
|
|
318
|
+
click.ClickException
|
|
332
319
|
Raised if the configuration file cannot be read or written.
|
|
333
320
|
"""
|
|
334
321
|
toml_dict, _ = read_flower_config()
|
|
@@ -358,13 +345,10 @@ def set_default_superlink_connection(connection_name: str) -> None:
|
|
|
358
345
|
|
|
359
346
|
# Check if the connection exists
|
|
360
347
|
if connection_name not in superlink_config:
|
|
361
|
-
|
|
362
|
-
f"
|
|
363
|
-
"configuration file. Cannot set as default."
|
|
364
|
-
fg=typer.colors.RED,
|
|
365
|
-
err=True,
|
|
348
|
+
raise click.ClickException(
|
|
349
|
+
f"SuperLink connection '{connection_name}' not found in the Flower "
|
|
350
|
+
"configuration file. Cannot set as default."
|
|
366
351
|
)
|
|
367
|
-
raise typer.Exit(code=1)
|
|
368
352
|
|
|
369
353
|
# Set default connection
|
|
370
354
|
superlink_config[SuperLinkConnectionTomlKey.DEFAULT] = connection_name
|
|
@@ -384,7 +368,7 @@ def read_flower_config() -> tuple[dict[str, Any], Path]:
|
|
|
384
368
|
|
|
385
369
|
Raises
|
|
386
370
|
------
|
|
387
|
-
|
|
371
|
+
click.ClickException
|
|
388
372
|
Raised if the configuration file is corrupted.
|
|
389
373
|
"""
|
|
390
374
|
init_flwr_config()
|
|
@@ -396,13 +380,10 @@ def read_flower_config() -> tuple[dict[str, Any], Path]:
|
|
|
396
380
|
return tomli.load(file), config_path
|
|
397
381
|
|
|
398
382
|
except tomli.TOMLDecodeError as err:
|
|
399
|
-
|
|
400
|
-
f"
|
|
401
|
-
"Please ensure it is valid TOML."
|
|
402
|
-
|
|
403
|
-
err=True,
|
|
404
|
-
)
|
|
405
|
-
raise typer.Exit(code=1) from err
|
|
383
|
+
raise click.ClickException(
|
|
384
|
+
f"Failed to read the Flower configuration file ({config_path}). "
|
|
385
|
+
"Please ensure it is valid TOML."
|
|
386
|
+
) from err
|
|
406
387
|
|
|
407
388
|
|
|
408
389
|
# This function may be subject to change once we introduce more configuration
|