flwr-nightly 1.26.0.dev20260121__tar.gz → 1.26.0.dev20260123__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.dev20260121 → flwr_nightly-1.26.0.dev20260123}/PKG-INFO +2 -2
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app.py +7 -7
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/publish.py +6 -30
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/review.py +3 -37
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/auth_plugin.py +5 -10
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +1 -2
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +27 -31
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config_utils.py +0 -132
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/constant.py +8 -2
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/federation/ls.py +19 -35
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/login/login.py +29 -42
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/ls.py +19 -33
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/register.py +17 -30
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/unregister.py +17 -31
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/utils.py +34 -257
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/__init__.py +0 -2
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/linkstate_factory.py +4 -4
- flwr_nightly-1.26.0.dev20260121/py/flwr/server/superlink/linkstate/sqlite_linkstate.py → flwr_nightly-1.26.0.dev20260123/py/flwr/server/superlink/linkstate/sql_linkstate.py +397 -505
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/utils.py +47 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/constant.py +3 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/object_store_factory.py +4 -4
- flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/object_store/sqlite_object_store.py → flwr_nightly-1.26.0.dev20260123/py/flwr/supercore/object_store/sql_object_store.py +107 -113
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/sql_mixin.py +22 -5
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/pyproject.toml +2 -2
- flwr_nightly-1.26.0.dev20260121/py/flwr/server/superlink/linkstate/sql_linkstate.py +0 -221
- flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/corestate/sqlite_corestate.py +0 -157
- flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/sqlite_mixin.py +0 -156
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/README.md +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/exception.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/message_type.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/user_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config/ls.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config_migration.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/federation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/flower_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/ls.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/pull.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/stop.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/client_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/signal_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/array.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/arraychunk.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/common/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/grpc_grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/exception.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/bulyan.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedadam.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedopt.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedprox.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/krum.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/multikrum.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/result.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/strategy.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/address.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/app_utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/cli/flower_superexec.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/sql_corestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/credential_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/date.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/ffs.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/health_server.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/heartbeat.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/license_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/object_store.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/asymmetric.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/README.md +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/run_superexec.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/utils.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/version.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/federation_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
- {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/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.dev20260123
|
|
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
|
|
@@ -45,7 +45,7 @@ Requires-Dist: ray (==2.51.1) ; (python_version >= "3.10" and python_version < "
|
|
|
45
45
|
Requires-Dist: ray (==2.51.1) ; (sys_platform != "win32" and python_version == "3.13") and (extra == "simulation")
|
|
46
46
|
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
|
47
47
|
Requires-Dist: rich (>=13.5.0,<14.0.0)
|
|
48
|
-
Requires-Dist: starlette (>=0.
|
|
48
|
+
Requires-Dist: starlette (>=0.47.2,<0.48.0) ; extra == "rest"
|
|
49
49
|
Requires-Dist: tomli (>=2.0.1,<3.0.0)
|
|
50
50
|
Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
|
|
51
51
|
Requires-Dist: typer (>=0.12.5,<0.21.0)
|
|
@@ -67,17 +67,17 @@ app.command(**ALLOW_EXTRAS)(log)
|
|
|
67
67
|
app.command("list", **ALLOW_EXTRAS)(ls)
|
|
68
68
|
app.command(hidden=True, **ALLOW_EXTRAS)(ls)
|
|
69
69
|
app.command(**ALLOW_EXTRAS)(stop)
|
|
70
|
-
app.command()(login)
|
|
70
|
+
app.command(**ALLOW_EXTRAS)(login)
|
|
71
71
|
app.command(**ALLOW_EXTRAS)(pull)
|
|
72
72
|
|
|
73
73
|
# Create supernode command group
|
|
74
74
|
supernode_app = typer.Typer(help="Manage SuperNodes")
|
|
75
|
-
supernode_app.command()(supernode_register)
|
|
76
|
-
supernode_app.command()(supernode_unregister)
|
|
75
|
+
supernode_app.command(**ALLOW_EXTRAS)(supernode_register)
|
|
76
|
+
supernode_app.command(**ALLOW_EXTRAS)(supernode_unregister)
|
|
77
77
|
# Make it appear as "list"
|
|
78
|
-
supernode_app.command("list")(supernode_list)
|
|
78
|
+
supernode_app.command("list", **ALLOW_EXTRAS)(supernode_list)
|
|
79
79
|
# Hide "ls" command (left as alias)
|
|
80
|
-
supernode_app.command(hidden=True)(supernode_list)
|
|
80
|
+
supernode_app.command(hidden=True, **ALLOW_EXTRAS)(supernode_list)
|
|
81
81
|
app.add_typer(supernode_app, name="supernode")
|
|
82
82
|
|
|
83
83
|
# Create app command group
|
|
@@ -89,9 +89,9 @@ app.add_typer(app_app, name="app")
|
|
|
89
89
|
# Create federation command group
|
|
90
90
|
federation_app = typer.Typer(help="Manage Federations")
|
|
91
91
|
# Make it appear as "list"
|
|
92
|
-
federation_app.command("list")(federation_list)
|
|
92
|
+
federation_app.command("list", **ALLOW_EXTRAS)(federation_list)
|
|
93
93
|
# Hide "ls" command (left as alias)
|
|
94
|
-
federation_app.command(hidden=True)(federation_list)
|
|
94
|
+
federation_app.command(hidden=True, **ALLOW_EXTRAS)(federation_list)
|
|
95
95
|
app.add_typer(federation_app, name="federation")
|
|
96
96
|
|
|
97
97
|
# Create config command group
|
{flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/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.dev20260121 → flwr_nightly-1.26.0.dev20260123}/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.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config_utils.py
RENAMED
|
@@ -114,57 +114,6 @@ def load(toml_path: Path) -> dict[str, Any] | None:
|
|
|
114
114
|
return None
|
|
115
115
|
|
|
116
116
|
|
|
117
|
-
def process_loaded_project_config(
|
|
118
|
-
config: dict[str, Any] | None, errors: list[str], warnings: list[str]
|
|
119
|
-
) -> dict[str, Any]:
|
|
120
|
-
"""Process and return the loaded project configuration.
|
|
121
|
-
|
|
122
|
-
This function handles errors and warnings from the `load_and_validate` function,
|
|
123
|
-
exits on critical issues, and returns the validated configuration.
|
|
124
|
-
|
|
125
|
-
Parameters
|
|
126
|
-
----------
|
|
127
|
-
config : dict[str, Any] | None
|
|
128
|
-
The loaded configuration dictionary, or None if loading failed.
|
|
129
|
-
errors : list[str]
|
|
130
|
-
List of error messages from validation.
|
|
131
|
-
warnings : list[str]
|
|
132
|
-
List of warning messages from validation.
|
|
133
|
-
|
|
134
|
-
Returns
|
|
135
|
-
-------
|
|
136
|
-
dict[str, Any]
|
|
137
|
-
The validated configuration dictionary.
|
|
138
|
-
|
|
139
|
-
Raises
|
|
140
|
-
------
|
|
141
|
-
typer.Exit
|
|
142
|
-
If config is None or contains critical errors.
|
|
143
|
-
"""
|
|
144
|
-
if config is None:
|
|
145
|
-
typer.secho(
|
|
146
|
-
"Project configuration could not be loaded.\n"
|
|
147
|
-
"pyproject.toml is invalid:\n"
|
|
148
|
-
+ "\n".join([f"- {line}" for line in errors]),
|
|
149
|
-
fg=typer.colors.RED,
|
|
150
|
-
bold=True,
|
|
151
|
-
err=True,
|
|
152
|
-
)
|
|
153
|
-
raise typer.Exit(code=1)
|
|
154
|
-
|
|
155
|
-
if warnings:
|
|
156
|
-
typer.secho(
|
|
157
|
-
"Project configuration is missing the following "
|
|
158
|
-
"recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
|
|
159
|
-
fg=typer.colors.RED,
|
|
160
|
-
bold=True,
|
|
161
|
-
)
|
|
162
|
-
|
|
163
|
-
typer.secho("Success", fg=typer.colors.GREEN)
|
|
164
|
-
|
|
165
|
-
return config
|
|
166
|
-
|
|
167
|
-
|
|
168
117
|
def validate_federation_in_project_config(
|
|
169
118
|
federation: str | None,
|
|
170
119
|
config: dict[str, Any],
|
|
@@ -229,61 +178,6 @@ def validate_federation_in_project_config(
|
|
|
229
178
|
return federation, federation_config
|
|
230
179
|
|
|
231
180
|
|
|
232
|
-
def validate_certificate_in_federation_config(
|
|
233
|
-
app: Path, federation_config: dict[str, Any]
|
|
234
|
-
) -> tuple[bool, bytes | None]:
|
|
235
|
-
"""Validate the certificates in the Flower project configuration.
|
|
236
|
-
|
|
237
|
-
Accepted configurations:
|
|
238
|
-
1. TLS enabled and gRPC will load(*) the trusted certificate bundle:
|
|
239
|
-
- Only `address` is provided. `root-certificates` and `insecure` not set.
|
|
240
|
-
- `address` is provided and `insecure` set to `false`. `root-certificates` not
|
|
241
|
-
set.
|
|
242
|
-
(*)gRPC uses a multi-step fallback mechanism to load the trusted certificate
|
|
243
|
-
bundle in the following sequence:
|
|
244
|
-
a. A configured file path (if set via configuration or environment),
|
|
245
|
-
b. An override callback (if registered via
|
|
246
|
-
`grpc_set_ssl_roots_override_callback`),
|
|
247
|
-
c. The OS trust store (if available),
|
|
248
|
-
d. A bundled default certificate file.
|
|
249
|
-
2. TLS enabled with self-signed certificates:
|
|
250
|
-
- `address` and `root-certificates` are provided. `insecure` not set.
|
|
251
|
-
- `address` and `root-certificates` are provided. `insecure` set to `false`.
|
|
252
|
-
3. TLS disabled. This is not recommended and should only be used for prototyping:
|
|
253
|
-
- `address` is provided and `insecure = true`. If `root-certificates` is
|
|
254
|
-
set, exit with an error.
|
|
255
|
-
"""
|
|
256
|
-
insecure = get_insecure_flag(federation_config)
|
|
257
|
-
|
|
258
|
-
# Process root certificates
|
|
259
|
-
if root_certificates := federation_config.get("root-certificates"):
|
|
260
|
-
if insecure:
|
|
261
|
-
typer.secho(
|
|
262
|
-
"❌ `root-certificates` were provided but the `insecure` parameter "
|
|
263
|
-
"is set to `True`.",
|
|
264
|
-
fg=typer.colors.RED,
|
|
265
|
-
bold=True,
|
|
266
|
-
err=True,
|
|
267
|
-
)
|
|
268
|
-
raise typer.Exit(code=1)
|
|
269
|
-
|
|
270
|
-
# TLS is enabled with self-signed certificates: attempt to read the file
|
|
271
|
-
try:
|
|
272
|
-
root_certificates_bytes = (app / root_certificates).read_bytes()
|
|
273
|
-
except Exception as e:
|
|
274
|
-
typer.secho(
|
|
275
|
-
f"❌ Failed to read certificate file `{root_certificates}`: {e}",
|
|
276
|
-
fg=typer.colors.RED,
|
|
277
|
-
bold=True,
|
|
278
|
-
err=True,
|
|
279
|
-
)
|
|
280
|
-
raise typer.Exit(code=1) from e
|
|
281
|
-
else:
|
|
282
|
-
root_certificates_bytes = None
|
|
283
|
-
|
|
284
|
-
return insecure, root_certificates_bytes
|
|
285
|
-
|
|
286
|
-
|
|
287
181
|
def load_certificate_in_connection(
|
|
288
182
|
connection: SuperLinkConnection,
|
|
289
183
|
) -> bytes | None:
|
|
@@ -336,32 +230,6 @@ def load_certificate_in_connection(
|
|
|
336
230
|
return root_certificates_bytes
|
|
337
231
|
|
|
338
232
|
|
|
339
|
-
def exit_if_no_address(federation_config: dict[str, Any], cmd: str) -> None:
|
|
340
|
-
"""Exit if the provided federation_config has no "address" key.
|
|
341
|
-
|
|
342
|
-
Parameters
|
|
343
|
-
----------
|
|
344
|
-
federation_config : dict[str, Any]
|
|
345
|
-
The federation configuration dictionary to check.
|
|
346
|
-
cmd : str
|
|
347
|
-
The command name to display in the error message.
|
|
348
|
-
|
|
349
|
-
Raises
|
|
350
|
-
------
|
|
351
|
-
typer.Exit
|
|
352
|
-
If 'address' key is not present in federation_config.
|
|
353
|
-
"""
|
|
354
|
-
if "address" not in federation_config:
|
|
355
|
-
typer.secho(
|
|
356
|
-
f"❌ `flwr {cmd}` currently works with a SuperLink. Ensure that the "
|
|
357
|
-
"correct SuperLink (Control API) address is provided in `pyproject.toml`.",
|
|
358
|
-
fg=typer.colors.RED,
|
|
359
|
-
bold=True,
|
|
360
|
-
err=True,
|
|
361
|
-
)
|
|
362
|
-
raise typer.Exit(code=1)
|
|
363
|
-
|
|
364
|
-
|
|
365
233
|
def get_insecure_flag(federation_config: dict[str, Any]) -> bool:
|
|
366
234
|
"""Extract and validate the `insecure` flag from the federation configuration.
|
|
367
235
|
|
|
@@ -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.dev20260121 → flwr_nightly-1.26.0.dev20260123}/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:
|