flwr-nightly 1.10.0.dev20240614__tar.gz → 1.10.0.dev20240617__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.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/PKG-INFO +1 -1
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/pyproject.toml +1 -1
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/run/run.py +1 -1
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/supernode/app.py +18 -44
- flwr_nightly-1.10.0.dev20240617/src/py/flwr/common/config.py +71 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/constant.py +5 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2.py +7 -3
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2.pyi +23 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2_grpc.py +34 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2_grpc.pyi +14 -0
- flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/fab_pb2.py +30 -0
- flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/fab_pb2.pyi +56 -0
- flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/task_pb2_grpc.py +4 -0
- flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/task_pb2_grpc.pyi +4 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/run_serverapp.py +1 -1
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +2 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/exec_servicer.py +12 -1
- flwr_nightly-1.10.0.dev20240614/src/py/flwr/common/config.py +0 -28
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/LICENSE +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/README.md +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.hf.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.hf.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.hf.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.hf.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/node_state.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/node_pb2_grpc.py → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/node_pb2_grpc.pyi → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/node_pb2.pyi +0 -0
- /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/recordset_pb2_grpc.py → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/recordset_pb2_grpc.pyi → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/run_pb2_grpc.py → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/run_pb2_grpc.pyi → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/run_pb2.pyi +0 -0
- /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/task_pb2_grpc.py → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- /flwr_nightly-1.10.0.dev20240614/src/py/flwr/proto/task_pb2_grpc.pyi → /flwr_nightly-1.10.0.dev20240617/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/superlink/state/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/superexec/executor.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.10.0.
|
|
7
|
+
version = "1.10.0.dev20240617"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/run/run.py
RENAMED
|
@@ -41,7 +41,7 @@ class Engine(str, Enum):
|
|
|
41
41
|
def run(
|
|
42
42
|
engine: Annotated[
|
|
43
43
|
Optional[Engine],
|
|
44
|
-
typer.Option(case_sensitive=False, help="The
|
|
44
|
+
typer.Option(case_sensitive=False, help="The execution engine to run the app"),
|
|
45
45
|
] = None,
|
|
46
46
|
use_superexec: Annotated[
|
|
47
47
|
bool,
|
|
@@ -20,7 +20,6 @@ from logging import DEBUG, INFO, WARN
|
|
|
20
20
|
from pathlib import Path
|
|
21
21
|
from typing import Callable, Optional, Tuple
|
|
22
22
|
|
|
23
|
-
import tomli
|
|
24
23
|
from cryptography.exceptions import UnsupportedAlgorithm
|
|
25
24
|
from cryptography.hazmat.primitives.asymmetric import ec
|
|
26
25
|
from cryptography.hazmat.primitives.serialization import (
|
|
@@ -28,10 +27,9 @@ from cryptography.hazmat.primitives.serialization import (
|
|
|
28
27
|
load_ssh_public_key,
|
|
29
28
|
)
|
|
30
29
|
|
|
31
|
-
from flwr.cli.config_utils import validate_fields
|
|
32
30
|
from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
33
31
|
from flwr.common import EventType, event
|
|
34
|
-
from flwr.common.config import get_flwr_dir
|
|
32
|
+
from flwr.common.config import get_flwr_dir, get_project_config, get_project_dir
|
|
35
33
|
from flwr.common.exit_handlers import register_exit_handlers
|
|
36
34
|
from flwr.common.logger import log, warn_deprecated_feature
|
|
37
35
|
from flwr.common.object_ref import load_app, validate
|
|
@@ -56,7 +54,7 @@ def run_supernode() -> None:
|
|
|
56
54
|
authentication_keys = _try_setup_client_authentication(args)
|
|
57
55
|
|
|
58
56
|
_start_client_internal(
|
|
59
|
-
server_address=args.
|
|
57
|
+
server_address=args.superlink,
|
|
60
58
|
load_client_app_fn=load_fn,
|
|
61
59
|
transport="rest" if args.rest else "grpc-rere",
|
|
62
60
|
root_certificates=root_certificates,
|
|
@@ -172,9 +170,9 @@ def _get_load_client_app_fn(
|
|
|
172
170
|
if args.flwr_dir is None:
|
|
173
171
|
flwr_dir = get_flwr_dir()
|
|
174
172
|
else:
|
|
175
|
-
flwr_dir = Path(args.flwr_dir)
|
|
173
|
+
flwr_dir = Path(args.flwr_dir).absolute()
|
|
176
174
|
|
|
177
|
-
sys.path.insert(0, str(flwr_dir))
|
|
175
|
+
sys.path.insert(0, str(flwr_dir.absolute()))
|
|
178
176
|
|
|
179
177
|
default_app_ref: str = getattr(args, "client-app")
|
|
180
178
|
|
|
@@ -191,8 +189,8 @@ def _get_load_client_app_fn(
|
|
|
191
189
|
def _load(fab_id: str, fab_version: str) -> ClientApp:
|
|
192
190
|
# If multi-app feature is disabled
|
|
193
191
|
if not multi_app:
|
|
194
|
-
#
|
|
195
|
-
|
|
192
|
+
# Get sys path to be inserted
|
|
193
|
+
sys_path = Path(args.dir).absolute()
|
|
196
194
|
|
|
197
195
|
# Set app reference
|
|
198
196
|
client_app_ref = default_app_ref
|
|
@@ -204,52 +202,28 @@ def _get_load_client_app_fn(
|
|
|
204
202
|
) from None
|
|
205
203
|
|
|
206
204
|
log(WARN, "FAB ID is not provided; the default ClientApp will be loaded.")
|
|
207
|
-
#
|
|
208
|
-
|
|
205
|
+
# Get sys path to be inserted
|
|
206
|
+
sys_path = Path(args.dir).absolute()
|
|
209
207
|
|
|
210
208
|
# Set app reference
|
|
211
209
|
client_app_ref = default_app_ref
|
|
212
210
|
# If multi-app feature is enabled
|
|
213
211
|
else:
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
) from
|
|
219
|
-
username, project_name = fab_id.split("/")
|
|
220
|
-
|
|
221
|
-
# Locate the directory
|
|
222
|
-
project_dir = flwr_dir / "apps" / username / project_name / fab_version
|
|
223
|
-
|
|
224
|
-
# Check if the directory exists
|
|
225
|
-
if not project_dir.exists():
|
|
226
|
-
raise LoadClientAppError(
|
|
227
|
-
f"Invalid Flower App directory: {project_dir}",
|
|
228
|
-
) from None
|
|
212
|
+
try:
|
|
213
|
+
project_dir = get_project_dir(fab_id, fab_version, flwr_dir)
|
|
214
|
+
config = get_project_config(project_dir)
|
|
215
|
+
except Exception as e:
|
|
216
|
+
raise LoadClientAppError("Failed to load ClientApp") from e
|
|
229
217
|
|
|
230
|
-
#
|
|
231
|
-
|
|
232
|
-
if not toml_path.is_file():
|
|
233
|
-
raise LoadClientAppError(
|
|
234
|
-
f"Cannot find pyproject.toml in {project_dir}",
|
|
235
|
-
) from None
|
|
236
|
-
with open(toml_path, encoding="utf-8") as toml_file:
|
|
237
|
-
config = tomli.loads(toml_file.read())
|
|
238
|
-
|
|
239
|
-
# Validate pyproject.toml fields
|
|
240
|
-
is_valid, errors, _ = validate_fields(config)
|
|
241
|
-
if not is_valid:
|
|
242
|
-
error_msg = "\n".join([f" - {error}" for error in errors])
|
|
243
|
-
raise LoadClientAppError(
|
|
244
|
-
f"Invalid pyproject.toml:\n{error_msg}",
|
|
245
|
-
) from None
|
|
246
|
-
|
|
247
|
-
# Set sys.path
|
|
248
|
-
sys.path[0] = str(project_dir)
|
|
218
|
+
# Get sys path to be inserted
|
|
219
|
+
sys_path = Path(project_dir).absolute()
|
|
249
220
|
|
|
250
221
|
# Set app reference
|
|
251
222
|
client_app_ref = config["flower"]["components"]["clientapp"]
|
|
252
223
|
|
|
224
|
+
# Set sys.path
|
|
225
|
+
sys.path.insert(0, str(sys_path))
|
|
226
|
+
|
|
253
227
|
# Load ClientApp
|
|
254
228
|
log(
|
|
255
229
|
DEBUG,
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
"""Provide functions for managing global Flower config."""
|
|
16
|
+
|
|
17
|
+
import os
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Any, Dict, Optional, Union
|
|
20
|
+
|
|
21
|
+
import tomli
|
|
22
|
+
|
|
23
|
+
from flwr.cli.config_utils import validate_fields
|
|
24
|
+
from flwr.common.constant import APP_DIR, FAB_CONFIG_FILE, FLWR_HOME
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def get_flwr_dir() -> Path:
|
|
28
|
+
"""Return the Flower home directory based on env variables."""
|
|
29
|
+
return Path(
|
|
30
|
+
os.getenv(
|
|
31
|
+
FLWR_HOME,
|
|
32
|
+
f"{os.getenv('XDG_DATA_HOME', os.getenv('HOME'))}/.flwr",
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def get_project_dir(
|
|
38
|
+
fab_id: str, fab_version: str, flwr_dir: Optional[Union[str, Path]] = None
|
|
39
|
+
) -> Path:
|
|
40
|
+
"""Return the project directory based on the given fab_id and fab_version."""
|
|
41
|
+
# Check the fab_id
|
|
42
|
+
if fab_id.count("/") != 1:
|
|
43
|
+
raise ValueError(
|
|
44
|
+
f"Invalid FAB ID: {fab_id}",
|
|
45
|
+
)
|
|
46
|
+
publisher, project_name = fab_id.split("/")
|
|
47
|
+
if flwr_dir is None:
|
|
48
|
+
flwr_dir = get_flwr_dir()
|
|
49
|
+
return Path(flwr_dir) / APP_DIR / publisher / project_name / fab_version
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def get_project_config(project_dir: Union[str, Path]) -> Dict[str, Any]:
|
|
53
|
+
"""Return pyproject.toml in the given project directory."""
|
|
54
|
+
# Load pyproject.toml file
|
|
55
|
+
toml_path = Path(project_dir) / FAB_CONFIG_FILE
|
|
56
|
+
if not toml_path.is_file():
|
|
57
|
+
raise FileNotFoundError(
|
|
58
|
+
f"Cannot find {FAB_CONFIG_FILE} in {project_dir}",
|
|
59
|
+
)
|
|
60
|
+
with toml_path.open(encoding="utf-8") as toml_file:
|
|
61
|
+
config = tomli.loads(toml_file.read())
|
|
62
|
+
|
|
63
|
+
# Validate pyproject.toml fields
|
|
64
|
+
is_valid, errors, _ = validate_fields(config)
|
|
65
|
+
if not is_valid:
|
|
66
|
+
error_msg = "\n".join([f" - {error}" for error in errors])
|
|
67
|
+
raise ValueError(
|
|
68
|
+
f"Invalid {FAB_CONFIG_FILE}:\n{error_msg}",
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
return config
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2.py
RENAMED
|
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\"#\n\x0fStartRunRequest\x12\x10\n\x08\x66\x61\x62_file\x18\x01 \x01(\x0c\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\"#\n\x0fStartRunRequest\x12\x10\n\x08\x66\x61\x62_file\x18\x01 \x01(\x0c\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"#\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"(\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t2\xa0\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\x62\x06proto3')
|
|
18
18
|
|
|
19
19
|
_globals = globals()
|
|
20
20
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -25,6 +25,10 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
25
25
|
_globals['_STARTRUNREQUEST']._serialized_end=72
|
|
26
26
|
_globals['_STARTRUNRESPONSE']._serialized_start=74
|
|
27
27
|
_globals['_STARTRUNRESPONSE']._serialized_end=108
|
|
28
|
-
_globals['
|
|
29
|
-
_globals['
|
|
28
|
+
_globals['_STREAMLOGSREQUEST']._serialized_start=110
|
|
29
|
+
_globals['_STREAMLOGSREQUEST']._serialized_end=145
|
|
30
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_start=147
|
|
31
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_end=187
|
|
32
|
+
_globals['_EXEC']._serialized_start=190
|
|
33
|
+
_globals['_EXEC']._serialized_end=350
|
|
30
34
|
# @@protoc_insertion_point(module_scope)
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/proto/exec_pb2.pyi
RENAMED
|
@@ -5,6 +5,7 @@ isort:skip_file
|
|
|
5
5
|
import builtins
|
|
6
6
|
import google.protobuf.descriptor
|
|
7
7
|
import google.protobuf.message
|
|
8
|
+
import typing
|
|
8
9
|
import typing_extensions
|
|
9
10
|
|
|
10
11
|
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
@@ -30,3 +31,25 @@ class StartRunResponse(google.protobuf.message.Message):
|
|
|
30
31
|
) -> None: ...
|
|
31
32
|
def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
|
|
32
33
|
global___StartRunResponse = StartRunResponse
|
|
34
|
+
|
|
35
|
+
class StreamLogsRequest(google.protobuf.message.Message):
|
|
36
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
37
|
+
RUN_ID_FIELD_NUMBER: builtins.int
|
|
38
|
+
run_id: builtins.int
|
|
39
|
+
def __init__(self,
|
|
40
|
+
*,
|
|
41
|
+
run_id: builtins.int = ...,
|
|
42
|
+
) -> None: ...
|
|
43
|
+
def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
|
|
44
|
+
global___StreamLogsRequest = StreamLogsRequest
|
|
45
|
+
|
|
46
|
+
class StreamLogsResponse(google.protobuf.message.Message):
|
|
47
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
48
|
+
LOG_OUTPUT_FIELD_NUMBER: builtins.int
|
|
49
|
+
log_output: typing.Text
|
|
50
|
+
def __init__(self,
|
|
51
|
+
*,
|
|
52
|
+
log_output: typing.Text = ...,
|
|
53
|
+
) -> None: ...
|
|
54
|
+
def ClearField(self, field_name: typing_extensions.Literal["log_output",b"log_output"]) -> None: ...
|
|
55
|
+
global___StreamLogsResponse = StreamLogsResponse
|
|
@@ -19,6 +19,11 @@ class ExecStub(object):
|
|
|
19
19
|
request_serializer=flwr_dot_proto_dot_exec__pb2.StartRunRequest.SerializeToString,
|
|
20
20
|
response_deserializer=flwr_dot_proto_dot_exec__pb2.StartRunResponse.FromString,
|
|
21
21
|
)
|
|
22
|
+
self.StreamLogs = channel.unary_stream(
|
|
23
|
+
'/flwr.proto.Exec/StreamLogs',
|
|
24
|
+
request_serializer=flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.SerializeToString,
|
|
25
|
+
response_deserializer=flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.FromString,
|
|
26
|
+
)
|
|
22
27
|
|
|
23
28
|
|
|
24
29
|
class ExecServicer(object):
|
|
@@ -31,6 +36,13 @@ class ExecServicer(object):
|
|
|
31
36
|
context.set_details('Method not implemented!')
|
|
32
37
|
raise NotImplementedError('Method not implemented!')
|
|
33
38
|
|
|
39
|
+
def StreamLogs(self, request, context):
|
|
40
|
+
"""Start log stream upon request
|
|
41
|
+
"""
|
|
42
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
43
|
+
context.set_details('Method not implemented!')
|
|
44
|
+
raise NotImplementedError('Method not implemented!')
|
|
45
|
+
|
|
34
46
|
|
|
35
47
|
def add_ExecServicer_to_server(servicer, server):
|
|
36
48
|
rpc_method_handlers = {
|
|
@@ -39,6 +51,11 @@ def add_ExecServicer_to_server(servicer, server):
|
|
|
39
51
|
request_deserializer=flwr_dot_proto_dot_exec__pb2.StartRunRequest.FromString,
|
|
40
52
|
response_serializer=flwr_dot_proto_dot_exec__pb2.StartRunResponse.SerializeToString,
|
|
41
53
|
),
|
|
54
|
+
'StreamLogs': grpc.unary_stream_rpc_method_handler(
|
|
55
|
+
servicer.StreamLogs,
|
|
56
|
+
request_deserializer=flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.FromString,
|
|
57
|
+
response_serializer=flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.SerializeToString,
|
|
58
|
+
),
|
|
42
59
|
}
|
|
43
60
|
generic_handler = grpc.method_handlers_generic_handler(
|
|
44
61
|
'flwr.proto.Exec', rpc_method_handlers)
|
|
@@ -65,3 +82,20 @@ class Exec(object):
|
|
|
65
82
|
flwr_dot_proto_dot_exec__pb2.StartRunResponse.FromString,
|
|
66
83
|
options, channel_credentials,
|
|
67
84
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
85
|
+
|
|
86
|
+
@staticmethod
|
|
87
|
+
def StreamLogs(request,
|
|
88
|
+
target,
|
|
89
|
+
options=(),
|
|
90
|
+
channel_credentials=None,
|
|
91
|
+
call_credentials=None,
|
|
92
|
+
insecure=False,
|
|
93
|
+
compression=None,
|
|
94
|
+
wait_for_ready=None,
|
|
95
|
+
timeout=None,
|
|
96
|
+
metadata=None):
|
|
97
|
+
return grpc.experimental.unary_stream(request, target, '/flwr.proto.Exec/StreamLogs',
|
|
98
|
+
flwr_dot_proto_dot_exec__pb2.StreamLogsRequest.SerializeToString,
|
|
99
|
+
flwr_dot_proto_dot_exec__pb2.StreamLogsResponse.FromString,
|
|
100
|
+
options, channel_credentials,
|
|
101
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
@@ -5,6 +5,7 @@ isort:skip_file
|
|
|
5
5
|
import abc
|
|
6
6
|
import flwr.proto.exec_pb2
|
|
7
7
|
import grpc
|
|
8
|
+
import typing
|
|
8
9
|
|
|
9
10
|
class ExecStub:
|
|
10
11
|
def __init__(self, channel: grpc.Channel) -> None: ...
|
|
@@ -13,6 +14,11 @@ class ExecStub:
|
|
|
13
14
|
flwr.proto.exec_pb2.StartRunResponse]
|
|
14
15
|
"""Start run upon request"""
|
|
15
16
|
|
|
17
|
+
StreamLogs: grpc.UnaryStreamMultiCallable[
|
|
18
|
+
flwr.proto.exec_pb2.StreamLogsRequest,
|
|
19
|
+
flwr.proto.exec_pb2.StreamLogsResponse]
|
|
20
|
+
"""Start log stream upon request"""
|
|
21
|
+
|
|
16
22
|
|
|
17
23
|
class ExecServicer(metaclass=abc.ABCMeta):
|
|
18
24
|
@abc.abstractmethod
|
|
@@ -23,5 +29,13 @@ class ExecServicer(metaclass=abc.ABCMeta):
|
|
|
23
29
|
"""Start run upon request"""
|
|
24
30
|
pass
|
|
25
31
|
|
|
32
|
+
@abc.abstractmethod
|
|
33
|
+
def StreamLogs(self,
|
|
34
|
+
request: flwr.proto.exec_pb2.StreamLogsRequest,
|
|
35
|
+
context: grpc.ServicerContext,
|
|
36
|
+
) -> typing.Iterator[flwr.proto.exec_pb2.StreamLogsResponse]:
|
|
37
|
+
"""Start log stream upon request"""
|
|
38
|
+
pass
|
|
39
|
+
|
|
26
40
|
|
|
27
41
|
def add_ExecServicer_to_server(servicer: ExecServicer, server: grpc.Server) -> None: ...
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/fab.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
|
+
|
|
16
|
+
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/fab.proto\x12\nflwr.proto\"$\n\x03\x46\x61\x62\x12\x0c\n\x04hash\x18\x01 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x02 \x01(\x0c\"\x1d\n\rGetFabRequest\x12\x0c\n\x04hash\x18\x01 \x01(\t\".\n\x0eGetFabResponse\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fabb\x06proto3')
|
|
18
|
+
|
|
19
|
+
_globals = globals()
|
|
20
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
21
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fab_pb2', _globals)
|
|
22
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
23
|
+
DESCRIPTOR._options = None
|
|
24
|
+
_globals['_FAB']._serialized_start=36
|
|
25
|
+
_globals['_FAB']._serialized_end=72
|
|
26
|
+
_globals['_GETFABREQUEST']._serialized_start=74
|
|
27
|
+
_globals['_GETFABREQUEST']._serialized_end=103
|
|
28
|
+
_globals['_GETFABRESPONSE']._serialized_start=105
|
|
29
|
+
_globals['_GETFABRESPONSE']._serialized_end=151
|
|
30
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""
|
|
2
|
+
@generated by mypy-protobuf. Do not edit manually!
|
|
3
|
+
isort:skip_file
|
|
4
|
+
"""
|
|
5
|
+
import builtins
|
|
6
|
+
import google.protobuf.descriptor
|
|
7
|
+
import google.protobuf.message
|
|
8
|
+
import typing
|
|
9
|
+
import typing_extensions
|
|
10
|
+
|
|
11
|
+
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
12
|
+
|
|
13
|
+
class Fab(google.protobuf.message.Message):
|
|
14
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
15
|
+
HASH_FIELD_NUMBER: builtins.int
|
|
16
|
+
CONTENT_FIELD_NUMBER: builtins.int
|
|
17
|
+
hash: typing.Text
|
|
18
|
+
"""This field is the hash of the data field. It is used to identify the data.
|
|
19
|
+
The hash is calculated using the SHA-256 algorithm and is represented as a
|
|
20
|
+
hex string (sha256hex).
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
content: builtins.bytes
|
|
24
|
+
"""This field contains the fab file contents a one bytes blob."""
|
|
25
|
+
|
|
26
|
+
def __init__(self,
|
|
27
|
+
*,
|
|
28
|
+
hash: typing.Text = ...,
|
|
29
|
+
content: builtins.bytes = ...,
|
|
30
|
+
) -> None: ...
|
|
31
|
+
def ClearField(self, field_name: typing_extensions.Literal["content",b"content","hash",b"hash"]) -> None: ...
|
|
32
|
+
global___Fab = Fab
|
|
33
|
+
|
|
34
|
+
class GetFabRequest(google.protobuf.message.Message):
|
|
35
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
36
|
+
HASH_FIELD_NUMBER: builtins.int
|
|
37
|
+
hash: typing.Text
|
|
38
|
+
def __init__(self,
|
|
39
|
+
*,
|
|
40
|
+
hash: typing.Text = ...,
|
|
41
|
+
) -> None: ...
|
|
42
|
+
def ClearField(self, field_name: typing_extensions.Literal["hash",b"hash"]) -> None: ...
|
|
43
|
+
global___GetFabRequest = GetFabRequest
|
|
44
|
+
|
|
45
|
+
class GetFabResponse(google.protobuf.message.Message):
|
|
46
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
47
|
+
FAB_FIELD_NUMBER: builtins.int
|
|
48
|
+
@property
|
|
49
|
+
def fab(self) -> global___Fab: ...
|
|
50
|
+
def __init__(self,
|
|
51
|
+
*,
|
|
52
|
+
fab: typing.Optional[global___Fab] = ...,
|
|
53
|
+
) -> None: ...
|
|
54
|
+
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
|
|
55
|
+
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> None: ...
|
|
56
|
+
global___GetFabResponse = GetFabResponse
|
|
@@ -20,6 +20,7 @@ import sys
|
|
|
20
20
|
import time
|
|
21
21
|
import traceback
|
|
22
22
|
from logging import DEBUG, ERROR, INFO, WARN
|
|
23
|
+
from pathlib import Path
|
|
23
24
|
from typing import Callable, Dict, List, Optional
|
|
24
25
|
|
|
25
26
|
from flwr.client.client_app import ClientApp, ClientAppException, LoadClientAppError
|
|
@@ -274,6 +275,7 @@ def start_vce(
|
|
|
274
275
|
# Use mapping constructed externally. This also means nodes
|
|
275
276
|
# have previously being registered.
|
|
276
277
|
nodes_mapping = existing_nodes_mapping
|
|
278
|
+
app_dir = str(Path(app_dir).absolute())
|
|
277
279
|
|
|
278
280
|
if not state_factory:
|
|
279
281
|
log(INFO, "A StateFactory was not supplied to the SimulationEngine.")
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
from logging import ERROR, INFO
|
|
19
|
-
from typing import Dict
|
|
19
|
+
from typing import Any, Dict, Generator
|
|
20
20
|
|
|
21
21
|
import grpc
|
|
22
22
|
|
|
@@ -25,6 +25,8 @@ from flwr.proto import exec_pb2_grpc # pylint: disable=E0611
|
|
|
25
25
|
from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
26
26
|
StartRunRequest,
|
|
27
27
|
StartRunResponse,
|
|
28
|
+
StreamLogsRequest,
|
|
29
|
+
StreamLogsResponse,
|
|
28
30
|
)
|
|
29
31
|
|
|
30
32
|
from .executor import Executor, RunTracker
|
|
@@ -52,3 +54,12 @@ class ExecServicer(exec_pb2_grpc.ExecServicer):
|
|
|
52
54
|
self.runs[run.run_id] = run
|
|
53
55
|
|
|
54
56
|
return StartRunResponse(run_id=run.run_id)
|
|
57
|
+
|
|
58
|
+
def StreamLogs(
|
|
59
|
+
self, request: StreamLogsRequest, context: grpc.ServicerContext
|
|
60
|
+
) -> Generator[StreamLogsResponse, Any, None]:
|
|
61
|
+
"""Get logs."""
|
|
62
|
+
logs = ["a", "b", "c"]
|
|
63
|
+
while context.is_active():
|
|
64
|
+
for i in range(len(logs)): # pylint: disable=C0200
|
|
65
|
+
yield StreamLogsResponse(log_output=logs[i])
|
|
@@ -1,28 +0,0 @@
|
|
|
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
|
-
"""Provide functions for managing global Flower config."""
|
|
16
|
-
|
|
17
|
-
import os
|
|
18
|
-
from pathlib import Path
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def get_flwr_dir() -> Path:
|
|
22
|
-
"""Return the Flower home directory based on env variables."""
|
|
23
|
-
return Path(
|
|
24
|
-
os.getenv(
|
|
25
|
-
"FLWR_HOME",
|
|
26
|
-
f"{os.getenv('XDG_DATA_HOME', os.getenv('HOME'))}/.flwr",
|
|
27
|
-
)
|
|
28
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/build.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/config_utils.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/example.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/install.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/src/py/flwr/cli/new/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240614 → flwr_nightly-1.10.0.dev20240617}/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
|