flwr-nightly 1.26.0.dev20260119__tar.gz → 1.26.0.dev20260121__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.dev20260119 → flwr_nightly-1.26.0.dev20260121}/PKG-INFO +1 -1
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app.py +17 -5
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config_migration.py +122 -48
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/flower_config.py +5 -5
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/log.py +21 -35
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/ls.py +23 -34
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/pull.py +15 -26
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run/run.py +44 -58
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/stop.py +21 -30
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/typing.py +43 -56
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/utils.py +12 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/__init__.py +2 -0
- flwr_nightly-1.26.0.dev20260121/py/flwr/server/superlink/linkstate/sql_linkstate.py +221 -0
- flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/corestate/sql_corestate.py +153 -0
- flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/sql_mixin.py +292 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/pyproject.toml +1 -1
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/README.md +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/exception.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/message_type.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/user_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/publish.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/review.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config/ls.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/federation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/federation/ls.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/login/login.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/ls.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/register.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/unregister.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/client_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/signal_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/array.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/arraychunk.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/common/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/grpc_grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/exception.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/bulyan.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedadam.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedopt.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedprox.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/krum.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/multikrum.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/result.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/strategy.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/address.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/app_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/cli/flower_superexec.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/sqlite_corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/credential_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/date.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/ffs.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/health_server.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/heartbeat.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/license_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/sqlite_object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/asymmetric.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/sqlite_mixin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/README.md +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/run_superexec.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/version.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/federation_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/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.dev20260121
|
|
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
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""Flower command line interface."""
|
|
16
16
|
|
|
17
|
+
|
|
18
|
+
from typing import Any, TypedDict
|
|
19
|
+
|
|
17
20
|
import typer
|
|
18
21
|
from typer.main import get_command
|
|
19
22
|
|
|
@@ -37,6 +40,15 @@ from .supernode import ls as supernode_list
|
|
|
37
40
|
from .supernode import register as supernode_register
|
|
38
41
|
from .supernode import unregister as supernode_unregister
|
|
39
42
|
|
|
43
|
+
|
|
44
|
+
class CommandKwargs(TypedDict):
|
|
45
|
+
"""Keywords for typer command to make mypy happy."""
|
|
46
|
+
|
|
47
|
+
context_settings: dict[str, Any]
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
ALLOW_EXTRAS: CommandKwargs = {"context_settings": {"allow_extra_args": True}}
|
|
51
|
+
|
|
40
52
|
app = typer.Typer(
|
|
41
53
|
help=typer.style(
|
|
42
54
|
"flwr is the Flower command line interface.",
|
|
@@ -51,12 +63,12 @@ app.command()(new)
|
|
|
51
63
|
app.command()(run)
|
|
52
64
|
app.command()(build)
|
|
53
65
|
app.command()(install)
|
|
54
|
-
app.command()(log)
|
|
55
|
-
app.command("list")(ls)
|
|
56
|
-
app.command(hidden=True)(ls)
|
|
57
|
-
app.command()(stop)
|
|
66
|
+
app.command(**ALLOW_EXTRAS)(log)
|
|
67
|
+
app.command("list", **ALLOW_EXTRAS)(ls)
|
|
68
|
+
app.command(hidden=True, **ALLOW_EXTRAS)(ls)
|
|
69
|
+
app.command(**ALLOW_EXTRAS)(stop)
|
|
58
70
|
app.command()(login)
|
|
59
|
-
app.command()(pull)
|
|
71
|
+
app.command(**ALLOW_EXTRAS)(pull)
|
|
60
72
|
|
|
61
73
|
# Create supernode command group
|
|
62
74
|
supernode_app = typer.Typer(help="Manage SuperNodes")
|
{flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config_migration.py
RENAMED
|
@@ -57,44 +57,55 @@ CLI_NOTICE = (
|
|
|
57
57
|
)
|
|
58
58
|
|
|
59
59
|
|
|
60
|
-
def _is_legacy_usage(
|
|
60
|
+
def _is_legacy_usage(positional_arg_1: str | None, args: list[str]) -> bool:
|
|
61
61
|
"""Check if legacy usage is detected in the given arguments."""
|
|
62
|
+
if positional_arg_1 is None:
|
|
63
|
+
return False
|
|
64
|
+
|
|
62
65
|
# If one and only one extra argument is given, assume legacy usage
|
|
63
66
|
if len(args) == 1:
|
|
64
67
|
return True
|
|
65
68
|
|
|
66
|
-
# If the
|
|
67
|
-
pth = Path(
|
|
68
|
-
if pth.is_absolute() or len(pth.parts) > 1 or
|
|
69
|
+
# If the first positional argument looks like a path, assume legacy usage
|
|
70
|
+
pth = Path(positional_arg_1)
|
|
71
|
+
if pth.is_absolute() or len(pth.parts) > 1 or positional_arg_1 in (".", ".."):
|
|
69
72
|
return True
|
|
70
73
|
|
|
71
|
-
# Lastly, check if a pyproject.toml file exists at the given
|
|
74
|
+
# Lastly, check if a pyproject.toml file exists at the given path
|
|
72
75
|
if (pth / "pyproject.toml").exists():
|
|
73
76
|
return True
|
|
74
77
|
|
|
75
78
|
return False
|
|
76
79
|
|
|
77
80
|
|
|
78
|
-
def
|
|
79
|
-
"""Check if the given app path contains legacy TOML configuration.
|
|
81
|
+
def _is_migratable(app: Path) -> tuple[bool, str | None]:
|
|
82
|
+
"""Check if the given app path contains legacy TOML configuration.
|
|
83
|
+
|
|
84
|
+
Parameters
|
|
85
|
+
----------
|
|
86
|
+
app : Path
|
|
87
|
+
Path to the Flower App.
|
|
88
|
+
|
|
89
|
+
Returns
|
|
90
|
+
-------
|
|
91
|
+
tuple[bool, str | None]
|
|
92
|
+
Returns (True, None) if migratable, else (False, reason).
|
|
93
|
+
"""
|
|
80
94
|
toml_path = app / "pyproject.toml"
|
|
81
95
|
if not toml_path.exists():
|
|
82
|
-
|
|
96
|
+
return False, f"No pyproject.toml found in '{app}'"
|
|
83
97
|
config, errors, _ = load_and_validate(toml_path, check_module=False)
|
|
84
98
|
if config is None:
|
|
85
|
-
|
|
99
|
+
return False, f"Failed to load TOML configuration: {toml_path}"
|
|
86
100
|
if errors:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
)
|
|
101
|
+
err_msg = f"Invalid TOML configuration found in '{toml_path}':\n"
|
|
102
|
+
err_msg += "\n".join(f"- {err}" for err in errors)
|
|
103
|
+
return False, err_msg
|
|
91
104
|
try:
|
|
92
105
|
_ = config["tool"]["flwr"]["federations"]
|
|
93
|
-
return
|
|
106
|
+
return True, None
|
|
94
107
|
except KeyError:
|
|
95
|
-
|
|
96
|
-
f"No '[tool.flwr.federations]' section found in '{toml_path}'"
|
|
97
|
-
) from None
|
|
108
|
+
return False, f"No '[tool.flwr.federations]' section found in '{toml_path}'"
|
|
98
109
|
|
|
99
110
|
|
|
100
111
|
def _migrate_pyproject_toml_to_flower_config(
|
|
@@ -161,23 +172,82 @@ def _comment_out_legacy_toml_config(app: Path) -> None:
|
|
|
161
172
|
|
|
162
173
|
|
|
163
174
|
def migrate(
|
|
164
|
-
|
|
165
|
-
|
|
175
|
+
positional_arg_1: str | None,
|
|
176
|
+
args: list[str],
|
|
177
|
+
ignore_legacy_usage: bool = False,
|
|
166
178
|
) -> None:
|
|
167
|
-
"""Migrate legacy TOML configuration to Flower config.
|
|
179
|
+
"""Migrate legacy TOML configuration to Flower config.
|
|
180
|
+
|
|
181
|
+
Migrates SuperLink connection settings from `[tool.flwr.federations]` in
|
|
182
|
+
pyproject.toml to the new Flower config format when legacy usage is detected
|
|
183
|
+
or the migration is applicable.
|
|
184
|
+
|
|
185
|
+
`flwr run` should call `migrate(app, [], ignore_legacy_usage=True)` to skip
|
|
186
|
+
legacy usage check. Other CLI commands should call `migrate(superlink, ctx.args)`.
|
|
187
|
+
|
|
188
|
+
Parameters
|
|
189
|
+
----------
|
|
190
|
+
positional_arg_1 : str | None
|
|
191
|
+
The first positional argument.
|
|
192
|
+
args : list[str]
|
|
193
|
+
Additional arguments. In legacy usage, this is the TOML federation name.
|
|
194
|
+
ignore_legacy_usage : bool (default: False)
|
|
195
|
+
Set to `True` only for `flwr run` command to skip legacy usage check.
|
|
196
|
+
|
|
197
|
+
Raises
|
|
198
|
+
------
|
|
199
|
+
click.UsageError
|
|
200
|
+
If more than one extra argument is provided.
|
|
201
|
+
click.ClickException
|
|
202
|
+
If legacy usage detected but migration fails.
|
|
203
|
+
|
|
204
|
+
Examples
|
|
205
|
+
--------
|
|
206
|
+
The following usages will trigger migration if applicable:
|
|
207
|
+
- `flwr <CMD> . my-federation`
|
|
208
|
+
- `flwr <CMD> ./my-app`
|
|
209
|
+
- `flwr <CMD>`
|
|
210
|
+
|
|
211
|
+
The following usages will NOT trigger migration:
|
|
212
|
+
- `flwr <CMD> named-conn`
|
|
213
|
+
|
|
214
|
+
Notes
|
|
215
|
+
-----
|
|
216
|
+
This function will NOT return when legacy usage is detected to force the user
|
|
217
|
+
to adapt to the new usage pattern after migration.
|
|
218
|
+
"""
|
|
168
219
|
# Initialize Flower config
|
|
169
220
|
init_flwr_config()
|
|
170
221
|
|
|
171
|
-
#
|
|
172
|
-
|
|
222
|
+
# Trigger the same typer error when detecting unexpected extra args
|
|
223
|
+
if len(args) > 1:
|
|
224
|
+
raise click.UsageError(f"Got unexpected extra arguments ({' '.join(args[1:])})")
|
|
173
225
|
|
|
174
|
-
#
|
|
226
|
+
# Determine app path for migration
|
|
227
|
+
arg1 = positional_arg_1
|
|
228
|
+
app = Path(arg1) if arg1 else Path(".")
|
|
175
229
|
app = app.resolve()
|
|
176
|
-
try:
|
|
177
|
-
_check_is_migratable(app)
|
|
178
|
-
except (FileNotFoundError, ValueError) as e:
|
|
179
|
-
raise click.ClickException(f"Cannot migrate configuration:\n{e}") from e
|
|
180
230
|
|
|
231
|
+
# Check if migration is applicable and if legacy usage is detected
|
|
232
|
+
is_migratable, reason = _is_migratable(app)
|
|
233
|
+
is_legacy = _is_legacy_usage(arg1, args) if not ignore_legacy_usage else False
|
|
234
|
+
|
|
235
|
+
# Print notice once if legacy usage detected or migration is applicable
|
|
236
|
+
if is_legacy or is_migratable:
|
|
237
|
+
typer.echo(CLI_NOTICE)
|
|
238
|
+
|
|
239
|
+
if not is_migratable:
|
|
240
|
+
# Raise error if legacy usage is detected but migration is not applicable
|
|
241
|
+
if is_legacy:
|
|
242
|
+
raise click.ClickException(
|
|
243
|
+
f"Cannot migrate configuration:\n{reason}. \nThis is expected if the "
|
|
244
|
+
"migration has been previously carried out. Use `--help` after your "
|
|
245
|
+
"command to see the new usage pattern."
|
|
246
|
+
)
|
|
247
|
+
return # Nothing to migrate
|
|
248
|
+
|
|
249
|
+
# Perform migration
|
|
250
|
+
toml_federation = args[0] if len(args) == 1 else None
|
|
181
251
|
try:
|
|
182
252
|
migrated_conns, default_conn = _migrate_pyproject_toml_to_flower_config(
|
|
183
253
|
app, toml_federation
|
|
@@ -197,30 +267,34 @@ def migrate(
|
|
|
197
267
|
typer.secho(" (default)", fg=typer.colors.WHITE, nl=False)
|
|
198
268
|
typer.echo()
|
|
199
269
|
|
|
200
|
-
# print usage
|
|
201
|
-
typer.secho("\nYou should now use the Flower CLI as follows:")
|
|
202
|
-
ctx = click.get_current_context()
|
|
203
|
-
typer.secho(ctx.get_usage() + "\n", bold=True)
|
|
204
|
-
|
|
205
270
|
_comment_out_legacy_toml_config(app)
|
|
206
271
|
|
|
272
|
+
if is_legacy:
|
|
273
|
+
# print usage
|
|
274
|
+
typer.secho("\nYou should now use the Flower CLI as follows:")
|
|
275
|
+
ctx = click.get_current_context()
|
|
276
|
+
typer.secho(ctx.get_usage() + "\n", bold=True)
|
|
207
277
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
args: list[str],
|
|
211
|
-
) -> bool:
|
|
212
|
-
"""Migrate legacy TOML configuration to Flower config if legacy usage is
|
|
213
|
-
detected."""
|
|
214
|
-
# Trigger the same typer error when detecting unexpected extra args
|
|
215
|
-
if len(args) > 1:
|
|
216
|
-
raise click.UsageError(f"Got unexpected extra arguments ({' '.join(args[1:])})")
|
|
278
|
+
# Abort if legacy usage is detected to force user to adapt to new usage
|
|
279
|
+
raise typer.Exit(code=1)
|
|
217
280
|
|
|
218
|
-
# Skip migration if no legacy usage is detected
|
|
219
|
-
if not _is_legacy_usage(superlink, args):
|
|
220
|
-
return False
|
|
221
281
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
282
|
+
def warn_if_federation_config_overrides(
|
|
283
|
+
federation_config_overrides: list[str] | None,
|
|
284
|
+
) -> None:
|
|
285
|
+
"""Warn if federation config overrides are provided.
|
|
286
|
+
|
|
287
|
+
Parameters
|
|
288
|
+
----------
|
|
289
|
+
federation_config_overrides : list[str] | None
|
|
290
|
+
List of federation config override strings.
|
|
291
|
+
"""
|
|
292
|
+
if federation_config_overrides is None:
|
|
293
|
+
return
|
|
294
|
+
|
|
295
|
+
typer.secho(
|
|
296
|
+
"⚠️ Warning: `--federation-config` option is deprecated and will be ignored.\n"
|
|
297
|
+
"Use Flower configuration files to set SuperLink connections.",
|
|
298
|
+
fg=typer.colors.YELLOW,
|
|
299
|
+
bold=True,
|
|
225
300
|
)
|
|
226
|
-
return True
|
{flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/flower_config.py
RENAMED
|
@@ -217,17 +217,17 @@ def serialize_superlink_connection(connection: SuperLinkConnection) -> dict[str,
|
|
|
217
217
|
"""
|
|
218
218
|
# pylint: disable=protected-access
|
|
219
219
|
conn_dict: dict[str, Any] = {
|
|
220
|
-
SuperLinkConnectionTomlKey.ADDRESS: connection.
|
|
221
|
-
SuperLinkConnectionTomlKey.ROOT_CERTIFICATES: connection.
|
|
220
|
+
SuperLinkConnectionTomlKey.ADDRESS: connection.address,
|
|
221
|
+
SuperLinkConnectionTomlKey.ROOT_CERTIFICATES: connection.root_certificates,
|
|
222
222
|
SuperLinkConnectionTomlKey.INSECURE: connection._insecure,
|
|
223
223
|
SuperLinkConnectionTomlKey.ENABLE_ACCOUNT_AUTH: connection._enable_account_auth,
|
|
224
|
-
SuperLinkConnectionTomlKey.FEDERATION: connection.
|
|
224
|
+
SuperLinkConnectionTomlKey.FEDERATION: connection.federation,
|
|
225
225
|
}
|
|
226
226
|
# Remove None values
|
|
227
227
|
conn_dict = {k: v for k, v in conn_dict.items() if v is not None}
|
|
228
228
|
|
|
229
|
-
if connection.
|
|
230
|
-
options_dict = _serialize_simulation_options(connection.
|
|
229
|
+
if connection.options is not None:
|
|
230
|
+
options_dict = _serialize_simulation_options(connection.options)
|
|
231
231
|
conn_dict[SuperLinkConnectionTomlKey.OPTIONS] = options_dict
|
|
232
232
|
|
|
233
233
|
return conn_dict
|
|
@@ -17,25 +17,21 @@
|
|
|
17
17
|
|
|
18
18
|
import time
|
|
19
19
|
from logging import DEBUG, ERROR, INFO
|
|
20
|
-
from
|
|
21
|
-
from typing import Annotated, Any, cast
|
|
20
|
+
from typing import Annotated, cast
|
|
22
21
|
|
|
23
22
|
import grpc
|
|
24
23
|
import typer
|
|
25
24
|
|
|
26
|
-
from flwr.cli.
|
|
27
|
-
exit_if_no_address,
|
|
28
|
-
load_and_validate,
|
|
29
|
-
process_loaded_project_config,
|
|
30
|
-
validate_federation_in_project_config,
|
|
31
|
-
)
|
|
25
|
+
from flwr.cli.config_migration import migrate, warn_if_federation_config_overrides
|
|
32
26
|
from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
|
|
27
|
+
from flwr.cli.flower_config import read_superlink_connection
|
|
28
|
+
from flwr.cli.typing import SuperLinkConnection
|
|
33
29
|
from flwr.common.constant import CONN_RECONNECT_INTERVAL, CONN_REFRESH_PERIOD
|
|
34
30
|
from flwr.common.logger import log as logger
|
|
35
31
|
from flwr.proto.control_pb2 import StreamLogsRequest # pylint: disable=E0611
|
|
36
32
|
from flwr.proto.control_pb2_grpc import ControlStub
|
|
37
33
|
|
|
38
|
-
from .utils import flwr_cli_grpc_exc_handler,
|
|
34
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
|
|
39
35
|
|
|
40
36
|
|
|
41
37
|
class AllLogsRetrieved(BaseException):
|
|
@@ -158,23 +154,21 @@ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
|
|
|
158
154
|
|
|
159
155
|
|
|
160
156
|
def log(
|
|
157
|
+
ctx: typer.Context,
|
|
161
158
|
run_id: Annotated[
|
|
162
159
|
int,
|
|
163
160
|
typer.Argument(help="The Flower run ID to query"),
|
|
164
161
|
],
|
|
165
|
-
|
|
166
|
-
Path,
|
|
167
|
-
typer.Argument(help="Path of the Flower project to run"),
|
|
168
|
-
] = Path("."),
|
|
169
|
-
federation: Annotated[
|
|
162
|
+
superlink: Annotated[
|
|
170
163
|
str | None,
|
|
171
|
-
typer.Argument(help="Name of the
|
|
164
|
+
typer.Argument(help="Name of the SuperLink connection."),
|
|
172
165
|
] = None,
|
|
173
166
|
federation_config_overrides: Annotated[
|
|
174
167
|
list[str] | None,
|
|
175
168
|
typer.Option(
|
|
176
169
|
"--federation-config",
|
|
177
170
|
help=FEDERATION_CONFIG_HELP_MESSAGE,
|
|
171
|
+
hidden=True,
|
|
178
172
|
),
|
|
179
173
|
] = None,
|
|
180
174
|
stream: Annotated[
|
|
@@ -190,27 +184,24 @@ def log(
|
|
|
190
184
|
Retrieve and display logs from a Flower run. Logs can be streamed in real-time (with
|
|
191
185
|
--stream) or printed once (with --show).
|
|
192
186
|
"""
|
|
193
|
-
|
|
187
|
+
# Warn `--federation-config` is ignored
|
|
188
|
+
warn_if_federation_config_overrides(federation_config_overrides)
|
|
194
189
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
)
|
|
201
|
-
exit_if_no_address(federation_config, "log")
|
|
190
|
+
# Migrate legacy usage if any
|
|
191
|
+
migrate(superlink, args=ctx.args)
|
|
192
|
+
|
|
193
|
+
# Read superlink connection configuration
|
|
194
|
+
superlink_connection = read_superlink_connection(superlink)
|
|
202
195
|
|
|
203
196
|
try:
|
|
204
|
-
_log_with_control_api(
|
|
197
|
+
_log_with_control_api(superlink_connection, run_id, stream)
|
|
205
198
|
except Exception as err: # pylint: disable=broad-except
|
|
206
199
|
typer.secho(str(err), fg=typer.colors.RED, bold=True, err=True)
|
|
207
200
|
raise typer.Exit(code=1) from None
|
|
208
201
|
|
|
209
202
|
|
|
210
203
|
def _log_with_control_api(
|
|
211
|
-
|
|
212
|
-
federation: str,
|
|
213
|
-
federation_config: dict[str, Any],
|
|
204
|
+
superlink_connection: SuperLinkConnection,
|
|
214
205
|
run_id: int,
|
|
215
206
|
stream: bool,
|
|
216
207
|
) -> None:
|
|
@@ -218,19 +209,14 @@ def _log_with_control_api(
|
|
|
218
209
|
|
|
219
210
|
Parameters
|
|
220
211
|
----------
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
federation : str
|
|
224
|
-
Name of the federation.
|
|
225
|
-
federation_config : dict[str, Any]
|
|
226
|
-
Federation configuration dictionary.
|
|
212
|
+
superlink_connection : SuperLinkConnection
|
|
213
|
+
Superlink connection configuration.
|
|
227
214
|
run_id : int
|
|
228
215
|
The unique identifier of the run to retrieve logs from.
|
|
229
216
|
stream : bool
|
|
230
217
|
If True, stream logs continuously; if False, print once.
|
|
231
218
|
"""
|
|
232
|
-
|
|
233
|
-
channel = init_channel(app, federation_config, auth_plugin)
|
|
219
|
+
channel = init_channel_from_connection(superlink_connection)
|
|
234
220
|
|
|
235
221
|
if stream:
|
|
236
222
|
start_stream(run_id, channel, CONN_REFRESH_PERIOD)
|
|
@@ -17,22 +17,17 @@
|
|
|
17
17
|
|
|
18
18
|
import io
|
|
19
19
|
import json
|
|
20
|
-
from
|
|
21
|
-
from typing import Annotated, cast
|
|
20
|
+
from typing import Annotated
|
|
22
21
|
|
|
23
22
|
import typer
|
|
24
23
|
from rich.console import Console
|
|
25
24
|
from rich.table import Table
|
|
26
25
|
from rich.text import Text
|
|
27
26
|
|
|
28
|
-
from flwr.cli.
|
|
29
|
-
exit_if_no_address,
|
|
30
|
-
load_and_validate,
|
|
31
|
-
process_loaded_project_config,
|
|
32
|
-
validate_federation_in_project_config,
|
|
33
|
-
)
|
|
27
|
+
from flwr.cli.config_migration import migrate, warn_if_federation_config_overrides
|
|
34
28
|
from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
|
|
35
|
-
from flwr.
|
|
29
|
+
from flwr.cli.flower_config import read_superlink_connection
|
|
30
|
+
from flwr.common.constant import CliOutputFormat, Status, SubStatus
|
|
36
31
|
from flwr.common.logger import print_json_error, redirect_output, restore_output
|
|
37
32
|
from flwr.common.serde import run_from_proto
|
|
38
33
|
from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
@@ -43,24 +38,21 @@ from flwr.proto.control_pb2_grpc import ControlStub
|
|
|
43
38
|
from flwr.supercore.utils import humanize_bytes, humanize_duration
|
|
44
39
|
|
|
45
40
|
from .run_utils import RunRow, format_runs
|
|
46
|
-
from .utils import flwr_cli_grpc_exc_handler,
|
|
41
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
|
|
47
42
|
|
|
48
43
|
|
|
49
44
|
def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
|
|
50
45
|
ctx: typer.Context,
|
|
51
|
-
|
|
52
|
-
Path,
|
|
53
|
-
typer.Argument(help="Path of the Flower project"),
|
|
54
|
-
] = Path("."),
|
|
55
|
-
federation: Annotated[
|
|
46
|
+
superlink: Annotated[
|
|
56
47
|
str | None,
|
|
57
|
-
typer.Argument(help="Name of the
|
|
48
|
+
typer.Argument(help="Name of the SuperLink connection."),
|
|
58
49
|
] = None,
|
|
59
50
|
federation_config_overrides: Annotated[
|
|
60
51
|
list[str] | None,
|
|
61
52
|
typer.Option(
|
|
62
53
|
"--federation-config",
|
|
63
54
|
help=FEDERATION_CONFIG_HELP_MESSAGE,
|
|
55
|
+
hidden=True,
|
|
64
56
|
),
|
|
65
57
|
] = None,
|
|
66
58
|
runs: Annotated[
|
|
@@ -99,32 +91,29 @@ def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
|
|
|
99
91
|
|
|
100
92
|
All timestamps follow ISO 8601, UTC and are formatted as ``YYYY-MM-DD HH:MM:SSZ``.
|
|
101
93
|
"""
|
|
102
|
-
# Resolve command used (list or ls)
|
|
103
|
-
command_name = cast(str, ctx.command.name) if ctx.command else "list"
|
|
104
|
-
|
|
105
94
|
suppress_output = output_format == CliOutputFormat.JSON
|
|
106
95
|
captured_output = io.StringIO()
|
|
96
|
+
|
|
97
|
+
if suppress_output:
|
|
98
|
+
redirect_output(captured_output)
|
|
99
|
+
|
|
100
|
+
# Warn `--federation-config` is ignored
|
|
101
|
+
warn_if_federation_config_overrides(federation_config_overrides)
|
|
102
|
+
|
|
103
|
+
# Migrate legacy usage if any
|
|
104
|
+
migrate(superlink, args=ctx.args)
|
|
105
|
+
|
|
106
|
+
# Read superlink connection configuration
|
|
107
|
+
superlink_connection = read_superlink_connection(superlink)
|
|
108
|
+
channel = None
|
|
109
|
+
|
|
107
110
|
try:
|
|
108
|
-
if suppress_output:
|
|
109
|
-
redirect_output(captured_output)
|
|
110
|
-
# Load and validate federation config
|
|
111
|
-
typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
|
|
112
|
-
|
|
113
|
-
pyproject_path = app / FAB_CONFIG_FILE if app else None
|
|
114
|
-
config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
|
|
115
|
-
config = process_loaded_project_config(config, errors, warnings)
|
|
116
|
-
federation, federation_config = validate_federation_in_project_config(
|
|
117
|
-
federation, config, federation_config_overrides
|
|
118
|
-
)
|
|
119
|
-
exit_if_no_address(federation_config, command_name)
|
|
120
|
-
channel = None
|
|
121
111
|
try:
|
|
122
112
|
if runs and run_id is not None:
|
|
123
113
|
raise ValueError(
|
|
124
114
|
"The options '--runs' and '--run-id' are mutually exclusive."
|
|
125
115
|
)
|
|
126
|
-
|
|
127
|
-
channel = init_channel(app, federation_config, auth_plugin)
|
|
116
|
+
channel = init_channel_from_connection(superlink_connection)
|
|
128
117
|
stub = ControlStub(channel)
|
|
129
118
|
|
|
130
119
|
# Display information about a specific run ID
|
|
@@ -15,46 +15,38 @@
|
|
|
15
15
|
"""Flower command line interface `pull` command."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
from pathlib import Path
|
|
19
18
|
from typing import Annotated
|
|
20
19
|
|
|
21
20
|
import typer
|
|
22
21
|
|
|
23
|
-
from flwr.cli.
|
|
24
|
-
exit_if_no_address,
|
|
25
|
-
load_and_validate,
|
|
26
|
-
process_loaded_project_config,
|
|
27
|
-
validate_federation_in_project_config,
|
|
28
|
-
)
|
|
22
|
+
from flwr.cli.config_migration import migrate, warn_if_federation_config_overrides
|
|
29
23
|
from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
|
|
30
|
-
from flwr.
|
|
24
|
+
from flwr.cli.flower_config import read_superlink_connection
|
|
31
25
|
from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
32
26
|
PullArtifactsRequest,
|
|
33
27
|
PullArtifactsResponse,
|
|
34
28
|
)
|
|
35
29
|
from flwr.proto.control_pb2_grpc import ControlStub
|
|
36
30
|
|
|
37
|
-
from .utils import flwr_cli_grpc_exc_handler,
|
|
31
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
|
|
38
32
|
|
|
39
33
|
|
|
40
34
|
def pull( # pylint: disable=R0914
|
|
35
|
+
ctx: typer.Context,
|
|
41
36
|
run_id: Annotated[
|
|
42
37
|
int,
|
|
43
38
|
typer.Argument(help="Run ID to pull artifacts from."),
|
|
44
39
|
],
|
|
45
|
-
|
|
46
|
-
Path,
|
|
47
|
-
typer.Argument(help="Path of the Flower App to run."),
|
|
48
|
-
] = Path("."),
|
|
49
|
-
federation: Annotated[
|
|
40
|
+
superlink: Annotated[
|
|
50
41
|
str | None,
|
|
51
|
-
typer.Argument(help="Name of the
|
|
42
|
+
typer.Argument(help="Name of the SuperLink connection."),
|
|
52
43
|
] = None,
|
|
53
44
|
federation_config_overrides: Annotated[
|
|
54
45
|
list[str] | None,
|
|
55
46
|
typer.Option(
|
|
56
47
|
"--federation-config",
|
|
57
48
|
help=FEDERATION_CONFIG_HELP_MESSAGE,
|
|
49
|
+
hidden=True,
|
|
58
50
|
),
|
|
59
51
|
] = None,
|
|
60
52
|
) -> None:
|
|
@@ -63,20 +55,17 @@ def pull( # pylint: disable=R0914
|
|
|
63
55
|
Retrieve a download URL for artifacts generated during a completed Flower run. The
|
|
64
56
|
artifacts can then be downloaded from the provided URL.
|
|
65
57
|
"""
|
|
66
|
-
|
|
58
|
+
# Warn `--federation-config` is ignored
|
|
59
|
+
warn_if_federation_config_overrides(federation_config_overrides)
|
|
60
|
+
|
|
61
|
+
# Migrate legacy usage if any
|
|
62
|
+
migrate(superlink, args=ctx.args)
|
|
67
63
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
config = process_loaded_project_config(config, errors, warnings)
|
|
71
|
-
federation, federation_config = validate_federation_in_project_config(
|
|
72
|
-
federation, config, federation_config_overrides
|
|
73
|
-
)
|
|
74
|
-
exit_if_no_address(federation_config, "pull")
|
|
64
|
+
# Read superlink connection configuration
|
|
65
|
+
superlink_connection = read_superlink_connection(superlink)
|
|
75
66
|
channel = None
|
|
76
67
|
try:
|
|
77
|
-
|
|
78
|
-
auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
|
|
79
|
-
channel = init_channel(app, federation_config, auth_plugin)
|
|
68
|
+
channel = init_channel_from_connection(superlink_connection)
|
|
80
69
|
stub = ControlStub(channel)
|
|
81
70
|
with flwr_cli_grpc_exc_handler():
|
|
82
71
|
res: PullArtifactsResponse = stub.PullArtifacts(
|