flwr-nightly 1.8.0.dev20240324__tar.gz → 1.8.0.dev20240326__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.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/PKG-INFO +1 -1
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/pyproject.toml +1 -1
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/client_app.py +4 -4
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/grpc_client/connection.py +2 -1
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/message_handler/message_handler.py +2 -2
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +1 -1
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/__init__.py +2 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/message.py +19 -13
- flwr_nightly-1.8.0.dev20240326/src/py/flwr/proto/fleet_pb2.py +54 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/fleet_pb2.pyi +25 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/fleet_pb2_grpc.py +33 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/fleet_pb2_grpc.pyi +10 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/task_pb2.py +1 -1
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/task_pb2.pyi +2 -2
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/compat/driver_client_proxy.py +2 -1
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/driver/driver.py +6 -5
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +11 -1
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +10 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/state/in_memory_state.py +3 -7
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/state/sqlite_state.py +5 -9
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/utils/validator.py +12 -6
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/workflow/default_workflows.py +4 -4
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +5 -4
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +2 -2
- flwr_nightly-1.8.0.dev20240324/src/py/flwr/proto/fleet_pb2.py +0 -50
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/LICENSE +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/README.md +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/flower_toml.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/flower.toml.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/requirements.numpy.txt.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/requirements.pytorch.txt.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/new/templates/app/requirements.tensorflow.txt.tpl +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/node_state.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/simulation/run_simulation.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "flwr-nightly"
|
|
7
|
-
version = "1.8.0-
|
|
7
|
+
version = "1.8.0-dev20240326"
|
|
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.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/client/client_app.py
RENAMED
|
@@ -115,7 +115,7 @@ class ClientApp:
|
|
|
115
115
|
>>> def train(message: Message, context: Context) -> Message:
|
|
116
116
|
>>> print("ClientApp training running")
|
|
117
117
|
>>> # Create and return an echo reply message
|
|
118
|
-
>>> return message.create_reply(content=message.content()
|
|
118
|
+
>>> return message.create_reply(content=message.content())
|
|
119
119
|
"""
|
|
120
120
|
|
|
121
121
|
def train_decorator(train_fn: ClientAppCallable) -> ClientAppCallable:
|
|
@@ -143,7 +143,7 @@ class ClientApp:
|
|
|
143
143
|
>>> def evaluate(message: Message, context: Context) -> Message:
|
|
144
144
|
>>> print("ClientApp evaluation running")
|
|
145
145
|
>>> # Create and return an echo reply message
|
|
146
|
-
>>> return message.create_reply(content=message.content()
|
|
146
|
+
>>> return message.create_reply(content=message.content())
|
|
147
147
|
"""
|
|
148
148
|
|
|
149
149
|
def evaluate_decorator(evaluate_fn: ClientAppCallable) -> ClientAppCallable:
|
|
@@ -171,7 +171,7 @@ class ClientApp:
|
|
|
171
171
|
>>> def query(message: Message, context: Context) -> Message:
|
|
172
172
|
>>> print("ClientApp query running")
|
|
173
173
|
>>> # Create and return an echo reply message
|
|
174
|
-
>>> return message.create_reply(content=message.content()
|
|
174
|
+
>>> return message.create_reply(content=message.content())
|
|
175
175
|
"""
|
|
176
176
|
|
|
177
177
|
def query_decorator(query_fn: ClientAppCallable) -> ClientAppCallable:
|
|
@@ -218,7 +218,7 @@ def _registration_error(fn_name: str) -> ValueError:
|
|
|
218
218
|
>>> print("ClientApp {fn_name} running")
|
|
219
219
|
>>> # Create and return an echo reply message
|
|
220
220
|
>>> return message.create_reply(
|
|
221
|
-
>>> content=message.content()
|
|
221
|
+
>>> content=message.content()
|
|
222
222
|
>>> )
|
|
223
223
|
""",
|
|
224
224
|
)
|
|
@@ -23,6 +23,7 @@ from queue import Queue
|
|
|
23
23
|
from typing import Callable, Iterator, Optional, Tuple, Union, cast
|
|
24
24
|
|
|
25
25
|
from flwr.common import (
|
|
26
|
+
DEFAULT_TTL,
|
|
26
27
|
GRPC_MAX_MESSAGE_LENGTH,
|
|
27
28
|
ConfigsRecord,
|
|
28
29
|
Message,
|
|
@@ -180,7 +181,7 @@ def grpc_connection( # pylint: disable=R0915
|
|
|
180
181
|
dst_node_id=0,
|
|
181
182
|
reply_to_message="",
|
|
182
183
|
group_id="",
|
|
183
|
-
ttl=
|
|
184
|
+
ttl=DEFAULT_TTL,
|
|
184
185
|
message_type=message_type,
|
|
185
186
|
),
|
|
186
187
|
content=recordset,
|
|
@@ -81,7 +81,7 @@ def handle_control_message(message: Message) -> Tuple[Optional[Message], int]:
|
|
|
81
81
|
reason = cast(int, disconnect_msg.disconnect_res.reason)
|
|
82
82
|
recordset = RecordSet()
|
|
83
83
|
recordset.configs_records["config"] = ConfigsRecord({"reason": reason})
|
|
84
|
-
out_message = message.create_reply(recordset
|
|
84
|
+
out_message = message.create_reply(recordset)
|
|
85
85
|
# Return TaskRes and sleep duration
|
|
86
86
|
return out_message, sleep_duration
|
|
87
87
|
|
|
@@ -143,7 +143,7 @@ def handle_legacy_message_from_msgtype(
|
|
|
143
143
|
raise ValueError(f"Invalid message type: {message_type}")
|
|
144
144
|
|
|
145
145
|
# Return Message
|
|
146
|
-
return message.create_reply(out_recordset
|
|
146
|
+
return message.create_reply(out_recordset)
|
|
147
147
|
|
|
148
148
|
|
|
149
149
|
def _reconnect(
|
|
@@ -187,7 +187,7 @@ def secaggplus_mod(
|
|
|
187
187
|
|
|
188
188
|
# Return message
|
|
189
189
|
out_content.configs_records[RECORD_KEY_CONFIGS] = ConfigsRecord(res, False)
|
|
190
|
-
return msg.create_reply(out_content
|
|
190
|
+
return msg.create_reply(out_content)
|
|
191
191
|
|
|
192
192
|
|
|
193
193
|
def check_stage(current_stage: str, configs: ConfigsRecord) -> None:
|
{flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/__init__.py
RENAMED
|
@@ -22,6 +22,7 @@ from .date import now as now
|
|
|
22
22
|
from .grpc import GRPC_MAX_MESSAGE_LENGTH
|
|
23
23
|
from .logger import configure as configure
|
|
24
24
|
from .logger import log as log
|
|
25
|
+
from .message import DEFAULT_TTL
|
|
25
26
|
from .message import Error as Error
|
|
26
27
|
from .message import Message as Message
|
|
27
28
|
from .message import Metadata as Metadata
|
|
@@ -87,6 +88,7 @@ __all__ = [
|
|
|
87
88
|
"Message",
|
|
88
89
|
"MessageType",
|
|
89
90
|
"MessageTypeLegacy",
|
|
91
|
+
"DEFAULT_TTL",
|
|
90
92
|
"Metadata",
|
|
91
93
|
"Metrics",
|
|
92
94
|
"MetricsAggregationFn",
|
{flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/common/message.py
RENAMED
|
@@ -20,6 +20,8 @@ from dataclasses import dataclass
|
|
|
20
20
|
|
|
21
21
|
from .record import RecordSet
|
|
22
22
|
|
|
23
|
+
DEFAULT_TTL = 3600
|
|
24
|
+
|
|
23
25
|
|
|
24
26
|
@dataclass
|
|
25
27
|
class Metadata: # pylint: disable=too-many-instance-attributes
|
|
@@ -40,8 +42,8 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
40
42
|
group_id : str
|
|
41
43
|
An identifier for grouping messages. In some settings,
|
|
42
44
|
this is used as the FL round.
|
|
43
|
-
ttl :
|
|
44
|
-
Time-to-live for this message.
|
|
45
|
+
ttl : float
|
|
46
|
+
Time-to-live for this message in seconds.
|
|
45
47
|
message_type : str
|
|
46
48
|
A string that encodes the action to be executed on
|
|
47
49
|
the receiving end.
|
|
@@ -57,7 +59,7 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
57
59
|
_dst_node_id: int
|
|
58
60
|
_reply_to_message: str
|
|
59
61
|
_group_id: str
|
|
60
|
-
_ttl:
|
|
62
|
+
_ttl: float
|
|
61
63
|
_message_type: str
|
|
62
64
|
_partition_id: int | None
|
|
63
65
|
|
|
@@ -69,7 +71,7 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
69
71
|
dst_node_id: int,
|
|
70
72
|
reply_to_message: str,
|
|
71
73
|
group_id: str,
|
|
72
|
-
ttl:
|
|
74
|
+
ttl: float,
|
|
73
75
|
message_type: str,
|
|
74
76
|
partition_id: int | None = None,
|
|
75
77
|
) -> None:
|
|
@@ -124,12 +126,12 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
124
126
|
self._group_id = value
|
|
125
127
|
|
|
126
128
|
@property
|
|
127
|
-
def ttl(self) ->
|
|
129
|
+
def ttl(self) -> float:
|
|
128
130
|
"""Time-to-live for this message."""
|
|
129
131
|
return self._ttl
|
|
130
132
|
|
|
131
133
|
@ttl.setter
|
|
132
|
-
def ttl(self, value:
|
|
134
|
+
def ttl(self, value: float) -> None:
|
|
133
135
|
"""Set ttl."""
|
|
134
136
|
self._ttl = value
|
|
135
137
|
|
|
@@ -266,7 +268,7 @@ class Message:
|
|
|
266
268
|
"""Return True if message has an error, else False."""
|
|
267
269
|
return self._error is not None
|
|
268
270
|
|
|
269
|
-
def _create_reply_metadata(self, ttl:
|
|
271
|
+
def _create_reply_metadata(self, ttl: float) -> Metadata:
|
|
270
272
|
"""Construct metadata for a reply message."""
|
|
271
273
|
return Metadata(
|
|
272
274
|
run_id=self.metadata.run_id,
|
|
@@ -283,7 +285,7 @@ class Message:
|
|
|
283
285
|
def create_error_reply(
|
|
284
286
|
self,
|
|
285
287
|
error: Error,
|
|
286
|
-
ttl:
|
|
288
|
+
ttl: float,
|
|
287
289
|
) -> Message:
|
|
288
290
|
"""Construct a reply message indicating an error happened.
|
|
289
291
|
|
|
@@ -291,14 +293,14 @@ class Message:
|
|
|
291
293
|
----------
|
|
292
294
|
error : Error
|
|
293
295
|
The error that was encountered.
|
|
294
|
-
ttl :
|
|
295
|
-
Time-to-live for this message.
|
|
296
|
+
ttl : float
|
|
297
|
+
Time-to-live for this message in seconds.
|
|
296
298
|
"""
|
|
297
299
|
# Create reply with error
|
|
298
300
|
message = Message(metadata=self._create_reply_metadata(ttl), error=error)
|
|
299
301
|
return message
|
|
300
302
|
|
|
301
|
-
def create_reply(self, content: RecordSet, ttl:
|
|
303
|
+
def create_reply(self, content: RecordSet, ttl: float | None = None) -> Message:
|
|
302
304
|
"""Create a reply to this message with specified content and TTL.
|
|
303
305
|
|
|
304
306
|
The method generates a new `Message` as a reply to this message.
|
|
@@ -309,14 +311,18 @@ class Message:
|
|
|
309
311
|
----------
|
|
310
312
|
content : RecordSet
|
|
311
313
|
The content for the reply message.
|
|
312
|
-
ttl :
|
|
313
|
-
Time-to-live for this message.
|
|
314
|
+
ttl : Optional[float] (default: None)
|
|
315
|
+
Time-to-live for this message in seconds. If unset, it will use
|
|
316
|
+
the `common.DEFAULT_TTL` value.
|
|
314
317
|
|
|
315
318
|
Returns
|
|
316
319
|
-------
|
|
317
320
|
Message
|
|
318
321
|
A new `Message` instance representing the reply.
|
|
319
322
|
"""
|
|
323
|
+
if ttl is None:
|
|
324
|
+
ttl = DEFAULT_TTL
|
|
325
|
+
|
|
320
326
|
return Message(
|
|
321
327
|
metadata=self._create_reply_metadata(ttl),
|
|
322
328
|
content=content,
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/fleet.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.0
|
|
5
|
+
"""Generated protocol buffer code."""
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
16
|
+
from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x15\x66lwr/proto/task.proto\"\x13\n\x11\x43reateNodeRequest\"4\n\x12\x43reateNodeResponse\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"3\n\x11\x44\x65leteNodeRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x14\n\x12\x44\x65leteNodeResponse\"-\n\x0bPingRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x1f\n\x0cPingResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"F\n\x12PullTaskInsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"k\n\x13PullTaskInsResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rtask_ins_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"@\n\x12PushTaskResRequest\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes\"\xae\x01\n\x13PushTaskResResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12=\n\x07results\x18\x02 \x03(\x0b\x32,.flwr.proto.PushTaskResResponse.ResultsEntry\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\x86\x03\n\x05\x46leet\x12M\n\nCreateNode\x12\x1d.flwr.proto.CreateNodeRequest\x1a\x1e.flwr.proto.CreateNodeResponse\"\x00\x12M\n\nDeleteNode\x12\x1d.flwr.proto.DeleteNodeRequest\x1a\x1e.flwr.proto.DeleteNodeResponse\"\x00\x12;\n\x04Ping\x12\x17.flwr.proto.PingRequest\x1a\x18.flwr.proto.PingResponse\"\x00\x12P\n\x0bPullTaskIns\x12\x1e.flwr.proto.PullTaskInsRequest\x1a\x1f.flwr.proto.PullTaskInsResponse\"\x00\x12P\n\x0bPushTaskRes\x12\x1e.flwr.proto.PushTaskResRequest\x1a\x1f.flwr.proto.PushTaskResResponse\"\x00\x62\x06proto3')
|
|
20
|
+
|
|
21
|
+
_globals = globals()
|
|
22
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
23
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fleet_pb2', _globals)
|
|
24
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
25
|
+
DESCRIPTOR._options = None
|
|
26
|
+
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._options = None
|
|
27
|
+
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
|
|
28
|
+
_globals['_CREATENODEREQUEST']._serialized_start=84
|
|
29
|
+
_globals['_CREATENODEREQUEST']._serialized_end=103
|
|
30
|
+
_globals['_CREATENODERESPONSE']._serialized_start=105
|
|
31
|
+
_globals['_CREATENODERESPONSE']._serialized_end=157
|
|
32
|
+
_globals['_DELETENODEREQUEST']._serialized_start=159
|
|
33
|
+
_globals['_DELETENODEREQUEST']._serialized_end=210
|
|
34
|
+
_globals['_DELETENODERESPONSE']._serialized_start=212
|
|
35
|
+
_globals['_DELETENODERESPONSE']._serialized_end=232
|
|
36
|
+
_globals['_PINGREQUEST']._serialized_start=234
|
|
37
|
+
_globals['_PINGREQUEST']._serialized_end=279
|
|
38
|
+
_globals['_PINGRESPONSE']._serialized_start=281
|
|
39
|
+
_globals['_PINGRESPONSE']._serialized_end=312
|
|
40
|
+
_globals['_PULLTASKINSREQUEST']._serialized_start=314
|
|
41
|
+
_globals['_PULLTASKINSREQUEST']._serialized_end=384
|
|
42
|
+
_globals['_PULLTASKINSRESPONSE']._serialized_start=386
|
|
43
|
+
_globals['_PULLTASKINSRESPONSE']._serialized_end=493
|
|
44
|
+
_globals['_PUSHTASKRESREQUEST']._serialized_start=495
|
|
45
|
+
_globals['_PUSHTASKRESREQUEST']._serialized_end=559
|
|
46
|
+
_globals['_PUSHTASKRESRESPONSE']._serialized_start=562
|
|
47
|
+
_globals['_PUSHTASKRESRESPONSE']._serialized_end=736
|
|
48
|
+
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_start=690
|
|
49
|
+
_globals['_PUSHTASKRESRESPONSE_RESULTSENTRY']._serialized_end=736
|
|
50
|
+
_globals['_RECONNECT']._serialized_start=738
|
|
51
|
+
_globals['_RECONNECT']._serialized_end=768
|
|
52
|
+
_globals['_FLEET']._serialized_start=771
|
|
53
|
+
_globals['_FLEET']._serialized_end=1161
|
|
54
|
+
# @@protoc_insertion_point(module_scope)
|
{flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/fleet_pb2.pyi
RENAMED
|
@@ -53,6 +53,31 @@ class DeleteNodeResponse(google.protobuf.message.Message):
|
|
|
53
53
|
) -> None: ...
|
|
54
54
|
global___DeleteNodeResponse = DeleteNodeResponse
|
|
55
55
|
|
|
56
|
+
class PingRequest(google.protobuf.message.Message):
|
|
57
|
+
"""Ping messages"""
|
|
58
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
59
|
+
NODE_FIELD_NUMBER: builtins.int
|
|
60
|
+
@property
|
|
61
|
+
def node(self) -> flwr.proto.node_pb2.Node: ...
|
|
62
|
+
def __init__(self,
|
|
63
|
+
*,
|
|
64
|
+
node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
|
65
|
+
) -> None: ...
|
|
66
|
+
def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
|
|
67
|
+
def ClearField(self, field_name: typing_extensions.Literal["node",b"node"]) -> None: ...
|
|
68
|
+
global___PingRequest = PingRequest
|
|
69
|
+
|
|
70
|
+
class PingResponse(google.protobuf.message.Message):
|
|
71
|
+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
72
|
+
SUCCESS_FIELD_NUMBER: builtins.int
|
|
73
|
+
success: builtins.bool
|
|
74
|
+
def __init__(self,
|
|
75
|
+
*,
|
|
76
|
+
success: builtins.bool = ...,
|
|
77
|
+
) -> None: ...
|
|
78
|
+
def ClearField(self, field_name: typing_extensions.Literal["success",b"success"]) -> None: ...
|
|
79
|
+
global___PingResponse = PingResponse
|
|
80
|
+
|
|
56
81
|
class PullTaskInsRequest(google.protobuf.message.Message):
|
|
57
82
|
"""PullTaskIns messages"""
|
|
58
83
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
@@ -24,6 +24,11 @@ class FleetStub(object):
|
|
|
24
24
|
request_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.SerializeToString,
|
|
25
25
|
response_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.FromString,
|
|
26
26
|
)
|
|
27
|
+
self.Ping = channel.unary_unary(
|
|
28
|
+
'/flwr.proto.Fleet/Ping',
|
|
29
|
+
request_serializer=flwr_dot_proto_dot_fleet__pb2.PingRequest.SerializeToString,
|
|
30
|
+
response_deserializer=flwr_dot_proto_dot_fleet__pb2.PingResponse.FromString,
|
|
31
|
+
)
|
|
27
32
|
self.PullTaskIns = channel.unary_unary(
|
|
28
33
|
'/flwr.proto.Fleet/PullTaskIns',
|
|
29
34
|
request_serializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsRequest.SerializeToString,
|
|
@@ -51,6 +56,12 @@ class FleetServicer(object):
|
|
|
51
56
|
context.set_details('Method not implemented!')
|
|
52
57
|
raise NotImplementedError('Method not implemented!')
|
|
53
58
|
|
|
59
|
+
def Ping(self, request, context):
|
|
60
|
+
"""Missing associated documentation comment in .proto file."""
|
|
61
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
62
|
+
context.set_details('Method not implemented!')
|
|
63
|
+
raise NotImplementedError('Method not implemented!')
|
|
64
|
+
|
|
54
65
|
def PullTaskIns(self, request, context):
|
|
55
66
|
"""Retrieve one or more tasks, if possible
|
|
56
67
|
|
|
@@ -82,6 +93,11 @@ def add_FleetServicer_to_server(servicer, server):
|
|
|
82
93
|
request_deserializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeRequest.FromString,
|
|
83
94
|
response_serializer=flwr_dot_proto_dot_fleet__pb2.DeleteNodeResponse.SerializeToString,
|
|
84
95
|
),
|
|
96
|
+
'Ping': grpc.unary_unary_rpc_method_handler(
|
|
97
|
+
servicer.Ping,
|
|
98
|
+
request_deserializer=flwr_dot_proto_dot_fleet__pb2.PingRequest.FromString,
|
|
99
|
+
response_serializer=flwr_dot_proto_dot_fleet__pb2.PingResponse.SerializeToString,
|
|
100
|
+
),
|
|
85
101
|
'PullTaskIns': grpc.unary_unary_rpc_method_handler(
|
|
86
102
|
servicer.PullTaskIns,
|
|
87
103
|
request_deserializer=flwr_dot_proto_dot_fleet__pb2.PullTaskInsRequest.FromString,
|
|
@@ -136,6 +152,23 @@ class Fleet(object):
|
|
|
136
152
|
options, channel_credentials,
|
|
137
153
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
138
154
|
|
|
155
|
+
@staticmethod
|
|
156
|
+
def Ping(request,
|
|
157
|
+
target,
|
|
158
|
+
options=(),
|
|
159
|
+
channel_credentials=None,
|
|
160
|
+
call_credentials=None,
|
|
161
|
+
insecure=False,
|
|
162
|
+
compression=None,
|
|
163
|
+
wait_for_ready=None,
|
|
164
|
+
timeout=None,
|
|
165
|
+
metadata=None):
|
|
166
|
+
return grpc.experimental.unary_unary(request, target, '/flwr.proto.Fleet/Ping',
|
|
167
|
+
flwr_dot_proto_dot_fleet__pb2.PingRequest.SerializeToString,
|
|
168
|
+
flwr_dot_proto_dot_fleet__pb2.PingResponse.FromString,
|
|
169
|
+
options, channel_credentials,
|
|
170
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
171
|
+
|
|
139
172
|
@staticmethod
|
|
140
173
|
def PullTaskIns(request,
|
|
141
174
|
target,
|
|
@@ -16,6 +16,10 @@ class FleetStub:
|
|
|
16
16
|
flwr.proto.fleet_pb2.DeleteNodeRequest,
|
|
17
17
|
flwr.proto.fleet_pb2.DeleteNodeResponse]
|
|
18
18
|
|
|
19
|
+
Ping: grpc.UnaryUnaryMultiCallable[
|
|
20
|
+
flwr.proto.fleet_pb2.PingRequest,
|
|
21
|
+
flwr.proto.fleet_pb2.PingResponse]
|
|
22
|
+
|
|
19
23
|
PullTaskIns: grpc.UnaryUnaryMultiCallable[
|
|
20
24
|
flwr.proto.fleet_pb2.PullTaskInsRequest,
|
|
21
25
|
flwr.proto.fleet_pb2.PullTaskInsResponse]
|
|
@@ -46,6 +50,12 @@ class FleetServicer(metaclass=abc.ABCMeta):
|
|
|
46
50
|
context: grpc.ServicerContext,
|
|
47
51
|
) -> flwr.proto.fleet_pb2.DeleteNodeResponse: ...
|
|
48
52
|
|
|
53
|
+
@abc.abstractmethod
|
|
54
|
+
def Ping(self,
|
|
55
|
+
request: flwr.proto.fleet_pb2.PingRequest,
|
|
56
|
+
context: grpc.ServicerContext,
|
|
57
|
+
) -> flwr.proto.fleet_pb2.PingResponse: ...
|
|
58
|
+
|
|
49
59
|
@abc.abstractmethod
|
|
50
60
|
def PullTaskIns(self,
|
|
51
61
|
request: flwr.proto.fleet_pb2.PullTaskInsRequest,
|
{flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/task_pb2.py
RENAMED
|
@@ -18,7 +18,7 @@ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
|
18
18
|
from flwr.proto import error_pb2 as flwr_dot_proto_dot_error__pb2
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/task.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x16\x66lwr/proto/error.proto\"\xf6\x01\n\x04Task\x12\"\n\x08producer\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\"\n\x08\x63onsumer\x18\x02 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x12\n\ncreated_at\x18\x03 \x01(\t\x12\x14\n\x0c\x64\x65livered_at\x18\x04 \x01(\t\x12\x0b\n\x03ttl\x18\x05 \x01(\
|
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/task.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x16\x66lwr/proto/error.proto\"\xf6\x01\n\x04Task\x12\"\n\x08producer\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\"\n\x08\x63onsumer\x18\x02 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x12\n\ncreated_at\x18\x03 \x01(\t\x12\x14\n\x0c\x64\x65livered_at\x18\x04 \x01(\t\x12\x0b\n\x03ttl\x18\x05 \x01(\x01\x12\x10\n\x08\x61ncestry\x18\x06 \x03(\t\x12\x11\n\ttask_type\x18\x07 \x01(\t\x12(\n\trecordset\x18\x08 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\t \x01(\x0b\x32\x11.flwr.proto.Error\"\\\n\x07TaskIns\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x12\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Task\"\\\n\x07TaskRes\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x12\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Taskb\x06proto3')
|
|
22
22
|
|
|
23
23
|
_globals = globals()
|
|
24
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
{flwr_nightly-1.8.0.dev20240324 → flwr_nightly-1.8.0.dev20240326}/src/py/flwr/proto/task_pb2.pyi
RENAMED
|
@@ -31,7 +31,7 @@ class Task(google.protobuf.message.Message):
|
|
|
31
31
|
def consumer(self) -> flwr.proto.node_pb2.Node: ...
|
|
32
32
|
created_at: typing.Text
|
|
33
33
|
delivered_at: typing.Text
|
|
34
|
-
ttl:
|
|
34
|
+
ttl: builtins.float
|
|
35
35
|
@property
|
|
36
36
|
def ancestry(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
|
|
37
37
|
task_type: typing.Text
|
|
@@ -45,7 +45,7 @@ class Task(google.protobuf.message.Message):
|
|
|
45
45
|
consumer: typing.Optional[flwr.proto.node_pb2.Node] = ...,
|
|
46
46
|
created_at: typing.Text = ...,
|
|
47
47
|
delivered_at: typing.Text = ...,
|
|
48
|
-
ttl:
|
|
48
|
+
ttl: builtins.float = ...,
|
|
49
49
|
ancestry: typing.Optional[typing.Iterable[typing.Text]] = ...,
|
|
50
50
|
task_type: typing.Text = ...,
|
|
51
51
|
recordset: typing.Optional[flwr.proto.recordset_pb2.RecordSet] = ...,
|
|
@@ -19,7 +19,7 @@ import time
|
|
|
19
19
|
from typing import List, Optional
|
|
20
20
|
|
|
21
21
|
from flwr import common
|
|
22
|
-
from flwr.common import MessageType, MessageTypeLegacy, RecordSet
|
|
22
|
+
from flwr.common import DEFAULT_TTL, MessageType, MessageTypeLegacy, RecordSet
|
|
23
23
|
from flwr.common import recordset_compat as compat
|
|
24
24
|
from flwr.common import serde
|
|
25
25
|
from flwr.proto import driver_pb2, node_pb2, task_pb2 # pylint: disable=E0611
|
|
@@ -129,6 +129,7 @@ class DriverClientProxy(ClientProxy):
|
|
|
129
129
|
),
|
|
130
130
|
task_type=task_type,
|
|
131
131
|
recordset=serde.recordset_to_proto(recordset),
|
|
132
|
+
ttl=DEFAULT_TTL,
|
|
132
133
|
),
|
|
133
134
|
)
|
|
134
135
|
push_task_ins_req = driver_pb2.PushTaskInsRequest( # pylint: disable=E1101
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import time
|
|
19
19
|
from typing import Iterable, List, Optional, Tuple
|
|
20
20
|
|
|
21
|
-
from flwr.common import Message, Metadata, RecordSet
|
|
21
|
+
from flwr.common import DEFAULT_TTL, Message, Metadata, RecordSet
|
|
22
22
|
from flwr.common.serde import message_from_taskres, message_to_taskins
|
|
23
23
|
from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
|
|
24
24
|
CreateRunRequest,
|
|
@@ -81,6 +81,7 @@ class Driver:
|
|
|
81
81
|
and message.metadata.src_node_id == self.node.node_id
|
|
82
82
|
and message.metadata.message_id == ""
|
|
83
83
|
and message.metadata.reply_to_message == ""
|
|
84
|
+
and message.metadata.ttl > 0
|
|
84
85
|
):
|
|
85
86
|
raise ValueError(f"Invalid message: {message}")
|
|
86
87
|
|
|
@@ -90,7 +91,7 @@ class Driver:
|
|
|
90
91
|
message_type: str,
|
|
91
92
|
dst_node_id: int,
|
|
92
93
|
group_id: str,
|
|
93
|
-
ttl:
|
|
94
|
+
ttl: float = DEFAULT_TTL,
|
|
94
95
|
) -> Message:
|
|
95
96
|
"""Create a new message with specified parameters.
|
|
96
97
|
|
|
@@ -110,10 +111,10 @@ class Driver:
|
|
|
110
111
|
group_id : str
|
|
111
112
|
The ID of the group to which this message is associated. In some settings,
|
|
112
113
|
this is used as the FL round.
|
|
113
|
-
ttl :
|
|
114
|
+
ttl : float (default: common.DEFAULT_TTL)
|
|
114
115
|
Time-to-live for the round trip of this message, i.e., the time from sending
|
|
115
|
-
this message to receiving a reply. It specifies the duration for
|
|
116
|
-
message and its potential reply are considered valid.
|
|
116
|
+
this message to receiving a reply. It specifies in seconds the duration for
|
|
117
|
+
which the message and its potential reply are considered valid.
|
|
117
118
|
|
|
118
119
|
Returns
|
|
119
120
|
-------
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"""Fleet API gRPC request-response servicer."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
from logging import INFO
|
|
18
|
+
from logging import DEBUG, INFO
|
|
19
19
|
|
|
20
20
|
import grpc
|
|
21
21
|
|
|
@@ -26,6 +26,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
|
26
26
|
CreateNodeResponse,
|
|
27
27
|
DeleteNodeRequest,
|
|
28
28
|
DeleteNodeResponse,
|
|
29
|
+
PingRequest,
|
|
30
|
+
PingResponse,
|
|
29
31
|
PullTaskInsRequest,
|
|
30
32
|
PullTaskInsResponse,
|
|
31
33
|
PushTaskResRequest,
|
|
@@ -61,6 +63,14 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
|
|
|
61
63
|
state=self.state_factory.state(),
|
|
62
64
|
)
|
|
63
65
|
|
|
66
|
+
def Ping(self, request: PingRequest, context: grpc.ServicerContext) -> PingResponse:
|
|
67
|
+
"""."""
|
|
68
|
+
log(DEBUG, "FleetServicer.Ping")
|
|
69
|
+
return message_handler.ping(
|
|
70
|
+
request=request,
|
|
71
|
+
state=self.state_factory.state(),
|
|
72
|
+
)
|
|
73
|
+
|
|
64
74
|
def PullTaskIns(
|
|
65
75
|
self, request: PullTaskInsRequest, context: grpc.ServicerContext
|
|
66
76
|
) -> PullTaskInsResponse:
|
|
@@ -23,6 +23,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
|
23
23
|
CreateNodeResponse,
|
|
24
24
|
DeleteNodeRequest,
|
|
25
25
|
DeleteNodeResponse,
|
|
26
|
+
PingRequest,
|
|
27
|
+
PingResponse,
|
|
26
28
|
PullTaskInsRequest,
|
|
27
29
|
PullTaskInsResponse,
|
|
28
30
|
PushTaskResRequest,
|
|
@@ -55,6 +57,14 @@ def delete_node(request: DeleteNodeRequest, state: State) -> DeleteNodeResponse:
|
|
|
55
57
|
return DeleteNodeResponse()
|
|
56
58
|
|
|
57
59
|
|
|
60
|
+
def ping(
|
|
61
|
+
request: PingRequest, # pylint: disable=unused-argument
|
|
62
|
+
state: State, # pylint: disable=unused-argument
|
|
63
|
+
) -> PingResponse:
|
|
64
|
+
"""."""
|
|
65
|
+
return PingResponse(success=True)
|
|
66
|
+
|
|
67
|
+
|
|
58
68
|
def pull_task_ins(request: PullTaskInsRequest, state: State) -> PullTaskInsResponse:
|
|
59
69
|
"""Pull TaskIns handler."""
|
|
60
70
|
# Get node_id if client node is not anonymous
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
import os
|
|
19
19
|
import threading
|
|
20
|
-
from datetime import datetime
|
|
20
|
+
from datetime import datetime
|
|
21
21
|
from logging import ERROR
|
|
22
22
|
from typing import Dict, List, Optional, Set
|
|
23
23
|
from uuid import UUID, uuid4
|
|
@@ -50,15 +50,13 @@ class InMemoryState(State):
|
|
|
50
50
|
log(ERROR, "`run_id` is invalid")
|
|
51
51
|
return None
|
|
52
52
|
|
|
53
|
-
# Create task_id
|
|
53
|
+
# Create task_id and created_at
|
|
54
54
|
task_id = uuid4()
|
|
55
55
|
created_at: datetime = now()
|
|
56
|
-
ttl: datetime = created_at + timedelta(hours=24)
|
|
57
56
|
|
|
58
57
|
# Store TaskIns
|
|
59
58
|
task_ins.task_id = str(task_id)
|
|
60
59
|
task_ins.task.created_at = created_at.isoformat()
|
|
61
|
-
task_ins.task.ttl = ttl.isoformat()
|
|
62
60
|
with self.lock:
|
|
63
61
|
self.task_ins_store[task_id] = task_ins
|
|
64
62
|
|
|
@@ -113,15 +111,13 @@ class InMemoryState(State):
|
|
|
113
111
|
log(ERROR, "`run_id` is invalid")
|
|
114
112
|
return None
|
|
115
113
|
|
|
116
|
-
# Create task_id
|
|
114
|
+
# Create task_id and created_at
|
|
117
115
|
task_id = uuid4()
|
|
118
116
|
created_at: datetime = now()
|
|
119
|
-
ttl: datetime = created_at + timedelta(hours=24)
|
|
120
117
|
|
|
121
118
|
# Store TaskRes
|
|
122
119
|
task_res.task_id = str(task_id)
|
|
123
120
|
task_res.task.created_at = created_at.isoformat()
|
|
124
|
-
task_res.task.ttl = ttl.isoformat()
|
|
125
121
|
with self.lock:
|
|
126
122
|
self.task_res_store[task_id] = task_res
|
|
127
123
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import os
|
|
19
19
|
import re
|
|
20
20
|
import sqlite3
|
|
21
|
-
from datetime import datetime
|
|
21
|
+
from datetime import datetime
|
|
22
22
|
from logging import DEBUG, ERROR
|
|
23
23
|
from typing import Any, Dict, List, Optional, Set, Tuple, Union, cast
|
|
24
24
|
from uuid import UUID, uuid4
|
|
@@ -54,7 +54,7 @@ CREATE TABLE IF NOT EXISTS task_ins(
|
|
|
54
54
|
consumer_node_id INTEGER,
|
|
55
55
|
created_at TEXT,
|
|
56
56
|
delivered_at TEXT,
|
|
57
|
-
ttl
|
|
57
|
+
ttl REAL,
|
|
58
58
|
ancestry TEXT,
|
|
59
59
|
task_type TEXT,
|
|
60
60
|
recordset BLOB,
|
|
@@ -74,7 +74,7 @@ CREATE TABLE IF NOT EXISTS task_res(
|
|
|
74
74
|
consumer_node_id INTEGER,
|
|
75
75
|
created_at TEXT,
|
|
76
76
|
delivered_at TEXT,
|
|
77
|
-
ttl
|
|
77
|
+
ttl REAL,
|
|
78
78
|
ancestry TEXT,
|
|
79
79
|
task_type TEXT,
|
|
80
80
|
recordset BLOB,
|
|
@@ -185,15 +185,13 @@ class SqliteState(State):
|
|
|
185
185
|
log(ERROR, errors)
|
|
186
186
|
return None
|
|
187
187
|
|
|
188
|
-
# Create task_id
|
|
188
|
+
# Create task_id and created_at
|
|
189
189
|
task_id = uuid4()
|
|
190
190
|
created_at: datetime = now()
|
|
191
|
-
ttl: datetime = created_at + timedelta(hours=24)
|
|
192
191
|
|
|
193
192
|
# Store TaskIns
|
|
194
193
|
task_ins.task_id = str(task_id)
|
|
195
194
|
task_ins.task.created_at = created_at.isoformat()
|
|
196
|
-
task_ins.task.ttl = ttl.isoformat()
|
|
197
195
|
data = (task_ins_to_dict(task_ins),)
|
|
198
196
|
columns = ", ".join([f":{key}" for key in data[0]])
|
|
199
197
|
query = f"INSERT INTO task_ins VALUES({columns});"
|
|
@@ -320,15 +318,13 @@ class SqliteState(State):
|
|
|
320
318
|
log(ERROR, errors)
|
|
321
319
|
return None
|
|
322
320
|
|
|
323
|
-
# Create task_id
|
|
321
|
+
# Create task_id and created_at
|
|
324
322
|
task_id = uuid4()
|
|
325
323
|
created_at: datetime = now()
|
|
326
|
-
ttl: datetime = created_at + timedelta(hours=24)
|
|
327
324
|
|
|
328
325
|
# Store TaskIns
|
|
329
326
|
task_res.task_id = str(task_id)
|
|
330
327
|
task_res.task.created_at = created_at.isoformat()
|
|
331
|
-
task_res.task.ttl = ttl.isoformat()
|
|
332
328
|
data = (task_res_to_dict(task_res),)
|
|
333
329
|
columns = ", ".join([f":{key}" for key in data[0]])
|
|
334
330
|
query = f"INSERT INTO task_res VALUES({columns});"
|