flwr 1.15.0__tar.gz → 1.15.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flwr-1.15.0 → flwr-1.15.1}/PKG-INFO +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/pyproject.toml +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +2 -2
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/utils.py +2 -2
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/constant.py +9 -7
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/exit_handlers.py +17 -29
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/object_ref.py +0 -14
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/app.py +2 -2
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +17 -4
- {flwr-1.15.0 → flwr-1.15.1}/LICENSE +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/README.md +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/build.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/constant.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/example.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/install.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/log.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/login/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/login/login.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/ls.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/new.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/run/run.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/stop.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/client.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/client_app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/nodestate/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/nodestate/nodestate.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/client/typing.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/address.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/args.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/config.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/context.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/date.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/dp.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/exit/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/exit/exit.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/exit/exit_code.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/logger.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/message.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/parameter.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/pyproject.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/serde.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/telemetry.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/typing.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/common/version.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/py.typed +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/client_manager.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/criterion.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/history.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/server.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/server_app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/server_config.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/serverapp/app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/typing.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/legacy_app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/app.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/deployment.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/executor.py +0 -0
- {flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/superexec/simulation.py +0 -0
|
@@ -26,7 +26,7 @@ import typer
|
|
|
26
26
|
from flwr.common.auth_plugin import CliAuthPlugin
|
|
27
27
|
from flwr.common.constant import (
|
|
28
28
|
ACCESS_TOKEN_KEY,
|
|
29
|
-
|
|
29
|
+
AUTH_TYPE_JSON_KEY,
|
|
30
30
|
REFRESH_TOKEN_KEY,
|
|
31
31
|
AuthType,
|
|
32
32
|
)
|
|
@@ -97,7 +97,7 @@ class OidcCliPlugin(CliAuthPlugin):
|
|
|
97
97
|
self.access_token = credentials.access_token
|
|
98
98
|
self.refresh_token = credentials.refresh_token
|
|
99
99
|
json_dict = {
|
|
100
|
-
|
|
100
|
+
AUTH_TYPE_JSON_KEY: AuthType.OIDC,
|
|
101
101
|
ACCESS_TOKEN_KEY: credentials.access_token,
|
|
102
102
|
REFRESH_TOKEN_KEY: credentials.refresh_token,
|
|
103
103
|
}
|
|
@@ -28,7 +28,7 @@ import typer
|
|
|
28
28
|
|
|
29
29
|
from flwr.cli.cli_user_auth_interceptor import CliUserAuthInterceptor
|
|
30
30
|
from flwr.common.auth_plugin import CliAuthPlugin
|
|
31
|
-
from flwr.common.constant import
|
|
31
|
+
from flwr.common.constant import AUTH_TYPE_JSON_KEY, CREDENTIALS_DIR, FLWR_DIR
|
|
32
32
|
from flwr.common.grpc import (
|
|
33
33
|
GRPC_MAX_MESSAGE_LENGTH,
|
|
34
34
|
create_channel,
|
|
@@ -239,7 +239,7 @@ def try_obtain_cli_auth_plugin(
|
|
|
239
239
|
try:
|
|
240
240
|
with config_path.open("r", encoding="utf-8") as file:
|
|
241
241
|
json_file = json.load(file)
|
|
242
|
-
auth_type = json_file[
|
|
242
|
+
auth_type = json_file[AUTH_TYPE_JSON_KEY]
|
|
243
243
|
except (FileNotFoundError, KeyError):
|
|
244
244
|
typer.secho(
|
|
245
245
|
"❌ Missing or invalid credentials for user authentication. "
|
|
@@ -108,15 +108,17 @@ MAX_RETRY_DELAY = 20 # Maximum delay duration between two consecutive retries.
|
|
|
108
108
|
|
|
109
109
|
# Constants for user authentication
|
|
110
110
|
CREDENTIALS_DIR = ".credentials"
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
111
|
+
AUTH_TYPE_JSON_KEY = "auth-type" # For key name in JSON file
|
|
112
|
+
AUTH_TYPE_YAML_KEY = "auth_type" # For key name in YAML file
|
|
113
|
+
ACCESS_TOKEN_KEY = "flwr-oidc-access-token"
|
|
114
|
+
REFRESH_TOKEN_KEY = "flwr-oidc-refresh-token"
|
|
114
115
|
|
|
115
116
|
# Constants for node authentication
|
|
116
|
-
PUBLIC_KEY_HEADER = "public-key-bin" # Must end with "-bin" for binary data
|
|
117
|
-
SIGNATURE_HEADER = "signature-bin" # Must end with "-bin" for binary data
|
|
118
|
-
TIMESTAMP_HEADER = "timestamp"
|
|
119
|
-
TIMESTAMP_TOLERANCE = 10 #
|
|
117
|
+
PUBLIC_KEY_HEADER = "flwr-public-key-bin" # Must end with "-bin" for binary data
|
|
118
|
+
SIGNATURE_HEADER = "flwr-signature-bin" # Must end with "-bin" for binary data
|
|
119
|
+
TIMESTAMP_HEADER = "flwr-timestamp"
|
|
120
|
+
TIMESTAMP_TOLERANCE = 10 # General tolerance for timestamp verification
|
|
121
|
+
SYSTEM_TIME_TOLERANCE = 5 # Allowance for system time drift
|
|
120
122
|
|
|
121
123
|
|
|
122
124
|
class MessageType:
|
|
@@ -15,10 +15,10 @@
|
|
|
15
15
|
"""Common function to register exit handlers for server and client."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
import signal
|
|
19
19
|
from threading import Thread
|
|
20
20
|
from types import FrameType
|
|
21
|
-
from typing import Optional
|
|
21
|
+
from typing import Callable, Optional
|
|
22
22
|
|
|
23
23
|
from grpc import Server
|
|
24
24
|
|
|
@@ -26,12 +26,15 @@ from flwr.common.telemetry import EventType
|
|
|
26
26
|
|
|
27
27
|
from .exit import ExitCode, flwr_exit
|
|
28
28
|
|
|
29
|
-
SIGNAL_TO_EXIT_CODE = {
|
|
30
|
-
SIGINT: ExitCode.GRACEFUL_EXIT_SIGINT,
|
|
31
|
-
|
|
32
|
-
SIGTERM: ExitCode.GRACEFUL_EXIT_SIGTERM,
|
|
29
|
+
SIGNAL_TO_EXIT_CODE: dict[int, int] = {
|
|
30
|
+
signal.SIGINT: ExitCode.GRACEFUL_EXIT_SIGINT,
|
|
31
|
+
signal.SIGTERM: ExitCode.GRACEFUL_EXIT_SIGTERM,
|
|
33
32
|
}
|
|
34
33
|
|
|
34
|
+
# SIGQUIT is not available on Windows
|
|
35
|
+
if hasattr(signal, "SIGQUIT"):
|
|
36
|
+
SIGNAL_TO_EXIT_CODE[signal.SIGQUIT] = ExitCode.GRACEFUL_EXIT_SIGQUIT
|
|
37
|
+
|
|
35
38
|
|
|
36
39
|
def register_exit_handlers(
|
|
37
40
|
event_type: EventType,
|
|
@@ -54,23 +57,16 @@ def register_exit_handlers(
|
|
|
54
57
|
An optional list of threads that need to be gracefully
|
|
55
58
|
terminated before exiting.
|
|
56
59
|
"""
|
|
57
|
-
default_handlers = {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
SIGTERM: None,
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
def graceful_exit_handler( # type: ignore
|
|
64
|
-
signalnum,
|
|
65
|
-
frame: FrameType, # pylint: disable=unused-argument
|
|
66
|
-
) -> None:
|
|
60
|
+
default_handlers: dict[int, Callable[[int, FrameType], None]] = {}
|
|
61
|
+
|
|
62
|
+
def graceful_exit_handler(signalnum: int, _frame: FrameType) -> None:
|
|
67
63
|
"""Exit handler to be registered with `signal.signal`.
|
|
68
64
|
|
|
69
65
|
When called will reset signal handler to original signal handler from
|
|
70
66
|
default_handlers.
|
|
71
67
|
"""
|
|
72
68
|
# Reset to default handler
|
|
73
|
-
signal(signalnum, default_handlers[signalnum])
|
|
69
|
+
signal.signal(signalnum, default_handlers[signalnum]) # type: ignore
|
|
74
70
|
|
|
75
71
|
if grpc_servers is not None:
|
|
76
72
|
for grpc_server in grpc_servers:
|
|
@@ -87,15 +83,7 @@ def register_exit_handlers(
|
|
|
87
83
|
event_type=event_type,
|
|
88
84
|
)
|
|
89
85
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
graceful_exit_handler
|
|
93
|
-
|
|
94
|
-
default_handlers[SIGQUIT] = signal( # type: ignore
|
|
95
|
-
SIGQUIT,
|
|
96
|
-
graceful_exit_handler, # type: ignore
|
|
97
|
-
)
|
|
98
|
-
default_handlers[SIGTERM] = signal( # type: ignore
|
|
99
|
-
SIGTERM,
|
|
100
|
-
graceful_exit_handler, # type: ignore
|
|
101
|
-
)
|
|
86
|
+
# Register signal handlers
|
|
87
|
+
for sig in SIGNAL_TO_EXIT_CODE:
|
|
88
|
+
default_handler = signal.signal(sig, graceful_exit_handler) # type: ignore
|
|
89
|
+
default_handlers[sig] = default_handler # type: ignore
|
|
@@ -19,13 +19,10 @@ import ast
|
|
|
19
19
|
import importlib
|
|
20
20
|
import sys
|
|
21
21
|
from importlib.util import find_spec
|
|
22
|
-
from logging import WARN
|
|
23
22
|
from pathlib import Path
|
|
24
23
|
from threading import Lock
|
|
25
24
|
from typing import Any, Optional, Union
|
|
26
25
|
|
|
27
|
-
from .logger import log
|
|
28
|
-
|
|
29
26
|
OBJECT_REF_HELP_STR = """
|
|
30
27
|
\n\nThe object reference string should have the form <module>:<attribute>. Valid
|
|
31
28
|
examples include `client:app` and `project.package.module:wrapper.app`. It must
|
|
@@ -171,17 +168,6 @@ def load_app( # pylint: disable= too-many-branches
|
|
|
171
168
|
# Import the module
|
|
172
169
|
if module_str not in sys.modules:
|
|
173
170
|
module = importlib.import_module(module_str)
|
|
174
|
-
# Hack: `tabnet` does not work with `importlib.reload`
|
|
175
|
-
elif "tabnet" in sys.modules:
|
|
176
|
-
log(
|
|
177
|
-
WARN,
|
|
178
|
-
"Cannot reload module `%s` from disk due to compatibility issues "
|
|
179
|
-
"with the `tabnet` library. The module will be loaded from the "
|
|
180
|
-
"cache instead. If you experience issues, consider restarting "
|
|
181
|
-
"the application.",
|
|
182
|
-
module_str,
|
|
183
|
-
)
|
|
184
|
-
module = sys.modules[module_str]
|
|
185
171
|
else:
|
|
186
172
|
module = sys.modules[module_str]
|
|
187
173
|
_reload_modules(project_dir)
|
|
@@ -40,7 +40,7 @@ from flwr.common.args import try_obtain_server_certificates
|
|
|
40
40
|
from flwr.common.auth_plugin import ExecAuthPlugin
|
|
41
41
|
from flwr.common.config import get_flwr_dir, parse_config_args
|
|
42
42
|
from flwr.common.constant import (
|
|
43
|
-
|
|
43
|
+
AUTH_TYPE_YAML_KEY,
|
|
44
44
|
CLIENT_OCTET,
|
|
45
45
|
EXEC_API_DEFAULT_SERVER_ADDRESS,
|
|
46
46
|
FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
|
|
@@ -578,7 +578,7 @@ def _try_obtain_exec_auth_plugin(
|
|
|
578
578
|
|
|
579
579
|
# Load authentication configuration
|
|
580
580
|
auth_config: dict[str, Any] = config.get("authentication", {})
|
|
581
|
-
auth_type: str = auth_config.get(
|
|
581
|
+
auth_type: str = auth_config.get(AUTH_TYPE_YAML_KEY, "")
|
|
582
582
|
|
|
583
583
|
# Load authentication plugin
|
|
584
584
|
try:
|
{flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py
RENAMED
|
@@ -25,6 +25,7 @@ from flwr.common import now
|
|
|
25
25
|
from flwr.common.constant import (
|
|
26
26
|
PUBLIC_KEY_HEADER,
|
|
27
27
|
SIGNATURE_HEADER,
|
|
28
|
+
SYSTEM_TIME_TOLERANCE,
|
|
28
29
|
TIMESTAMP_HEADER,
|
|
29
30
|
TIMESTAMP_TOLERANCE,
|
|
30
31
|
)
|
|
@@ -38,10 +39,15 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
|
38
39
|
)
|
|
39
40
|
from flwr.server.superlink.linkstate import LinkStateFactory
|
|
40
41
|
|
|
42
|
+
MIN_TIMESTAMP_DIFF = -SYSTEM_TIME_TOLERANCE
|
|
43
|
+
MAX_TIMESTAMP_DIFF = TIMESTAMP_TOLERANCE + SYSTEM_TIME_TOLERANCE
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
|
|
46
|
+
def _unary_unary_rpc_terminator(
|
|
47
|
+
message: str, code: Any = grpc.StatusCode.UNAUTHENTICATED
|
|
48
|
+
) -> grpc.RpcMethodHandler:
|
|
43
49
|
def terminate(_request: GrpcMessage, context: grpc.ServicerContext) -> GrpcMessage:
|
|
44
|
-
context.abort(
|
|
50
|
+
context.abort(code, message)
|
|
45
51
|
raise RuntimeError("Should not reach this point") # Make mypy happy
|
|
46
52
|
|
|
47
53
|
return grpc.unary_unary_rpc_method_handler(terminate)
|
|
@@ -64,7 +70,7 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
|
64
70
|
self.state_factory = state_factory
|
|
65
71
|
self.auto_auth = auto_auth
|
|
66
72
|
|
|
67
|
-
def intercept_service(
|
|
73
|
+
def intercept_service( # pylint: disable=too-many-return-statements
|
|
68
74
|
self,
|
|
69
75
|
continuation: Callable[[Any], Any],
|
|
70
76
|
handler_call_details: grpc.HandlerCallDetails,
|
|
@@ -75,6 +81,13 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
|
75
81
|
metadata sent by the node. Continue RPC call if node is authenticated, else,
|
|
76
82
|
terminate RPC call by setting context to abort.
|
|
77
83
|
"""
|
|
84
|
+
# Filter out non-Fleet service calls
|
|
85
|
+
if not handler_call_details.method.startswith("/flwr.proto.Fleet/"):
|
|
86
|
+
return _unary_unary_rpc_terminator(
|
|
87
|
+
"This request should be sent to a different service.",
|
|
88
|
+
grpc.StatusCode.FAILED_PRECONDITION,
|
|
89
|
+
)
|
|
90
|
+
|
|
78
91
|
state = self.state_factory.state()
|
|
79
92
|
metadata_dict = dict(handler_call_details.invocation_metadata)
|
|
80
93
|
|
|
@@ -100,7 +113,7 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
|
100
113
|
current = now()
|
|
101
114
|
time_diff = current - datetime.datetime.fromisoformat(timestamp_iso)
|
|
102
115
|
# Abort the RPC call if the timestamp is too old or in the future
|
|
103
|
-
if not
|
|
116
|
+
if not MIN_TIMESTAMP_DIFF < time_diff.total_seconds() < MAX_TIMESTAMP_DIFF:
|
|
104
117
|
return _unary_unary_rpc_terminator("Invalid timestamp")
|
|
105
118
|
|
|
106
119
|
# Continue the RPC call
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl
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
|
{flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl
RENAMED
|
File without changes
|
{flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr-1.15.0 → flwr-1.15.1}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|