flwr-nightly 1.15.0.dev20250125__tar.gz → 1.15.0.dev20250127__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.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/PKG-INFO +1 -1
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/pyproject.toml +1 -1
- flwr_nightly-1.15.0.dev20250127/src/py/flwr/cli/auth_plugin/__init__.py +31 -0
- flwr_nightly-1.15.0.dev20250127/src/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +150 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/login/login.py +9 -3
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/utils.py +19 -19
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/constant.py +11 -1
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/logger.py +20 -6
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/app.py +2 -2
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/LICENSE +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/README.md +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/ls.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/stop.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/nodestate/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/superexec/simulation.py +0 -0
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
4
4
|
|
5
5
|
[tool.poetry]
|
6
6
|
name = "flwr-nightly"
|
7
|
-
version = "1.15.0.
|
7
|
+
version = "1.15.0.dev20250127"
|
8
8
|
description = "Flower: A Friendly Federated AI Framework"
|
9
9
|
license = "Apache-2.0"
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
# ==============================================================================
|
15
|
+
"""Flower user auth plugins."""
|
16
|
+
|
17
|
+
|
18
|
+
from flwr.common.auth_plugin import CliAuthPlugin
|
19
|
+
from flwr.common.constant import AuthType
|
20
|
+
|
21
|
+
from .oidc_cli_plugin import OidcCliPlugin
|
22
|
+
|
23
|
+
|
24
|
+
def get_cli_auth_plugins() -> dict[str, type[CliAuthPlugin]]:
|
25
|
+
"""Return all CLI authentication plugins."""
|
26
|
+
return {AuthType.OIDC: OidcCliPlugin}
|
27
|
+
|
28
|
+
|
29
|
+
__all__ = [
|
30
|
+
"get_cli_auth_plugins",
|
31
|
+
]
|
@@ -0,0 +1,150 @@
|
|
1
|
+
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
# ==============================================================================
|
15
|
+
"""Flower CLI user auth plugin for OIDC."""
|
16
|
+
|
17
|
+
|
18
|
+
import json
|
19
|
+
import time
|
20
|
+
from collections.abc import Sequence
|
21
|
+
from pathlib import Path
|
22
|
+
from typing import Any, Optional, Union
|
23
|
+
|
24
|
+
import typer
|
25
|
+
|
26
|
+
from flwr.common.auth_plugin import CliAuthPlugin
|
27
|
+
from flwr.common.constant import (
|
28
|
+
ACCESS_TOKEN_KEY,
|
29
|
+
AUTH_TYPE_KEY,
|
30
|
+
REFRESH_TOKEN_KEY,
|
31
|
+
AuthType,
|
32
|
+
)
|
33
|
+
from flwr.common.typing import UserAuthCredentials, UserAuthLoginDetails
|
34
|
+
from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
35
|
+
GetAuthTokensRequest,
|
36
|
+
GetAuthTokensResponse,
|
37
|
+
)
|
38
|
+
from flwr.proto.exec_pb2_grpc import ExecStub
|
39
|
+
|
40
|
+
|
41
|
+
class OidcCliPlugin(CliAuthPlugin):
|
42
|
+
"""Flower OIDC auth plugin for CLI."""
|
43
|
+
|
44
|
+
def __init__(self, credentials_path: Path):
|
45
|
+
self.access_token: Optional[str] = None
|
46
|
+
self.refresh_token: Optional[str] = None
|
47
|
+
self.credentials_path = credentials_path
|
48
|
+
|
49
|
+
@staticmethod
|
50
|
+
def login(
|
51
|
+
login_details: UserAuthLoginDetails,
|
52
|
+
exec_stub: ExecStub,
|
53
|
+
) -> UserAuthCredentials:
|
54
|
+
"""Authenticate the user and retrieve authentication credentials."""
|
55
|
+
typer.secho(
|
56
|
+
"Please login with your user credentials here: "
|
57
|
+
f"{login_details.verification_uri_complete}",
|
58
|
+
fg=typer.colors.BLUE,
|
59
|
+
)
|
60
|
+
start_time = time.time()
|
61
|
+
time.sleep(login_details.interval)
|
62
|
+
|
63
|
+
while (time.time() - start_time) < login_details.expires_in:
|
64
|
+
res: GetAuthTokensResponse = exec_stub.GetAuthTokens(
|
65
|
+
GetAuthTokensRequest(device_code=login_details.device_code)
|
66
|
+
)
|
67
|
+
|
68
|
+
access_token = res.access_token
|
69
|
+
refresh_token = res.refresh_token
|
70
|
+
|
71
|
+
if access_token and refresh_token:
|
72
|
+
typer.secho(
|
73
|
+
"✅ Login successful.",
|
74
|
+
fg=typer.colors.GREEN,
|
75
|
+
bold=False,
|
76
|
+
)
|
77
|
+
return UserAuthCredentials(
|
78
|
+
access_token=access_token,
|
79
|
+
refresh_token=refresh_token,
|
80
|
+
)
|
81
|
+
|
82
|
+
time.sleep(login_details.interval)
|
83
|
+
|
84
|
+
typer.secho(
|
85
|
+
"❌ Timeout, failed to sign in.",
|
86
|
+
fg=typer.colors.RED,
|
87
|
+
bold=True,
|
88
|
+
)
|
89
|
+
raise typer.Exit(code=1)
|
90
|
+
|
91
|
+
def store_tokens(self, credentials: UserAuthCredentials) -> None:
|
92
|
+
"""Store authentication tokens to the `credentials_path`.
|
93
|
+
|
94
|
+
The credentials, including tokens, will be saved as a JSON file
|
95
|
+
at `credentials_path`.
|
96
|
+
"""
|
97
|
+
self.access_token = credentials.access_token
|
98
|
+
self.refresh_token = credentials.refresh_token
|
99
|
+
json_dict = {
|
100
|
+
AUTH_TYPE_KEY: AuthType.OIDC,
|
101
|
+
ACCESS_TOKEN_KEY: credentials.access_token,
|
102
|
+
REFRESH_TOKEN_KEY: credentials.refresh_token,
|
103
|
+
}
|
104
|
+
|
105
|
+
with open(self.credentials_path, "w", encoding="utf-8") as file:
|
106
|
+
json.dump(json_dict, file, indent=4)
|
107
|
+
|
108
|
+
def load_tokens(self) -> None:
|
109
|
+
"""Load authentication tokens from the `credentials_path`."""
|
110
|
+
with open(self.credentials_path, encoding="utf-8") as file:
|
111
|
+
json_dict: dict[str, Any] = json.load(file)
|
112
|
+
access_token = json_dict.get(ACCESS_TOKEN_KEY)
|
113
|
+
refresh_token = json_dict.get(REFRESH_TOKEN_KEY)
|
114
|
+
|
115
|
+
if isinstance(access_token, str) and isinstance(refresh_token, str):
|
116
|
+
self.access_token = access_token
|
117
|
+
self.refresh_token = refresh_token
|
118
|
+
|
119
|
+
def write_tokens_to_metadata(
|
120
|
+
self, metadata: Sequence[tuple[str, Union[str, bytes]]]
|
121
|
+
) -> Sequence[tuple[str, Union[str, bytes]]]:
|
122
|
+
"""Write authentication tokens to the provided metadata."""
|
123
|
+
if self.access_token is None or self.refresh_token is None:
|
124
|
+
typer.secho(
|
125
|
+
"❌ Missing authentication tokens. Please login first.",
|
126
|
+
fg=typer.colors.RED,
|
127
|
+
bold=True,
|
128
|
+
)
|
129
|
+
raise typer.Exit(code=1)
|
130
|
+
|
131
|
+
return list(metadata) + [
|
132
|
+
(ACCESS_TOKEN_KEY, self.access_token),
|
133
|
+
(REFRESH_TOKEN_KEY, self.refresh_token),
|
134
|
+
]
|
135
|
+
|
136
|
+
def read_tokens_from_metadata(
|
137
|
+
self, metadata: Sequence[tuple[str, Union[str, bytes]]]
|
138
|
+
) -> Optional[UserAuthCredentials]:
|
139
|
+
"""Read authentication tokens from the provided metadata."""
|
140
|
+
metadata_dict = dict(metadata)
|
141
|
+
access_token = metadata_dict.get(ACCESS_TOKEN_KEY)
|
142
|
+
refresh_token = metadata_dict.get(REFRESH_TOKEN_KEY)
|
143
|
+
|
144
|
+
if isinstance(access_token, str) and isinstance(refresh_token, str):
|
145
|
+
return UserAuthCredentials(
|
146
|
+
access_token=access_token,
|
147
|
+
refresh_token=refresh_token,
|
148
|
+
)
|
149
|
+
|
150
|
+
return None
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/login/login.py
RENAMED
@@ -34,7 +34,11 @@ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
34
34
|
)
|
35
35
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
36
36
|
|
37
|
-
from ..utils import
|
37
|
+
from ..utils import (
|
38
|
+
init_channel,
|
39
|
+
try_obtain_cli_auth_plugin,
|
40
|
+
unauthenticated_exc_handler,
|
41
|
+
)
|
38
42
|
|
39
43
|
|
40
44
|
def login( # pylint: disable=R0914
|
@@ -81,7 +85,8 @@ def login( # pylint: disable=R0914
|
|
81
85
|
stub = ExecStub(channel)
|
82
86
|
|
83
87
|
login_request = GetLoginDetailsRequest()
|
84
|
-
|
88
|
+
with unauthenticated_exc_handler():
|
89
|
+
login_response: GetLoginDetailsResponse = stub.GetLoginDetails(login_request)
|
85
90
|
|
86
91
|
# Get the auth plugin
|
87
92
|
auth_type = login_response.auth_type
|
@@ -104,7 +109,8 @@ def login( # pylint: disable=R0914
|
|
104
109
|
expires_in=login_response.expires_in,
|
105
110
|
interval=login_response.interval,
|
106
111
|
)
|
107
|
-
|
112
|
+
with unauthenticated_exc_handler():
|
113
|
+
credentials = auth_plugin.login(details, stub)
|
108
114
|
|
109
115
|
# Store the tokens
|
110
116
|
auth_plugin.store_tokens(credentials)
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/utils.py
RENAMED
@@ -29,20 +29,13 @@ import typer
|
|
29
29
|
|
30
30
|
from flwr.cli.cli_user_auth_interceptor import CliUserAuthInterceptor
|
31
31
|
from flwr.common.auth_plugin import CliAuthPlugin
|
32
|
-
from flwr.common.constant import
|
32
|
+
from flwr.common.constant import AUTH_TYPE_KEY, CREDENTIALS_DIR, FLWR_DIR
|
33
33
|
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
34
34
|
from flwr.common.logger import log
|
35
35
|
|
36
|
+
from .auth_plugin import get_cli_auth_plugins
|
36
37
|
from .config_utils import validate_certificate_in_federation_config
|
37
38
|
|
38
|
-
try:
|
39
|
-
from flwr.ee import get_cli_auth_plugins
|
40
|
-
except ImportError:
|
41
|
-
|
42
|
-
def get_cli_auth_plugins() -> dict[str, type[CliAuthPlugin]]:
|
43
|
-
"""Return all CLI authentication plugins."""
|
44
|
-
raise NotImplementedError("No authentication plugins are currently supported.")
|
45
|
-
|
46
39
|
|
47
40
|
def prompt_text(
|
48
41
|
text: str,
|
@@ -244,7 +237,7 @@ def try_obtain_cli_auth_plugin(
|
|
244
237
|
try:
|
245
238
|
with config_path.open("r", encoding="utf-8") as file:
|
246
239
|
json_file = json.load(file)
|
247
|
-
auth_type = json_file[
|
240
|
+
auth_type = json_file[AUTH_TYPE_KEY]
|
248
241
|
except (FileNotFoundError, KeyError):
|
249
242
|
typer.secho(
|
250
243
|
"❌ Missing or invalid credentials for user authentication. "
|
@@ -308,12 +301,19 @@ def unauthenticated_exc_handler() -> Iterator[None]:
|
|
308
301
|
try:
|
309
302
|
yield
|
310
303
|
except grpc.RpcError as e:
|
311
|
-
if e.code()
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
304
|
+
if e.code() == grpc.StatusCode.UNAUTHENTICATED:
|
305
|
+
typer.secho(
|
306
|
+
"❌ Authentication failed. Please run `flwr login`"
|
307
|
+
" to authenticate and try again.",
|
308
|
+
fg=typer.colors.RED,
|
309
|
+
bold=True,
|
310
|
+
)
|
311
|
+
raise typer.Exit(code=1) from None
|
312
|
+
if e.code() == grpc.StatusCode.UNIMPLEMENTED:
|
313
|
+
typer.secho(
|
314
|
+
"❌ User authentication is not enabled on this SuperLink.",
|
315
|
+
fg=typer.colors.RED,
|
316
|
+
bold=True,
|
317
|
+
)
|
318
|
+
raise typer.Exit(code=1) from None
|
319
|
+
raise
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/constant.py
RENAMED
@@ -108,7 +108,7 @@ MAX_RETRY_DELAY = 20 # Maximum delay duration between two consecutive retries.
|
|
108
108
|
|
109
109
|
# Constants for user authentication
|
110
110
|
CREDENTIALS_DIR = ".credentials"
|
111
|
-
|
111
|
+
AUTH_TYPE_KEY = "auth_type"
|
112
112
|
ACCESS_TOKEN_KEY = "access_token"
|
113
113
|
REFRESH_TOKEN_KEY = "refresh_token"
|
114
114
|
|
@@ -200,3 +200,13 @@ class CliOutputFormat:
|
|
200
200
|
def __new__(cls) -> CliOutputFormat:
|
201
201
|
"""Prevent instantiation."""
|
202
202
|
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
203
|
+
|
204
|
+
|
205
|
+
class AuthType:
|
206
|
+
"""User authentication types."""
|
207
|
+
|
208
|
+
OIDC = "oidc"
|
209
|
+
|
210
|
+
def __new__(cls) -> AuthType:
|
211
|
+
"""Prevent instantiation."""
|
212
|
+
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/common/logger.py
RENAMED
@@ -17,12 +17,13 @@
|
|
17
17
|
|
18
18
|
import json as _json
|
19
19
|
import logging
|
20
|
+
import os
|
20
21
|
import re
|
21
22
|
import sys
|
22
23
|
import threading
|
23
24
|
import time
|
24
25
|
from io import StringIO
|
25
|
-
from logging import WARN, LogRecord
|
26
|
+
from logging import ERROR, WARN, LogRecord
|
26
27
|
from logging.handlers import HTTPHandler
|
27
28
|
from queue import Empty, Queue
|
28
29
|
from typing import TYPE_CHECKING, Any, Optional, TextIO, Union
|
@@ -42,6 +43,7 @@ from .constant import LOG_UPLOAD_INTERVAL
|
|
42
43
|
LOGGER_NAME = "flwr"
|
43
44
|
FLOWER_LOGGER = logging.getLogger(LOGGER_NAME)
|
44
45
|
FLOWER_LOGGER.setLevel(logging.DEBUG)
|
46
|
+
log = FLOWER_LOGGER.log # pylint: disable=invalid-name
|
45
47
|
|
46
48
|
LOG_COLORS = {
|
47
49
|
"DEBUG": "\033[94m", # Blue
|
@@ -101,7 +103,7 @@ class ConsoleHandler(StreamHandler):
|
|
101
103
|
|
102
104
|
|
103
105
|
def update_console_handler(
|
104
|
-
level: Optional[int] = None,
|
106
|
+
level: Optional[Union[int, str]] = None,
|
105
107
|
timestamps: Optional[bool] = None,
|
106
108
|
colored: Optional[bool] = None,
|
107
109
|
) -> None:
|
@@ -125,6 +127,22 @@ console_handler = ConsoleHandler(
|
|
125
127
|
console_handler.setLevel(logging.INFO)
|
126
128
|
FLOWER_LOGGER.addHandler(console_handler)
|
127
129
|
|
130
|
+
# Set log level via env var (show timestamps for `DEBUG`)
|
131
|
+
if log_level := os.getenv("PYTHONLOGLEVEL"):
|
132
|
+
try:
|
133
|
+
use_time_stamps = log_level.upper() == "DEBUG"
|
134
|
+
update_console_handler(
|
135
|
+
level=log_level, timestamps=use_time_stamps, colored=True
|
136
|
+
)
|
137
|
+
except Exception: # pylint: disable=broad-exception-caught
|
138
|
+
# Alert user but don't raise exception
|
139
|
+
log(
|
140
|
+
ERROR,
|
141
|
+
"Failed to set logging level %s. Using default level: %s",
|
142
|
+
log_level,
|
143
|
+
logging.getLevelName(console_handler.level),
|
144
|
+
)
|
145
|
+
|
128
146
|
|
129
147
|
class CustomHTTPHandler(HTTPHandler):
|
130
148
|
"""Custom HTTPHandler which overrides the mapLogRecords method."""
|
@@ -185,10 +203,6 @@ def configure(
|
|
185
203
|
FLOWER_LOGGER.addHandler(http_handler)
|
186
204
|
|
187
205
|
|
188
|
-
logger = logging.getLogger(LOGGER_NAME) # pylint: disable=invalid-name
|
189
|
-
log = logger.log # pylint: disable=invalid-name
|
190
|
-
|
191
|
-
|
192
206
|
def warn_preview_feature(name: str) -> None:
|
193
207
|
"""Warn the user when they use a preview feature."""
|
194
208
|
log(
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/server/app.py
RENAMED
@@ -40,7 +40,7 @@ from flwr.common.args import try_obtain_server_certificates
|
|
40
40
|
from flwr.common.auth_plugin import ExecAuthPlugin
|
41
41
|
from flwr.common.config import get_flwr_dir, parse_config_args
|
42
42
|
from flwr.common.constant import (
|
43
|
-
|
43
|
+
AUTH_TYPE_KEY,
|
44
44
|
CLIENT_OCTET,
|
45
45
|
EXEC_API_DEFAULT_SERVER_ADDRESS,
|
46
46
|
FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
|
@@ -578,7 +578,7 @@ def _try_obtain_exec_auth_plugin(
|
|
578
578
|
|
579
579
|
# Load authentication configuration
|
580
580
|
auth_config: dict[str, Any] = config.get("authentication", {})
|
581
|
-
auth_type: str = auth_config.get(
|
581
|
+
auth_type: str = auth_config.get(AUTH_TYPE_KEY, "")
|
582
582
|
|
583
583
|
# Load authentication plugin
|
584
584
|
try:
|
File without changes
|
File without changes
|
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/__init__.py
RENAMED
File without changes
|
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/build.py
RENAMED
File without changes
|
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/config_utils.py
RENAMED
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/constant.py
RENAMED
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/example.py
RENAMED
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/install.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/__init__.py
RENAMED
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/new/new.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/run/__init__.py
RENAMED
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/cli/run/run.py
RENAMED
File without changes
|
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/__init__.py
RENAMED
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/app.py
RENAMED
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/client.py
RENAMED
File without changes
|
{flwr_nightly-1.15.0.dev20250125 → flwr_nightly-1.15.0.dev20250127}/src/py/flwr/client/client_app.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|