flwr-nightly 1.13.0.dev20241113__tar.gz → 1.13.0.dev20241114__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.
Potentially problematic release.
This version of flwr-nightly might be problematic. Click here for more details.
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/PKG-INFO +1 -1
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/pyproject.toml +1 -1
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/app.py +2 -0
- flwr_nightly-1.13.0.dev20241114/src/py/flwr/cli/ls.py +228 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/app.py +20 -3
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/clientapp/app.py +6 -2
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/grpc_rere_client/connection.py +2 -12
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/rest_client/connection.py +4 -14
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/supernode/app.py +27 -1
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/serde.py +10 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/typing.py +31 -10
- flwr_nightly-1.13.0.dev20241114/src/py/flwr/proto/exec_pb2.py +50 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/exec_pb2.pyi +44 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/exec_pb2_grpc.py +34 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/exec_pb2_grpc.pyi +13 -0
- flwr_nightly-1.13.0.dev20241114/src/py/flwr/proto/run_pb2.py +64 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/run_pb2.pyi +18 -1
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/driver/grpc_driver.py +2 -12
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +10 -9
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +16 -18
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +9 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/run_simulation.py +7 -18
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/superexec/exec_servicer.py +31 -2
- flwr_nightly-1.13.0.dev20241113/src/py/flwr/proto/exec_pb2.py +0 -41
- flwr_nightly-1.13.0.dev20241113/src/py/flwr/proto/run_pb2.py +0 -64
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/README.md +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/nodestate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/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.13.0.
|
|
7
|
+
version = "1.13.0.dev20241114"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -20,6 +20,7 @@ from typer.main import get_command
|
|
|
20
20
|
from .build import build
|
|
21
21
|
from .install import install
|
|
22
22
|
from .log import log
|
|
23
|
+
from .ls import ls
|
|
23
24
|
from .new import new
|
|
24
25
|
from .run import run
|
|
25
26
|
|
|
@@ -37,6 +38,7 @@ app.command()(run)
|
|
|
37
38
|
app.command()(build)
|
|
38
39
|
app.command()(install)
|
|
39
40
|
app.command()(log)
|
|
41
|
+
app.command()(ls)
|
|
40
42
|
|
|
41
43
|
typer_click_object = get_command(app)
|
|
42
44
|
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# Copyright 2024 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 command line interface `ls` command."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
from datetime import datetime, timedelta
|
|
19
|
+
from logging import DEBUG
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
from typing import Annotated, Any, Optional
|
|
22
|
+
|
|
23
|
+
import grpc
|
|
24
|
+
import typer
|
|
25
|
+
from rich.console import Console
|
|
26
|
+
from rich.table import Table
|
|
27
|
+
from rich.text import Text
|
|
28
|
+
|
|
29
|
+
from flwr.cli.config_utils import (
|
|
30
|
+
load_and_validate,
|
|
31
|
+
validate_certificate_in_federation_config,
|
|
32
|
+
validate_federation_in_project_config,
|
|
33
|
+
validate_project_config,
|
|
34
|
+
)
|
|
35
|
+
from flwr.common.constant import FAB_CONFIG_FILE, SubStatus
|
|
36
|
+
from flwr.common.date import format_timedelta, isoformat8601_utc
|
|
37
|
+
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
|
38
|
+
from flwr.common.logger import log
|
|
39
|
+
from flwr.common.serde import run_from_proto
|
|
40
|
+
from flwr.common.typing import Run
|
|
41
|
+
from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
42
|
+
ListRunsRequest,
|
|
43
|
+
ListRunsResponse,
|
|
44
|
+
)
|
|
45
|
+
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def ls(
|
|
49
|
+
app: Annotated[
|
|
50
|
+
Path,
|
|
51
|
+
typer.Argument(help="Path of the Flower project"),
|
|
52
|
+
] = Path("."),
|
|
53
|
+
federation: Annotated[
|
|
54
|
+
Optional[str],
|
|
55
|
+
typer.Argument(help="Name of the federation"),
|
|
56
|
+
] = None,
|
|
57
|
+
runs: Annotated[
|
|
58
|
+
bool,
|
|
59
|
+
typer.Option(
|
|
60
|
+
"--runs",
|
|
61
|
+
help="List all runs",
|
|
62
|
+
),
|
|
63
|
+
] = False,
|
|
64
|
+
run_id: Annotated[
|
|
65
|
+
Optional[int],
|
|
66
|
+
typer.Option(
|
|
67
|
+
"--run-id",
|
|
68
|
+
help="Specific run ID to display",
|
|
69
|
+
),
|
|
70
|
+
] = None,
|
|
71
|
+
) -> None:
|
|
72
|
+
"""List runs."""
|
|
73
|
+
# Load and validate federation config
|
|
74
|
+
typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
|
|
75
|
+
|
|
76
|
+
pyproject_path = app / FAB_CONFIG_FILE if app else None
|
|
77
|
+
config, errors, warnings = load_and_validate(path=pyproject_path)
|
|
78
|
+
config = validate_project_config(config, errors, warnings)
|
|
79
|
+
federation, federation_config = validate_federation_in_project_config(
|
|
80
|
+
federation, config
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
if "address" not in federation_config:
|
|
84
|
+
typer.secho(
|
|
85
|
+
"❌ `flwr log` currently works with Exec API. Ensure that the correct"
|
|
86
|
+
"Exec API address is provided in the `pyproject.toml`.",
|
|
87
|
+
fg=typer.colors.RED,
|
|
88
|
+
bold=True,
|
|
89
|
+
)
|
|
90
|
+
raise typer.Exit(code=1)
|
|
91
|
+
|
|
92
|
+
try:
|
|
93
|
+
if runs and run_id is not None:
|
|
94
|
+
raise ValueError(
|
|
95
|
+
"The options '--runs' and '--run-id' are mutually exclusive."
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
channel = _init_channel(app, federation_config)
|
|
99
|
+
stub = ExecStub(channel)
|
|
100
|
+
|
|
101
|
+
# Display information about a specific run ID
|
|
102
|
+
if run_id is not None:
|
|
103
|
+
typer.echo(f"🔍 Displaying information for run ID {run_id}...")
|
|
104
|
+
_display_one_run(stub, run_id)
|
|
105
|
+
# By default, list all runs
|
|
106
|
+
else:
|
|
107
|
+
typer.echo("📄 Listing all runs...")
|
|
108
|
+
_list_runs(stub)
|
|
109
|
+
|
|
110
|
+
except ValueError as err:
|
|
111
|
+
typer.secho(
|
|
112
|
+
f"❌ {err}",
|
|
113
|
+
fg=typer.colors.RED,
|
|
114
|
+
bold=True,
|
|
115
|
+
)
|
|
116
|
+
raise typer.Exit(code=1) from err
|
|
117
|
+
finally:
|
|
118
|
+
channel.close()
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def on_channel_state_change(channel_connectivity: str) -> None:
|
|
122
|
+
"""Log channel connectivity."""
|
|
123
|
+
log(DEBUG, channel_connectivity)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def _init_channel(app: Path, federation_config: dict[str, Any]) -> grpc.Channel:
|
|
127
|
+
"""Initialize gRPC channel to the Exec API."""
|
|
128
|
+
insecure, root_certificates_bytes = validate_certificate_in_federation_config(
|
|
129
|
+
app, federation_config
|
|
130
|
+
)
|
|
131
|
+
channel = create_channel(
|
|
132
|
+
server_address=federation_config["address"],
|
|
133
|
+
insecure=insecure,
|
|
134
|
+
root_certificates=root_certificates_bytes,
|
|
135
|
+
max_message_length=GRPC_MAX_MESSAGE_LENGTH,
|
|
136
|
+
interceptors=None,
|
|
137
|
+
)
|
|
138
|
+
channel.subscribe(on_channel_state_change)
|
|
139
|
+
return channel
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def _format_run_table(run_dict: dict[int, Run], now_isoformat: str) -> Table:
|
|
143
|
+
"""Format run status as a rich Table."""
|
|
144
|
+
table = Table(header_style="bold cyan", show_lines=True)
|
|
145
|
+
|
|
146
|
+
def _format_datetime(dt: Optional[datetime]) -> str:
|
|
147
|
+
return isoformat8601_utc(dt).replace("T", " ") if dt else "N/A"
|
|
148
|
+
|
|
149
|
+
# Add columns
|
|
150
|
+
table.add_column(
|
|
151
|
+
Text("Run ID", justify="center"), style="bright_white", overflow="fold"
|
|
152
|
+
)
|
|
153
|
+
table.add_column(Text("FAB", justify="center"), style="dim white")
|
|
154
|
+
table.add_column(Text("Status", justify="center"))
|
|
155
|
+
table.add_column(Text("Elapsed", justify="center"), style="blue")
|
|
156
|
+
table.add_column(Text("Created At", justify="center"), style="dim white")
|
|
157
|
+
table.add_column(Text("Running At", justify="center"), style="dim white")
|
|
158
|
+
table.add_column(Text("Finished At", justify="center"), style="dim white")
|
|
159
|
+
|
|
160
|
+
# Add rows
|
|
161
|
+
for run in sorted(
|
|
162
|
+
run_dict.values(), key=lambda x: datetime.fromisoformat(x.pending_at)
|
|
163
|
+
):
|
|
164
|
+
# Combine status and sub-status into a single string
|
|
165
|
+
if run.status.sub_status == "":
|
|
166
|
+
status_text = run.status.status
|
|
167
|
+
else:
|
|
168
|
+
status_text = f"{run.status.status}:{run.status.sub_status}"
|
|
169
|
+
|
|
170
|
+
# Style the status based on its value
|
|
171
|
+
sub_status = run.status.sub_status
|
|
172
|
+
if sub_status == SubStatus.COMPLETED:
|
|
173
|
+
status_style = "green"
|
|
174
|
+
elif sub_status == SubStatus.FAILED:
|
|
175
|
+
status_style = "red"
|
|
176
|
+
else:
|
|
177
|
+
status_style = "yellow"
|
|
178
|
+
|
|
179
|
+
# Convert isoformat to datetime
|
|
180
|
+
pending_at = datetime.fromisoformat(run.pending_at) if run.pending_at else None
|
|
181
|
+
running_at = datetime.fromisoformat(run.running_at) if run.running_at else None
|
|
182
|
+
finished_at = (
|
|
183
|
+
datetime.fromisoformat(run.finished_at) if run.finished_at else None
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
# Calculate elapsed time
|
|
187
|
+
elapsed_time = timedelta()
|
|
188
|
+
if running_at:
|
|
189
|
+
if finished_at:
|
|
190
|
+
end_time = finished_at
|
|
191
|
+
else:
|
|
192
|
+
end_time = datetime.fromisoformat(now_isoformat)
|
|
193
|
+
elapsed_time = end_time - running_at
|
|
194
|
+
|
|
195
|
+
table.add_row(
|
|
196
|
+
f"[bold]{run.run_id}[/bold]",
|
|
197
|
+
f"{run.fab_id} (v{run.fab_version})",
|
|
198
|
+
f"[{status_style}]{status_text}[/{status_style}]",
|
|
199
|
+
format_timedelta(elapsed_time),
|
|
200
|
+
_format_datetime(pending_at),
|
|
201
|
+
_format_datetime(running_at),
|
|
202
|
+
_format_datetime(finished_at),
|
|
203
|
+
)
|
|
204
|
+
return table
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def _list_runs(
|
|
208
|
+
stub: ExecStub,
|
|
209
|
+
) -> None:
|
|
210
|
+
"""List all runs."""
|
|
211
|
+
res: ListRunsResponse = stub.ListRuns(ListRunsRequest())
|
|
212
|
+
run_dict = {run_id: run_from_proto(proto) for run_id, proto in res.run_dict.items()}
|
|
213
|
+
|
|
214
|
+
Console().print(_format_run_table(run_dict, res.now))
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def _display_one_run(
|
|
218
|
+
stub: ExecStub,
|
|
219
|
+
run_id: int,
|
|
220
|
+
) -> None:
|
|
221
|
+
"""Display information about a specific run."""
|
|
222
|
+
res: ListRunsResponse = stub.ListRuns(ListRunsRequest(run_id=run_id))
|
|
223
|
+
if not res.run_dict:
|
|
224
|
+
raise ValueError(f"Run ID {run_id} not found")
|
|
225
|
+
|
|
226
|
+
run_dict = {run_id: run_from_proto(proto) for run_id, proto in res.run_dict.items()}
|
|
227
|
+
|
|
228
|
+
Console().print(_format_run_table(run_dict, res.now))
|
{flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/client/app.py
RENAMED
|
@@ -217,6 +217,8 @@ def start_client_internal(
|
|
|
217
217
|
flwr_path: Optional[Path] = None,
|
|
218
218
|
isolation: Optional[str] = None,
|
|
219
219
|
supernode_address: Optional[str] = CLIENTAPPIO_API_DEFAULT_ADDRESS,
|
|
220
|
+
certificates: Optional[tuple[bytes, bytes, bytes]] = None,
|
|
221
|
+
ssl_ca_certfile: Optional[str] = None,
|
|
220
222
|
) -> None:
|
|
221
223
|
"""Start a Flower client node which connects to a Flower server.
|
|
222
224
|
|
|
@@ -278,6 +280,10 @@ def start_client_internal(
|
|
|
278
280
|
process and communicates using gRPC at the address `supernode_address`.
|
|
279
281
|
supernode_address : Optional[str] (default: `CLIENTAPPIO_API_DEFAULT_ADDRESS`)
|
|
280
282
|
The SuperNode gRPC server address.
|
|
283
|
+
certificates : Optional[Tuple[bytes, bytes, bytes]] (default: None)
|
|
284
|
+
Tuple containing the CA certificate, server certificate, and server private key.
|
|
285
|
+
ssl_ca_certfile : Optional[str] (default: None)
|
|
286
|
+
The path to the CA certificate file used by `flwr-clientapp` in subprocess mode.
|
|
281
287
|
"""
|
|
282
288
|
if insecure is None:
|
|
283
289
|
insecure = root_certificates is None
|
|
@@ -310,7 +316,8 @@ def start_client_internal(
|
|
|
310
316
|
f"{ISOLATION_MODE_SUBPROCESS} or {ISOLATION_MODE_PROCESS}",
|
|
311
317
|
)
|
|
312
318
|
_clientappio_grpc_server, clientappio_servicer = run_clientappio_api_grpc(
|
|
313
|
-
address=supernode_address
|
|
319
|
+
address=supernode_address,
|
|
320
|
+
certificates=certificates,
|
|
314
321
|
)
|
|
315
322
|
supernode_address = cast(str, supernode_address)
|
|
316
323
|
|
|
@@ -448,7 +455,7 @@ def start_client_internal(
|
|
|
448
455
|
runs[run_id] = get_run(run_id)
|
|
449
456
|
# If get_run is None, i.e., in grpc-bidi mode
|
|
450
457
|
else:
|
|
451
|
-
runs[run_id] = Run(run_id
|
|
458
|
+
runs[run_id] = Run.create_empty(run_id=run_id)
|
|
452
459
|
|
|
453
460
|
run: Run = runs[run_id]
|
|
454
461
|
if get_fab is not None and run.fab_hash:
|
|
@@ -516,6 +523,12 @@ def start_client_internal(
|
|
|
516
523
|
"--token",
|
|
517
524
|
str(token),
|
|
518
525
|
]
|
|
526
|
+
if ssl_ca_certfile:
|
|
527
|
+
command.append("--root-certificates")
|
|
528
|
+
command.append(ssl_ca_certfile)
|
|
529
|
+
else:
|
|
530
|
+
command.append("--insecure")
|
|
531
|
+
|
|
519
532
|
subprocess.run(
|
|
520
533
|
command,
|
|
521
534
|
stdout=None,
|
|
@@ -783,7 +796,10 @@ class _AppStateTracker:
|
|
|
783
796
|
signal.signal(signal.SIGTERM, signal_handler)
|
|
784
797
|
|
|
785
798
|
|
|
786
|
-
def run_clientappio_api_grpc(
|
|
799
|
+
def run_clientappio_api_grpc(
|
|
800
|
+
address: str,
|
|
801
|
+
certificates: Optional[tuple[bytes, bytes, bytes]],
|
|
802
|
+
) -> tuple[grpc.Server, ClientAppIoServicer]:
|
|
787
803
|
"""Run ClientAppIo API gRPC server."""
|
|
788
804
|
clientappio_servicer: grpc.Server = ClientAppIoServicer()
|
|
789
805
|
clientappio_add_servicer_to_server_fn = add_ClientAppIoServicer_to_server
|
|
@@ -794,6 +810,7 @@ def run_clientappio_api_grpc(address: str) -> tuple[grpc.Server, ClientAppIoServ
|
|
|
794
810
|
),
|
|
795
811
|
server_address=address,
|
|
796
812
|
max_message_length=GRPC_MAX_MESSAGE_LENGTH,
|
|
813
|
+
certificates=certificates,
|
|
797
814
|
)
|
|
798
815
|
log(INFO, "Starting Flower ClientAppIo gRPC server on %s", address)
|
|
799
816
|
clientappio_grpc_server.start()
|
|
@@ -24,7 +24,7 @@ import grpc
|
|
|
24
24
|
from flwr.cli.install import install_from_fab
|
|
25
25
|
from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
26
26
|
from flwr.common import Context, Message
|
|
27
|
-
from flwr.common.args import add_args_flwr_app_common
|
|
27
|
+
from flwr.common.args import add_args_flwr_app_common, try_obtain_root_certificates
|
|
28
28
|
from flwr.common.config import get_flwr_dir
|
|
29
29
|
from flwr.common.constant import ErrorCode
|
|
30
30
|
from flwr.common.grpc import create_channel
|
|
@@ -74,6 +74,7 @@ def flwr_clientapp() -> None:
|
|
|
74
74
|
args = parser.parse_args()
|
|
75
75
|
|
|
76
76
|
log(INFO, "Starting Flower ClientApp")
|
|
77
|
+
certificates = try_obtain_root_certificates(args, args.supernode)
|
|
77
78
|
|
|
78
79
|
log(
|
|
79
80
|
DEBUG,
|
|
@@ -87,6 +88,7 @@ def flwr_clientapp() -> None:
|
|
|
87
88
|
run_once=(args.token is not None),
|
|
88
89
|
token=args.token,
|
|
89
90
|
flwr_dir=args.flwr_dir,
|
|
91
|
+
certificates=certificates,
|
|
90
92
|
)
|
|
91
93
|
|
|
92
94
|
|
|
@@ -100,11 +102,13 @@ def run_clientapp( # pylint: disable=R0914
|
|
|
100
102
|
run_once: bool,
|
|
101
103
|
token: Optional[int] = None,
|
|
102
104
|
flwr_dir: Optional[str] = None,
|
|
105
|
+
certificates: Optional[bytes] = None,
|
|
103
106
|
) -> None:
|
|
104
107
|
"""Run Flower ClientApp process."""
|
|
105
108
|
channel = create_channel(
|
|
106
109
|
server_address=supernode,
|
|
107
|
-
insecure=
|
|
110
|
+
insecure=(certificates is None),
|
|
111
|
+
root_certificates=certificates,
|
|
108
112
|
)
|
|
109
113
|
channel.subscribe(on_channel_state_change)
|
|
110
114
|
|
|
@@ -41,11 +41,7 @@ from flwr.common.grpc import create_channel
|
|
|
41
41
|
from flwr.common.logger import log
|
|
42
42
|
from flwr.common.message import Message, Metadata
|
|
43
43
|
from flwr.common.retry_invoker import RetryInvoker
|
|
44
|
-
from flwr.common.serde import
|
|
45
|
-
message_from_taskins,
|
|
46
|
-
message_to_taskres,
|
|
47
|
-
user_config_from_proto,
|
|
48
|
-
)
|
|
44
|
+
from flwr.common.serde import message_from_taskins, message_to_taskres, run_from_proto
|
|
49
45
|
from flwr.common.typing import Fab, Run
|
|
50
46
|
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
|
51
47
|
from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
@@ -287,13 +283,7 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
|
287
283
|
)
|
|
288
284
|
|
|
289
285
|
# Return fab_id and fab_version
|
|
290
|
-
return
|
|
291
|
-
run_id,
|
|
292
|
-
get_run_response.run.fab_id,
|
|
293
|
-
get_run_response.run.fab_version,
|
|
294
|
-
get_run_response.run.fab_hash,
|
|
295
|
-
user_config_from_proto(get_run_response.run.override_config),
|
|
296
|
-
)
|
|
286
|
+
return run_from_proto(get_run_response.run)
|
|
297
287
|
|
|
298
288
|
def get_fab(fab_hash: str) -> Fab:
|
|
299
289
|
# Call FleetAPI
|
|
@@ -41,11 +41,7 @@ from flwr.common.constant import (
|
|
|
41
41
|
from flwr.common.logger import log
|
|
42
42
|
from flwr.common.message import Message, Metadata
|
|
43
43
|
from flwr.common.retry_invoker import RetryInvoker
|
|
44
|
-
from flwr.common.serde import
|
|
45
|
-
message_from_taskins,
|
|
46
|
-
message_to_taskres,
|
|
47
|
-
user_config_from_proto,
|
|
48
|
-
)
|
|
44
|
+
from flwr.common.serde import message_from_taskins, message_to_taskres, run_from_proto
|
|
49
45
|
from flwr.common.typing import Fab, Run
|
|
50
46
|
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
|
51
47
|
from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
@@ -361,15 +357,9 @@ def http_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
|
361
357
|
# Send the request
|
|
362
358
|
res = _request(req, GetRunResponse, PATH_GET_RUN)
|
|
363
359
|
if res is None:
|
|
364
|
-
return Run(run_id
|
|
365
|
-
|
|
366
|
-
return
|
|
367
|
-
run_id,
|
|
368
|
-
res.run.fab_id,
|
|
369
|
-
res.run.fab_version,
|
|
370
|
-
res.run.fab_hash,
|
|
371
|
-
user_config_from_proto(res.run.override_config),
|
|
372
|
-
)
|
|
360
|
+
return Run.create_empty(run_id)
|
|
361
|
+
|
|
362
|
+
return run_from_proto(res.run)
|
|
373
363
|
|
|
374
364
|
def get_fab(fab_hash: str) -> Fab:
|
|
375
365
|
# Construct the request
|
|
@@ -28,7 +28,10 @@ from cryptography.hazmat.primitives.serialization import (
|
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
from flwr.common import EventType, event
|
|
31
|
-
from flwr.common.args import
|
|
31
|
+
from flwr.common.args import (
|
|
32
|
+
try_obtain_root_certificates,
|
|
33
|
+
try_obtain_server_certificates,
|
|
34
|
+
)
|
|
32
35
|
from flwr.common.config import parse_config_args
|
|
33
36
|
from flwr.common.constant import (
|
|
34
37
|
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
|
@@ -63,6 +66,8 @@ def run_supernode() -> None:
|
|
|
63
66
|
)
|
|
64
67
|
|
|
65
68
|
root_certificates = try_obtain_root_certificates(args, args.superlink)
|
|
69
|
+
# Obtain certificates for ClientAppIo API server
|
|
70
|
+
server_certificates = try_obtain_server_certificates(args, TRANSPORT_TYPE_GRPC_RERE)
|
|
66
71
|
load_fn = get_load_client_app_fn(
|
|
67
72
|
default_app_ref="",
|
|
68
73
|
app_path=args.app,
|
|
@@ -88,6 +93,8 @@ def run_supernode() -> None:
|
|
|
88
93
|
flwr_path=args.flwr_dir,
|
|
89
94
|
isolation=args.isolation,
|
|
90
95
|
supernode_address=args.supernode_address,
|
|
96
|
+
certificates=server_certificates,
|
|
97
|
+
ssl_ca_certfile=args.ssl_ca_certfile,
|
|
91
98
|
)
|
|
92
99
|
|
|
93
100
|
# Graceful shutdown
|
|
@@ -216,6 +223,25 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
216
223
|
help="Specifies the path to the PEM-encoded root certificate file for "
|
|
217
224
|
"establishing secure HTTPS connections.",
|
|
218
225
|
)
|
|
226
|
+
parser.add_argument(
|
|
227
|
+
"--ssl-certfile",
|
|
228
|
+
help="ClientAppIo API server SSL certificate file (as a path str) "
|
|
229
|
+
"to create a secure connection.",
|
|
230
|
+
type=str,
|
|
231
|
+
default=None,
|
|
232
|
+
)
|
|
233
|
+
parser.add_argument(
|
|
234
|
+
"--ssl-keyfile",
|
|
235
|
+
help="ClientAppIo API server SSL private key file (as a path str) "
|
|
236
|
+
"to create a secure connection.",
|
|
237
|
+
type=str,
|
|
238
|
+
)
|
|
239
|
+
parser.add_argument(
|
|
240
|
+
"--ssl-ca-certfile",
|
|
241
|
+
help="ClientAppIo API server SSL CA certificate file (as a path str) "
|
|
242
|
+
"to create a secure connection.",
|
|
243
|
+
type=str,
|
|
244
|
+
)
|
|
219
245
|
parser.add_argument(
|
|
220
246
|
"--server",
|
|
221
247
|
default=FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
{flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/serde.py
RENAMED
|
@@ -872,6 +872,11 @@ def run_to_proto(run: typing.Run) -> ProtoRun:
|
|
|
872
872
|
fab_version=run.fab_version,
|
|
873
873
|
fab_hash=run.fab_hash,
|
|
874
874
|
override_config=user_config_to_proto(run.override_config),
|
|
875
|
+
pending_at=run.pending_at,
|
|
876
|
+
starting_at=run.starting_at,
|
|
877
|
+
running_at=run.running_at,
|
|
878
|
+
finished_at=run.finished_at,
|
|
879
|
+
status=run_status_to_proto(run.status),
|
|
875
880
|
)
|
|
876
881
|
return proto
|
|
877
882
|
|
|
@@ -884,6 +889,11 @@ def run_from_proto(run_proto: ProtoRun) -> typing.Run:
|
|
|
884
889
|
fab_version=run_proto.fab_version,
|
|
885
890
|
fab_hash=run_proto.fab_hash,
|
|
886
891
|
override_config=user_config_from_proto(run_proto.override_config),
|
|
892
|
+
pending_at=run_proto.pending_at,
|
|
893
|
+
starting_at=run_proto.starting_at,
|
|
894
|
+
running_at=run_proto.running_at,
|
|
895
|
+
finished_at=run_proto.finished_at,
|
|
896
|
+
status=run_status_from_proto(run_proto.status),
|
|
887
897
|
)
|
|
888
898
|
return run
|
|
889
899
|
|
{flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/common/typing.py
RENAMED
|
@@ -208,7 +208,16 @@ class ClientMessage:
|
|
|
208
208
|
|
|
209
209
|
|
|
210
210
|
@dataclass
|
|
211
|
-
class
|
|
211
|
+
class RunStatus:
|
|
212
|
+
"""Run status information."""
|
|
213
|
+
|
|
214
|
+
status: str
|
|
215
|
+
sub_status: str
|
|
216
|
+
details: str
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
@dataclass
|
|
220
|
+
class Run: # pylint: disable=too-many-instance-attributes
|
|
212
221
|
"""Run details."""
|
|
213
222
|
|
|
214
223
|
run_id: int
|
|
@@ -216,15 +225,27 @@ class Run:
|
|
|
216
225
|
fab_version: str
|
|
217
226
|
fab_hash: str
|
|
218
227
|
override_config: UserConfig
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
+
pending_at: str
|
|
229
|
+
starting_at: str
|
|
230
|
+
running_at: str
|
|
231
|
+
finished_at: str
|
|
232
|
+
status: RunStatus
|
|
233
|
+
|
|
234
|
+
@classmethod
|
|
235
|
+
def create_empty(cls, run_id: int) -> "Run":
|
|
236
|
+
"""Return an empty Run instance."""
|
|
237
|
+
return cls(
|
|
238
|
+
run_id=run_id,
|
|
239
|
+
fab_id="",
|
|
240
|
+
fab_version="",
|
|
241
|
+
fab_hash="",
|
|
242
|
+
override_config={},
|
|
243
|
+
pending_at="",
|
|
244
|
+
starting_at="",
|
|
245
|
+
running_at="",
|
|
246
|
+
finished_at="",
|
|
247
|
+
status=RunStatus(status="", sub_status="", details=""),
|
|
248
|
+
)
|
|
228
249
|
|
|
229
250
|
|
|
230
251
|
@dataclass
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/exec.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.0
|
|
5
|
+
"""Generated protocol buffer code."""
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
16
|
+
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
17
|
+
from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
|
|
18
|
+
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x14\x66lwr/proto/run.proto\"\xfb\x01\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12\x35\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x19.flwr.proto.ConfigsRecord\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\"1\n\x0fListRunsRequest\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"\x9d\x01\n\x10ListRunsResponse\x12;\n\x08run_dict\x18\x01 \x03(\x0b\x32).flwr.proto.ListRunsResponse.RunDictEntry\x12\x0b\n\x03now\x18\x02 \x01(\t\x1a?\n\x0cRunDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run:\x02\x38\x01\x32\xe9\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x12G\n\x08ListRuns\x12\x1b.flwr.proto.ListRunsRequest\x1a\x1c.flwr.proto.ListRunsResponse\"\x00\x62\x06proto3')
|
|
22
|
+
|
|
23
|
+
_globals = globals()
|
|
24
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
25
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.exec_pb2', _globals)
|
|
26
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
27
|
+
DESCRIPTOR._options = None
|
|
28
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._options = None
|
|
29
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
30
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._options = None
|
|
31
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_options = b'8\001'
|
|
32
|
+
_globals['_STARTRUNREQUEST']._serialized_start=138
|
|
33
|
+
_globals['_STARTRUNREQUEST']._serialized_end=389
|
|
34
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=316
|
|
35
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=389
|
|
36
|
+
_globals['_STARTRUNRESPONSE']._serialized_start=391
|
|
37
|
+
_globals['_STARTRUNRESPONSE']._serialized_end=425
|
|
38
|
+
_globals['_STREAMLOGSREQUEST']._serialized_start=427
|
|
39
|
+
_globals['_STREAMLOGSREQUEST']._serialized_end=487
|
|
40
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_start=489
|
|
41
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_end=555
|
|
42
|
+
_globals['_LISTRUNSREQUEST']._serialized_start=557
|
|
43
|
+
_globals['_LISTRUNSREQUEST']._serialized_end=606
|
|
44
|
+
_globals['_LISTRUNSRESPONSE']._serialized_start=609
|
|
45
|
+
_globals['_LISTRUNSRESPONSE']._serialized_end=766
|
|
46
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_start=703
|
|
47
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_end=766
|
|
48
|
+
_globals['_EXEC']._serialized_start=769
|
|
49
|
+
_globals['_EXEC']._serialized_end=1002
|
|
50
|
+
# @@protoc_insertion_point(module_scope)
|
{flwr_nightly-1.13.0.dev20241113 → flwr_nightly-1.13.0.dev20241114}/src/py/flwr/proto/exec_pb2.pyi
RENAMED
|
@@ -5,6 +5,7 @@ isort:skip_file
|
|
|
5
5
|
import builtins
|
|
6
6
|
import flwr.proto.fab_pb2
|
|
7
7
|
import flwr.proto.recordset_pb2
|
|
8
|
+
import flwr.proto.run_pb2
|
|
8
9
|
import flwr.proto.transport_pb2
|
|
9
10
|
import google.protobuf.descriptor
|
|
10
11
|
import google.protobuf.internal.containers
|
|
@@ -88,3 +89,46 @@ class StreamLogsResponse(google.protobuf.message.Message):
|
|
|
88
89
|
) -> None: ...
|
|
89
90
|
def ClearField(self, field_name: typing_extensions.Literal["latest_timestamp",b"latest_timestamp","log_output",b"log_output"]) -> None: ...
|
|
90
91
|
global___StreamLogsResponse = StreamLogsResponse
|
|
92
|
+
|
|
93
|
+
class ListRunsRequest(google.protobuf.message.Message):
|
|
94
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
95
|
+
RUN_ID_FIELD_NUMBER: builtins.int
|
|
96
|
+
run_id: builtins.int
|
|
97
|
+
def __init__(self,
|
|
98
|
+
*,
|
|
99
|
+
run_id: typing.Optional[builtins.int] = ...,
|
|
100
|
+
) -> None: ...
|
|
101
|
+
def HasField(self, field_name: typing_extensions.Literal["_run_id",b"_run_id","run_id",b"run_id"]) -> builtins.bool: ...
|
|
102
|
+
def ClearField(self, field_name: typing_extensions.Literal["_run_id",b"_run_id","run_id",b"run_id"]) -> None: ...
|
|
103
|
+
def WhichOneof(self, oneof_group: typing_extensions.Literal["_run_id",b"_run_id"]) -> typing.Optional[typing_extensions.Literal["run_id"]]: ...
|
|
104
|
+
global___ListRunsRequest = ListRunsRequest
|
|
105
|
+
|
|
106
|
+
class ListRunsResponse(google.protobuf.message.Message):
|
|
107
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
108
|
+
class RunDictEntry(google.protobuf.message.Message):
|
|
109
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
110
|
+
KEY_FIELD_NUMBER: builtins.int
|
|
111
|
+
VALUE_FIELD_NUMBER: builtins.int
|
|
112
|
+
key: builtins.int
|
|
113
|
+
@property
|
|
114
|
+
def value(self) -> flwr.proto.run_pb2.Run: ...
|
|
115
|
+
def __init__(self,
|
|
116
|
+
*,
|
|
117
|
+
key: builtins.int = ...,
|
|
118
|
+
value: typing.Optional[flwr.proto.run_pb2.Run] = ...,
|
|
119
|
+
) -> None: ...
|
|
120
|
+
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
121
|
+
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
122
|
+
|
|
123
|
+
RUN_DICT_FIELD_NUMBER: builtins.int
|
|
124
|
+
NOW_FIELD_NUMBER: builtins.int
|
|
125
|
+
@property
|
|
126
|
+
def run_dict(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, flwr.proto.run_pb2.Run]: ...
|
|
127
|
+
now: typing.Text
|
|
128
|
+
def __init__(self,
|
|
129
|
+
*,
|
|
130
|
+
run_dict: typing.Optional[typing.Mapping[builtins.int, flwr.proto.run_pb2.Run]] = ...,
|
|
131
|
+
now: typing.Text = ...,
|
|
132
|
+
) -> None: ...
|
|
133
|
+
def ClearField(self, field_name: typing_extensions.Literal["now",b"now","run_dict",b"run_dict"]) -> None: ...
|
|
134
|
+
global___ListRunsResponse = ListRunsResponse
|