flwr-nightly 1.26.0.dev20260120__tar.gz → 1.26.0.dev20260122__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.dev20260120 → flwr_nightly-1.26.0.dev20260122}/PKG-INFO +1 -1
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app.py +24 -12
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app_cmd/publish.py +6 -30
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app_cmd/review.py +3 -37
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/auth_plugin/auth_plugin.py +5 -10
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +1 -2
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +27 -31
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config_migration.py +34 -12
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/constant.py +8 -2
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/federation/ls.py +19 -35
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/log.py +21 -35
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/login/login.py +29 -42
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/ls.py +23 -34
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/pull.py +15 -26
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/run/run.py +44 -58
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/stop.py +21 -30
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/supernode/ls.py +19 -33
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/supernode/register.py +17 -30
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/supernode/unregister.py +17 -31
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/utils.py +40 -198
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/__init__.py +2 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/linkstate_factory.py +4 -4
- flwr_nightly-1.26.0.dev20260122/py/flwr/server/superlink/linkstate/sql_linkstate.py +1239 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +3 -48
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/utils.py +47 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/constant.py +3 -0
- flwr_nightly-1.26.0.dev20260122/py/flwr/supercore/corestate/sql_corestate.py +153 -0
- flwr_nightly-1.26.0.dev20260122/py/flwr/supercore/object_store/sql_object_store.py +82 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/sql_mixin.py +99 -43
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/pyproject.toml +1 -1
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/README.md +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/exception.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/message_type.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/user_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app_cmd/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config/ls.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/federation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/flower_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/run_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/supernode/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/client_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/mod/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/exit_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/signal_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/inflatable_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/array.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/arraychunk.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/common/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/appio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/appio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/appio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/federation_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/federation_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/federation_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/grid/grpc_grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/exception.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/bulyan.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedadam.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedopt.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedprox.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/krum.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/multikrum.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/result.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/strategy.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/address.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/app_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/cli/flower_superexec.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/sqlite_corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/credential_store/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/credential_store/credential_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/date.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/ffs/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/ffs/ffs.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/grpc_health/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/grpc_health/health_server.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/heartbeat.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/license_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/sqlite_object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/primitives/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/primitives/asymmetric.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/sqlite_mixin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/README.md +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/run_superexec.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/version.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/federation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/federation/federation_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/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.dev20260122
|
|
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,21 +63,21 @@ 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)
|
|
58
|
-
app.command()(login)
|
|
59
|
-
app.command()(pull)
|
|
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)
|
|
70
|
+
app.command(**ALLOW_EXTRAS)(login)
|
|
71
|
+
app.command(**ALLOW_EXTRAS)(pull)
|
|
60
72
|
|
|
61
73
|
# Create supernode command group
|
|
62
74
|
supernode_app = typer.Typer(help="Manage SuperNodes")
|
|
63
|
-
supernode_app.command()(supernode_register)
|
|
64
|
-
supernode_app.command()(supernode_unregister)
|
|
75
|
+
supernode_app.command(**ALLOW_EXTRAS)(supernode_register)
|
|
76
|
+
supernode_app.command(**ALLOW_EXTRAS)(supernode_unregister)
|
|
65
77
|
# Make it appear as "list"
|
|
66
|
-
supernode_app.command("list")(supernode_list)
|
|
78
|
+
supernode_app.command("list", **ALLOW_EXTRAS)(supernode_list)
|
|
67
79
|
# Hide "ls" command (left as alias)
|
|
68
|
-
supernode_app.command(hidden=True)(supernode_list)
|
|
80
|
+
supernode_app.command(hidden=True, **ALLOW_EXTRAS)(supernode_list)
|
|
69
81
|
app.add_typer(supernode_app, name="supernode")
|
|
70
82
|
|
|
71
83
|
# Create app command group
|
|
@@ -77,9 +89,9 @@ app.add_typer(app_app, name="app")
|
|
|
77
89
|
# Create federation command group
|
|
78
90
|
federation_app = typer.Typer(help="Manage Federations")
|
|
79
91
|
# Make it appear as "list"
|
|
80
|
-
federation_app.command("list")(federation_list)
|
|
92
|
+
federation_app.command("list", **ALLOW_EXTRAS)(federation_list)
|
|
81
93
|
# Hide "ls" command (left as alias)
|
|
82
|
-
federation_app.command(hidden=True)(federation_list)
|
|
94
|
+
federation_app.command(hidden=True, **ALLOW_EXTRAS)(federation_list)
|
|
83
95
|
app.add_typer(federation_app, name="federation")
|
|
84
96
|
|
|
85
97
|
# Create config command group
|
{flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app_cmd/publish.py
RENAMED
|
@@ -23,7 +23,6 @@ import requests
|
|
|
23
23
|
import typer
|
|
24
24
|
from requests import Response
|
|
25
25
|
|
|
26
|
-
from flwr.common.constant import FAB_CONFIG_FILE
|
|
27
26
|
from flwr.supercore.constant import (
|
|
28
27
|
APP_PUBLISH_EXCLUDE_PATTERNS,
|
|
29
28
|
APP_PUBLISH_INCLUDE_PATTERNS,
|
|
@@ -33,18 +32,17 @@ from flwr.supercore.constant import (
|
|
|
33
32
|
MAX_TOTAL_BYTES,
|
|
34
33
|
MIME_MAP,
|
|
35
34
|
PLATFORM_API_URL,
|
|
35
|
+
SUPERGRID_ADDRESS,
|
|
36
36
|
UTF8,
|
|
37
37
|
)
|
|
38
38
|
from flwr.supercore.version import package_version as flwr_version
|
|
39
39
|
|
|
40
40
|
from ..auth_plugin.oidc_cli_plugin import OidcCliPlugin
|
|
41
|
-
from ..
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
from ..utils import (
|
|
42
|
+
build_pathspec,
|
|
43
|
+
load_cli_auth_plugin_from_connection,
|
|
44
|
+
load_gitignore_patterns,
|
|
45
45
|
)
|
|
46
|
-
from ..constant import FEDERATION_CONFIG_HELP_MESSAGE
|
|
47
|
-
from ..utils import build_pathspec, load_cli_auth_plugin, load_gitignore_patterns
|
|
48
46
|
|
|
49
47
|
|
|
50
48
|
# pylint: disable=too-many-locals
|
|
@@ -55,35 +53,13 @@ def publish(
|
|
|
55
53
|
help="Project directory to upload (defaults to current directory)."
|
|
56
54
|
),
|
|
57
55
|
] = Path("."),
|
|
58
|
-
federation: Annotated[
|
|
59
|
-
str | None,
|
|
60
|
-
typer.Argument(
|
|
61
|
-
help="Name of the federation used for login before publishing app."
|
|
62
|
-
),
|
|
63
|
-
] = None,
|
|
64
|
-
federation_config_overrides: Annotated[
|
|
65
|
-
list[str] | None,
|
|
66
|
-
typer.Option(
|
|
67
|
-
"--federation-config",
|
|
68
|
-
help=FEDERATION_CONFIG_HELP_MESSAGE,
|
|
69
|
-
),
|
|
70
|
-
] = None,
|
|
71
56
|
) -> None:
|
|
72
57
|
"""Publish a Flower App to the Flower Platform.
|
|
73
58
|
|
|
74
59
|
This command uploads your app project to the Flower Platform. Files are filtered
|
|
75
60
|
based on .gitignore patterns and allowed file extensions.
|
|
76
61
|
"""
|
|
77
|
-
|
|
78
|
-
pyproject_path = app / FAB_CONFIG_FILE if app else None
|
|
79
|
-
config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
|
|
80
|
-
config = process_loaded_project_config(config, errors, warnings)
|
|
81
|
-
federation, federation_config = validate_federation_in_project_config(
|
|
82
|
-
federation, config, federation_config_overrides
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
# Load the authentication plugin
|
|
86
|
-
auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
|
|
62
|
+
auth_plugin = load_cli_auth_plugin_from_connection(SUPERGRID_ADDRESS)
|
|
87
63
|
auth_plugin.load_tokens()
|
|
88
64
|
if not isinstance(auth_plugin, OidcCliPlugin) or not auth_plugin.access_token:
|
|
89
65
|
typer.secho(
|
{flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app_cmd/review.py
RENAMED
|
@@ -28,8 +28,7 @@ from cryptography.hazmat.primitives.asymmetric import ed25519
|
|
|
28
28
|
|
|
29
29
|
from flwr.common import now
|
|
30
30
|
from flwr.common.config import get_flwr_dir
|
|
31
|
-
from flwr.
|
|
32
|
-
from flwr.supercore.constant import PLATFORM_API_URL
|
|
31
|
+
from flwr.supercore.constant import PLATFORM_API_URL, SUPERGRID_ADDRESS
|
|
33
32
|
from flwr.supercore.primitives.asymmetric_ed25519 import (
|
|
34
33
|
create_message_to_sign,
|
|
35
34
|
load_private_key,
|
|
@@ -39,14 +38,8 @@ from flwr.supercore.utils import parse_app_spec, request_download_link
|
|
|
39
38
|
from flwr.supercore.version import package_version as flwr_version
|
|
40
39
|
|
|
41
40
|
from ..auth_plugin.oidc_cli_plugin import OidcCliPlugin
|
|
42
|
-
from ..config_utils import (
|
|
43
|
-
load_and_validate,
|
|
44
|
-
process_loaded_project_config,
|
|
45
|
-
validate_federation_in_project_config,
|
|
46
|
-
)
|
|
47
|
-
from ..constant import FEDERATION_CONFIG_HELP_MESSAGE
|
|
48
41
|
from ..install import install_from_fab
|
|
49
|
-
from ..utils import
|
|
42
|
+
from ..utils import load_cli_auth_plugin_from_connection
|
|
50
43
|
|
|
51
44
|
TRY_AGAIN_MESSAGE = "Please try again or press CTRL+C to abort.\n"
|
|
52
45
|
|
|
@@ -60,38 +53,11 @@ def review(
|
|
|
60
53
|
"Version is optional; defaults to the latest."
|
|
61
54
|
),
|
|
62
55
|
],
|
|
63
|
-
app_dir_login: Annotated[
|
|
64
|
-
Path,
|
|
65
|
-
typer.Argument(
|
|
66
|
-
help="Project directory to used for login before reviewing app."
|
|
67
|
-
),
|
|
68
|
-
] = Path("."),
|
|
69
|
-
federation: Annotated[
|
|
70
|
-
str | None,
|
|
71
|
-
typer.Argument(
|
|
72
|
-
help="Name of the federation used for login before reviewing app."
|
|
73
|
-
),
|
|
74
|
-
] = None,
|
|
75
|
-
federation_config_overrides: Annotated[
|
|
76
|
-
list[str] | None,
|
|
77
|
-
typer.Option(
|
|
78
|
-
"--federation-config",
|
|
79
|
-
help=FEDERATION_CONFIG_HELP_MESSAGE,
|
|
80
|
-
),
|
|
81
|
-
] = None,
|
|
82
56
|
) -> None:
|
|
83
57
|
"""Download a FAB for <APP-ID>, unpack it for manual review, and upon confirmation
|
|
84
58
|
sign & submit the review to the Platform."""
|
|
85
|
-
|
|
86
|
-
pyproject_path = app_dir_login / FAB_CONFIG_FILE if app_dir_login else None
|
|
87
|
-
config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
|
|
88
|
-
config = process_loaded_project_config(config, errors, warnings)
|
|
89
|
-
federation, federation_config = validate_federation_in_project_config(
|
|
90
|
-
federation, config, federation_config_overrides
|
|
91
|
-
)
|
|
59
|
+
auth_plugin = load_cli_auth_plugin_from_connection(SUPERGRID_ADDRESS)
|
|
92
60
|
|
|
93
|
-
# Load the authentication plugin
|
|
94
|
-
auth_plugin = load_cli_auth_plugin(app_dir_login, federation, federation_config)
|
|
95
61
|
auth_plugin.load_tokens()
|
|
96
62
|
if not isinstance(auth_plugin, OidcCliPlugin) or not auth_plugin.access_token:
|
|
97
63
|
typer.secho(
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
|
|
18
18
|
from abc import ABC, abstractmethod
|
|
19
19
|
from collections.abc import Sequence
|
|
20
|
-
from pathlib import Path
|
|
21
20
|
|
|
22
21
|
from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
|
|
23
22
|
from flwr.proto.control_pb2_grpc import ControlStub
|
|
@@ -35,8 +34,8 @@ class CliAuthPlugin(ABC):
|
|
|
35
34
|
|
|
36
35
|
Parameters
|
|
37
36
|
----------
|
|
38
|
-
|
|
39
|
-
|
|
37
|
+
host : str
|
|
38
|
+
The address of the SuperLink Control API server.
|
|
40
39
|
"""
|
|
41
40
|
|
|
42
41
|
@staticmethod
|
|
@@ -66,20 +65,16 @@ class CliAuthPlugin(ABC):
|
|
|
66
65
|
"""
|
|
67
66
|
|
|
68
67
|
@abstractmethod
|
|
69
|
-
def __init__(self,
|
|
68
|
+
def __init__(self, host: str):
|
|
70
69
|
"""Abstract constructor."""
|
|
71
70
|
|
|
72
71
|
@abstractmethod
|
|
73
72
|
def store_tokens(self, credentials: AccountAuthCredentials) -> None:
|
|
74
|
-
"""Store authentication tokens to the
|
|
75
|
-
|
|
76
|
-
The credentials, including tokens, will be saved as a JSON file
|
|
77
|
-
at `credentials_path`.
|
|
78
|
-
"""
|
|
73
|
+
"""Store authentication tokens to the credential store."""
|
|
79
74
|
|
|
80
75
|
@abstractmethod
|
|
81
76
|
def load_tokens(self) -> None:
|
|
82
|
-
"""Load authentication tokens from the
|
|
77
|
+
"""Load authentication tokens from the credential store."""
|
|
83
78
|
|
|
84
79
|
@abstractmethod
|
|
85
80
|
def write_tokens_to_metadata(
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
from collections.abc import Sequence
|
|
19
|
-
from pathlib import Path
|
|
20
19
|
|
|
21
20
|
from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
|
|
22
21
|
from flwr.proto.control_pb2_grpc import ControlStub
|
|
@@ -57,7 +56,7 @@ class NoOpCliAuthPlugin(CliAuthPlugin):
|
|
|
57
56
|
"""
|
|
58
57
|
raise LoginError("Account authentication is not enabled on this SuperLink.")
|
|
59
58
|
|
|
60
|
-
def __init__(self,
|
|
59
|
+
def __init__(self, host: str = "") -> None:
|
|
61
60
|
pass
|
|
62
61
|
|
|
63
62
|
def store_tokens(self, credentials: AccountAuthCredentials) -> None:
|
|
@@ -15,27 +15,25 @@
|
|
|
15
15
|
"""Flower CLI account auth plugin for OIDC."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
import json
|
|
19
18
|
import time
|
|
20
19
|
import webbrowser
|
|
21
20
|
from collections.abc import Sequence
|
|
22
|
-
from pathlib import Path
|
|
23
|
-
from typing import Any
|
|
24
21
|
|
|
25
22
|
import typer
|
|
26
23
|
|
|
27
|
-
from flwr.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
AuthnType,
|
|
24
|
+
from flwr.cli.constant import (
|
|
25
|
+
ACCESS_TOKEN_STORE_KEY,
|
|
26
|
+
AUTHN_TYPE_STORE_KEY,
|
|
27
|
+
REFRESH_TOKEN_STORE_KEY,
|
|
32
28
|
)
|
|
29
|
+
from flwr.common.constant import ACCESS_TOKEN_KEY, REFRESH_TOKEN_KEY, AuthnType
|
|
33
30
|
from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
|
|
34
31
|
from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
35
32
|
GetAuthTokensRequest,
|
|
36
33
|
GetAuthTokensResponse,
|
|
37
34
|
)
|
|
38
35
|
from flwr.proto.control_pb2_grpc import ControlStub
|
|
36
|
+
from flwr.supercore.credential_store import get_credential_store
|
|
39
37
|
|
|
40
38
|
from .auth_plugin import CliAuthPlugin, LoginError
|
|
41
39
|
|
|
@@ -47,10 +45,11 @@ class OidcCliPlugin(CliAuthPlugin):
|
|
|
47
45
|
access to Flower SuperLink.
|
|
48
46
|
"""
|
|
49
47
|
|
|
50
|
-
def __init__(self,
|
|
48
|
+
def __init__(self, host: str):
|
|
51
49
|
self.access_token: str | None = None
|
|
52
50
|
self.refresh_token: str | None = None
|
|
53
|
-
self.
|
|
51
|
+
self.host = host
|
|
52
|
+
self.store = get_credential_store()
|
|
54
53
|
|
|
55
54
|
@staticmethod
|
|
56
55
|
def login(
|
|
@@ -109,32 +108,29 @@ class OidcCliPlugin(CliAuthPlugin):
|
|
|
109
108
|
raise LoginError("Process timed out.")
|
|
110
109
|
|
|
111
110
|
def store_tokens(self, credentials: AccountAuthCredentials) -> None:
|
|
112
|
-
"""Store authentication tokens to the
|
|
111
|
+
"""Store authentication tokens to the credential store."""
|
|
112
|
+
host = self.host
|
|
113
|
+
# Retrieve tokens
|
|
114
|
+
access_token = credentials.access_token
|
|
115
|
+
refresh_token = credentials.refresh_token
|
|
113
116
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
""
|
|
117
|
-
self.
|
|
118
|
-
self.refresh_token = credentials.refresh_token
|
|
119
|
-
json_dict = {
|
|
120
|
-
AUTHN_TYPE_JSON_KEY: AuthnType.OIDC,
|
|
121
|
-
ACCESS_TOKEN_KEY: credentials.access_token,
|
|
122
|
-
REFRESH_TOKEN_KEY: credentials.refresh_token,
|
|
123
|
-
}
|
|
117
|
+
# Store tokens in the credential store
|
|
118
|
+
self.store.set(AUTHN_TYPE_STORE_KEY % host, AuthnType.OIDC.encode("utf-8"))
|
|
119
|
+
self.store.set(ACCESS_TOKEN_STORE_KEY % host, access_token.encode("utf-8"))
|
|
120
|
+
self.store.set(REFRESH_TOKEN_STORE_KEY % host, refresh_token.encode("utf-8"))
|
|
124
121
|
|
|
125
|
-
|
|
126
|
-
|
|
122
|
+
# Update internal state
|
|
123
|
+
self.access_token = access_token
|
|
124
|
+
self.refresh_token = refresh_token
|
|
127
125
|
|
|
128
126
|
def load_tokens(self) -> None:
|
|
129
|
-
"""Load authentication tokens from the
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
access_token = json_dict.get(ACCESS_TOKEN_KEY)
|
|
133
|
-
refresh_token = json_dict.get(REFRESH_TOKEN_KEY)
|
|
127
|
+
"""Load authentication tokens from the credential store."""
|
|
128
|
+
access_token_bytes = self.store.get(ACCESS_TOKEN_STORE_KEY % self.host)
|
|
129
|
+
refresh_token_bytes = self.store.get(REFRESH_TOKEN_STORE_KEY % self.host)
|
|
134
130
|
|
|
135
|
-
if
|
|
136
|
-
self.access_token =
|
|
137
|
-
self.refresh_token =
|
|
131
|
+
if access_token_bytes is not None and refresh_token_bytes is not None:
|
|
132
|
+
self.access_token = access_token_bytes.decode("utf-8")
|
|
133
|
+
self.refresh_token = refresh_token_bytes.decode("utf-8")
|
|
138
134
|
|
|
139
135
|
def write_tokens_to_metadata(
|
|
140
136
|
self, metadata: Sequence[tuple[str, str | bytes]]
|
{flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config_migration.py
RENAMED
|
@@ -57,21 +57,21 @@ 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
|
|
62
|
+
if positional_arg_1 is None:
|
|
63
63
|
return False
|
|
64
64
|
|
|
65
65
|
# If one and only one extra argument is given, assume legacy usage
|
|
66
66
|
if len(args) == 1:
|
|
67
67
|
return True
|
|
68
68
|
|
|
69
|
-
# If the
|
|
70
|
-
pth = Path(
|
|
71
|
-
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 (".", ".."):
|
|
72
72
|
return True
|
|
73
73
|
|
|
74
|
-
# Lastly, check if a pyproject.toml file exists at the given
|
|
74
|
+
# Lastly, check if a pyproject.toml file exists at the given path
|
|
75
75
|
if (pth / "pyproject.toml").exists():
|
|
76
76
|
return True
|
|
77
77
|
|
|
@@ -172,7 +172,7 @@ def _comment_out_legacy_toml_config(app: Path) -> None:
|
|
|
172
172
|
|
|
173
173
|
|
|
174
174
|
def migrate(
|
|
175
|
-
|
|
175
|
+
positional_arg_1: str | None,
|
|
176
176
|
args: list[str],
|
|
177
177
|
ignore_legacy_usage: bool = False,
|
|
178
178
|
) -> None:
|
|
@@ -182,13 +182,13 @@ def migrate(
|
|
|
182
182
|
pyproject.toml to the new Flower config format when legacy usage is detected
|
|
183
183
|
or the migration is applicable.
|
|
184
184
|
|
|
185
|
-
`flwr run` should call `migrate(
|
|
185
|
+
`flwr run` should call `migrate(app, [], ignore_legacy_usage=True)` to skip
|
|
186
186
|
legacy usage check. Other CLI commands should call `migrate(superlink, ctx.args)`.
|
|
187
187
|
|
|
188
188
|
Parameters
|
|
189
189
|
----------
|
|
190
|
-
|
|
191
|
-
|
|
190
|
+
positional_arg_1 : str | None
|
|
191
|
+
The first positional argument.
|
|
192
192
|
args : list[str]
|
|
193
193
|
Additional arguments. In legacy usage, this is the TOML federation name.
|
|
194
194
|
ignore_legacy_usage : bool (default: False)
|
|
@@ -224,12 +224,13 @@ def migrate(
|
|
|
224
224
|
raise click.UsageError(f"Got unexpected extra arguments ({' '.join(args[1:])})")
|
|
225
225
|
|
|
226
226
|
# Determine app path for migration
|
|
227
|
-
|
|
227
|
+
arg1 = positional_arg_1
|
|
228
|
+
app = Path(arg1) if arg1 else Path(".")
|
|
228
229
|
app = app.resolve()
|
|
229
230
|
|
|
230
231
|
# Check if migration is applicable and if legacy usage is detected
|
|
231
232
|
is_migratable, reason = _is_migratable(app)
|
|
232
|
-
is_legacy = _is_legacy_usage(
|
|
233
|
+
is_legacy = _is_legacy_usage(arg1, args) if not ignore_legacy_usage else False
|
|
233
234
|
|
|
234
235
|
# Print notice once if legacy usage detected or migration is applicable
|
|
235
236
|
if is_legacy or is_migratable:
|
|
@@ -276,3 +277,24 @@ def migrate(
|
|
|
276
277
|
|
|
277
278
|
# Abort if legacy usage is detected to force user to adapt to new usage
|
|
278
279
|
raise typer.Exit(code=1)
|
|
280
|
+
|
|
281
|
+
|
|
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,
|
|
300
|
+
)
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""Constants for CLI commands."""
|
|
16
16
|
|
|
17
|
+
from flwr.supercore.constant import SUPERGRID_ADDRESS
|
|
17
18
|
|
|
18
19
|
# General help message for config overrides
|
|
19
20
|
CONFIG_HELP_MESSAGE = (
|
|
@@ -96,11 +97,11 @@ class SimulationBackendConfigTomlKey:
|
|
|
96
97
|
FLOWER_CONFIG_FILE = "config.toml"
|
|
97
98
|
|
|
98
99
|
# The default configuration for the Flower config file
|
|
99
|
-
DEFAULT_FLOWER_CONFIG_TOML = """[superlink]
|
|
100
|
+
DEFAULT_FLOWER_CONFIG_TOML = f"""[superlink]
|
|
100
101
|
default = "local"
|
|
101
102
|
|
|
102
103
|
[superlink.supergrid]
|
|
103
|
-
address = "
|
|
104
|
+
address = "{SUPERGRID_ADDRESS}"
|
|
104
105
|
enable-account-auth = true
|
|
105
106
|
federation = "YOUR-FEDERATION-HERE"
|
|
106
107
|
|
|
@@ -109,3 +110,8 @@ options.num-supernodes = 10
|
|
|
109
110
|
options.backend.client-resources.num-cpus = 1
|
|
110
111
|
options.backend.client-resources.num-gpus = 0
|
|
111
112
|
"""
|
|
113
|
+
|
|
114
|
+
# Keys for storing account auth credentials in the credential store
|
|
115
|
+
AUTHN_TYPE_STORE_KEY = "flower.account-auth.%s.authn-type"
|
|
116
|
+
ACCESS_TOKEN_STORE_KEY = "flower.account-auth.%s.oidc-access-token"
|
|
117
|
+
REFRESH_TOKEN_STORE_KEY = "flower.account-auth.%s.oidc-refresh-token"
|
{flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/federation/ls.py
RENAMED
|
@@ -16,22 +16,17 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
import io
|
|
19
|
-
from
|
|
20
|
-
from typing import Annotated, Any, cast
|
|
19
|
+
from typing import Annotated, Any
|
|
21
20
|
|
|
22
21
|
import typer
|
|
23
22
|
from rich.console import Console
|
|
24
23
|
from rich.table import Table
|
|
25
24
|
from rich.text import Text
|
|
26
25
|
|
|
27
|
-
from flwr.cli.
|
|
28
|
-
|
|
29
|
-
load_and_validate,
|
|
30
|
-
process_loaded_project_config,
|
|
31
|
-
validate_federation_in_project_config,
|
|
32
|
-
)
|
|
26
|
+
from flwr.cli.config_migration import migrate
|
|
27
|
+
from flwr.cli.flower_config import read_superlink_connection
|
|
33
28
|
from flwr.cli.ls import _get_status_style
|
|
34
|
-
from flwr.common.constant import
|
|
29
|
+
from flwr.common.constant import NOOP_ACCOUNT_NAME, CliOutputFormat
|
|
35
30
|
from flwr.common.logger import print_json_error, redirect_output, restore_output
|
|
36
31
|
from flwr.common.serde import run_from_proto
|
|
37
32
|
from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
@@ -46,18 +41,14 @@ from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
|
|
|
46
41
|
from flwr.supercore.utils import humanize_duration
|
|
47
42
|
|
|
48
43
|
from ..run_utils import RunRow, format_runs
|
|
49
|
-
from ..utils import flwr_cli_grpc_exc_handler,
|
|
44
|
+
from ..utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
|
|
50
45
|
|
|
51
46
|
|
|
52
47
|
def ls( # pylint: disable=R0914, R0913, R0917, R0912
|
|
53
48
|
ctx: typer.Context,
|
|
54
|
-
|
|
55
|
-
Path,
|
|
56
|
-
typer.Argument(help="Path of the Flower project"),
|
|
57
|
-
] = Path("."),
|
|
58
|
-
toml_federation: Annotated[
|
|
49
|
+
superlink: Annotated[
|
|
59
50
|
str | None,
|
|
60
|
-
typer.Argument(help="Name of the
|
|
51
|
+
typer.Argument(help="Name of the SuperLink connection."),
|
|
61
52
|
] = None,
|
|
62
53
|
output_format: Annotated[
|
|
63
54
|
str,
|
|
@@ -77,29 +68,22 @@ def ls( # pylint: disable=R0914, R0913, R0917, R0912
|
|
|
77
68
|
] = None,
|
|
78
69
|
) -> None:
|
|
79
70
|
"""List available federations."""
|
|
80
|
-
# Resolve command used (list or ls)
|
|
81
|
-
command_name = cast(str, ctx.command.name) if ctx.command else "ls"
|
|
82
|
-
|
|
83
71
|
suppress_output = output_format == CliOutputFormat.JSON
|
|
84
72
|
captured_output = io.StringIO()
|
|
73
|
+
|
|
74
|
+
if suppress_output:
|
|
75
|
+
redirect_output(captured_output)
|
|
76
|
+
|
|
77
|
+
# Migrate legacy usage if any
|
|
78
|
+
migrate(superlink, args=ctx.args)
|
|
79
|
+
|
|
80
|
+
# Read superlink connection configuration
|
|
81
|
+
superlink_connection = read_superlink_connection(superlink)
|
|
82
|
+
channel = None
|
|
83
|
+
|
|
85
84
|
try:
|
|
86
|
-
if suppress_output:
|
|
87
|
-
redirect_output(captured_output)
|
|
88
|
-
typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
|
|
89
|
-
|
|
90
|
-
pyproject_path = app / FAB_CONFIG_FILE if app else None
|
|
91
|
-
config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
|
|
92
|
-
config = process_loaded_project_config(config, errors, warnings)
|
|
93
|
-
toml_federation_name, federation_config = validate_federation_in_project_config(
|
|
94
|
-
toml_federation, config
|
|
95
|
-
)
|
|
96
|
-
exit_if_no_address(federation_config, f"federation {command_name}")
|
|
97
|
-
channel = None
|
|
98
85
|
try:
|
|
99
|
-
|
|
100
|
-
app, toml_federation_name, federation_config
|
|
101
|
-
)
|
|
102
|
-
channel = init_channel(app, federation_config, auth_plugin)
|
|
86
|
+
channel = init_channel_from_connection(superlink_connection)
|
|
103
87
|
stub = ControlStub(channel)
|
|
104
88
|
|
|
105
89
|
if federation:
|